§
    C�’já_  ã                   ó  — d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	m
Z
mZ ddlmZ ddlZddlmc mZ ddlmZ ddlmZ ddl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# d
dl$m%Z%m&Z&m'Z'm(Z( d
dl)m*Z* d
dlm+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 e
rddl9m:Z:  ed¦  «        Z; ed¦  «        Z<de=deee;e<f         gee;e<f         f         fd„Z> G d„ de8¦  «        Z? G d„ d e7¦  «        Z@dS )!aÁ  
This module implements variable tracking for TorchScript objects during Dynamo tracing.

The TorchScriptObjectVariable class provides specialized handling for TorchScript
objects with strong safety guarantees by:
- Enforcing method-call-only access to prevent unsafe attribute manipulation
- Converting graph breaks into hard errors via _raise_hard_error_if_graph_break
- Proper proxy and source tracking for TorchScript method calls
- Integration with higher-order operators for method call handling

Key safety features:
- Strict validation that only method calls are allowed (no direct attribute access)
- Immediate error reporting for potentially unsafe operations
- Proper source tracking for debugging and guard installation
- Safe handling of TorchScript object method calls through torchbind

The module ensures that TorchScript objects are handled safely during tracing
by limiting operations to known-safe patterns and failing fast for unsafe usage.
é    N)ÚCallableÚIterable)ÚAnyÚTYPE_CHECKINGÚTypeVar)Ú	ParamSpec)ÚSource)ÚFakeScriptObject)Úget_member_typeÚis_opaque_reference_typeÚis_opaque_typeÚis_opaque_value_typeÚ
MemberTypeÚshould_hoist)ÚProxyé   )Úgraph_break_hints)Ú	skip_code)Úraise_observed_exceptionÚunimplementedÚUnsafeScriptObjectErrorÚUnsupported)Ú
AttrSource)Úproxy_args_kwargsé   )ÚVariableTracker©ÚConstantVariable)ÚConstDictVariable)ÚTupleVariable)ÚLambdaVariable)ÚUserDefinedObjectVariableÚUserDefinedVariable)ÚInstructionTranslatorBaseÚ_PÚ_TÚreasonÚreturnc                 ór   — dt           t          t          f         dt           t          t          f         fd„}|S )NÚfnr(   c                 ó†   ‡ — t          j        ‰ ¦  «        dt          j        dt          j        dt
          fˆ fd„¦   «         }|S )NÚargsÚkwargsr(   c                  ód   •— 	  ‰| i |¤ŽS # t           $ r}t          |j        ¦  «        |‚d }~ww xY w©N)r   r   Úmsg)r,   r-   Úer*   s      €úSC:\Projects\DSCons\.venv\Lib\site-packages\torch\_dynamo\variables\script_object.pyÚgraph_break_as_hard_errorzQ_raise_hard_error_if_graph_break.<locals>.deco.<locals>.graph_break_as_hard_errorH   sN   ø€ ð<Ø�r˜4Ð* 6Ð*Ð*Ð*øÝð <ð <ð <Ý-¨a¬eÑ4Ô4¸!Ð;øøøøð<øøøs   ƒ ‹
/•*ª/)Ú	functoolsÚwrapsr%   r,   r-   r&   )r*   r3   s   ` r2   Údecoz._raise_hard_error_if_graph_break.<locals>.decoG   sW   ø€ Ý	Œ˜Ñ	Ô	ð	<­R¬Wð 	<ÅÄ	ð 	<Íbð 	<ð 	<ð 	<ð 	<ð 	<ñ 
Ô	ð	<ð )Ð(ó    )r   r%   r&   )r'   r6   s     r2   Ú _raise_hard_error_if_graph_breakr8   D   s=   € ð)•�"�b˜&Ô!ð )¥h­rµ2¨vÔ&6ð )ð )ð )ð )ð €Kr7   c            	       óä   ‡ — e Zd ZdZdededdfˆ fd„Zdefd„Zdefd„Zd	ede	e
ef         fd
„Z	 dd	ddddeddfd„Zdefd„Zdefd„Zd	ddedefd„Zd	ddee         deeef         defd„Zˆ xZS )ÚOpaqueObjectClassVariablezÿ
    A variable that represents an opaque object class (not instance).
    Since UserDefinedClassVariable has some special handling for side effects,
    we have a separate class here which will directly return the object when
    __init__ is called.
    Úvaluer-   r(   Nc                 óÌ   •— t          |t          ¦  «        r-t          |t          j        ¦  «        rt          d|› d�¦  «        ‚ t          ¦   «         j        di |¤Ž || _        d S )NzEnum class zC should use UserDefinedClassVariable, not OpaqueObjectClassVariable© )	Ú
isinstanceÚtypeÚ
issubclassÚenumÚEnumÚAssertionErrorÚsuperÚ__init__r;   )Úselfr;   r-   Ú	__class__s      €r2   rE   z"OpaqueObjectClassVariable.__init__\   sz   ø€ Ý�e�TÑ"Ô"ð 	¥z°%½¼Ñ'CÔ'Cð 	Ý ð0˜eð 0ð 0ð 0ñô ð ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØˆŒ
ˆ
ˆ
r7   c                 ó   — | j         S r/   ©r;   ©rF   s    r2   Úas_python_constantz,OpaqueObjectClassVariable.as_python_constante   ó
   € ØŒzÐr7   c                 ó   — dS ©NFr=   rJ   s    r2   Úis_python_constantz,OpaqueObjectClassVariable.is_python_constanth   s	   € ð ˆur7   Útxc                 ó.   — t          | j        ¦  «        dfS rN   )Úhashr;   )rF   rP   s     r2   Ú	hash_implz#OpaqueObjectClassVariable.hash_impln   s   € õ �D”JÑÔ Ð&Ð&r7   Fr$   Úotherr   Úreversec                 óL  — 	 |                      ¦   «         }n*# t          $ r t          j        |t          ¦  «        cY S w xY wt          | j        ¦  «                             | j        |¦  «        }|t          u rt          j        |t          ¦  «        S t          j        ||¦  «        S r/   )rK   ÚNotImplementedErrorr   ÚbuildÚNotImplementedr?   r;   Ú__or__)rF   rP   rT   rU   Ú	other_valÚresults         r2   Ú
nb_or_implz$OpaqueObjectClassVariable.nb_or_impls   s¢   € ð	=Ø×0Ò0Ñ2Ô2ˆIˆIøÝ"ð 	=ð 	=ð 	=Ý"Ô(¨­^Ñ<Ô<Ð<Ð<Ð<ð	=øøøõ �d”jÑ!Ô!×(Ò(¨¬°YÑ?Ô?ˆØ•^Ð#Ð#Ý"Ô(¨­^Ñ<Ô<Ð<ÝÔ$ R¨Ñ0Ô0Ð0s   ‚ —$>½>c                 ó   — | j         S r/   rI   rJ   s    r2   Úas_proxyz"OpaqueObjectClassVariable.as_proxyƒ   rL   r7   c                 ó0   — | j         j        › d| j        › d�S ©Nú(ú))rG   Ú__name__r;   rJ   s    r2   Ú__repr__z"OpaqueObjectClassVariable.__repr__†   s    € Ø”.Ô)Ð9Ð9¨D¬JÐ9Ð9Ð9Ð9r7   Únamec                 ó¨  — d }	 t          j        | j        |¦  «        }nT# t          $ rG t	          dd| j        › d|› �d|› d| j        › d�d|› dt          | j        ¦  «        › d�g¬	¦  «         Y nw xY wt          |t          ¦  «        r|                     | j        ¦  «        }nÔt          |t          ¦  «        r|                     d | j        ¦  «        }n£t          |d
¦  «        r“t          t          |¦  «        j                             d
¦  «        t          j        ¦  «        st          | j        |¦  «        }n>t          |¦  «        j        }t	          dd| j        › d|› d|› �d|› d|› d�ddg¬	¦  «         t#          j        |¦  «        rt'          j        ||¦  «        S | j        rt-          | j        |¦  «        nd }t'          j        |||¦  «        S )Nz#Attribute not found on opaque classzclass=ú, attr=zThe attribute 'z!' does not exist on opaque class ú.zEnsure 'z' is a valid attribute of ©Úgb_typeÚcontextÚexplanationÚhintsÚ__get__z&Unsupported descriptor on opaque classz, descriptor=z' is a descriptor of type 'z' which is not supported.zHOnly staticmethod, property, and pybind11_static_property are supported.zAConsider accessing this attribute outside of the compiled region.)ÚinspectÚgetattr_staticr;   ÚAttributeErrorr   r?   r>   Ústaticmethodro   ÚpropertyÚhasattrÚ__dict__ÚgetÚtypesÚFunctionTypeÚgetattrrd   r   Ú
is_literalr   rX   Úsourcer   )rF   rP   rf   ÚobjÚ	type_namer|   s         r2   Úvar_getattrz%OpaqueObjectClassVariable.var_getattr‰   s  € ð ˆð
	ÝÔ(¨¬°TÑ:Ô:ˆCˆCøÝð 	ð 	ð 	ÝØ=Ø: ¤Ð:Ð:°DÐ:Ð:Øb¨dÐbÐbÐUYÔU_ÐbÐbÐbàR˜tÐRÐR½tÀDÄJÑ?OÔ?OÐRÐRÐRðð	ñ ô ð ð ð ð	øøøõ �c�<Ñ(Ô(ð 	Ø—+’+˜dœjÑ)Ô)ˆCˆCÝ˜�XÑ&Ô&ð 	Ø—+’+˜d D¤JÑ/Ô/ˆCˆCÝ�S˜)Ñ$Ô$ð 	Ý�d 3™iœiÔ0×4Ò4°YÑ?Ô?ÅÔASÑTÔTð å˜dœj¨$Ñ/Ô/��å  ™IœIÔ.�	ÝØDØV T¤ZÐVÐV¸ÐVÐVÈ9ÐVÐVØ w°$Ð wÐ wÐS\Ð wÐ wÐ wàbØ[ðð	ñ ô ð õ Ô& sÑ+Ô+ð 	2Ý"Ô(¨¨SÑ1Ô1Ð1à26´+ÐG•˜DœK¨Ñ.Ô.Ð.À4ˆÝÔ$ R¨¨fÑ5Ô5Ð5s   „ ŸAA0Á/A0r,   c                 óÒ  ‡— t          | j        ¦  «        rUt          | j        j        d¦  «        rt	          | j        j        j        ¦  «         t          dd| j        › d�ddg¬¦  «         t          t          |¦  «        ¦  «        }t          ˆfd„| 
                    ¦   «         D ¦   «         ¦  «        }t          | j        ¦  «        rd‰j        j        j                             ¦   «         5  |                     ¦   «         }|                     ¦   «         }d d d ¦  «         n# 1 swxY w Y   n(|                     ¦   «         }|                     ¦   «         } | j        |i |¤Ž}t#          d	„ |D ¦   «         ¦  «        }	t%          t'          |¦  «        ¦  «        r|}
n/t(          j        j                             ‰j        j        |¦  «        }
t2                               ||
||f|	‰¬
¦  «        S )NÚ__code__z:An opaque object was created in the middle of the program.úOpaque object type: ri   z}Opaque objects cannot be created inside the torch.compile region. They must be created before entering the compiled function.zsPlease create the opaque object before calling torch.compile and pass it in as an argument or as a global variable.rj   c                 óB   •— i | ]\  }}t          j        ‰|¦  «        |“ŒS r=   )r   rX   )Ú.0ÚkÚvrP   s      €r2   ú
<dictcomp>z;OpaqueObjectClassVariable.call_function.<locals>.<dictcomp>Ñ   s,   ø€ ÐHÐHÐH±°°A�_Ô" 2 qÑ)Ô)¨1ÐHÐHÐHr7   c              3   ó8   K  — | ]}t          |d d¦  «        V — ŒdS )r|   N)rz   )r„   Úas     r2   ú	<genexpr>z:OpaqueObjectClassVariable.call_function.<locals>.<genexpr>à   s.   è è € Ð JÐ JÀ¥¨¨H°dÑ!;Ô!;Ð JÐ JÐ JÐ JÐ JÐ Jr7   )Úctor_arg_sourcesrP   )r   r;   ru   rE   r   r�   r   r    Úlistr   Úitemsr   ÚoutputÚtracing_contextÚguards_contextÚskip_guard_installrK   Útupler   r?   ÚtorchÚ_libraryÚfake_class_registryÚmaybe_to_fake_objÚ	fake_modeÚTorchScriptObjectVariableÚcreate)rF   rP   r,   r-   Úvar_argsÚ
var_kwargsÚconstant_argsÚconstant_kwargsÚ
opaque_objr‹   Úfake_script_objs    `         r2   Úcall_functionz'OpaqueObjectClassVariable.call_function³   sR  ø€ õ $ D¤JÑ/Ô/ð 	õ �t”zÔ*¨JÑ7Ô7ð 8Ý˜$œ*Ô-Ô6Ñ7Ô7Ð7åØTØ<¨t¬zÐ<Ð<Ð<ðRðMððñ ô ð õ !¥ d¡¤Ñ,Ô,ˆÝ&ØHÐHÐHÐH¸¿º¹¼ÐHÑHÔHñ
ô 
ˆ
õ ˜œ
Ñ#Ô#ð 	>Ø”Ô*Ô9×LÒLÑNÔNð Bð BØ (× ;Ò ;Ñ =Ô =�Ø",×"?Ò"?Ñ"AÔ"A�ðBð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bøð %×7Ò7Ñ9Ô9ˆMØ(×;Ò;Ñ=Ô=ˆOØ�T”ZØð
Ø-ð
ð 
ˆ
õ !Ð JÐ JÀTÐ JÑ JÔ JÑJÔJÐå¥ ZÑ 0Ô 0Ñ1Ô1ð 	Ø(ˆOˆOå#œnÔ@×RÒRØ”	Ô# Zñô ˆOõ )×/Ò/ØØØ˜OÐ,Ø-Øð 0ñ 
ô 
ð 	
s   Ã+)D Ä D$Ä'D$)F)rd   Ú
__module__Ú__qualname__Ú__doc__r   rE   rK   ÚboolrO   r’   ÚintrS   r]   r_   Ústrre   r   r   rŒ   Údictr    Ú__classcell__©rG   s   @r2   r:   r:   T   s­  ø€ € € € € ðð ð˜cð ¨Sð °Tð ð ð ð ð ð ð Cð ð ð ð ð Dð ð ð ð ð'˜Cð ' E¨#¨t¨)Ô$4ð 'ð 'ð 'ð 'ð ð	1ð 1à'ð1ð !ð1ð ð	1ð
 
