Ë
    (täi1  ã                   ó€   — d Z ddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZ d	gZd
Zdefd„Z G d„ de«      Zy)z
Usage example:
    TODO
é    N)ÚArgumentParserÚ	Namespace)ÚPathé   )Úloggingé   )ÚBaseDiffusersCLICommandÚModularPipelineBlockszconfig.jsonÚargsc                 óB   — t        | j                  | j                  «      S ©N)ÚCustomBlocksCommandÚblock_module_nameÚblock_class_name)r   s    úo/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/diffusers/commands/custom_blocks.pyÚconversion_command_factoryr   "   s   € Ü˜t×5Ñ5°t×7LÑ7LÓMÐMó    c                   ón   — e Zd Zedefd„«       Zddedefd„Zd„ Zdd„Z	d	„ Z
d
ej                  fd„Zd„ Zy)r   Úparserc                 ó¶   — | j                  d«      }|j                  dt        dd¬«       |j                  dt        d d¬«       |j                  t        ¬«       y )	NÚcustom_blocksz--block_module_nameúblock.pyz>Module filename in which the custom block will be implemented.)ÚtypeÚdefaultÚhelpz--block_class_namezDName of the custom block. If provided None, we will try to infer it.)Úfunc)Ú
add_parserÚadd_argumentÚstrÚset_defaultsr   )r   Úconversion_parsers     r   Úregister_subcommandz'CustomBlocksCommand.register_subcommand'   sg   € à"×-Ñ-¨oÓ>ÐØ×&Ñ&Ø!ÜØØQð	 	'ô 	
ð 	×&Ñ&Ø ÜØØWð	 	'ô 	
ð 	×&Ñ&Ô,FÐ&ÕGr   Nr   r   c                 óf   — t        j                  d«      | _        t        |«      | _        || _        y )Nzdiffusers-cli/custom_blocks)r   Ú
get_loggerÚloggerr   r   r   )Úselfr   r   s      r   Ú__init__zCustomBlocksCommand.__init__8   s+   € Ü×(Ñ(Ð)FÓGˆŒÜ!%Ð&7Ó!8ˆÔØ 0ˆÕr   c                 óð  — | j                  | j                  «      }t        |D ��ch c]  \  }}|’Œ	 c}}«      }| j                  �>| j	                  || j                  «      \  }}|€R|€Pt        d| j                  › d|› �«      ‚| j                  j                  d|› d|d   › d�«       |d   d   |d   d   }}d| j                  j                  › �}t        j                  j                  |t        | j                  «      «      }t        j                  j                  |«      }	|j                  j                  |	«        t!        |	|«      «       j#                  t%        j&                  «       «       y c c}}w )	NzB`block_class_name` could not be retrieved. Available classes from z:
zFound classes: z will be using r   zP. If this needs to be changed, re-run the command specifying `block_class_name`.r   Ú__dynamic__)Ú_get_class_namesr   Úlistr   Ú_choose_blockÚ
ValueErrorr%   ÚinfoÚstemÚ	importlibÚutilÚspec_from_file_locationr   Úmodule_from_specÚloaderÚexec_moduleÚgetattrÚsave_pretrainedÚosÚgetcwd)
r&   ÚoutÚclsÚ_Úclasses_foundÚchild_classÚparent_classÚmodule_nameÚspecÚmodules
             r   ÚrunzCustomBlocksCommand.run=   sg  € à×#Ñ# D×$:Ñ$:Ó;ˆÜ±Ô4±¡f c¨1šc°Ò4Ó5ˆà× Ñ Ð,Ø(,×(:Ñ(:¸3À×@UÑ@UÓ(VÑ%ˆK˜ØÐ" |Ð';Ü ØXØ×-Ñ-Ð.¨c°-°ðBóð ð
 �K‰K×ÑØ! - °ÀÈaÑ@PÐ?Qð Rað aôð ),¨A©¨q©	°3°q±6¸!±9˜ˆKð $ D×$:Ñ$:×$?Ñ$?Ð#@ÐAˆÜ�~‰~×5Ñ5°kÄ3Àt×G]ÑG]ÓC^Ó_ˆÜ—‘×0Ñ0°Ó6ˆØ�‰×Ñ Ô'Ø$Œ�˜Ó$Ó&×6Ñ6´r·y±y³{ÕCùó- 5s   ¦E2
