
    Phk                        d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZ d dl	Z	d dl
Z	ddlmZ ddlmZmZ ddlmZmZ ddlmZ dd	l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!m"Z" ddl#m$Z$ ddl%m&Z&m'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*      Z, G d de(      Z- G d de-      Z. G d de-      Z/ G d d e(      Z0 G d! d"e"      Z1 G d# d$e1      Z2 G d% d&e+      Z3y)'    N)DictListOptional   )Source   )polyfill	variables)create_call_functioncreate_instruction)unimplemented)
AttrSourceGetItemSource)get_fake_valueguard_if_dynis_namedtupleistypeiter_containsnamedtuple_fieldsodict_values   )MutableLocalVariableTracker)ConstantVariable)UserFunctionVariableUserMethodVariablec                        e Zd Zed        Zed        Zdee   f fdZd Z	d Z
ed        Zd Zd	 Zd
efdZd Zded   deedf   ddf fdZed        Zed        Z xZS )BaseListVariablec                     t        |       r$t        j                  t        t	        |             S t
        j                  t	        |             S )N	tuple_cls)r   	functoolspartialNamedTupleVariabletyper   cls_forobjs    hC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/variables/lists.pycls_for_instancez!BaseListVariable.cls_for_instance   s7    $$%749MM''S	22    c                 8   t         t        t        t        t        t
        t        j                  t        t        t        t        t        t        j                  j                  t        t        j                  j                  t        t        j                   t"        i	|    S N)iterListIteratorVariablelistListVariablesliceSliceVariabletorchSizeSizeVariabletupleTupleVariabler   nnParameterList
ModuleListcollectionsdequeDequeVariabler'   s    r)   r&   zBaseListVariable.cls_for%   sd     &,=JJ=,HH""LHH}

 
 
	r+   itemsc                 ~    t        |   di | t        |t              sJ t	        d |D              sJ || _        y )Nc              3   <   K   | ]  }t        |t                y wr-   )
isinstancer   ).0xs     r)   	<genexpr>z,BaseListVariable.__init__.<locals>.<genexpr>:   s     A5a:a15s    )super__init__rB   r0   allr?   )selfr?   kwargs	__class__s      r)   rH   zBaseListVariable.__init__3   s@    
 	"6"%&&&A5AAAA,1
r+   c                 \    | j                   D cg c]  }|j                          c}S c c}w r-   r?   as_proxyrJ   rD   s     r)   	_as_proxyzBaseListVariable._as_proxy=   $    &*jj1j

j111   )c                 &     t        |       |fi |S r-   )r%   rJ   r?   rK   s      r)   modifiedzBaseListVariable.modified@   s    tDz%*6**r+   c                 "    | j                         S r-   )as_python_constantrJ   s    r)   valuezBaseListVariable.valueC   s    &&((r+   c                      | j                         | j                  D cg c]  }|j                          c}      S c c}w r-   python_typer?   rX   rP   s     r)   rX   z#BaseListVariable.as_python_constantG   s7    !t!4::"N:a1#7#7#9:"NOO"Ns   =c                 z    | j                         t        usJ  | j                         | j                               S r-   )r]   r6   rQ   rY   s    r)   rO   zBaseListVariable.as_proxyJ   s6    !555!t!$.."233r+   argc                    ddl m} t        ||      r|j                  }n|j	                         }t        |t
              r| j                  P| j                  | j                  |   t        | j                  |      | j                  rt                     S d       S | j                  | j                  |   | j                  rt                     S d       S t        |t        t        j                  f      sJ | j                  |   S )Nr   SymNodeVariable)r?   sourcemutable_local)r?   rd   )tensorrb   rB   sym_numrX   r2   rc   cloner?   r   rd   r   intr4   SymInt)rJ   r_   rb   indexs       r)   getitem_constzBaseListVariable.getitem_constN   s    +c?+KKE**,EeU#{{&zz**U+(e<484F4F,. "   MQ "   zz**U+484F4F,. "  LP "  
 ec5<<%8999::e$$r+   c                 ,    t        | j                        S r-   r0   r?   rJ   txs     r)   unpack_var_sequencez$BaseListVariable.unpack_var_sequencef       DJJr+   argsr   rK   returnc                    |dk(  rddl m} |st        |      dk(  sJ t        |d   |      rt	        |d   j                         j                  |      }|j                  U|j                  j                         dk(  r8t        j                  j                  |j                  j                               }nt        d       n|d   }| j                  |      S |dk(  r.t        |      dk(  sJ |rJ t        | j                   |d   |      S |dk(  r@ddlm} |j'                    |       |t(        j*                        | gt-        |      z   |      S t.        | a  ||||      S )	N__getitem__r   )TensorVariabler   z$__getitem__ with non-constant tensor__contains__rj   )SourcelessBuilder)re   rv   lenrB   r   rO   nodeconstantnumelr
   r   createitemr   rk   r   r?   builderrx   inline_user_function_returnr	   rj   r0   rG   call_method)	rJ   ro   namerr   rK   rv   rZ   rx   rL   s	           r)   r   zBaseListVariable.call_methodi   sC    = .#d)q.00$q'>2&tAw'7'7'9'>'>C>>-%..2F2F2HA2M%66==enn>Q>Q>STE!"HIQ%%e,,^#t9>!>: T!Wb99W_211#!#B7$$t*9Lf  w"2tT6::r+   c                    ddl m} t        j                  | ||      }|t        j
                  u r|S |t        j                  u r( |t        j                        j                  | |gi       S t        d| d| d|        y )Nr   BuiltinVariablezlist_compare  )
