
    $Sht8                    n   d Z ddlmZ ddlZddlZddlmZmZmZ ddl	m
Z
mZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ e
rddlZddlmZmZ g d	Zej        d
k    rddini Z ej        d/ddddde G d d                      Z[ ed          Z edd          Z  edd          Z! edd          Z" G d de          Z# G d de          Z$ G d de          Z% G d de          Z& G d de$ee                    Z' G d  d!e$ee!e"f                   Z( G d" d#e'e                   Z) G d$ d%e'e                   Z* G d& d'e%          Z+ G d( d)e,ed*f                   Z-d+e.cZ/Z0eD ]AZ/ e1            e/         Z0 e2e0e3          s e4d,e0d-          d.e0_5         e6ee/e0           B[/[0dS )0zAccess support for pytrees.    )annotationsN)IterableMappingSequence)TYPE_CHECKINGAnyClassVarGenericLiteralTypeVaroverload)Self)
PyTreeKind)
NamedTupleStructSequence)PyTreeEntryGetItemEntryGetAttrEntryFlattenedEntry	AutoEntrySequenceEntryMappingEntryNamedTupleEntryStructSequenceEntryDataclassEntryPyTreeAccessor)   
   slotsTF)initrepreqfrozenc                  l    e Zd ZU dZded<   ded<   ded<   dd
ZddZddZddZddZ	d dZ
d!d"dZdS )#r   zBase class for path entries.r   entrybuiltins.typetyper   kindreturnNonec                   | j         t          j        k    rt          d          | j         t          j        k    rt          d          dS )zPost-initialize the path entry.z Cannot create a leaf path entry.z$Cannot create a path entry for None.N)r(   r   LEAF
ValueErrorNONEselfs    V/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/optree/accessors.py__post_init__zPyTreeEntry.__post_init__=   sF    9
''?@@@9
''CDDD ('    objc                   	 || j                  S # t          $ r'}t          | j        d|d| j                   |d}~ww xY w)Get the child object.z cannot access through z via entry N)r%   	TypeError	__class__)r0   r4   exs      r1   __call__zPyTreeEntry.__call__D   sd    	tz?" 	 	 	>\\C\\dj\\ 	s    
A ";A otherobjectr   c                   t          |t                    rt          | |f          S t          |t                    rt          | g|R           S t          S )z8Join the path entry with another path entry or accessor.)
isinstancer   r   NotImplementedr0   r;   s     r1   __add__zPyTreeEntry.__add__M   sT    e[)) 	1!4-000e^,, 	2!4.%..111r3   boolc               (   t          |t                    o}| j        | j        | j        | j        j        j        j        | j        j	        j        j        f|j        |j        |j        |j        j        j        j        |j        j	        j        j        fk    S )z$Check if the path entries are equal.)
r>   r   r%   r'   r(   r8   r:   __code__co_codecodifyr@   s     r1   __eq__zPyTreeEntry.__eq__U   s    %-- 

		'08%.6 

(19&/7	
r3   intc                   t          | j        | j        | j        | j        j        j        j        | j        j        j        j        f          S )zGet the hash of the path entry.)	hashr%   r'   r(   r8   r:   rD   rE   rF   r/   s    r1   __hash__zPyTreeEntry.__hash__h   sD    
		'08%.6
 
 	
r3   strc               @    | j         j         d| j        d| j        dS ))Get the representation of the path entry.z(entry=, type=))r8   __name__r%   r'   r/   s    r1   __repr__zPyTreeEntry.__repr__t   *    .)UU$*UUtyUUUUr3    nodec                   | d| j         dS )+Generate code for accessing the path entry.z[<flat index z>]r%   r0   rU   s     r1   rF   zPyTreeEntry.codifyx   s    55TZ5555r3   N)r)   r*   r4   r   r)   r   )r;   r<   r)   r   r;   r<   r)   rB   r)   rH   r)   rL   rT   rU   rL   r)   rL   )rQ   
__module____qualname____doc____annotations__r2   r:   rA   rG   rK   rR   rF    r3   r1   r   r   5   s         &&JJJE E E E      
 
 
 