c                 ó.   — |D ]  \  }}||k(  sŒ||fc S  y)N)NN© )r&   Ú
candidatesÚchosenr;   Úbases        r   r,   z!CustomBlocksCommand._choose_block]   s&   € Û#‰IˆC�Ø�f‹}Ø˜D�yÒ ð $ð r   c                 óº  — |j                  d¬«      }	 t        j                  ||¬«      }g }|j
                  D ]w  }t        |t        j                  «      sŒ|j                  D �cg c]  }| j                  |«      x}€Œ|‘Œ }	}t        D ]$  }
|
|	v sŒ|j                  |j                  |
f«       Œ& Œy |S # t        $ r}t	        d|›d|› �«      |‚d }~ww xY wc c}w )Nzutf-8)Úencoding)ÚfilenamezCould not parse z: )Ú	read_textÚastÚparseÚSyntaxErrorr-   ÚbodyÚ
isinstanceÚClassDefÚbasesÚ_get_base_nameÚEXPECTED_PARENT_CLASSESÚappendÚname)r&   Ú	file_pathÚsourceÚtreeÚeÚresultsÚnodeÚbÚbnameÚ
base_namesÚalloweds              r   r*   z$CustomBlocksCommand._get_class_namesc   så   € Ø×$Ñ$¨gÐ$Ó6ˆð	KÜ—9‘9˜V¨iÔ8ˆDð *,ˆØ—I”IˆDÜ˜d¤C§L¡LÔ1Øð *.¯ªÓe© AÀ×ATÑATÐUVÓAWÐ8W¸Ñ7dš%¨ˆJÐe÷ 3�Ø˜jÒ(Ø—N‘N D§I¡I¨wÐ#7Õ8ñ 3ð ð ˆøô! ò 	KÜÐ/°	¨}¸B¸q¸cÐBÓCÈÐJûð	Küò fs#   ”B5 Á%CÁ>CÂ5	CÂ>CÃCr]   c                 óø   — t        |t        j                  «      r|j                  S t        |t        j                  «      r:| j                  |j                  «      }|r|› d|j                  › �S |j                  S y )NÚ.)rQ   rM   ÚNameÚidÚ	AttributerT   ÚvalueÚattr)r&   r]   Úvals      r   rT   z"CustomBlocksCommand._get_base_namey   s^   € Ü�dœCŸH™HÔ%Ø—7‘7ˆNÜ˜œcŸm™mÔ,Ø×%Ñ% d§j¡jÓ1ˆCÙ+.�c�U˜!˜DŸI™I˜;Ð'Ð=°D·I±IÐ=Ør   c                 óŽ   — t        | j                  «      j                  dd«      j                  dd«      d   }|› |› d|› �i}d|iS )Nz.pyÚ rc   r   éÿÿÿÿÚauto_map)r   r   ÚreplaceÚrsplit)r&   r?   r>   rB   rm   s        r   Ú_create_automapz#CustomBlocksCommand._create_automap�   sS   € Ü�T×+Ñ+Ó,×4Ñ4°U¸BÓ?×FÑFÀsÈAÓNÈrÑRˆØ#�n¨&¨°°;°-Ð'@ÐAˆØ˜HÐ%Ð%r   )r   Nr   )Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r"   r   r'   rC   r,   r*   rM   ÚexprrT   rp   rE   r   r   r   r   &   sW   „ ØðH Nò Hó ðHñ 1¨#ð 1Ècó 1ò
Dó@òð, 3§8¡8ó ó&r   r   )Ú__doc__rM   Úimportlib.utilr0   r8   Úargparser   r   Úpathlibr   Úutilsr   rk   r	   rU   ÚCONFIGr   r   rE   r   r   Ú<module>r|      sN   ðñó
 Û Û 	ß .Ý å Ý %ð 3Ð3Ð Ø	€ðN Yó Nô^&Ð1õ ^&r   