builtinr   r   list_eqoperatoreqnenot_call_functionr   )ro   opleftrightr   	eq_results         r)   list_comparezBaseListVariable.list_compare   ss    ,$,,Ru=	8;;"8==1??YKQSTTM$qAeW=>r+   c                 0    ddl m t        |j                        t        |j                        k7  rt	        j
                  d      S t        |j                        dk(  rt	        j
                  d      S g }t        |j                  |j                        D ]c  \  }} t        j                        j                   ||gi       }|j                         r|j                         s|c S |j                  |       e t        j                   fd|      S )Nr   r   Fr   Tc                 V     t         j                        j                  | |gi       S r-   )r   and_r   )abr   ro   s     r)   <lambda>z*BaseListVariable.list_eq.<locals>.<lambda>   s"    7EEb1a&RTUr+   )r   r   ry   r?   r   r}   zipr   r   r   is_python_constantrX   appendr"   reduce)ro   r   r   compslrcompr   s   `      @r)   r   zBaseListVariable.list_eq   s    , tzz?c%++..#**511tzz?a#**400
 

EKK0DAq"8;;/==b1a&"MD&&(1H1H1JLL 1 U
 	
r+   )__name__
__module____qualname__staticmethodr*   r&   r   r   rH   rQ   rV   propertyrZ   rX   rO   rk   rp   r   strr   r   r   __classcell__rL   s   @r)   r   r      s    3 3
  2O$22+ ) )P4% %0 ; $%	;
 S++,; 
;B 	? 	? 
 
r+   r   c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )RangeVariablec                 D   |}t         j                  j                  d      }d }t         j                  j                  d      }t        |      dk(  r|\  }n3t        |      dk(  r|\  }}nt        |      dk(  r|\  }}}n
t	               |J t        |   |||gfi | y )Nr   r   r   r   )r
   r   r}   ry   AssertionErrorrG   rH   rJ   r?   rK   items_to_mapstartstopsteprL   s          r)   rH   zRangeVariable.__init__   s    **11!4))003|!"GT!#&KE4!# ,E4 ""%t,77r+   c                     t         S r-   )rangerY   s    r)   r]   zRangeVariable.python_type       r+   c                 h    t        | j                  D cg c]  }|j                          c} S c c}w r-   )r   r?   rX   rP   s     r)   rX   z RangeVariable.as_python_constant   s,    tzzBz!q++-zBCCBs   /c                 D     | j                         | j                          S r-   )r]   rQ   rY   s    r)   rO   zRangeVariable.as_proxy   s    !t!4>>#344r+   c                     | j                         D cg c]!  }t        j                  j                  |      # c}S c c}w r-   )rX   r
   r   r}   )rJ   ro   rD   s      r)   rp   z!RangeVariable.unpack_var_sequence   s6    >B>U>U>WX>W	**11!4>WXXXs   &<c                     d|j                   j                  vsJ |j                  |j                  t        d             |j                  | j                         t        dd      S )Nr   Tr   F)ro   	f_globalsappend_outputcreate_load_python_moduler   foreachr?   r   rJ   codegens     r)   reconstructzRangeVariable.reconstruct   sR    gjj22222g??tLM

##Au--r+   c                 j    g d}||vrt        d|        | j                  |j                  |         S )Nr   r   r   zrange.r   r?   rj   rJ   ro   r   fieldss       r)   var_getattrzRangeVariable.var_getattr   5    *vF4&/*zz&,,t,--r+   )r   r   r   rH   r]   rX   rO   rp   r   r   r   r   s   @r)   r   r      s(    8$D5Y..r+   r   c                   @     e Zd ZdZded   deedf   ddf fdZ xZS )CommonListMethodsVariablezE
    Implement methods common to List and other List-like things
    rr   r   rK   rs   c                    |dk(  rX| j                   rL|rJ |\  }|j                  | | j                  | j                  |gz                t	        j
                  d       S |dk(  ry| j                   rm|rk|d   j                  |      rW|rJ |\  }|j                  | | j                  t        | j                        t        |j                  |            z               S |dk(  rk| j                   r_|rJ |\  }}t        | j                        }|j                  |j                         |       |j                  | | j                  |            S |dk(  rs| j                   rg|rJ t        | j                        } |j                  |D 	cg c]  }	|	j                          c}	 }
|j                  | | j                  |             |
S |dk(  r3| j                   r'|s|rJ |j                  | | j                  g             S |dk(  r| j                   r|r|d   j                         r|rJ |\  }}t        | j                        }t        |t              r't        |j                        ||j                         <   n|||j                         <   | j                  |      }
|j                  | |
      S |dk(  r8|rJ |rJ t        | j                        }| j                  |t               	      S t         | E  ||||      S c c}	w )
Nr   extendr   insertpopclear__setitem__copyrd   )rd   replace_allrV   r?   r   r}   has_unpack_var_sequencer0   rp   r   rX   r   r   rB   r3   r   rG   r   )rJ   ro   r   rr   rK   r_   idxrZ   r?   r   resultkeyrL   s               r)   r   z%CommonListMethodsVariable.call_method   s    8 2 2:FSNNJJ#& $**400H""Q//3:FS>>$tC,C,CB,G'HH  X$"4"4:JC$ELL//159>>e$  U]t11:$EUYY FA!5!5!7 FGFNNe$ MW_!3!3d**>>b! 
 M!""Q**,:JC$E#}-26u{{2Cc,,./27c,,./]]5)F>>$//V^:O8$E==ln=EE7&r4v>>E !Gs   K=)	r   r   r   __doc__r   r   r   r   r   r   s   @r)   r   r      sF    M? $%	M?
 S++,M? 
M? M?r+   r   c                   \     e Zd Zd Zd Zded   deedf   ddf fdZdeddf fd	Z	 xZ
S )
r1   c                     t         S r-   )r0   rY   s    r)   r]   zListVariable.python_type6  s    r+   c                 z    |j                  | j                         t        dt        | j                              gS )N
BUILD_LISTr_   r   r?   r   ry   r   s     r)   r   zListVariable.reconstruct9  s*    

#"<S_EFFr+   rr   r   rK   rs   c                    |dk(  r| j                   r|r|d   j                         r|rJ |\  }}t        | j                        }t	        |t
              rC|j                  |      st        d| d       |j                  |      ||j                         <   n|||j                         <   t        |      }|j                  | |      S t        	| 5  ||||      S )Nr   r   z%Missing dynamo support for expanding z" into a list for slice assignment.)rd   r   r0   r?   rB   r3   r   r   rp   rX   r1   r   rG   r   )
rJ   ro   r   rr   rK   r   rZ   r?   r   rL   s
            r)   r   zListVariable.call_method=  s     M!""Q**,:JC$E#}-44R8!?wFhi 382K2KB2Oc,,./27c,,./!%(F>>$//7&r4v>>r+   r   c                     | j                         t        urt        |   ||      S t        j
                  j                  t        g |            S r-   )r]   r0   rG   call_hasattrr
   r   r}   hasattr)rJ   ro   r   rL   s      r)   r   zListVariable.call_hasattrZ  sD    T)7'D11))00T1BCCr+   )r   r   r   r]   r   r   r   r   r   r   r   r   s   @r)   r1   r1   5  s_    G? $%	?
 S++,? 
?:DS D-> D Dr+   r1   c                   H     e Zd Zd Zd Zded   deedf   ddf fdZ xZ	S )r>   c                 "    t         j                  S r-   )r<   r=   rY   s    r)   r]   zDequeVariable.python_typea  s       r+   c                    d|j                   j                  vsJ |j                  |j                  t        j
                  d             |j                  | j                         t        t        | j                        d      S )Nr=   TF)
ro   r   r   r   r<   r=   r   r?   r   ry   r   s     r)   r   zDequeVariable.reconstructd  se    gjj22222--k.?.?F	
 	

##C

OU;;r+   rr   r   rK   rs   c           
         |dk(  r| j                   r|r|d   j                         r~|rJ |\  }}|j                         rt        |j                         t              sJ t        | j                        }|||j                         <   t        |      }|j                  | |      S |dk(  r]| j                   rQ|rJ |\  }	|j                  | t        t        |	j                  |            t        | j                        z               S |dk(  ri| j                   r]|rJ |rJ t        j                  | j                        }|j                         }|j                  | t        t        |                   |S |dk(  rE| j                   r9|rJ |j                  | t        |d   gt        | j                        z               S t        
| 9  ||||      S )Nr   r   
extendleftpopleft
appendleft)rd   r   rB   rX   rh   r0   r?   r>   r   rp   r<   r=   r   rG   r   )rJ   ro   r   rr   rK   r   rZ   r?   r   r_   rL   s             r)   r   zDequeVariable.call_methodl  s    M!""Q**,:JC))+
&&(#1   $E.3E#((*+"5)F>>$//\!d&8&8:FS>>0045TZZ8HH  Y4#5#5O8:%%djj1E]]_FNNd5k* M\!d&8&8:>>!WITZZ 00  7&r4v>>r+   
r   r   r   r]   r   r   r   r   r   r   r   s   @r)   r>   r>   `  sF    !<2? $%	2?
 S++,2? 
