Ë
    (täiŠ  ã                   ój   — d Z ddlmZ ddlmZmZ ddlmZ ddlZ	ddl
mZmZ defd	„Z G d
„ de«      Zy)z
Generic utilities
é    )ÚOrderedDict)ÚfieldsÚis_dataclass)ÚAnyNé   )Úis_torch_availableÚis_torch_versionÚreturnc                 ó€   — t        «       rddl}t        | |j                  «      ryt        | t        j
                  «      S )z;
    Tests if `x` is a `torch.Tensor` or `np.ndarray`.
    r   NT)r   ÚtorchÚ
isinstanceÚTensorÚnpÚndarray)Úxr   s     úf/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/diffusers/utils/outputs.pyÚ	is_tensorr      s/   € ô ÔÛä�a˜Ÿ™Ô&Øä�aœŸ™Ó$Ð$ó    c                   ó’   ‡ — e Zd ZdZdd„Zdd„Zd„ Zd„ Zd„ Zd	„ Z	d
e
de
fd„Zde
de
ddfˆ fd„Zˆ fd„Zˆ fd„Zdee
df   fd„Zˆ xZS )Ú
BaseOutputa›  
    Base class for all model outputs as dataclass. Has a `__getitem__` that allows indexing by integer or slice (like a
    tuple) or strings (like a dictionary) that will ignore the `None` attributes. Otherwise behaves like a regular
    Python dictionary.

    > [!WARNING] > You can't unpack a [`BaseOutput`] directly. Use the [`~utils.BaseOutput.to_tuple`] method to convert
    it to a tuple > first.
    r
   Nc                 óš  ‡ ‡— t        «       r¿ddlŠt        dd«      rJ‰j                  j                  j                  ‰ ‰j                  j                  j                  ˆ ˆfd„«       y‰j                  j                  j                  ‰ ‰j                  j                  j                  ˆ ˆfd„‰ j                  › d‰ j                  › �¬«       yy)	zìRegister subclasses as pytree nodes.

        This is necessary to synchronize gradients when using `torch.nn.parallel.DistributedDataParallel` with
        `static_graph=True` with modules that output `ModelOutput` subclasses.
        r   NÚ<z2.2c                 ó\   •—  ‰di ‰j                   j                  j                  | |«      ¤ŽS ©N© ©ÚutilsÚ_pytreeÚ_dict_unflatten©ÚvaluesÚcontextÚclsr   s     €€r   Ú<lambda>z.BaseOutput.__init_subclass__.<locals>.<lambda>?   ó&   ø€ ©CÑ,g°%·+±+×2EÑ2E×2UÑ2UÐV\Ð^eÓ2fÒ,gr   c                 ó\   •—  ‰di ‰j                   j                  j                  | |«      ¤ŽS r   r   r    s     €€r   r$   z.BaseOutput.__init_subclass__.<locals>.<lambda>E   r%   r   Ú.)Úserialized_type_name)
r   Útorch.utils._pytreer	   r   r   Ú_register_pytree_nodeÚ_dict_flattenÚregister_pytree_nodeÚ
__module__Ú__name__)r#   r   s   `@r   Ú__init_subclass__zBaseOutput.__init_subclass__2   s�   ù€ ô ÔÛ&ä  UÔ+Ø—‘×#Ñ#×9Ñ9ØØ—K‘K×'Ñ'×5Ñ5Ügõð —‘×#Ñ#×8Ñ8ØØ—K‘K×'Ñ'×5Ñ5ÜgØ,/¯N©NÐ+;¸1¸S¿\¹\¸NÐ)Kð	 9õ ð  r   c                 ó”  ‡ — t        ‰ «      }t        |«      s"t        ‰ j                  j                  › d�«      ‚t        ‰ |d   j                  «      }t        ˆ fd„|dd  D «       «      }|r.t        |t        «      r|j                  «       D ]
  \  }}|‰ |<   Œ y |D ]*  }t        ‰ |j                  «      }|€Œ|‰ |j                  <   Œ, y )Nz has no fields.r   c              3   óN   •K  — | ]  }t        ‰|j                  «      d u –— Œ y ­w©N©ÚgetattrÚname©Ú.0ÚfieldÚselfs     €r   Ú	<genexpr>z+BaseOutput.__post_init__.<locals>.<genexpr>Q   s$   øè ø€ Ð#dÑScÈ%¤G¨D°%·*±*Ó$=ÀÔ$EÑScùs   ƒ"%r   )r   ÚlenÚ
