§
    ž²Åjl"  ã                   ó¾   — d dl Z d dlmZmZm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mZmZ dd	lmZmZ erd d
lmZ  G d„ de¦  «        Z G d„ de¦  «        ZdS )é    N)ÚDictÚListÚTYPE_CHECKING)Ú
AttrSourceÚGetItemSourceé   )Ú	variables)Úunimplemented)Úcommon_constant_typesÚistypeÚnpé   )ÚtypestrÚVariableTracker)ÚInstructionTranslatorc                   óæ   ‡ — e Zd Zedefd„¦   «         Zdˆ fd„Zd„ Zdefd„Z	d„ Z
d„ Zed	„ ¦   «         Zd
ddefd„Zed„ ¦   «         Zed„ ¦   «         Zd„ Zdd„Z	 	 	 	 	 	 dˆ fd„Zd
ddeddfd„Zˆ xZS )ÚConstantVariableÚreturnc                 ód  — |                      dd¦  «        }t          | t          ¦  «        rd„ | D ¦   «         }t          j        |fi |¤ŽS t          | t
          ¦  «        rd„ | D ¦   «         }t          j        |fi |¤ŽS t          | t          t          f¦  «        rŒg }t          | ¦  «        D ]H\  }}|rt          ||¦  «        nd}|                     t                               ||¬¦  «        ¦  «         ŒIt          j                             t!          | ¦  «        ¦  «        |fi |¤ŽS t          | fi |¤ŽS )aV  
        Create a `ConstantVariable` based on the given value, and supports
        automatic routing for collection types like `tuple` (in which case we'd
        create `ConstantVariable` for the leaf items).

        NOTE: the caller must install the proper guards if needed; most often
        the guard will be `CONSTANT_MATCH`.
        ÚsourceNc                 óB   — g | ]}t                                |¦  «        ‘ŒS © ©r   Úcreate©Ú.0Úxs     úQC:\Projects\Historical\venv\Lib\site-packages\torch/_dynamo/variables/constant.pyú