2? 2?r+   r>   c                   H     e Zd Zd Zd Zded   deedf   ddf fdZ xZ	S )r8   c                     t         S r-   )r7   rY   s    r)   r]   zTupleVariable.python_type  r   r+   c                 z    |j                  | j                         t        dt        | j                              gS )NBUILD_TUPLEr   r   r   s     r)   r   zTupleVariable.reconstruct  *    

#"=c$**oFGGr+   rr   r   rK   rs   c                 (    t         |   ||||      S r-   )rG   r   )rJ   ro   r   rr   rK   rL   s        r)   r   zTupleVariable.call_method  s     w"2tT6::r+   r   r   s   @r)   r8   r8     sG    H; $%	;
 S++,; 
; ;r+   r8   c                        e Zd ZdZ	 ddee   deej                  j                     f fdZ
d Zd Zd Zd Zd	 Zd
ed   deedf   ddf fdZdefdZ xZS )r6   ztorch.Size(...)r?   proxyc                 4    || _         t        |   |fi | y r-   )r   rG   rH   )rJ   r?   r   rK   rL   s       r)   rH   zSizeVariable.__init__  s     
)&)r+   c                 "    t         j                  S r-   )r4   r5   rY   s    r)   r]   zSizeVariable.python_type  s    zzr+   c           	         | j                   | j                   S d }| j                         }|D ]4  }t        |t        j                  j
                        s(|j                  } n |t        j                  |      S |j                  dt        j                  |fi       }t        j                  |D cg c]-  }t        |t              s|j                  j                  d   n|/ c}      |j                  j                  d<   |S c c}w )Nr   example_value)r   rQ   rB   r4   fxProxytracerr5   create_proxyrh   rz   meta)rJ   r   proxiesr   ps        r)   rO   zSizeVariable.as_proxy  s    ::!::. .."E%0 
 >::g&&##OUZZ'RP+0:: ! A 5?q#4FO,AM ,


