
    
3j                     l    S r SSKJr  SSKJrJr  SSKJr  SSKr	SSK
JrJr  S\4S	 jr " S
 S\5      rg)z
Generic utilities
    )OrderedDict)fieldsis_dataclass)AnyN   )is_torch_availableis_torch_versionreturnc                     [        5       (       a  SSKn[        XR                  5      (       a  g[        U [        R
                  5      $ )z3
Tests if `x` is a `torch.Tensor` or `np.ndarray`.
r   NT)r   torch
isinstanceTensornpndarray)xr   s     Q/home/wildlama/miniconda3/lib/python3.13/site-packages/diffusers/utils/outputs.py	is_tensorr      s3     a&&a$$    c                      ^  \ rS rSrSrSS jrSS jrS rS rS	 r	S
 r
S\S\4S jrS\S\SS4U 4S jjrU 4S jrU 4S jrS\\S4   4S jrSrU =r$ )
BaseOutput(   a  
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                   ^ ^ [        5       (       a  SSKm[        SS5      (       aK  TR                  R                  R                  T TR                  R                  R                  U U4S j5        gTR                  R                  R                  T TR                  R                  R                  U U4S jT R                   ST R                   3S9  gg)	zRegister 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                 Z   > T" S0 TR                   R                  R                  X5      D6$ N utils_pytree_dict_unflattenvaluescontextclsr   s     r   <lambda>.BaseOutput.__init_subclass__.<locals>.<lambda>?   #    C,g%++2E2E2U2UV\2f,gr   c                 Z   > T" S0 TR                   R                  R                  X5      D6$ r   r   r!   s     r   r%   r&   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__BaseOutput.__init_subclass__2   s     &U++##99KK''55g ##88KK''55g,/NN+;1S\\N)K	 9   r   c                   ^  [        T 5      n[        U5      (       d"  [        T R                  R                   S35      e[        T US   R                  5      n[        U 4S jUSS   5       5      nU(       a4  [        U[        5      (       a  UR                  5        H
  u  pEUT U'   M     g U H-  n[        T UR                  5      nUc  M  UT UR                  '   M/     g )Nz has no fields.r   c              3   T   >#    U  H  n[        TUR                  5      S L v   M     g 7fNgetattrname.0fieldselfs     r   	<genexpr>+BaseOutput.__post_init__.<locals>.<genexpr>Q   s#     #dSc%GD%**$=$EScs   %(r   )r   len
ValueError	__class__r0   r7   r8   allr   dictitems)r<   class_fieldsfirst_fieldother_fields_are_nonekeyvaluer;   vs   `       r   __post_init__BaseOutput.__post_init__I   s    d| <   7 78HIIdLO$8$89 ##dS_`a`bSc#d d ZT%B%B)//1
!S	 2 &D%**-='(D$ &r   c                 H    [        SU R                  R                   S35      e)Nz$You cannot use ``__delitem__`` on a 
 instance.	ExceptionrA   r0   r<   argskwargss      r   __delitem__BaseOutput.__delitem__\   s#    >t~~?V?V>WWabccr   c                 H    [        SU R                  R                   S35      e)Nz#You cannot use ``setdefault`` on a rN   rO   rQ   s      r   
setdefaultBaseOutput.setdefault_   s#    =dnn>U>U=VV`abbr   c                 H    [        SU R                  R                   S35      e)NzYou cannot use ``pop`` on a rN   rO   rQ   s      r   popBaseOutput.popb   s"    6t~~7N7N6OzZ[[r   c                 H    [        SU R                  R                   S35      e)NzYou cannot use ``update`` on a rN   rO   rQ   s      r   updateBaseOutput.updatee   s#    9$..:Q:Q9RR\]^^r   kc                     [        U[        5      (       a  [        U R                  5       5      nX!   $ U R	                  5       U   $ r5   )r   strrC   rD   to_tuple)r<   r_   
inner_dicts      r   __getitem__BaseOutput.__getitem__h   s8    adjjl+J= ==?1%%r   r8   rI   c                 n   > XR                  5       ;   a  Ub  [        TU ]	  X5        [        TU ]  X5        g r5   )keyssuper__setitem____setattr__)r<   r8   rI   rA   s      r   rj   BaseOutput.__setattr__o   s.    99;5#4G,D(r   c                 B   > [         TU ]  X5        [         TU ]	  X5        g r5   )rh   ri   rj   )r<   rH   rI   rA   s      r   ri   BaseOutput.__setitem__u   s    C'C'r   c                    >^  [        T 5      (       d  [        TT ]	  5       $ [        TT ]	  5       tpn[        U 4S j[	        T 5       5       5      nX/UQ7$ )Nc              3   P   >#    U  H  n[        TUR                  5      v   M     g 7fr5   r6   r9   s     r   r=   (BaseOutput.__reduce__.<locals>.<genexpr>   s     IL5WT5::..Ls   #&)r   rh   
__reduce__tupler   )r<   callable_args	remainingrR   rA   s   `    r   rq   BaseOutput.__reduce__{   sP    D!!7%''&+g&8&:#)IF4LII)	))r   .c                 J   ^  [        U 4S jT R                  5        5       5      $ )zQ
Convert self to a tuple containing all the attributes/keys that are not `None`.
c              3   .   >#    U  H
  nTU   v   M     g 7fr5   r   )r:   r_   r<   s     r   r=   &BaseOutput.to_tuple.<locals>.<genexpr>   s     2kT!Wks   )rr   rg   )r<   s   `r   rb   BaseOutput.to_tuple   s     2diik222r   r   )r
   N)r0   r/   __qualname____firstlineno____doc__r1   rK   rT   rW   rZ   r]   r   rd   rj   ri   rq   rr   rb   __static_attributes____classcell__)rA   s   @r   r   r   (   sz    .)&dc\_&S &S &) )C )D )(*3%S/ 3 3r   r   )r}   collectionsr   dataclassesr   r   typingr   numpyr   import_utilsr   r	   boolr   r   r   r   r   <module>r      s5    $ ,   >
%D 
%^3 ^3r   