&

 

 

 

V V V V6 6 6 6 6 6 6r3   r   _T_T_co)	covariant_KT_co_VT_coc                  4     e Zd ZU dZdZded<   d fdZ xZS )r   zTA generic path entry class that determines the entry type on creation automatically.rd   ClassVar[tuple[()]]	__slots__r%   r   r'   r&   r(   r   r)   r   c                  ddl m}m} | t          ur!t	                                          |           S |t          j        k    rt          d|d           ||          rt          }np ||          rt          }n]t          j        |          rt          }nAt          |t                    rt           }n$t          |t"                    rt$          }nt&          }t          |t                    s ||||          S t)          d          )zCreate a new path entry.r   )is_namedtuple_classis_structseq_classz5Cannot create an automatic path entry for PyTreeKind .zUnreachable code.)optree.typingrn   ro   r   super__new__r   CUSTOMr-   r   r   dataclassesis_dataclassr   
issubclassr   r   r   r   r   NotImplementedError)clsr%   r'   r(   rn   ro   path_entry_typer8   s          r1   rs   zAutoEntry.__new__   s(    	JIIIIIIIi77??3''':$$$^UY^^^___ d## 	-1OO  && 		--OO%d++ 	-,OOg&& 	-*OOh'' 	-+OO,O/955 	6 #?5$555
 ""5666r3   )r%   r   r'   r&   r(   r   r)   r   )rQ   r`   ra   rb   rl   rc   rs   __classcell__r8   s   @r1   r   r      sV         ^^%'I''''*7 *7 *7 *7 *7 *7 *7 *7 *7 *7r3   r   c                  4    e Zd ZU dZdZded<   ddZdddZdS )r   zWA generic path entry class for nodes that access their children by :meth:`__getitem__`.rd   rk   rl   r4   r   r)   c                   || j                  S r6   rX   r0   r4   s     r1   r:   zGetItemEntry.__call__       4:r3   rT   rU   rL   c                   | d| j         dS )rW   []rX   rY   s     r1   rF   zGetItemEntry.codify   s    ((((((r3   NrZ   r^   r_   )rQ   r`   ra   rb   rl   rc   r:   rF   rd   r3   r1   r   r      sZ         aa%'I''''   ) ) ) ) ) ) )r3   r   c                  V    e Zd ZU dZdZded<   ded<   edd            ZddZdddZ	dS )r   zWA generic path entry class for nodes that access their children by :meth:`__getattr__`.rd   rk   rl   rL   r%   r)   c                   | j         S zGet the attribute name.rX   r/   s    r1   namezGetAttrEntry.name        zr3   r4   r   c               ,    t          || j                  S r   )getattrr   r   s     r1   r:   zGetAttrEntry.__call__   s    sDI&&&r3   rT   rU   c                   | d| j          S rW   rp   r   rY   s     r1   rF   zGetAttrEntry.codify   s    $$$$$r3   Nr]   rZ   r^   r_   )