( s   12Dc                     |j                  dd       |j                  | j                         t        dt	        | j                              gt        dd      z   }|S )Nr4   r5   r   r   r   T)load_import_fromr   r?   r   ry   r   )rJ   r   build_torch_sizes      r)   r   zSizeVariable.reconstruct  sS      &1

#}#djj/B
 D)*  r+   c                 ,    t        | j                        S r-   rm   rn   s     r)   rp   z SizeVariable.unpack_var_sequence  rq   r+   c                    ddl m} ddlm} d}g }| j                  D ]O  }t        |t              r||j                  z  }#t        ||      sJ t        |             |j                  |       Q t        j                  |      }|r	|dk(  r|^}}|r|dk(  r|S  |t        j                        }|D ]  }|j                  |||gi       } |S )Nr   r   ra   r   )r   r   re   rb   r?   rB   r   rZ   r%   r   r}   r   mulr   )	rJ   ro   r   rb   const_result	sym_sizesvr   r  s	            r)   r|   zSizeVariable.numel  s    ,+	A!-.'!!_5>tAw>5  #  "((6*!*FYLA-Mhll+A&&rFA;;F r+   rr   r   rK   rs   c                     |dk(  r)|st        |      dk(  sJ | j                  ||d         }|S |dk(  r|s|rJ | j                  |      S t        |   ||||      S )Nru   r   r   r|   )ry   get_item_dynr|   rG   r   )rJ   ro   r   rr   rK   outrL   s         r)   r   zSizeVariable.call_method  sq     = #d)q.00##BQ0CJW_F**::b>!w"2tT6::r+   r_   c                    ddl m} t        ||      r|j                  }n|j	                         }t        |t
              rt        | j                  |         S t        |t        t        j                  f      sJ | j                  |   S )Nr   ra   )re   rb   rB   rf   rX   r2   r6   r?   rh   r4   ri   )rJ   ro   r_   rb   rj   s        r)   r  zSizeVariable.get_item_dyn&  sl    +c?+KKE**,EeU#