ð1ð 1ð 1ð 1ð ˜#ð ð ð ð ð:˜#ð :ð :ð :ð :ð(6Ø-ð(6Ø58ð(6à	ð(6ð (6ð (6ð (6ðT<
à'ð<
ð �?Ô#ð<
ð �S˜/Ð)Ô*ð	<
ð
 
ð<
ð <
ð <
ð <
ð <
ð <
ð <
ð <
r7   r:   c                   ó*  ‡ — e Zd ZU i Zeed f         ed<   edede	fd„¦   «         Z
e	 	 d%ddœdeded	ed
eedz  df         dz  dddedd fd„¦   «         Z	 	 	 d&deded	ededz  d
eedz  df         dz  deddfˆ fd„Zdefd„Zdefd„ZeZdddddeddfd„Z ed¦  «        dddedefˆ fd„¦   «         Z	 	 	 	 	 	 d'd„Z ed¦  «        dddedee         deeef         def
d „¦   «         Zdefˆ fd!„Zdedeee	f         fd"„Zdede	fd#„Z defd$„Z!ˆ xZ"S )(r˜   Ú_fake_script_object_cacheÚuser_clsr(   c                 ó~   — t          |t          j        ¦  «        p#t          |¦  «        pt          |t          ¦  «        S r/   )r@   r“   ÚScriptObjectr   r
   )Úclsr¬   s     r2   Úis_matching_clsz)TorchScriptObjectVariable.is_matching_clsõ   s<   € õ �x¥Ô!3Ñ4Ô4ð 6Ý˜hÑ'Ô'ð6å˜(Õ$4Ñ5Ô5ð	
r7   N)rP   Úproxyr;   Úctor_args_kwargsr‹   .rP   z InstructionTranslatorBase | NoneÚoptionsc                óZ  — t          |t          j        ¦  «        r t          dt	          |¦  «        › d�¦  «        ‚t          | ||fd|i|¤Ž}t          | t          j        j        ¦  «        r@| j	        j
        dk    r0|€t          d¦  «        ‚|j        j                             |¦  «         |S )NzEnum zD should use UserDefinedObjectVariable, not TorchScriptObjectVariabler‹   ÚplaceholderzRtx must be provided to TorchScriptObjectVariable.create when proxy is a real Proxy)r>   rA   rB   rC   r?   r˜   r“   Úfxr   ÚnodeÚoprŽ   Úcurrent_tracerÚrecord_proxyable_vt)r±   r;   r²   r‹   rP   r³   Úouts          r2   r™   z TorchScriptObjectVariable.createý   sÎ   € õ �e�TœYÑ'Ô'ð 	Ý Øi�˜U™œÐiÐiÐiñô ð õ (Ø�5Ð*ð
ð 
Ø=Mð
ØQXð
ð 
ˆõ �e�UœXœ^Ñ,Ô,ð 	>°´´À-Ò1OÐ1OØˆzÝ$ð1ñô ð ð ŒIÔ$×8Ò8¸Ñ=Ô=Ð=Øˆ
r7   r|   r-   c                 óä   •—  t          ¦   «         j        |fi |¤Ž || _        t          | j        t          j        j        ¦  «        r|| j        j        j        d<   || _	        || _
        || _        d S )NÚexample_value)rD   rE   r±   r>   r“   r¶   r   r·   Úmetar|   r²   r‹   )rF   r±   r;   r²   r|   r‹   r-   rG   s          €r2   rE   z"TorchScriptObjectVariable.__init__  su   ø€ ð 	�‰ŒÔ˜Ð)Ð) &Ð)Ð)Ð)ØˆŒ