rQ   r`   ra   rb   rl   rc   propertyr   r:   rF   rd   r3   r1   r   r      s         aa%'I''''JJJ   X' ' ' '% % % % % % %r3   r   c                  "    e Zd ZU dZdZded<   dS )r   z2A fallback path entry class for flattened objects.rd   rk   rl   N)rQ   r`   ra   rb   rl   rc   rd   r3   r1   r   r      s)         <<%'I''''''r3   r   c                  ^    e Zd ZU dZdZded<   ded<   ded<   edd
            ZddZddZ	dS )r   z!A path entry class for sequences.rd   rk   rl   rH   r%   zbuiltins.type[Sequence[_T_co]]r'   r)   c                   | j         S )zGet the index.rX   r/   s    r1   indexzSequenceEntry.index   r   r3   r4   Sequence[_T_co]rf   c                   || j                  S r   )r   r   s     r1   r:   zSequenceEntry.__call__   r   r3   rL   c               @    | j         j         d| j        d| j        dS )rN   z(index=rO   rP   )r8   rQ   r   r'   r/   s    r1   rR   zSequenceEntry.__repr__   rS   r3   Nr\   )r4   r   r)   rf   r]   )
rQ   r`   ra   rb   rl   rc   r   r   r:   rR   rd   r3   r1   r   r      s         ++%'I''''JJJ((((   X   V V V V V Vr3   r   c                  ^    e Zd ZU dZdZded<   ded<   ded<   edd
            ZddZddZ	dS )r   z A path entry class for mappings.rd   rk   rl   rh   r%   z&builtins.type[Mapping[_KT_co, _VT_co]]r'   r)   c                   | j         S )zGet the key.rX   r/   s    r1   keyzMappingEntry.key   r   r3   r4   Mapping[_KT_co, _VT_co]ri   c                   || j                  S r   )r   r   s     r1   r:   zMappingEntry.__call__  s    48}r3   rL   c               @    | j         j         d| j        d| j        dS )rN   z(key=rO   rP   )r8   rQ   r   r'   r/   s    r1   rR   zMappingEntry.__repr__  s*    .)QQQQ49QQQQr3   N)r)   rh   )r4   r   r)   ri   r]   )