5 122ec5<<%8999::e$$r+   r-   )r   r   r   r   r   r   r   r4   r   r   rH   r]   rO   r   rp   r|   r   r   r   r  r   r   s   @r)   r6   r6     s    
 +/*O$* '**X  8; $%	;
 S++,; 
;"%O %r+   r6   c                   J     e Zd Z fdZd Zd Zd Z fdZdeddfd	Z	 xZ
S )
r$   c                 4    t        |   |fi | || _        y r-   )rG   rH   r!   )rJ   r?   r!   rK   rL   s       r)   rH   zNamedTupleVariable.__init__5  s    )&)"r+   c                     | j                   S r-   r    rY   s    r)   r]   zNamedTupleVariable.python_type9  s    ~~r+   c                 ~     | j                         | j                  D cg c]  }|j                          c} S c c}w r-   r\   rP   s     r)   rX   z%NamedTupleVariable.as_python_constant<  s7    !t!DJJ#OJqA$8$8$:J#OPP#Os   :c                    t        | j                  d| j                        }|j                  |j                  |             |j	                  | j
                         t        dt        | j
                              gt        dd      z   S )N_maker   r   r   T)	getattrr!   r   _create_load_constr   r?   r   ry   r   )rJ   r   	create_fns      r)   r   zNamedTupleVariable.reconstruct?  sl    DNNGT^^D	g88CD

#}#djj/B
 D)* 	*r+   c                       fd}t         j                        }|vr |       }|st           |       |S  j                  |j                           S )Nc                  Z   t        j                  j                  d       } t        | t              r3t        | j                  t        j                  j                              S t        | t              rt        | j                        S t        j                  |       rt        |       S y r-   )inspectgetattr_staticr!   rB   classmethodr   __func__r
   UserDefinedClassVariabler   r   
isfunction)methodr   rJ   s    r)   check_and_create_methodz?NamedTupleVariable.var_getattr.<locals>.check_and_create_methodH  s    ++DNND$GF&+.)OO66t~~F  FL1+FOO<<##F+)&$77r+   )r   r!   rG   r   r?   rj   )rJ   ro   r   r  r   r  rL   s   ` `   r)   r   zNamedTupleVariable.var_getattrG  sW    	 #4>>2v,.F#B-Mzz&,,t,--r+   r   rs   r   c                 n    t        | j                        }t        j                  j	                  ||v       S r-   )r   r!   r
   r   r}   r   s       r)   r   zNamedTupleVariable.call_hasattr_  s+    "4>>2))00@@r+   )r   r   r   rH   r]   rX   r   r   r   r   r   r   s   @r)   r$   r$   4  s4    #Q*.0AS A-> Ar+   r$   c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )r3   c                    |}t         j                  j                  d       gdz  \  }}}t        |      dk(  r|\  }n3t        |      dk(  r|\  }}nt        |      dk(  r|\  }}}n
t	               t        |t         j                        st        |t         j                        rt        d       t        | $  |||gfi | y )Nr   r   r   z8Dynamic slicing on data-dependent value is not supported)
r
   r   r}   ry   r   rB   rv   r   rG   rH   r   s          r)   rH   zSliceVariable.__init__e  s    &77>>tDEItT|!"GT!#&KE4!# ,E4 ""eY556*)**;
 TU%t,77r+   c                 .    t        | j                          S r-   )r2   rQ   rY   s    r)   rO   zSliceVariable.as_proxyy  s    dnn&''r+   c                     t         S r-   )r2   rY   s    r)   r]   zSliceVariable.python_type|  r   r+   c                 ^    t        | j                  D cg c]  }t        |       c} S c c}w r-   )r2   r?   r   rP   s     r)   rX   z SliceVariable.as_python_constant  s'    

;
1|A
;<<;s   *c                 z    |j                  | j                         t        dt        | j                              gS )NBUILD_SLICEr   r   r   s     r)   r   zSliceVariable.reconstruct  r   r+   c                 j    g d}||vrt        d|        | j                  |j                  |         S )Nr   zslice.r   r   s       r)   r   zSliceVariable.var_getattr  r   r+   )
r   r   r   rH   rO   r]   rX   r   r   r   r   s   @r)   r3   r3   d  s"    8((=H.r+   r3   c                   D     e Zd Zddef fdZd Zd Zd Zd Zd Z	 xZ
S )	r/   rj   c                 d    t        |   di | t        |t              sJ || _        || _        y )NrF   )rG   rH   rB   r0   r?   rj   )rJ   r?   rj   rK   rL   s       r)   rH   zListIteratorVariable.__init__  s3    "6"%&&&
 

r+   c                     | j                   j                   dt        | j                         dt        | j                         dS )N(z, index=))rL   r   reprr?   rj   rY   s    r)   __repr__zListIteratorVariable.__repr__  s=    ~~&&'qdjj)9(:(4

CSBTTUV	
r+   c                 *   | j                   sJ | j                  t        | j                        k\  r
t	               t        | j                  | j                  dz   t                     }|j                  | |       | j                  | j                     |fS )Nr   r   )rd   rj   ry   r?   StopIterationr/   r   r   )rJ   ro   	next_iters      r)   next_variablesz#ListIteratorVariable.next_variables  sv    !!!!::TZZ(/!(JJJJN&.
	
 	tY'zz$**%y00r+   c                     | j                   dkD  r
t               t        | j                  D cg c]  }|j	                          c}      S c c}w )Nr   )rj   NotImplementedErrorr.   r?   rX   rP   s     r)   rX   z'ListIteratorVariable.as_python_constant  s@    ::>%''TZZ@ZQ))+Z@AA@s   Ac                 F    t        | j                  | j                  d        S r-   )r0   r?   rj   rn   s     r)   rp   z(ListIteratorVariable.unpack_var_sequence  s    DJJtzz|,--r+   c                     | j                   | j                  d  }|j                  |       t        dt	        |            t        d      gS )Nr   r   GET_ITER)r?   rj   r   r   ry   )rJ   r   remaining_itemss      r)   r   z ListIteratorVariable.reconstruct  sC    **TZZ\2(}#o2FGz*
 	
r+   )r   )r   r   r   rh   rH   r+  r/  rX   rp   r   r   r   s   @r)   r/   r/     s)    S 


1B
.
r+   r/   c                       e Zd Zy)TupleIteratorVariableN)r   r   r   rF   r+   r)   r7  r7    s    r+   r7  c                        e Zd ZdZddhej
                  Zh dZh dZede	de	fd       Z
ede	fd       Zde	def fd	Zd
 Zd Zd Zd Zed        Zd Z fdZded   deedf   ddf fdZ	 	 	 	 	 	 ddZ xZS )RestrictedListSubclassVariablea`  
    This is a special case of UserDefinedObjectVariable where:
        1) The user subclasses list
        2) None of the list methods are overriden, merely some new methods are added

    In these cases, we can prevent graph breaks by not using the general
    UserDefinedObjectVariable machinery and instead treating it like
    a ListVariable.
    user_clsuser_cls_source>   r   __call____dict__r   r   r   >   __getattr____setattr____getattribute__
python_clsc                      t        |t              r&|j                  fk7  s|j                  |t        fk7  ryt         fdt        |j                  j                                j                  z
  D               S )zeEnsures user_cls inherits from python_cls (e.g. list) and does not override any methods on python_clsFc              3   V   K   | ]   }t        |      xs |j                  v  " y wr-   )r   _disallowed_names)rC   r   clsrA  s     r)   rE   zNRestrictedListSubclassVariable._is_non_conflicting_subclass.<locals>.<genexpr>  s3      
J J%F1F1F)FFJs   &))
r   r%   	__bases____mro__objectanysetr=  keys_allowed_names)rE  r:  rA  s   ` `r)   _is_non_conflicting_subclassz;RestrictedListSubclassVariable._is_non_conflicting_subclass  su     x&!!j]2Hj&#AA 
H--22458J8JJ
 
 
 	
r+   c                 .    | j                  |t              S r-   )rM  r0   )rE  r:  s     r)   is_matching_clsz.RestrictedListSubclassVariable.is_matching_cls  s    //$??r+   c                    t        |   dd|i| || _        || _        t	        |t
              sJ t        |t              sJ y )Nr?   rF   )rG   rH   r:  r;  r   r%   rB   r   )rJ   r?   r:  r;  rK   rL   s        r)   rH   z'RestrictedListSubclassVariable.__init__  sG    /u// .h%%%/6222r+   c                     | j                   S r-   )r:  rY   s    r)   r]   z*RestrictedListSubclassVariable.python_type  s    }}r+   c                 \    | j                   D cg c]  }|j                          c}S c c}w r-   rN   rP   s     r)   rO   z'RestrictedListSubclassVariable.as_proxy  rR   rS   c                     t               r-   )r1  rY   s    r)   rX   z1RestrictedListSubclassVariable.as_python_constant  s    !##r+   c                      y)NFrF   rY   s    r)   r   z1RestrictedListSubclassVariable.is_python_constant  s    r+   c                     t        d      )NrZ   )AttributeErrorrY   s    r)   rZ   z$RestrictedListSubclassVariable.value  s    W%%r+   c                 T     t        |       |f| j                  | j                  d|S )N)r:  r;  )r%   r:  r;  rU   s      r)   rV   z'RestrictedListSubclassVariable.modified  s7    tDz
]] 00
 	
 	
r+   c                 `     || j                          t        | 	  |      t        dd      z   S )Nr   T)r;  rG   r   r   )rJ   r   rL   s     r)   r   z*RestrictedListSubclassVariable.reconstruct  s.    $$%w"7+.B1d.KKKr+   rr   r   rK   rs   c                 r   || j                   j                  v r| j                   j                  |   }t        |t        j                        r5t        | j                  |      }t        || |      j                  |||      S t        d| j                   j                   d|        t        | 1  ||||      S )N)rc   z&RestrictedListSubclassVariable method .)r:  r=  rB   typesFunctionTyper   r;  r   r   r   r   rG   r   )rJ   ro   r   rr   rK   r  rc   rL   s          r)   r   z*RestrictedListSubclassVariable.call_method  s     4==)))]]++D1F&%"4"45#D$8$8$?)&$vFTTf  89O9O8PPQRVQWX w"2tT6::r+   c                 *    | j                  |d||      S )Nr<  )r   )rJ   ro   rr   rK   s       r)   r   z,RestrictedListSubclassVariable.call_function%  s     Jf==r+   )rr   zList[VariableTracker]rK   zDict[str, VariableTracker]rs   r   )r   r   r   r   r1   _nonvar_fieldsrL  rD  r  r%   rM  rO  r   rH   r]   rO   rX   r   r   rZ   rV   r   r   r   r   r   r   r   r   s   @r)   r9  r9    s
    !"3Rl6Q6QRNN 

 
 
" @t @ @34 3& 32$ & &
L; $%	;
 S++,; 
;(>/>9U>	>r+   r9  )4r<   r"   r  r   r[  typingr   r   r   r4   torch.fx_guardsr    r	   r
   bytecode_transformationr   r   excr   rc   r   r   utilsr   r   r   r   r   r   r   baser   r   r{   r   	functionsr   r   r   r   r   r1   r>   r8   r6   r$   r3   r/   r7  r9  rF   r+   r)   <module>rh     s         ' '    " N  .   0 & ?S
 S
l).$ ).XR? 0 R?j(D, (DV>?- >?B;$ ;$~%= ~%B-A -A`&.$ &.R*
? *
Z	0 	j>\ j>r+   