ValueErrorÚ	__class__r.   r4   r5   Úallr   ÚdictÚitems)r9   Úclass_fieldsÚfirst_fieldÚother_fields_are_noneÚkeyÚvaluer8   Úvs   `       r   Ú__post_init__zBaseOutput.__post_init__I   s¿   ø€ Ü˜d“|ˆô �<Ô Ü §¡× 7Ñ 7Ð8¸ÐHÓIÐIä˜d L°¡O×$8Ñ$8Ó9ˆÜ #Ó#dÐS_Ð`aÐ`bÑScÓ#dÓ dÐá ¤Z°¼TÔ%BØ)×/Ñ/Ö1‘
��UØ!��S’	ñ 2ó &�Ü˜D %§*¡*Ó-�Ø‘=Ø'(�D˜Ÿ™Ò$ñ &r   c                 óH   — t        d| j                  j                  › d�«      ‚)Nz$You cannot use ``__delitem__`` on a ú
 instance.©Ú	Exceptionr=   r.   ©r9   ÚargsÚkwargss      r   Ú__delitem__zBaseOutput.__delitem__\   s#   € ÜÐ>¸t¿~¹~×?VÑ?VÐ>WÐWaÐbÓcÐcr   c                 óH   — t        d| j                  j                  › d�«      ‚)Nz#You cannot use ``setdefault`` on a rI   rJ   rL   s      r   Ú
setdefaultzBaseOutput.setdefault_   s#   € ÜÐ=¸d¿n¹n×>UÑ>UÐ=VÐV`ÐaÓbÐbr   c                 óH   — t        d| j                  j                  › d�«      ‚)NzYou cannot use ``pop`` on a rI   rJ   rL   s      r   ÚpopzBaseOutput.popb   s"   € ÜÐ6°t·~±~×7NÑ7NÐ6OÈzÐZÓ[Ð[r   c                 óH   — t        d| j                  j                  › d�«      ‚)NzYou cannot use ``update`` on a rI   rJ   rL   s      r   ÚupdatezBaseOutput.updatee   s#   € ÜÐ9¸$¿.¹.×:QÑ:QÐ9RÐR\Ð]Ó^Ð^r   Úkc                 ó„   — t        |t        «      rt        | j                  «       «      }||   S | j	                  «       |   S r2   )r   Ústrr?   r@   Úto_tuple)r9   rV   Ú
inner_dicts      r   Ú__getitem__zBaseOutput.__getitem__h   s7   € Ü�aœÔÜ˜dŸj™j›lÓ+ˆJØ˜a‘=Ð à—=‘=“? 1Ñ%Ð%r   r5   rE   c                 ón   •— || j                  «       v r|�t        ‰| �	  ||«       t        ‰| �  ||«       y r2   )ÚkeysÚsuperÚ__setitem__Ú__setattr__)r9   r5   rE   r=   s      €r   r`   zBaseOutput.__setattr__o   s4   ø€ Ø�4—9‘9“;Ñ 5Ð#4ä‰GÑ  eÔ,Ü‰Ñ˜D %Õ(r   c                 óF   •— t         ‰| �  ||«       t         ‰| �	  ||«       y r2   )r^   r_   r`   )r9   rD   rE   r=   s      €r   r_   zBaseOutput.__setitem__u   s!   ø€ ä‰Ñ˜C Ô'ä‰Ñ˜C Õ'r   c                 ó¢   •‡ — t        ‰ «      st        ‰‰ �	  «       S t        ‰‰ �	  «       ^}}}t        ˆ fd„t	        ‰ «      D «       «      }||g|¢­S )Nc              3   óJ   •K  — | ]  }t        ‰|j                  «      –— Œ y ­wr2   r3   r6   s     €r   r:   z(BaseOutput.__reduce__.<locals>.<genexpr>   s   øè ø€ ÐI¹L°5”W˜T 5§:¡:×.¹Lùs   ƒ #)r   r^   Ú
__reduce__Útupler   )r9   ÚcallableÚ_argsÚ	remainingrM   r=   s   `    €r   rd   zBaseOutput.__reduce__{   sQ   ù€ Ü˜DÔ!Ü‘7Ñ%Ó'Ð'Ü&+¡gÑ&8Ó&:Ð#ˆ�%˜)ÜÓI¼FÀ4¼LÓIÓIˆØ˜Ð) 	Ñ)Ð)r   .c                 óH   ‡ — t        ˆ fd„‰ j                  «       D «       «      S )za
        Convert self to a tuple containing all the attributes/keys that are not `None`.
        c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr2   r   )r7   rV   r9   s     €r   r:   z&BaseOutput.to_tuple.<locals>.<genexpr>†   s   øè ø€ Ð2¡k �T˜!•W¡kùs   ƒ)re   r]   )r9   s   `r   rY   zBaseOutput.to_tuple‚   s   ø€ ô Ó2 d§i¡i¤kÓ2Ó2Ð2r   )r
   N)r.   r-   Ú__qualname__Ú__doc__r/   rG   rO   rQ   rS   rU   r   r[   r`   r_   rd   re   rY   Ú__classcell__)r=   s   @r   r   r   (   su   ø„ ñóó.)ò&dòcò\ò_ð&˜Sð & Só &ð) ð )¨Cð )°Dõ )ô(ô*ð3˜%  S ™/÷ 3r   r   )rl   Úcollectionsr   Údataclassesr   r   Útypingr   Únumpyr   Úimport_utilsr   r	   Úboolr   r   r   r   r   Ú<module>rt      s5   ðñõ $ß ,Ý ã ç >ð
%�Dó 
%ô^3�õ ^3r   