<listcomp>z+ConstantVariable.create.<locals>.<listcomp>"   ó'   € Ð?Ð?Ð?°AÕ%×,Ò,¨QÑ/Ô/Ð?Ð?Ð?ó    c                 óB   — g | ]}t                                |¦  «        ‘ŒS r   r   r   s     r   r   z+ConstantVariable.create.<locals>.<listcomp>%   r    r!   ©r   )ÚgetÚ
isinstanceÚsetr	   ÚSetVariableÚ	frozensetÚFrozensetVariableÚlistÚtupleÚ	enumerater   Úappendr   r   ÚBaseListVariableÚcls_forÚtype)ÚvalueÚkwargsr   ÚitemsÚir   Úitem_sources          r   r   zConstantVariable.create   se  € ð —’˜H dÑ+Ô+ˆõ �e�SÑ!Ô!ð 	TØ?Ð?¸Ð?Ñ?Ô?ˆEÝÔ(¨Ð9Ð9°&Ð9Ð9Ð9Ý˜�yÑ)Ô)ð 	TØ?Ð?¸Ð?Ñ?Ô?ˆEÝÔ.¨uÐ?Ð?¸Ð?Ð?Ð?Ý˜¥¥e˜}Ñ-Ô-ð 
	TØˆEÝ! %Ñ(Ô(ð ð ‘��1Ø:@ÐJ�m¨F°AÑ6Ô6Ð6Àd�Ø—’Ý$×+Ò+ØØ*ð ,ñ ô ñô ð ð õ Ô-×5Ò5µd¸5±k´kÑBÔBÀ5ÐSÐSÈFÐSÐSÐSå Ð0Ð0¨Ð0Ð0Ð0r!   Nc                 ó*  •—  t          ¦   «         j        di |¤Ž t                               |¦  «        sJ dt	          |¦  «        › d�¦   «         ‚t
          �5t          |t
          j        ¦  «        r|                     ¦   «         | _	        d S || _	        d S )Nz7
Cannot construct `ConstantVariable` for value of type a`  .

This failure likely due to PyTorch-internal use of `ConstantVariable` on
non-literal python values, please try using `VariableTracker.build` instead. If
you believe it's a necessary and legitimate use case (the value is immutable and
can't easily be represented with another `VariableTracker` class), please add
its type to `common_constant_types`.
r   )
ÚsuperÚ__init__r   Úis_base_literalr0   r   r%   ÚnumberÚitemr1   ©Úselfr1   r2   Ú	__class__s      €r   r8   zConstantVariable.__init__5   s¡   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ý×/Ò/Øñ
ô 
ð 
	ð 
	ðÝ7;¸E±{´{ðð ð ñ
	ô 
	ð 
õ ˆ>�j¨µ´	Ñ:Ô:ˆ>ØŸš™œˆDŒJˆJˆJàˆDŒJˆJˆJr!   c                 ó   — | j         S ©N©r1   ©r=   s    r   Úas_proxyzConstantVariable.as_proxyG   ó
   € ØŒzÐr!   c                 óf   — dt          | j        ¦  «        j        › dt          | j        ¦  «        › d�S )NzConstantVariable(z: ú))r0   r1   Ú__name__ÚreprrB   s    r   Ú__repr__zConstantVariable.__repr__J   s2   € ØS¥4¨¬
Ñ#3Ô#3Ô#<ÐSÐSÅÀTÄZÑ@PÔ@PÐSÐSÐSÐSr!   c                 ó   — | j         S r@   rA   rB   s    r   Úas_python_constantz#ConstantVariable.as_python_constantM   rD   r!   c                 ó   — dS )NTr   rB   s    r   Úis_python_constantz#ConstantVariable.is_python_constantP   s   € Øˆtr!   c                 ó.   — |                       d¬¦  «        S )zz
        Need this when adding a BaseListVariable and a ConstantVariable together.
        Happens in detectron2.
        N)Útx)Úunpack_var_sequencerB   s    r   r3   zConstantVariable.itemsS   s   € ð ×'Ò'¨4Ð'Ñ0Ô0Ð0r!   rO   r   Úargc                 óp   — t                                | j        |                     ¦   «                  ¦  «        S r@   )r   r   r1   rK   )r=   rO   rQ   s      r   Úgetitem_constzConstantVariable.getitem_const[   s0   € Ý×&Ò&ØŒJ�s×-Ò-Ñ/Ô/Ô0ñ
ô 
ð 	
r!   c                 ó.   — t          | ¦  «        t          v S r@   )r0   r   ©Úobjs    r   r9   z ConstantVariable.is_base_literal`   s   € å�C‰yŒyÕ1Ð1Ð1r!   c                 óÐ   — t          | ¦  «        t          t          t          t          t
          j        fv rt          d„ | D ¦   «         ¦  «        S t           	                    | ¦  «        S )Nc              3   óJ   K  — | ]}t                                |¦  «        V — Œd S r@   )r   Ú
is_literalr   s     r   ú	<genexpr>z.ConstantVariable.is_literal.<locals>.<genexpr>g   s1   è è € ÐCÐC¸!Õ'×2Ò2°1Ñ5Ô5ÐCÐCÐCÐCÐCÐCr!   )
r0   r*   r+   r&   r(   ÚtorchÚSizeÚallr   r9   rU   s    r   rY   zConstantVariable.is_literald   sQ   € å�‰9Œ9��u¥c­9µe´jÐAÐAÐAÝÐCÐC¸sÐCÑCÔCÑCÔCÐCÝ×/Ò/°Ñ4Ô4Ð4r!   c                 ót   — 	 d„ |                       ¦   «         D ¦   «         S # t          $ r}t          |‚d }~ww xY w)Nc                 óB   — g | ]}t                                |¦  «        ‘ŒS r   r   r   s     r   r   z8ConstantVariable.unpack_var_sequence.<locals>.<listcomp>l   s'   € ÐRÐRÐR°1Õ$×+Ò+¨AÑ.Ô.ÐRÐRÐRr!   )rK   Ú	TypeErrorÚNotImplementedError)r=   rO   Úes      r   rP   z$ConstantVariable.unpack_var_sequencej   sN   € ð	-ØRÐR¸×8OÒ8OÑ8QÔ8QÐRÑRÔRÐRøÝð 	-ð 	-ð 	-Ý%¨1Ð,øøøøð	-øøøs   ‚   
7ª2²7c                 ó\   — t          | j        |¦  «        }t          |¦  «        rt          ‚|S r@   )Úgetattrr1   Úcallablera   )r=   rO   ÚnameÚmembers       r   Úconst_getattrzConstantVariable.const_getattrp   s.   € Ý˜œ TÑ*Ô*ˆÝ�FÑÔð 	&Ý%Ð%Øˆr!   ÚargsúList[VariableTracker]r2   úDict[str, VariableTracker]r   c                 ó¢
  •‡— ddl mŠ |dk    rPt          | j        t          ¦  «        r6t          j        t          j        ¦  «                             || g|¢|¦  «        S |dk    rÐt          | j        t          ¦  «        r¶t          |¦  «        dk    rt          |¦  «        dk    sJ ‚|d          
                    |¦  «        }	 d„ |D ¦   «         }t                               | j                             |¦  «        ¦  «        S # t          $ r' t          ¦   «                              ||||¦  «        cY S w xY wt#          ˆfd„|D ¦   «         ¦  «        rBt          j        |                      ¦   «         | j        ¦  «                             ||||¦  «        S 	 d„ |D ¦   «         }d	„ |                     ¦   «         D ¦   «         }n4# t          $ r' t          ¦   «                              ||||¦  «        cY S w xY wt)          | j        t          ¦  «        rU|t          j                             ¦   «         v r5t/          | j        |¦  «        }	t                                |	|i |¤Ž¦  «        S t)          | j        t0          t2          f¦  «        �r.|s7|s5t                                t/          | j        |¦  «        ¦   «         ¦  «        S t5          t6          |¦  «        rßt          |¦  «        dk    rÌ|d                              ¦   «         r²|d         }