Ý�d”j¥%¤(¤.Ñ1Ô1ð 	:Ø49ˆDŒJŒOÔ  Ñ1ØˆŒð !1ˆÔð !1ˆÔÐÐr7   c                 ó@  — t          | j        t          j        j        ¦  «        sôt          t          | j        ¦  «        ¦  «        s$t          dt          | j        ¦  «        › �¦  «        ‚t          t          | j        ¦  «        ¦  «        rŽddl	m
} |                     ¦   «         }| j        d         rt          d¦  «        ‚|j                             t          | j        ¦  «        | j        d         | j        ¬¦  «        }|                     ¦   «         | _        | j        S )Nz Expected opaque value type, got r   )ÚInstructionTranslatorr   zCNYI: hoisted opaque objects that accept kwargs, please pass as args)r‹   )r>   r±   r“   r¶   r   r   r?   rC   r   Útorch._dynamo.symbolic_convertrÀ   Ú
current_txr²   ÚRuntimeErrorrŽ   Úsynthetic_graph_inputr‹   r_   )rF   rÀ   rP   Ú
hoisted_vts       r2   r_   z"TorchScriptObjectVariable.as_proxy,  s  € Ý˜$œ*¥e¤h¤nÑ5Ô5ð 	3õ (­¨T¬ZÑ(8Ô(8Ñ9Ô9ð Ý$ØIµt¸D¼JÑ7GÔ7GÐIÐIñô ð õ �D ¤Ñ,Ô,Ñ-Ô-ð 3ØPÐPÐPÐPÐPÐPà*×5Ò5Ñ7Ô7�ð Ô(¨Ô+ð Ý&Ø]ñô ð ð  œY×<Ò<Ý˜œÑ$Ô$ØÔ)¨!Ô,Ø%)Ô%:ð =ñ ô �
ð
 (×0Ò0Ñ2Ô2�”
àŒzÐr7   c                 ó€   — t          | j        t          ¦  «        r| j        j        n| j        }| j        j        › d|› d�S ra   )r>   r;   r
   Úreal_objrG   rd   )rF   r;   s     r2   Ú__str__z!TorchScriptObjectVariable.__str__H  sK   € õ ˜$œ*Õ&6Ñ7Ô7ðˆDŒJÔÐà”ð 	ð
 ”.Ô)Ð4Ð4¨EÐ4Ð4Ð4Ð4r7   r$   rT   r   r¸   c                 ó²  — ddl m} ddlm} 	 |                      ¦   «         }n# t
          $ r  || |||¦  «        cY S w xY w	 |                     ¦   «         }n%# t
          $ r  |j        t          ¦  «        cY S w xY w	  t          t          |¦  «        |¦  «        ||¦  «        } |j        |¦  «        S # t          $ r  |j        t          ¦  «        cY S w xY w)Nr   r   )Úobject_richcompare)Úconstantr   Úobject_protocolrÊ   rK   rW   r™   rY   rz   r?   Ú	Exception)	rF   rP   rT   r¸   r   rÊ   Úself_valr[   r\   s	            r2   Úrichcompare_implz*TorchScriptObjectVariable.richcompare_implR  s4  € ð 	/Ð.Ð.Ð.Ð.Ð.Ø7Ð7Ð7Ð7Ð7Ð7ð	;Ø×.Ò.Ñ0Ô0ˆHˆHøÝ"ð 	;ð 	;ð 	;Ø%Ð% d¨B°°rÑ:Ô:Ð:Ð:Ð:ð	;øøøð	;Ø×0Ò0Ñ2Ô2ˆIˆIøÝ"ð 	;ð 	;ð 	;Ø*Ð#Ô*­>Ñ:Ô:Ð:Ð:Ð:ð	;øøøð	;Ø0•W�T (™^œ^¨RÑ0Ô0°¸9ÑEÔEˆFØ*Ð#Ô*¨6Ñ2Ô2Ð2øÝð 	;ð 	;ð 	;Ø*Ð#Ô*­>Ñ:Ô:Ð:Ð:Ð:ð	;øøøs0   Ž# £>½>ÁA ÁA9Á8A9Á=6B4 Â4CÃCz<Dynamo cannot safely trace script object due to graph break.rf   c           
      óV  •‡ ‡‡— ddl m} ddlm} ‰                      ¦   «         }t          |¦  «        }t          |¦  «        �rœt          |‰¦  «        }|t          j	        k    rtt          |‰¦  «        }t          j        |¦  «        st          |t          j        ¦  «        rt!          ˆˆ ˆfd„¦  «        S t#          ¦   «                              ‰‰¦  «        S |t          j        k    r{t          |‰¦  «        }t          j        |¦  «        st          |t          j        ¦  «        r‰ j        €t!          ˆˆ ˆfd„¦  «        S t#          ¦   «                              ‰‰¦  «        S t+          |¦  «        r"t#          ¦   «                              ‰‰¦  «        S ‰dv r&t-          |‰¦  «        st/          t0          ‰¦  «         n"t3          dd	|› d