rQ   r`   ra   rb   rl   rc   r   r   r:   rR   rd   r3   r1   r   r      s         **%'I''''MMM0000   X   R R R R R Rr3   r   c                      e Zd ZU dZdZded<   ded<   ded<   d	ed
<   edd            Zedd            ZddZ	dddZ
dS )r   z*A path entry class for namedtuple objects.rd   rk   rl   rH   r%   zbuiltins.type[NamedTuple[_T]]r'   zLiteral[PyTreeKind.NAMEDTUPLE]r(   r)   tuple[str, ...]c               .    ddl m}  || j                  S )Get the field names.r   )namedtuple_fields)rq   r   r'   )r0   r   s     r1   fieldszNamedTupleEntry.fields  s)     	433333  +++r3   rL   c               &    | j         | j                 S zGet the field name.r   r%   r/   s    r1   fieldzNamedTupleEntry.field       {4:&&r3   c               @    | j         j         d| j        d| j        dS rN   z(field=rO   rP   r8   rQ   r   r'   r/   s    r1   rR   zNamedTupleEntry.__repr__"  rS   r3   rT   rU   c                   | d| j          S r   r   rY   s     r1   rF   zNamedTupleEntry.codify&      %%%%%r3   Nr)   r   r]   r^   r_   rQ   r`   ra   rb   rl   rc   r   r   r   rR   rF   rd   r3   r1   r   r     s         44%'I''''JJJ''''((((, , , X, ' ' ' X'V V V V& & & & & & &r3   r   c                      e Zd ZU dZdZded<   ded<   ded<   d	ed
<   edd            Zedd            ZddZ	dddZ
dS )r   z0A path entry class for PyStructSequence objects.rd   rk   rl   rH   r%   z!builtins.type[StructSequence[_T]]r'   z"Literal[PyTreeKind.STRUCTSEQUENCE]r(   r)   r   c               .    ddl m}  || j                  S )r   r   )structseq_fields)rq   r   r'   )r0   r   s     r1   r   zStructSequenceEntry.fields4  s)     	322222	***r3   rL   c               &    | j         | j                 S r   r   r/   s    r1   r   zStructSequenceEntry.field;  r   r3   c               @    | j         j         d| j        d| j        dS r   r   r/   s    r1   rR   zStructSequenceEntry.__repr__@  rS   r3   rT   rU   c                   | d| j          S r   r   rY   s     r1   rF   zStructSequenceEntry.codifyD  r   r3   Nr   r]   r^   r_   r   rd   r3   r1   r   r   +  s         ::%'I''''JJJ++++,,,,+ + + X+ ' ' ' X'V V V V& & & & & & &r3   r   c                      e Zd ZU dZdZded<   ded<   edd	            Zedd
            Zedd            Z	edd            Z
ddZdS )r   z#A path entry class for dataclasses.rd   rk   rl   z	str | intr%   r)   r   c               b    t          d t          j        | j                  D                       S )zGet all field names.c              3  $   K   | ]}|j         V  d S Nr   .0fs     r1   	<genexpr>z(DataclassEntry.fields.<locals>.<genexpr>S  s$      CCQVCCCCCCr3   tupleru   r   r'   r/   s    r1   r   zDataclassEntry.fieldsP  s.     CC[%7	%B%BCCCCCCr3   c               b    t          d t          j        | j                  D                       S )zGet the init field names.c              3  2   K   | ]}|j         	|j        V  d S r   )r    r   r   s     r1   r   z-DataclassEntry.init_fields.<locals>.<genexpr>X  s+      MMafMQVMMMMMMr3   r   r/   s    r1   init_fieldszDataclassEntry.init_fieldsU  s.     MM[%7	%B%BMMMMMMr3   rL   c               h    t          | j        t                    r| j        | j                 S | j        S r   )r>   r%   rH   r   r/   s    r1   r   zDataclassEntry.fieldZ  s0     dj#&& 	0#DJ//zr3   c                   | j         S r   r   r/   s    r1   r   zDataclassEntry.namea  r   r3   c               @    | j         j         d| j        d| j        dS r   r   r/   s    r1   rR   zDataclassEntry.__repr__f  rS   r3   Nr   r]   )rQ   r`   ra   rb   rl   rc   r   r   r   r   r   rR   rd   r3   r1   r   r   I  s         --%'I''''D D D XD N N N XN    X    XV V V V V Vr3   r   c                       e Zd ZU dZdZded<   ed&d            Zd'd( fdZd)dZ	e
d*d            Ze
d+d            Zd, fdZd-dZd. fdZd. fdZd/ fdZd0 fd Zd1 fd"Zd2d3d%Z xZS )4r   zA path class for PyTrees.rd   rk   rl   r)   tuple[Any, ...]c               4    t          d | D                       S )zGet the path of the accessor.c              3  $   K   | ]}|j         V  d S r   rX   )r   es     r1   r   z&PyTreeAccessor.path.<locals>.<genexpr>s  s$      ++QW++++++r3   )r   r/   s    r1   pathzPyTreeAccessor.pathp  s!     ++d++++++r3   r   Iterable[PyTreeEntry]r   c                   t          |t          t          f          st          |          }t          d |D                       st	          d|d          t                                          | |          S )zCreate a new accessor instance.c              3  @   K   | ]}t          |t                    V  d S r   )r>   r   )r   ps     r1   r   z)PyTreeAccessor.__new__.<locals>.<genexpr>y  s,      <<!:a--<<<<<<r3   z$Expected a path of PyTreeEntry, got rp   )r>   listr   allr7   rr   rs   )ry   r   r8   s     r1   rs   zPyTreeAccessor.__new__u  sv    $u.. 	;;D<<t<<<<< 	NL4LLLMMMwwsD)))r3   r4   r   c               &    | D ]} ||          }|S r   rd   )r0   r4   r%   s      r1   r:   zPyTreeAccessor.__call__}  s%     	 	E%**CC
r3   r   rH   r   c                   d S r   rd   r0   r   s     r1   __getitem__zPyTreeAccessor.__getitem__  s    9<r3   slicec                   d S r   rd   r   s     r1   r   zPyTreeAccessor.__getitem__  s    47Cr3   int | slicePyTreeEntry | Selfc                   t          |t                    r4|                     t                                          |                    S t                                          |          S )z6Get the child path entry or an accessor for a subpath.)r>   r   r8   rr   r   )r0   r   r8   s     r1   r   zPyTreeAccessor.__getitem__  sQ    eU## 	>>>%''"5"5e"<"<===ww""5)))r3   r;   r<   c                   t          |t                    r|                     g | |R           S t          |t                    r|                     g | |R           S t          S )z6Join the accessor with another path entry or accessor.)r>   r   r8   r   r?   r@   s     r1   rA   zPyTreeAccessor.__add__  sd    e[)) 	2>>.D.%..111e^,, 	3>>/D/5//222r3   valuec               l    |                      t                                          |                    S zRepeat the accessor.)r8   rr   __mul__r0   r   r8   s     r1   r   zPyTreeAccessor.__mul__  s%    ~~eggooe44555r3   c               l    |                      t                                          |                    S r   )r8   rr   __rmul__r   s     r1   r   zPyTreeAccessor.__rmul__  s'    ~~egg..u55666r3   rB   c               p    t          |t                    o t                                          |          S )z!Check if the accessors are equal.)r>   r   rr   rG   )r0   r;   r8   s     r1   rG   zPyTreeAccessor.__eq__  s(    %00JUWW^^E5J5JJr3   c               D    t                                                      S )zGet the hash of the accessor.)rr   rK   r0   r8   s    r1   rK   zPyTreeAccessor.__hash__  s    ww!!!r3   rL   c                   | j         j         d|                                  dt                                                       dS )z'Get the representation of the accessor.(z, rP   )r8   rQ   rF   rr   rR   r   s    r1   rR   zPyTreeAccessor.__repr__  s?    .)RRDKKMMRRUWW=M=M=O=ORRRRr3   *rootc               >    |}| D ]}|                     |          }|S )z%Generate code for accessing the path.)rF   )r0   r   stringr%   s       r1   rF   zPyTreeAccessor.codify  s.     	* 	*E\\&))FFr3   )r)   r   )rd   )r   r   r)   r   rZ   )r   rH   r)   r   )r   r   r)   r   )r   r   r)   r   )r;   r<   r)   r   )r   rH   r)   r   r[   r\   r]   )r   )r   rL   r)   rL   )rQ   r`   ra   rb   rl   rc   r   r   rs   r:   r   r   rA   r   r   rG   rK   rR   rF   r{   r|   s   @r1   r   r   k  s        ##%'I'''', , , X,* * * * * * *    <<< X<777 X7* * * * * *   6 6 6 6 6 67 7 7 7 7 7K K K K K K" " " " " "S S S S S S        r3   r   .rT   zExpected a class, got rp   optreerd   )7rb   
__future__r   ru   syscollections.abcr   r   r   typingr   r   r	   r
   r   r   r   typing_extensionsr   	optree._C_Cr   builtinsrq   r   r   __all__version_infoSLOTS	dataclassr   re   rf   rh   ri   r   r   r   r   r   r   r   r   r   r   r   r<   _name_clsglobalsr>   r'   r7   r`   setattrrd   r3   r1   <module>r      s2   " ! " " " " " "     



 7 7 7 7 7 7 7 7 7 7 T T T T T T T T T T T T T T T T T T " " " " " "                    9OOO88888888   +w66$B MDutMMuMMD6 D6 D6 D6 D6 D6 D6 NMD6N 
 WT]]4(((	T	*	*	*	T	*	*	*/7 /7 /7 /7 /7 /7 /7 /7d) ) ) ) ); ) ) )% % % % %; % % %*( ( ( ( ([ ( ( (V V V V VL'%. V V V,R R R R R<!8 R R R,& & & & &mB' & & &<& & & & &-+ & & &<V V V V V\ V V VDE E E E EU;+, E E ER &t  E799UD:dD!! <i::::;;;DOGBt	444r3   