t/          t6          |¦  «        }t)          |
t:          j        t:          j        t:          j         f¦  «        r;|j!         "                    d
|| j        |
fi ¦  «        }‰                     |||
¦  «        S t                                || j        |
¦  «        ¦  «        S nUt)          | j        tF          ¦  «        r;|dk    r5t/          | j        |¦  «        }	t                                |	|i |¤Ž¦  «        S |dk    r0|s.|s,t                               t          | j        ¦  «        ¦  «        S |dk    rrt          |¦  «        dk    r_|d                              ¦   «         rEt                               tI          | j        |d                              ¦   «         ¦  «        ¦  «        S |dk    rnt          |¦  «        dk    r[|d                              ¦   «         rA|rJ ‚|d          %                    ¦   «         }|| j        v }t                               |¦  «        S tM          dtO          | j        ¦  «        › d|› �¦  «         d S )Nr   )ÚSymNodeVariableÚformatÚjoinr   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   ©rK   r   s     r   r   z0ConstantVariable.call_method.<locals>.<listcomp>‡   s$   € ÐJÐJÐJ¸˜Q×1Ò1Ñ3Ô3ÐJÐJÐJr!   c              3   ó8   •K  — | ]}t          |‰¦  «        V — Œd S r@   )r%   )r   r   rm   s     €r   rZ   z/ConstantVariable.call_method.<locals>.<genexpr>Œ   s-   øè è € Ð<Ð<°!�z˜!˜_Ñ-Ô-Ð<Ð<Ð<Ð<Ð<Ð<r!   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   rq   )r   Úas     r   r   z0ConstantVariable.call_method.<locals>.<listcomp>“   s$   € Ð?Ð?Ð?°Q˜!×.Ò.Ñ0Ô0Ð?Ð?Ð?r!   c                 ó>   — i | ]\  }}||                      ¦   «         “ŒS r   rq   )r   ÚkÚvs      r   ú
<dictcomp>z0ConstantVariable.call_method.<locals>.<dictcomp>”   s*   € ÐQÐQÐQ¹$¸!¸Q˜A˜q×3Ò3Ñ5Ô5ÐQÐQÐQr!   Úcall_functionÚdecodeÚ__len__Ú	__round__Ú__contains__zconst method call ú.)(Útensorrm   r   r1   Ústrr	   ÚBuiltinVariablern   ry   ÚlenÚforce_unpack_var_sequencer   r   ro   ra   r7   Úcall_methodÚanyrC   r3   r%   Ú__dict__Úkeysrd   ÚfloatÚintÚhasattrÚoperatorrM   r[   ÚSymBoolÚSymFloatÚSymIntÚoutputÚcreate_proxyÚbytesÚroundrK   r
   r   )r=   rO   rf   ri   r2   Úarg_unpackedÚ	arg_constÚ
const_argsÚconst_kwargsÚmethodÚ
add_targetÚopÚproxyÚsearchÚresultrm   r>   s                  @€r   r„   zConstantVariable.call_methodv   s)  øø€ ð 	,Ð+Ð+Ð+Ð+Ð+à�8ÒÐ¥ t¤zµ3Ñ 7Ô 7ÐÝÔ,­S¬ZÑ8Ô8×FÒFØ�T�M˜D�M 6ñô ð ð �VŠ^ˆ^¥ t¤zµ3Ñ 7Ô 7ˆ^Ý�t‘9”9 ’>�>¥c¨&¡k¤k°QÒ&6Ð&6Ð&6Ð6Ø œ7×<Ò<¸RÑ@Ô@ˆLðCØJÐJ¸\ÐJÑJÔJ�	Ý'×.Ò.¨t¬z¯ª¸yÑ/IÔ/IÑJÔJÐJøÝ&ð Cð Cð CÝ‘w”w×*Ò*¨2¨t°T¸6ÑBÔBÐBÐBÐBðCøøøõ Ð<Ð<Ð<Ð<°tÐ<Ñ<Ô<Ñ<Ô<ð 	åÔ,¨T¯]ª]©_¬_¸d¼jÑIÔI×UÒUØ�D˜$ ñô ð ð	?Ø?Ð?¸$Ð?Ñ?Ô?ˆJØQÐQÀ&Ç,Â,Á.Ä.ÐQÑQÔQˆLˆLøÝ"ð 	?ð 	?ð 	?Ý‘7”7×&Ò& r¨4°°vÑ>Ô>Ð>Ð>Ð>ð	?øøøõ �d”j¥#Ñ&Ô&ð 	P¨4µ3´<×3DÒ3DÑ3FÔ3FÐ+FÐ+FÝ˜TœZ¨Ñ.Ô.ˆFÝ#×*Ò*¨6¨6°:Ð+NÀÐ+NÐ+NÑOÔOÐOÝ˜œ
¥U­C LÑ1Ô1ñ 	PØð L˜Fð LÝ'×.Ò.Ð/H­w°t´zÀ4Ñ/HÔ/HÑ/JÔ/JÑKÔKÐKå� $Ñ'Ô'ðOå˜‘I”I ’N�NØ˜”G×.Ò.Ñ0Ô0ð #ð (¨œ]�
Ý�X tÑ,Ô,�ÝØ¥¤µ´ÅÄÐ Mñô ð 	Oð œI×2Ò2Ø'¨¨d¬j¸*Ð-EÀrñô �Eð +×1Ò1°"°e¸ZÑHÔHÐHå+×2Ò2°2°2°d´jÀ*Ñ3MÔ3MÑNÔNÐNøÝ˜œ
¥EÑ*Ô*ð 	P¨t°xÒ/?Ð/?Ý˜TœZ¨Ñ.Ô.ˆFÝ#×*Ò*¨6¨6°:Ð+NÀÐ+NÐ+NÑOÔOÐOà�9ÒÐ dÐ¨fÐÝ#×*Ò*­3¨t¬z©?¬?Ñ;Ô;Ð;Ø�[Ò Ð ¥S¨¡Y¤Y°!¢^ ^¸¸Q¼×8RÒ8RÑ8TÔ8T ^Ý#×*Ò*Ý�d”j $ q¤'×"<Ò"<Ñ">Ô">Ñ?Ô?ñô ð ð �^Ò#Ð#­¨D©	¬	°Qª¨¸4À¼7×;UÒ;UÑ;WÔ;W¨ØÐÐ�:Ø˜!”W×/Ò/Ñ1Ô1ˆFØ˜tœzÐ)ˆFÝ#×*Ò*¨6Ñ2Ô2Ð2åÐG­7°4´:Ñ+>Ô+>ÐGÐGÀÐGÐGÑHÔHÐHÐHÐHs$   Ã=D Ä.D2Ä1D2Æ*F> Æ>.G/Ç.G/rf   c                 ój   — t          | j        |¦  «        }t          j                             |¦  «        S r@   )rŠ   r1   r	   r   r   )r=   rO   rf   rœ   s       r   Úcall_hasattrzConstantVariable.call_hasattrÁ   s*   € Ý˜œ TÑ*Ô*ˆÝÔ)×0Ò0°Ñ8Ô8Ð8r!   ©r   N©rO   r   )ri   rj   r2   rk   r   r   )rG   Ú
__module__Ú__qualname__Ústaticmethodr   r   r8   rC   r€   rI   rK   rM   Úpropertyr3   rS   r9   rY   rP   rh   r„   rž   Ú__classcell__©r>   s   @r   r   r      sÁ  ø€ € € € € Øð1 ?ð 1ð 1ð 1ñ „\ð1ð@ð ð ð ð ð ð$ð ð ðT˜#ð Tð Tð Tð Tðð ð ðð ð ð ð1ð 1ñ „Xð1ð
Ð 7ð 
¸oð 
ð 
ð 
ð 
ð
 ð2ð 2ñ „\ð2ð ð5ð 5ñ „\ð5ð