‰› �d‰› d�d‰› d�g¬¦  «         t          ‰ j        ‰d ¦  «        }	|	€Ct3          dd	‰ j        › d‰› �d‰ j        › d‰› d�d‰› d‰ j        › d�gt6          j        ¢¬¦  «         t;          |	¦  «        st3          dd	‰ j        › d‰› �ddg¬¦  «         ‰ j        €t=          d¦  «        ‚|                     |tA          ‰ j        ‰¦  «        ‰ ‰¬¦  «        S )Nr   )Úcall_torchbindr   )Ú TorchHigherOrderOperatorVariablec                  ó4   •— ‰                      ‰‰| |¦  «        S r/   ©Úcall_method©r,   r-   rf   rF   rP   s     €€€r2   ú<lambda>z7TorchScriptObjectVariable.var_getattr.<locals>.<lambda>ƒ  ó   ø€ °×0@Ò0@ÀÀTÈ4ÐQWÑ0XÔ0X€ r7   c                  ó4   •— ‰                      ‰‰| |¦  «        S r/   rÔ   rÖ   s     €€€r2   r×   z7TorchScriptObjectVariable.var_getattr.<locals>.<lambda>‘  rØ   r7   )Ú__bool__Ú__len__ú:Attempted to access unregistered member on an OpaqueObjectúvalue=rh   úMember 'ú0' is not registered for this opaque object type.ú
Register 'ú9' with a MemberType in register_opaque_type(members=...).rj   z.FakeScriptObject missing method implementationú	, method=zTorchScript object z doesn't define the method ri   zEnsure the method z is implemented in z@Attempted to access non-callable attribute of TorchScript objectzWAttribute accesses of TorchScript objects to non-callable attributes are not supported.z-Use method calls instead of attribute access.z;TorchScriptObjectVariable requires a source for var_getattr)r|   Úscript_obj_varÚmethod_name)!Ú!torch._higher_order_ops.torchbindrÑ   Úhigher_order_opsrÒ   rK   r?   r   r   r   ÚUSE_REALrz   rp   Úismethodr>   rx   ÚMethodWrapperTyper!   rD   r   ÚINLINEDr|   r   ru   r   rr   r   r;   r   Ú
USER_ERRORÚcallablerC   Úmaker   )rF   rP   rf   rÑ   rÒ   rÇ   Úreal_obj_typeÚmember_typer;   ÚmethodrG   s   ```       €r2   r   z%TorchScriptObjectVariable.var_getattrn  sZ  øøøø€ ð 	EÐDÐDÐDÐDÐDàFÐFÐFÐFÐFÐFà×*Ò*Ñ,Ô,ˆÝ˜X™œˆÝ˜-Ñ(Ô(ñ -	Ý)¨-¸Ñ>Ô>ˆKà�jÔ1Ò1Ð1Ý ¨$Ñ/Ô/�ÝÔ# EÑ*Ô*ð 9­jØ�5Ô2ñ/ô /ð 9õ *ØXÐXÐXÐXÐXÐXñô ð õ !™7œ7×.Ò.¨r°4Ñ8Ô8Ð8à¥
Ô 2Ò2Ð2Ý ¨$Ñ/Ô/�åÔ$ UÑ+Ô+ðå! %­Ô)@ÑAÔAðð ”kÐ)õ *ØXÐXÐXÐXÐXÐXñô ð õ ‘w”w×*Ò*¨2¨tÑ4Ô4Ð4å% mÑ4Ô4ð Ý‘w”w×*Ò*¨2¨tÑ4Ô4Ð4àÐ0Ð0Ð0½ÀÈ4Ñ9PÔ9PÐ0õ
 )­¸Ñ<Ô<Ð<Ð<õ ØXØ< XÐ<Ð<°dÐ<Ð<Ø a¨4Ð aÐ aÐ aàd TÐdÐdÐdðð	ñ ô ð õ ˜œ T¨4Ñ0Ô0ˆØˆ>ÝØHØ< ¤Ð<Ð<°dÐ<Ð<Ø`°$´*Ð`Ð`ÐY]Ð`Ð`Ð`àO¨ÐOÐOÀ$Ä*ÐOÐOÐOðå&Ô1ðð	ñ ô ð õ ˜ÑÔð 	ÝØZØ< ¤Ð<Ð<°dÐ<Ð<ØuàCðð	ñ ô ð ð Œ;ÐÝ ØMñô ð ð 0×4Ò4ØÝ˜dœk¨4Ñ0Ô0ØØð	 5ñ 
ô 
ð 	
r7   Úkeyc                 ó@   — t                                | |d|gi ¦  «        S )NÚ__getitem__)r˜   rÕ   )rF   rP   rñ   s      r2   Úmp_subscript_implz+TorchScriptObjectVariable.mp_subscript_implÊ  s#   € õ )×4Ò4°T¸2¸}ÈsÈeÐUWÑXÔXÐXr7   r,   c           
      óÚ  — ddl m} |                      ¦   «         }t          |¦  «        }t	          |¦  «        �rŽt          ||¦  «        }|t          j        k    ræt          j	        |dd ¦  «        	 �t          d|j        › d�dg ¬¦  «         d„ |D ¦   «         }	d	„ |                     ¦   «         D ¦   «         }
t          ||¦  «        }|d
k    r
 ||	i |
¤Ž |S  ||	i |
¤Ž}t          d„ t          j        |¦  «        D ¦   «         ¦  «        r"t          dd|› d|› d�dd|› d|› d�g¬¦  «         t#          j        ||¦  «        S |t          j        k    st)          |¦  «        rGt+          ||¦  «        \  }}|j                             d|| j        g|¢R |¬¦  «        } |||¬¦  «        S t          dd|› d|› �d|› d�d|› d�g¬¦  «         t          dd| j        › d|› �d |› d!�d"g¬¦  «         d S )#Nr   )Úwrap_fx_proxyÚ__getattr__z3Opaque object with custom __getattr__ not supportedz with custom __getattr__zLDynamo does not support opaque objects types with custom __getattr__ methodsrj   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r=   ©rK   )r„   Úxs     r2   ú
<listcomp>z9TorchScriptObjectVariable.call_method.<locals>.<listcomp>ô  s$   € ÐCÐCÐC¸˜a×2Ò2Ñ4Ô4ÐCÐCÐCr7   c                 ó>   — i | ]\  }}||                      ¦   «         “ŒS r=   rù   )r„   r…   r†   s      r2   r‡   z9TorchScriptObjectVariable.call_method.<locals>.<dictcomp>õ  s*   € ÐUÐUÐU¹d¸aÀ  1×#7Ò#7Ñ#9Ô#9ÐUÐUÐUr7   Ú__setattr__c              3   óN   K  — | ] }t          t          |¦  «        ¦  «        V — Œ!d S r/   )r   r?   )r„   Úrs     r2   rŠ   z8TorchScriptObjectVariable.call_method.<locals>.<genexpr>ÿ  sD   è è € ð ð àõ -­T°!©W¬WÑ5Ô5ðð ð ð ð ð r7   zWOpaque object member with method-type USE_REAL returned a reference-type opaque object.r‚   z. Method name: 'ú'zÓTo properly guard reference-type opaque objects, we must lift them as inputs to the graph. In order to do this, they must all have a source, meaning they come from a global value or are an attribute of an input.zRegister member 'z2' with MemberType.INLINED in register_opaque_type(z, members=...).rÕ   )r,   r-   )rP   r±   rÜ   rÝ   rh   rÞ   rß   rà   rá   z'Weird method call on TorchScript objectrâ   zThis particular method call (zn) is not supported (e.g. calling `__setattr__`). Most method calls to TorchScript objects should be supported.zAvoid calling this method.)Úbuilderrö   rK   r?   r   r   r   rç   rp   rq   r   rd   r�   rz   ÚanyÚpytreeÚtree_leavesr   rX   rê   r   r   rŽ   Úcreate_proxyr±   r;   )rF   rP   rf   r,   r-   rö   rÇ   rî   rï   Ú
args_constÚkwargs_constrð   Úconstant_valÚ
proxy_argsÚproxy_kwargsr±   s                   r2   rÕ   z%TorchScriptObjectVariable.call_method×  s  € ð 	+Ð*Ð*Ð*Ð*Ð*à×*Ò*Ñ,Ô,ˆÝ˜X™œˆÝ˜-Ñ(Ô(ñ E	Ý)¨-¸Ñ>Ô>ˆKà�jÔ1Ò1Ð1åÔ*¨=¸-ÈÑNÔNØð õ "Ø UØ#0Ô#9Ð SÐ SÐ SØ$rØ ð	ñ ô ð ð DÐC¸dÐCÑCÔC�
ØUÐUÀfÇlÂlÁnÄnÐUÑUÔU�å  ¨4Ñ0Ô0�à˜=Ò(Ð(Ø�F˜JÐ7¨,Ð7Ð7Ð7Ø#�Oà%˜v zÐB°\ÐBÐB�åð ð å#Ô/°Ñ=Ô=ðñ ô ñ ô ð õ "Ø yØ ]°}Ð ]Ð ]ÐVZÐ ]Ð ]Ð ]ðXðS°ð Sð SØ4AðSð Sð Sððñ ô ð õ 'Ô,¨R°Ñ>Ô>Ð>à¥
Ô 2Ò2Ð2Õ6JØñ7ô 7Ð2õ ,=¸TÀ6Ñ+JÔ+JÑ(�
˜Làœ	×.Ò.Ø!ØØœ*Ð2 zÐ2Ð2Ø'ð	 /ñ ô �ð %�}¨°%Ð8Ñ8Ô8Ð8õ ØXØ< XÐ<Ð<°dÐ<Ð<Ø a¨4Ð aÐ aÐ aàd TÐdÐdÐdðð	ñ ô ð õ 	Ø=Ø8˜TœZÐ8Ð8°$Ð8Ð8ðP°ð Pð Pð Pð -ðð
	
ñ 
	
ô 
	
ð 
	
ð 
	
ð 
	
r7   c                 ó,  •— t          | j        t          ¦  «        r| j        j        S t	          t          | j        ¦  «        ¦  «        r| j        S t          | j        t          j        ¦  «        r| j        S t          ¦   «          	                    ¦   «         S r/   )
r>   r;   r
   rÇ   r   r?   r“   r®   rD   rK   )rF   rG   s    €r2   rK   z,TorchScriptObjectVariable.as_python_constant8  sz   ø€ Ý�d”jÕ"2Ñ3Ô3ð 	Ø”:Ô&Ð&Ý!¥$ t¤zÑ"2Ô"2Ñ3Ô3ð 	Ø”:ÐÝ˜œ
¥EÔ$6Ñ7Ô7ð 	Ø”:ÐÝ‰wŒw×)Ò)Ñ+Ô+Ð+r7   c                 óÀ   — ddl m} |                      ¦   «         }	 t          |¦  «        dfS # t          $ r&  ||dt          |¦  «        j        › d�¦  «         Y d S w xY w)Nr   )Úraise_type_errorFzunhashable type: 'r   )Úexcr  rK   rR   Ú	TypeErrorr?   rd   )rF   rP   r  rÇ   s       r2   rS   z#TorchScriptObjectVariable.hash_implA  sŒ   € Ø*Ð*Ð*Ð*Ð*Ð*à×*Ò*Ñ,Ô,ˆð	RÝ˜‘>”> 5Ð(Ð(øÝð 	Rð 	Rð 	RØÐ˜RÐ!Pµd¸8±n´nÔ6MÐ!PÐ!PÐ!PÑQÔQÐQÐQÐQÐQð	Røøøs   œ- ­,AÁAc                 óÆ   — t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚|                      ¦   «         }|                     ¦   «         }||k    S )NzExpected VariableTracker, got )r>   r   rC   r?   rK   )rF   rT   Ú	real_selfÚ
real_others       r2   Úis_python_equalz)TorchScriptObjectVariable.is_python_equalJ  s_   € Ý˜%¥Ñ1Ô1ð 	QÝ Ð!OÅ$ÀuÁ+Ä+Ð!OÐ!OÑPÔPÐPØ×+Ò+Ñ-Ô-ˆ	Ø×-Ò-Ñ/Ô/ˆ
Ø˜JÒ&Ð&r7   c                 ó*   — |                       ¦   «         S r/   rù   rJ   s    r2   Úget_real_valuez(TorchScriptObjectVariable.get_real_valueQ  s   € Ø×&Ò&Ñ(Ô(Ð(r7   )NN)NNN)rP   r$   rñ   r   r(   r   )#rd   r¡   r¢   r«   r§   r¥   Ú__annotations__Úclassmethodr?   r¤   r°   rs   r   r   r’   r	   r™   rE   r_   r¦   rÈ   re   rÏ   r8   r   r   rô   r   rÕ   rK   rS   Úobjectr  r  r¨   r©   s   @r2   r˜   r˜   ò   sœ  ø€ € € € € € ØHJÐ˜t CÐ)DÐ$DÔEÐJÐJÑJàð
 tð 
°ð 
ð 
ð 
ñ „[ð
ð ð !%Ø=Að	ð 26ðð ð Øðàðð ðð   ¨¡¨sÐ 2Ô3°dÑ:ð	ð /ðð ðð 
%ðð ð ñ „\ðð: !%Ø $Ø=Að1ð 1àð1ð ð1ð ð	1ð
 ˜‘ð1ð   ¨¡¨sÐ 2Ô3°dÑ:ð1ð ð1ð 
ð1ð 1ð 1ð 1ð 1ð 1ð*˜%ð ð ð ð ð85˜ð 5ð 5ð 5ð 5ð €Hð;à'ð;ð !ð;ð ð	;ð
 
ð;ð ;ð ;ð ;ð8 &Ð%ØFñô ðW
Ø-ðW
Ø58ðW
à	ðW
ð W
ð W
ð W
ð W
ñô ðW
ðrYà'ðYð ðYð 
ð	Yð Yð Yð Yð &Ð%ØFñô ð\
à'ð\
ð ð\
ð �sŒmð	\
ð
 �S˜#�X”ð\
ð 
ð\
ð \
ð \
ñô ð\
ð|, Cð ,ð ,ð ,ð ,ð ,ð ,ðR˜Cð R E¨#¨t¨)Ô$4ð Rð Rð Rð Rð' Vð '°ð 'ð 'ð 'ð 'ð) ð )ð )ð )ð )ð )ð )ð )ð )r7   r˜   )Ar£   rA   r4   rp   rx   Úcollections.abcr   r   Útypingr   r   r   Útyping_extensionsr   r“   Útorch.utils._pytreeÚutilsÚ_pytreer  Útorch._guardsr	   Ú"torch._library.fake_class_registryr
   Útorch._library.opaque_objectr   r   r   r   r   r   Útorch.fx.proxyr   Ú r   Ú
eval_framer   r  r   r   r   r   r|   r   r   Úbaser   rË   r   Údictsr   Úlistsr    Úmiscr!   Úuser_definedr"   r#   rÁ   r$   r%   r&   r¦   r8   r:   r˜   r=   r7   r2   ú<module>r*     s  ððð ð( €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð !Ð  Ð  Ð  Ð  Ð  à  Ð  Ð  Ð  Ð  Ð  Ø "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð ð ð ð ð  Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !Ø &Ð &Ð &Ð &Ð &Ð &Ø $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  Ø  Ð  Ð  Ð  Ð  Ð  Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hð ð IØHÐHÐHÐHÐHÐHà€Yˆt�_„_€Ø€WˆT�]„]€ðØðàˆx˜˜B˜ÔÐ  (¨2¨r¨6Ô"2Ð2Ô3ðð ð ð ð [
ð [
ð [
ð [
ð [
Ð 3ñ [
ô [
ð [
ð|`)ð `)ð `)ð `)ð `)Ð 9ñ `)ô `)ð `)ð `)ð `)r7   