o
    ٷi1                  
   @   s   d dl Z d dlZd dlZd dlmZmZ zd dlmZ d dlmZ	 de
fddZW n ey=   dZdZ	de
fddZY nw d d	lmZ eeZdd
gZe rue	duruee	de jjdedee jjee jj f fddZdd
 ZdS dd
 ZdS )    N)ListUnion)ContextParallelConfig)_find_submodule_by_namereturnc                   C      dS )NT r   r   r   g/home/ubuntu/.local/lib/python3.10/site-packages/cache_dit/parallelism/attention/_experimental_utils.py#_is_diffusers_parallelism_available      r
   c                   C   r   )NFr   r   r   r   r	   r
      r   )init_logger_maybe_patch_find_submodulemodelnamec                 C   s>  |dkr| S d|v r| ddn|df\}}|dkrNt| tjjs%tdg }| D ]"}t||}t|tsFt|tjjrCt|	 }n|g}|
| q)|S t| |rt| |}t|tjjr|dkrt|	 }|D ]}t|tjjstd| d| dqk|S td	| d
| dt||S td| d| jj d)N .   *z-Wildcard '*' can only be used with ModuleListzValue 'z' in ModuleDict 'z' is not a ModulezCannot access submodule 'z' of ModuleDict 'z;' directly. Please specify the key of the ModuleDict first.'z' is not a submodule of ')split
isinstancetorchnn
ModuleList
ValueError_patch_find_submodule_by_namelist
ModuleDictvaluesextendhasattrgetattrModule	__class____name__)r   r   
first_atomremaining_name
submodules	submodulesubsubmodulesvr   r   r	   r   )   sD    




r   c                   C   s*   t jjjtkrtt jj_td d S d S )Nz6Patched _find_submodule_by_name to support ModuleDict.)	diffusershookscontext_parallelr   r   loggerdebugr   r   r   r	   r   U   s   
c                   C   s   d S )Nr   r   r   r   r	   r   _   r   )r   	functoolsr+   typingr   r   r    diffusers.hooks.context_parallelr   ,_find_submodule_by_name_for_context_parallelboolr
   ImportErrorcache_dit.loggerr   r$   r.   __all__wrapsr   r"   strr   r   r   r   r   r	   <module>   s>    
+