-ð -ð -ðð ð ð ðIIð &ð	IIð
 -ðIIð 
ðIIð IIð IIð IIð IIð IIðV9Ð6ð 9¸cð 9ÐFWð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9r!   r   c                   óV   ‡ — e Zd Zdˆ fd„Zed„ ¦   «         Zd„ Zdefd„Zd„ Z	dd
„Z
ˆ xZS )ÚEnumVariabler   Nc                 óH   •—  t          ¦   «         j        di |¤Ž || _        d S )Nr   )r7   r8   r1   r<   s      €r   r8   zEnumVariable.__init__Ç   s+   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØˆŒ
ˆ
ˆ
r!   c                 óÌ   — t          |t          j        ¦  «        r:t          |¦  «        D ]*}|j        |                     ¦   «         k    r | |fi |¤Žc S Œ+t          d¦  «         d S )Nz5Enum variable is constructed with non constant values)r%   r	   r   r*   r1   rK   r
   )ÚclsÚcls_typeÚvalue_vtÚoptionsrg   s        r   r   zEnumVariable.createË   s~   € å�h¥	Ô :Ñ;Ô;ð 	2Ý˜x™.œ.ð 2ð 2�Ø”< 8×#>Ò#>Ñ#@Ô#@Ò@Ð@Ø˜3˜vÐ1Ð1¨Ð1Ð1Ð1Ð1Ð1ð AåÐMÑNÔNÐNÐNÐNr!   c                 ól   — t          | j        t          ¦  «        rt          | j        ¦  «        S | j        S r@   )r%   r1   r‰   rB   s    r   rC   zEnumVariable.as_proxyÓ   s,   € Ý�d”j¥#Ñ&Ô&ð 	#Ý�t”z‘?”?Ð"ØŒzÐr!   c                 ó2   — dt          | j        ¦  «        › d�S )NzEnumVariable(rF   )r0   r1   rB   s    r   rI   zEnumVariable.__repr__Ø   s   € Ø2�t D¤JÑ/Ô/Ð2Ð2Ð2Ð2r!   c                 ó   — | j         S r@   rA   rB   s    r   rK   zEnumVariable.as_python_constantÛ   rD   r!   rO   r   c                 ó’   — t          | j        |¦  «        }| j        ot          | j        |¦  «        }t	          j        |||¬¦  «        S )Nr#   )rd   r1   r   r   r   Úbuild)r=   rO   rf   rg   r   s        r   Úvar_getattrzEnumVariable.var_getattrÞ   sC   € Ý˜œ TÑ*Ô*ˆØ”Ð>¥¨D¬K¸Ñ!>Ô!>ˆÝÔ$ R¨¸Ð?Ñ?Ô?Ð?r!   rŸ   r    )rG   r¡   r¢   r8   Úclassmethodr   rC   r€   rI   rK   r´   r¥   r¦   s   @r   r¨   r¨   Æ   s°   ø€ € € € € ðð ð ð ð ð ð ðOð Oñ „[ðOðð ð ð
3˜#ð 3ð 3ð 3ð 3ðð ð ð@ð @ð @ð @ð @ð @ð @ð @r!   r¨   )r‹   Útypingr   r   r   r[   Útorch._dynamo.sourcer   r   Ú r	   Úexcr
   Úutilsr   r   r   Úbaser   r   Útorch._dynamo.symbolic_convertr   r   r¨   r   r!   r   ú<module>r½      s7  ðð €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à €€€Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *ð ð EØDÐDÐDÐDÐDÐDðp9ð p9ð p9ð p9ð p9�ñ p9ô p9ð p9ðf@ð @ð @ð @ð @�?ñ @ô @ð @ð @ð @r!   