Ë
    ÄÓ^jÊ^  ã                  óè  — U d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 ddl
Z
ddlmZmZ erddlmZmZ ddlmZ g d¢Zd	ZdZdad
ed<    ej0                  «       Zd#d„Z G d„ de«      Zd$d„Z G d„ de«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Z  G d„ d«      Z!eez  e"z  dz  Z#ded<   e#ez  Z$ded<   e$ez  e z  e!z  Z%ded<   e%e&e%   z  e'e(e%f   z  Z)ded<    G d„ d «      Z* G d!„ d"«      Z+y)%zxSpec types for controlling what is dynamic in compiled/exported code.
Currently only supports unbacked dynamic shapes.

é    )ÚannotationsN)ÚAnyÚcastÚTYPE_CHECKINGÚ	TypeAlias)ÚSymBoolÚSymInt)ÚIteratorÚSequence©ÚShapeEnv)ÚShapeVarÚIntVarÚSTATICÚ
TensorSpecÚ
ObjectSpecÚDictSpecÚSeqSpecÚ
ParamsSpecÚ
ShapesSpecÚLeafSpecÚLeafIntSpecÚIntermediateSpecz  zShapeEnv | NoneÚ_SPEC_SHAPE_ENVc                 ó¸   — t         �t         S t        5  t         �t         cddd«       S ddlm}   G d„ d| «      } |«       a t         cddd«       S # 1 sw Y   yxY w)z7Lazily build the singleton spec ShapeEnv (thread-safe).Nr   r   c                  óP   ‡ — e Zd ZU dZ eh d£«      Zded<   dˆ fd„Zdˆ fd„Zˆ xZ	S )	ú*_get_spec_shape_env.<locals>._SpecShapeEnvuâ  Special ShapeEnv used only at spec-definition time.

            Attribute access is blocked by default via ``__getattribute__``;
            only private (``_``-prefix) names and the explicit allowlist in
            ``_ALLOWED_PUBLIC`` pass through. SymInt arithmetic paths read
            a handful of public fields transparently (via the
            ``@record_shapeenv_event`` decorator and FX-cache machinery),
            so those are allowlisted. Everything else â€” evaluation, guard
            recording, deferred asserts, etc. â€” is blocked.

            During ``ShapeEnv.__init__`` itself, access is unrestricted
            because the base class touches its own public fields while
            bootstrapping.
            >   Úbound_sympyÚis_recordingÚvar_to_rangeÚfx_node_cacheÚshould_record_eventszfrozenset[str]Ú_ALLOWED_PUBLICc                ó~   •— t         j                  | dd«       t        ‰| �  «        t         j                  | dd«       y )NÚ
_init_doneFT)ÚobjectÚ__setattr__ÚsuperÚ__init__)ÚselfÚ	__class__s    €úm/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/fx/experimental/dynamic_spec.pyr)   z3_get_spec_shape_env.<locals>._SpecShapeEnv.__init__m   s2   ø€ ä×"Ñ" 4¨°uÔ=Ü‘Ñ Ô"Ü×"Ñ" 4¨°tÕ<ó    c                óê   •— |j                  d«      rt        ‰| �	  |«      S t        ‰| �	  d«      st        ‰| �	  |«      S |t        | «      j                  v rt        ‰| �	  |«      S t        d|› d�«      ‚)NÚ_r%   z_SpecShapeEnv: 'zd' is not allowed at spec-definition time. Use IntVar / ShapeVar only inside TensorSpec / ShapesSpec.)Ú
startswithr(   Ú__getattribute__Útyper#   Ú	TypeError)r*   Únamer+   s     €r,   r1   z;_get_spec_shape_env.<locals>._SpecShapeEnv.__getattribute__s   s|   ø€ Ø—?‘? 3Ô'Ü ™7Ñ3°DÓ9Ð9Ü‘wÑ/°Ô=Ü ™7Ñ3°DÓ9Ð9Øœ4 ›:×5Ñ5Ñ5Ü ™7Ñ3°DÓ9Ð9ÜØ& t fð -6ð 7óð r-   )ÚreturnÚNone)r4   Ústrr5   r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	frozensetr#   Ú__annotations__r)   r1   Ú__classcell__©r+   s   @r,   Ú_SpecShapeEnvr   M   s/   ø… ññ" /8ò
ó/ˆO˜^ó õ=÷ñ r-   r@   )r   Ú_SPEC_SHAPE_ENV_LOCKÚ%torch.fx.experimental.symbolic_shapesr   )r   r@   s     r,   Ú_get_spec_shape_envrC   C   s[   € ô Ð"ÜÐÜ	ñ 9ÜÐ&Ü"÷9ñ 9õ 	Cô1	˜Hô 1	ñf (›/ˆÜ÷s9÷ 9ò 9ús   “A©AÁAc                  ó~   ‡ — e Zd ZdZ ej
                  «       Z	 dddddœ	 	 	 	 	 	 	 	 	 d	ˆ fd„Zd
d„Zdd„Z	dd„Z
ˆ xZS )r   a¬  Indicates that a scalar integer argument is dynamic (no implicit range).

    Unbacked dynamic shapes will represent the underlying value in the
    compiled graph.

    IntVar is a ``SymInt`` subclass backed by ``_SpecShapeEnv``,
    so arithmetic and comparisons compose naturally::

        A = IntVar("a")
        B = IntVar("b")
        A + 1  # SymInt expr=a#0 + 1
        A * B + 1  # SymInt expr=a#0*b#1 + 1
        A > 0  # SymBool

    Such derived ``SymInt`` values may be used directly as leaf specs in
    ``TensorSpec`` / ``ParamsSpec``

    Repr always includes a per-instance uid so two IntVars with the same name
    (or two anonymous ones) are distinguishable in logs::

        IntVar()           -> "IntVar(anon#0)"
        IntVar("offset")   -> "IntVar(offset#1)"

    Example::

        IntVar("num_heads")
        IntVar("offset", min=-100, max=100)
        IntVar("size", min=1, max=2048, optimization_hint=512)
    N©ÚminÚmaxÚoptimization_hintc               óÈ  •— ddl m}m} ddlm} ddlm} |�|nd| _        t        t        j                  «      | _        || _        || _        || _        t        j                   | j                  › d| j                  › �«      | _        t%        «       }	 || j"                  |	t&        |¬«      }
t(        ‰| �U  |
«        ||�|n| |�|n|«      |	j,                  | j"                  <   y )Nr   )Ú_NO_HINTÚSymNode)Úint_oo)ÚValueRangesÚanonú#)Ú	shape_envÚpytypeÚhint)Útorch.fx.experimental.sym_noderJ   rK   Útorch.utils._sympy.numbersrL   Útorch.utils._sympy.value_rangesrM   r4   Únextr   Ú_uid_counterÚ_uidrF   rG   rH   ÚsympyÚSymbolÚ	sympy_symrC   Úintr(   r)   r    )r*   r4   rF   rG   rH   rJ   rK   rL   rM   ÚenvÚnoder+   s              €r,   r)   zIntVar.__init__¥   sÈ   ø€ ÷ 	EÝ5Ý?à Ð,‘D°&ˆŒ	Üœ×,Ñ,Ó-ˆŒ	ØˆŒØˆŒØ!2ˆÔÜŸ™¨¯©¨°1°T·Y±Y°KÐ&@ÓAˆŒÜ!Ó#ˆÙØ�N‰NØÜØô	
ˆô 	‰Ñ˜Ôñ ,7Ø�?‰C¨¨Ø�?‰C¨ó,
ˆ×Ñ˜Ÿ™Ò(r-   c                óŠ  — | j                   › d| j                  › �g}| j                  �|j                  d| j                  › �«       | j                  �|j                  d| j                  › �«       | j
                  �|j                  d| j
                  › �«       t        | «      j                  › ddj                  |«      › d�S )NrO   zmin=zmax=zoptimization_hint=ú(z, ú))	r4   rX   rF   ÚappendrG   rH   r2   r8   Újoin)r*   Úpartss     r,   Ú__repr__zIntVar.__repr__Æ   s°   € ð —I‘I�;˜a §	¡	˜{Ð+Ð,ˆØ�8‰8ÐØ�L‰L˜4 §¡˜zÐ*Ô+Ø�8‰8ÐØ�L‰L˜4 §¡˜zÐ*Ô+Ø×!Ñ!Ð-Ø�L‰LÐ-¨d×.DÑ.DÐ-EÐFÔGÜ�t“*×%Ñ%Ð& a¨¯	©	°%Ó(8Ð'9¸Ð;Ð;r-   c                ó   — t        | «      S ©N)Úid©r*   s    r,   Ú__hash__zIntVar.__hash__Ô   s   € Ü�$‹xˆr-   c                óˆ   — t        | «      j                  | j                  | j                  | j                  | j
                  dœS )N)r2   r4   rF   rG   rH   )r2   r8   r4   rF   rG   rH   ri   s    r,   Úto_jsonablezIntVar.to_jsonable×   s7   € ä˜“J×'Ñ'Ø—I‘IØ—8‘8Ø—8‘8Ø!%×!7Ñ!7ñ
ð 	
r-   rg   )
r4   ú
str | NonerF   ú
int | NonerG   rn   rH   rn   r5   r6   ©r5   r7   ©r5   r\   ©r5   zdict[str, Any])r8   r9   r:   r;   Ú	itertoolsÚcountrW   r)   re   rj   rl   r>   r?   s   @r,   r   r   „   sr   ø„ ñð< #�9—?‘?Ó$€Lð  ð
ð ØØ(,ñ
àð
ð ð	
ð
 ð
ð &ð
ð 
õ
óB
<ó÷
r-   r   c               óº   — t        | t        «      rd}nt        | t        «      rd}ny| j                  j                  t        «       urt        |› d|› d| ›d�«      ‚y)zXIf ``v`` is a SymInt or SymBool, validate it originates from the
    spec ShapeEnv.
    r	   r   Nú: z= spec values must originate from spec IntVar / ShapeVar; got z  backed by a different ShapeEnv.)Ú
isinstancer	   r   r^   rP   rC   r3   )ÚvÚwhereÚkinds      r,   Ú_validate_spec_symrz   á   sk   € ô �!”VÔØ‰Ü	�A”wÔ	Ø‰àØ‡v�v×ÑÔ2Ó4Ñ4ÜØˆg�R˜�vð Ø˜EÐ!AðCó
ð 	
ð 5r-   c                  óD   ‡ — e Zd ZdZ	 dddddœ	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )r   zõIndicates that a dimension size is dynamic and is >= 0.

    Subclass of `IntVar` with ``min=0`` by default.

    Example::

        ShapeVar("batch")
        ShapeVar("batch", max=64)
        ShapeVar("batch", max=64, optimization_hint=32)
    Nr   rE   c               óT   •— |dk  rt        d|› d�«      ‚t        ‰| �	  ||||¬«       y )Nr   zBShapeVar requires min >= 0 (a shape dim is non-negative); got min=z+. Use IntVar(...) for unrestricted scalars.rE   )Ú
ValueErrorr(   r)   )r*   r4   rF   rG   rH   r+   s        €r,   r)   zShapeVar.__init__þ   sE   ø€ ð �Š7ÜðØ˜%ÐJðLóð ô 	‰Ñ˜ 3¨CÐCTÐÕUr-   rg   )
r4   rm   rF   r\   rG   rn   rH   rn   r5   r6   )r8   r9   r:   r;   r)   r>   r?   s   @r,   r   r   ò   s_   ø„ ñ	ð  ðVð ØØ(,ñVàðVð ð	Vð
 ðVð &ðVð 
÷Vñ Vr-   r   c                  ó@   — e Zd ZdZd	d„Zd
d„Zdd„Zdd„Zdd„Zdd„Z	y)r   a~  Per-dimension shape specification for a tensor.

    A list-like container of ``LeafIntSpec`` with length
    equal to the tensor's dim.

    Example::

        B = ShapeVar("batch")
        TensorSpec([B, None])  # rank 2, dim 0 dynamic
        TensorSpec([B, 10])  # rank 2, dim 0 dynamic, dim 1 static=10
        TensorSpec([B * 2 + 1, None])  # rank 2, dim 0 derived from B
    c           	     óè   — t        |«      D ]T  \  }}|�=t        |t        t        f«      s't	        d|› dt        |«      j                  › d|›�«      ‚t        |d|› �¬«       ŒV t        |«      | _	        y )NzTensorSpec dim z: expected LeafIntSpec, got ru   ©rx   )
Ú	enumeraterv   r\   r	   r3   r2   r8   rz   ÚlistÚ_specs)r*   ÚdimsÚiÚds       r,   r)   zTensorSpec.__init__  s}   € Ü˜d“Oò 	?‰DˆAˆqØˆ}¤Z°´C¼°=Ô%AÜØ% a SÐ(DÜ˜A“w×'Ñ'Ð(¨¨1¨%ð1óð ô ˜q¨/¸!¸Ð(=Ö>ð	?ô *.¨d«ˆ�r-   c                ó    — | j                   |   S rg   )rƒ   )r*   Úindexs     r,   Ú__getitem__zTensorSpec.__getitem__&  s   € Ø�{‰{˜5Ñ!Ð!r-   c                ó,   — t        | j                  «      S rg   )Úlenrƒ   ri   s    r,   Ú__len__zTensorSpec.__len__)  s   € Ü�4—;‘;ÓÐr-   c                ó,   — t        | j                  «      S rg   )Úiterrƒ   ri   s    r,   Ú__iter__zTensorSpec.__iter__,  s   € Ü�D—K‘KÓ Ð r-   c                óœ   — dg}t        | j                  «      D ]!  \  }}|j                  t        › |› d|›�«       Œ# dj	                  |«      S )NzTensor:ru   ú
)r�   rƒ   rb   Ú_INDENTrc   )r*   Úlinesr…   Úspecs       r,   re   zTensorSpec.__repr__/  sO   € Ø�ˆÜ  §¡Ó-ò 	4‰GˆAˆtØ�L‰LœG˜9 Q C r¨$¨Ð2Õ3ð	4à�y‰y˜ÓÐr-   c                ó~   — d| j                   D �cg c]   }t        |d«      r|j                  «       n|‘Œ" c}dœS c c}w )Nr   rl   )r2   r„   )rƒ   Úhasattrrl   ©r*   r”   s     r,   rl   zTensorSpec.to_jsonable5  sG   € à ð !ŸK™Köàô '.¨d°MÔ&B�× Ñ Ô"ÈÑLòñ
ð 	
ùòó   �%:N)r„   zSequence[LeafIntSpec]r5   r6   )rˆ   r\   r5   r   rp   )r5   zIterator[LeafIntSpec]ro   rq   )
r8   r9   r:   r;   r)   r‰   rŒ   r�   re   rl   © r-   r,   r   r     s%   „ ñó4ó"ó ó!ó ô
r-   r   c                  óJ   — e Zd ZdZd
dd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd	„Z
y)r   a’  Spec for any Python object's attributes.

    Constructor::

        ObjectSpec({name: IntermediateSpec, ...})

    Values may be leaves (``TensorSpec`` / ``IntVar`` / ``int`` /
    ``None``) or another ``ObjectSpec`` for recursion.

    Example::

        ObjectSpec({"weight": TensorSpec([ShapeVar("h"), None])})
        ObjectSpec({"inner": ObjectSpec({"weight": TensorSpec([ShapeVar("h")])})})
    Nc                ó8   — |rt        |«      | _        y i | _        y rg   )ÚdictÚ_fields)r*   Úfieldss     r,   r)   zObjectSpec.__init__O  s   € ÙDJ´D¸³Lˆ�ÐPRˆ�r-   c                ó   — || j                   v S rg   )r�   )r*   r4   s     r,   Ú__contains__zObjectSpec.__contains__R  s   € Ø�t—|‘|Ð#Ð#r-   c                ó,   — t        | j                  «      S rg   )rŽ   r�   ri   s    r,   r�   zObjectSpec.__iter__U  s   € Ü�D—L‘LÓ!Ð!r-   c                ó,   — t        | j                  «      S rg   )r‹   r�   ri   s    r,   rŒ   zObjectSpec.__len__X  s   € Ü�4—<‘<Ó Ð r-   c                ó6   — | j                   j                  «       S rg   )r�   Úitemsri   s    r,   r¤   zObjectSpec.items[  s   € Ø�|‰|×!Ñ!Ó#Ð#r-   c                ó^  — dg}| j                   j                  «       D ]}  \  }}t        |«      }d|v rL|j                  t        › d|› d�«       |j                  «       D ]  }|j                  t        dz  |z   «       Œ Œa|j                  t        › d|› d|› �«       Œ dj                  |«      S )Nzobject_spec:r‘   ú.ú:é   ru   )r�   r¤   Úreprrb   r’   Ú
splitlinesrc   )r*   r“   r4   r”   Ú	spec_reprÚlines         r,   re   zObjectSpec.__repr__^  s±   € ØÐ ˆØŸ,™,×,Ñ,Ó.ò 	?‰JˆD�$Ü˜T›
ˆIØ�yÑ Ø—‘¤˜y¨¨$¨¨qÐ1Ô2Ø%×0Ñ0Ó2ò 5�DØ—L‘L¤¨1¡¨tÑ!3Õ4ñ5ð —‘¤˜y¨¨$¨¨r°)°Ð=Õ>ð	?ð �y‰y˜ÓÐr-   c           
     ó¨   — d| j                   j                  «       D ��ci c]$  \  }}|t        |d«      r|j                  «       n|“Œ& c}}dœS c c}}w )Nr   rl   )r2   rž   )r�   r¤   r–   rl   )r*   r4   r”   s      r,   rl   zObjectSpec.to_jsonablej  sV   € à ð #'§,¡,×"4Ñ"4Ó"6÷á�D˜$ð ¬G°D¸-Ô,H�d×&Ñ&Ô(ÈdÑRóñ
ð 	
ùós   Ÿ)Arg   )rž   z"dict[str, IntermediateSpec] | Noner5   r6   )r4   r&   r5   Úbool)r5   zIterator[str]rp   ©r5   r   ro   rq   ©r8   r9   r:   r;   r)   r    r�   rŒ   r¤   re   rl   r™   r-   r,   r   r   ?  s+   „ ñôSó$ó"ó!ó$ó
 ô
r-   r   c                  óR   — e Zd ZdZ	 d
	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd	„Z
y)r   aT  Spec for a Python ``dict``-typed value.

    Constructor::

        DictSpec({key: IntermediateSpec, ...})

    Keys may be ``str`` or ``int``.

    Example::

        DictSpec({"x": TensorSpec([ShapeVar("h"), None])})
        DictSpec({"config": DictSpec({"batch": IntVar()})})
        DictSpec({0: TensorSpec([ShapeVar("h"), None])})
    Nc                óÂ   — |rt        |«      ni | _        | j                  D ]<  }t        |t        t        f«      rŒt        dt        |«      j                  › d|›�«      ‚ y )Nz0DictSpec entries must have str or int keys, got ru   )rœ   Ú_entriesrv   r7   r\   r3   r2   r8   )r*   ÚentriesÚks      r,   r)   zDictSpec.__init__„  sd   € ñ %ŒD�ŒM¨"ð 	Œð —‘ò 	ˆAÜ˜a¤#¤s Õ,ÜØFÄtÈAÃw×GWÑGWÐFXÐXZÐ[\ÐZ_Ð`óð ñ	r-   c                ó   — || j                   v S rg   )r³   )r*   Úkeys     r,   r    zDictSpec.__contains__�  s   € Ø�d—m‘mÐ#Ð#r-   c                ó,   — t        | j                  «      S rg   )rŽ   r³   ri   s    r,   r�   zDictSpec.__iter__“  s   € Ü�D—M‘MÓ"Ð"r-   c                ó,   — t        | j                  «      S rg   ©r‹   r³   ri   s    r,   rŒ   zDictSpec.__len__–  ó   € Ü�4—=‘=Ó!Ð!r-   c                ó6   — | j                   j                  «       S rg   )r³   r¤   ri   s    r,   r¤   zDictSpec.items™  s   € Ø�}‰}×"Ñ"Ó$Ð$r-   c                ó^  — dg}| j                   j                  «       D ]}  \  }}t        |«      }d|v rL|j                  t        › d|›d�«       |j                  «       D ]  }|j                  t        dz  |z   «       Œ Œa|j                  t        › d|›d|› �«       Œ dj                  |«      S )Nz
dict_spec:r‘   ú[ú]:r¨   ú]: )r³   r¤   r©   rb   r’   rª   rc   )r*   r“   r·   r”   r«   r¬   s         r,   re   zDictSpec.__repr__œ  s²   € Ø�ˆØŸ™×,Ñ,Ó.ò 	A‰IˆC�Ü˜T›
ˆIØ�yÑ Ø—‘¤˜y¨¨#¨°Ð3Ô4Ø%×0Ñ0Ó2ò 5�DØ—L‘L¤¨1¡¨tÑ!3Õ4ñ5ð —‘¤˜y¨¨#¨°°I°;Ð?Õ@ð	Að �y‰y˜ÓÐr-   c           
     óº   — d| j                   j                  «       D ��ci c]-  \  }}t        |«      t        |d«      r|j	                  «       n|“Œ/ c}}dœS c c}}w )Nr   rl   ©r2   r´   )r³   r¤   r7   r–   rl   )r*   r·   r”   s      r,   rl   zDictSpec.to_jsonable¨  s[   € àð "&§¡×!4Ñ!4Ó!6÷á�C˜ô �C“´¸¸mÔ0L˜$×*Ñ*Ô,ÐRVÑVóñ
ð 	
ùós   Ÿ2Arg   )r´   z(dict[str | int, IntermediateSpec] | Noner5   r6   )r·   r&   r5   r®   )r5   zIterator[str | int]rp   r¯   ro   rq   r°   r™   r-   r,   r   r   t  sA   „ ñð  CGð
Ø?ð
à	ó
ó$ó#ó"ó%ó
 ô
r-   r   c                  ó0   — e Zd ZdZdd„Zdd„Zd	d„Zd
d„Zy)r   aÅ  Spec for a Python ``list``- or ``tuple``-typed value.

    Per-position. The spec list may be shorter than the runtime sequence;
    any positions beyond ``len(self)`` are treated as fully static (i.e.
    equivalent to an unspecified slot).

    Constructor::

        SeqSpec([IntermediateSpec, ...])

    Example::

        SeqSpec([TensorSpec([ShapeVar("h"), 10]), 1])
        SeqSpec((TensorSpec([ShapeVar("a")]), TensorSpec([ShapeVar("b")])))
    c                ó$   — t        |«      | _        y rg   )r‚   r³   )r*   r´   s     r,   r)   zSeqSpec.__init__Ã  s   € Ü04°W³ˆ�r-   c                ó,   — t        | j                  «      S rg   rº   ri   s    r,   rŒ   zSeqSpec.__len__Æ  r»   r-   c                óT  — dg}t        | j                  «      D ]}  \  }}t        |«      }d|v rL|j                  t        › d|› d�«       |j                  «       D ]  }|j                  t        dz  |z   «       Œ Œa|j                  t        › d|› d|› �«       Œ dj                  |«      S )Nz	seq_spec:r‘   r¾   r¿   r¨   rÀ   )r�   r³   r©   rb   r’   rª   rc   )r*   r“   r…   r”   r«   r¬   s         r,   re   zSeqSpec.__repr__É  s¬   € Ø�ˆÜ  §¡Ó/ò 	=‰GˆAˆtÜ˜T›
ˆIØ�yÑ Ø—‘¤˜y¨¨!¨¨BÐ/Ô0Ø%×0Ñ0Ó2ò 5�DØ—L‘L¤¨1¡¨tÑ!3Õ4ñ5ð —‘¤˜y¨¨!¨¨C°	¨{Ð;Õ<ð	=ð �y‰y˜ÓÐr-   c                ó~   — d| j                   D �cg c]   }t        |d«      r|j                  «       n|‘Œ" c}dœS c c}w )Nr   rl   rÂ   )r³   r–   rl   r—   s     r,   rl   zSeqSpec.to_jsonableÕ  sG   € àð !ŸM™Möàô '.¨d°MÔ&B�× Ñ Ô"ÈÑLòñ
ð 	
ùòr˜   N)r´   zSequence[IntermediateSpec]r5   r6   rp   ro   rq   )r8   r9   r:   r;   r)   rŒ   re   rl   r™   r-   r,   r   r   ²  s   „ ñó >ó"ó
 ô
r-   r   r   r   r   r   ÚParamsSpecValuec                  ó:   — e Zd ZdZdZdZ	 d	 	 	 d	d„Zd
d„Zdd„Zy)r   a"  Specification for the arguments of a compiled function.

    Describes the dynamic shape behavior for named arguments, ``*args``,
    and ``**kwargs`` of a ``torch.compile``-wrapped function. Takes a
    single dict keyed by parameter name, with two reserved sentinel keys
    for the variadic slots::

        def func(x, n, *args, **kwargs): ...


        ParamsSpec(
            {
                "x": TensorSpec([ShapeVar("batch"), None]),
                "n": IntVar("seq"),
                "*args": [TensorSpec([ShapeVar("a")]), None],
                "**kwargs": {
                    "foo": TensorSpec([ShapeVar("b"), None]),
                    "bar": TensorSpec([ShapeVar("c"), None]),
                },
            }
        )

    Anything not expressed in ``ParamsSpec`` is STATIC.**
    z*argsz**kwargsNc           
     óX  — i | _         d | _        d | _        |€y |j                  «       D �]~  \  }}|| j                  k(  rvt        |t        «      s.t        d| j                  ›dt        |«      j                  › �«      ‚t        |«      D ]  \  }}t        |d|› d|› d�¬«       Œ t        |«      | _        ŒŒ|| j                  k(  r|t        |t        «      s.t        d| j                  ›dt        |«      j                  › �«      ‚|j                  «       D ]  \  }}t        |d|› d|›d�¬«       Œ t        |«      | _        �Œ|j                  d«      r)t        d	|›d
| j                  ›d| j                  ›d�«      ‚t        |d|›d�¬«       t        t         |«      | j                   |<   �Œ� y )NzParamsSpec z) value must be a list of leaf specs, got zParamsSpec 'z'[ú]r€   z) value must be a dict of leaf specs, got Ú*zUnknown sentinel key z in ParamsSpec; only z and z are reservedzParamsSpec[)Ú_named_argsÚ_varargsÚ_varkwr¤   Ú_VARARGS_KEYrv   r‚   r}   r2   r8   r�   rz   Ú
_VARKW_KEYrœ   r0   r   r   )r*   Úparamsr·   Úvaluer…   rw   rµ   s          r,   r)   zParamsSpec.__init__  sÅ  € ð 9;ˆÔØ7;ˆŒØ:>ˆŒØˆ>ØØ Ÿ,™,›.ó 	F‰JˆC�Ø�d×'Ñ'Ò'Ü! %¬Ô.Ü$Ø% d×&7Ñ&7Ð%:ð ;.Ü.2°5«k×.BÑ.BÐ-CðEóð ô & eÓ,ò L‘D�A�qÜ& q°,¸s¸eÀ2ÀaÀSÈÐ0JÖKðLä $ U£�•Ø˜Ÿ™Ò'Ü! %¬Ô.Ü$Ø% d§o¡oÐ%8ð 9.Ü.2°5«k×.BÑ.BÐ-CðEóð ð "ŸK™K›Mò N‘D�A�qÜ& q°,¸s¸eÀ2ÀaÀUÈ!Ð0LÖMðNä" 5›k�–Ø—‘ Ô$Ü Ø+¨C¨7Ð2GØ×(Ñ(Ð+¨5°·±Ð0CÀ=ðRóð ô
 # 5°+¸c¸WÀAÐ0FÕGÜ(,Ô-=¸uÓ(E�× Ñ  Ó%ñ5	Fr-   c                ó@  ‡‡— t         fdd„Šdˆfd„Š| j                  j                  «       D ��cg c]  \  }} ‰||«      ‘Œ }}}| j                  �Sdj	                  ˆfd„t        | j                  «      D «       «      }|j                  | j                  › d ‰|«      › �«       | j                  �Xdj	                  ˆfd„| j                  j                  «       D «       «      }|j                  | j                  › d ‰|«      › �«       dj	                  |«      S c c}}w )	Nc                óT   ‡— dj                  ˆfd„| j                  «       D «       «      S )Nr‘   c              3  ó(   •K  — | ]	  }‰|z   –— Œ y ­wrg   r™   )Ú.0r¬   Úprefixs     €r,   ú	<genexpr>z=ParamsSpec.__repr__.<locals>._indent_lines.<locals>.<genexpr>>  s   øè ø€ ÒI¨t˜V d�]ÑIùs   ƒ)rc   rª   )ÚtextrØ   s    `r,   Ú_indent_linesz*ParamsSpec.__repr__.<locals>._indent_lines=  s   ø€ Ø—9‘9ÓI°t·±Ó7HÔIÓIÐIr-   c                óJ   •— t        |«      }d|v r| › d ‰|«      › �S | › d|› �S )Nr‘   ú:
ru   )r©   )r·   rÓ   Úv_reprrÛ   s      €r,   Ú_entry_reprz(ParamsSpec.__repr__.<locals>._entry_repr@  s;   ø€ Ü˜%“[ˆFØ�v‰~Ø˜˜c¡-°Ó"7Ð!8Ð9Ð9Ø�U˜"˜V˜HÐ%Ð%r-   r‘   c              3  óH   •K  — | ]  \  }} ‰t        |«      |«      –— Œ y ­wrg   )r7   )r×   r…   rw   rß   s      €r,   rÙ   z&ParamsSpec.__repr__.<locals>.<genexpr>H  s%   øè ø€ ò Ù+/¨1¨a‘œC ›F A×&ñùs   ƒ"rÝ   c              3  ó6   •K  — | ]  \  }} ‰||«      –— Œ y ­wrg   r™   )r×   rµ   rw   rß   s      €r,   rÙ   z&ParamsSpec.__repr__.<locals>.<genexpr>M  s   øè ø€ ÒP±D°A°q™k¨!¨Q×/ÑPùs   ƒ)rÚ   r7   rØ   r7   r5   r7   )r·   r7   rÓ   r   r5   r7   )
r’   rÍ   r¤   rÎ   rc   r�   rb   rÐ   rÏ   rÑ   )r*   rµ   rw   r“   Úinnerrß   rÛ   s        @@r,   re   zParamsSpec.__repr__<  sö   ù€ Ü3:ô 	Jõ	&ð 04×/?Ñ/?×/EÑ/EÓ/G×H¡t q¨!‘˜Q Õ"ÐHˆÑHØ�=‰=Ð$Ø—I‘Ió Ü3<¸T¿]¹]Ó3Kôó ˆEð �L‰L˜D×-Ñ-Ð.¨c±-ÀÓ2FÐ1GÐHÔIØ�;‰;Ð"Ø—I‘IÓP¸D¿K¹K×<MÑ<MÓ<OÔPÓPˆEØ�L‰L˜DŸO™OÐ,¨C±¸eÓ0DÐ/EÐFÔGØ�y‰y˜ÓÐùó Is   °Dc           	     ó$  — | j                   j                  «       D ��ci c]$  \  }}|t        |d«      r|j                  «       n|“Œ& }}}| j                  �C| j                  D �cg c]   }t        |d«      r|j                  «       n|‘Œ" c}|| j
                  <   | j                  �W| j                  j                  «       D ��ci c]$  \  }}|t        |d«      r|j                  «       n|“Œ& c}}|| j                  <   d|dœS c c}}w c c}w c c}}w )Nrl   r   )r2   rÒ   )rÍ   r¤   r–   rl   rÎ   rÐ   rÏ   rÑ   )r*   r4   rÓ   rÒ   rw   s        r,   rl   zParamsSpec.to_jsonableQ  s  € ð  $×/Ñ/×5Ñ5Ó7÷"
á��eð ¬°¸Ô)F�%×#Ñ#Ô%ÈEÑQð"
ˆñ "
ð �=‰=Ð$ð Ÿ™ö)àô $+¨1¨mÔ#<�—‘”À!ÑCò)ˆF�4×$Ñ$Ñ%ð �;‰;Ð"ð $(§;¡;×#4Ñ#4Ó#6÷'á�D˜%ð ¬W°U¸MÔ-J�e×'Ñ'Ô)ÐPUÑUó'ˆF�4—?‘?Ñ#ð
 !Øñ
ð 	
ùó"
ùò
)ùó
's   ž)DÁ$%DÃ)Drg   )rÒ   z!dict[str, ParamsSpecValue] | Noner5   r6   ro   rq   )	r8   r9   r:   r;   rÐ   rÑ   r)   re   rl   r™   r-   r,   r   r   ú  s=   „ ñð2 €LØ€Jð 59ð#Fà1ð#Fð 
ó#FóJ ô*
r-   r   c                  óT   — e Zd ZdZ	 ddddœ	 	 	 	 	 	 	 d	d„Zed
d„«       Zdd„Zdd„Zy)r   uG  Top-level shape specification for a ``torch.compile`` call.

    ``params`` describes the arguments of the compiled callable â€” for a raw
    function this is the function's parameters, for an ``nn.Module`` this
    is the parameters of ``forward`` (excluding ``self``).

    ``assumptions`` is an optional list of ``SymBool`` expressions built
    from spec ``IntVar`` / ``ShapeVar`` values. Each assumption is wired
    into the shape env at compile time and asserted at runtime via the
    deferred-runtime-assert mechanism::

        A = ShapeVar("a")
        B = ShapeVar("b")
        ShapesSpec(
            params={"x": TensorSpec([A, None]), "y": TensorSpec([B, None])},
            assumptions=[A + B > 10, A * 2 == B],
        )

    ``globals`` is reserved for future use and will raise
    ``NotImplementedError`` if set.
    N)ÚglobalsÚassumptionsc          	     óØ  — d | _         g | _        |�t        d«      ‚t        |t        «      rt        |«      }n3|�1t        |t
        «      s!t        dt        |«      j                  › �«      ‚|| _         |�wt        |«      D ]h  \  }}t        |t        «      s't        d|› dt        |«      j                  › d|›�«      ‚t        |d|› d�¬«       | j                  j                  |«       Œj y y )Nz'ShapesSpec.globals is not supported yetz3shapes_spec must be ParamsSpec, dict, or None, got zShapesSpec.assumptions[z]: expected SymBool, got ru   rË   r€   )Ú_paramsÚ_assumptionsÚNotImplementedErrorrv   rœ   r   r3   r2   r8   r�   r   rz   rb   )r*   rÒ   rå   ræ   r…   Úas         r,   r)   zShapesSpec.__init__}  s  € ð +/ˆŒØ+-ˆÔàÐÜ%Ð&OÓPÐPô �fœdÔ#Ü Ó'‰FØÐ¬
°6¼:Ô(FÜðÜ˜F“|×,Ñ,Ð-ð/óð ð ˆŒàÐ"Ü! +Ó.ò ,‘��1Ü! !¤WÔ-Ü#Ø1°!°ð 5Ü# A›w×/Ñ/Ð0°°1°%ð9óð ô # 1Ð.EÀaÀSÈÐ,JÕKØ×!Ñ!×(Ñ(¨Õ+ñ,ð #r-   c                ó,   — t        | j                  «      S rg   )r‚   ré   ri   s    r,   ræ   zShapesSpec.assumptions¡  s   € ä�D×%Ñ%Ó&Ð&r-   c                ó®  — dg}| j                   �]|j                  t        › d�«       t        | j                   «      }|j	                  «       D ]  }|j                  t        dz  |z   «       Œ | j
                  rM|j                  t        › d�«       | j
                  D ]&  }|j                  t        dz  t        |«      z   «       Œ( dj                  |«      S )Nzshapes_spec:zparams:r¨   zassumptions:r‘   )rè   rb   r’   r©   rª   ré   rc   )r*   r“   Ú
param_reprr¬   rë   s        r,   re   zShapesSpec.__repr__¥  s»   € ØÐ ˆØ�<‰<Ð#Ø�L‰LœG˜9 GÐ,Ô-Ü˜dŸl™lÓ+ˆJØ"×-Ñ-Ó/ò 1�Ø—‘œW q™[¨4Ñ/Õ0ð1à×ÒØ�L‰LœG˜9 LÐ1Ô2Ø×&Ñ&ò 4�Ø—‘œW q™[¬4°«7Ñ2Õ3ð4à�y‰y˜ÓÐr-   c                ó¦   — d| j                   €d n| j                   j                  «       | j                  D �cg c]  }t        |«      ‘Œ c}dœS c c}w )Nr   )r2   rÒ   ræ   )rè   rl   ré   r©   )r*   rë   s     r,   rl   zShapesSpec.to_jsonable²  sH   € à Ø"Ÿl™lÐ2‘d¸¿¹×8PÑ8PÓ8RØ-1×->Ñ->Ö?¨œD �GÒ?ñ
ð 	
ùò @s   ·Arg   )rÒ   z.ParamsSpec | dict[str, ParamsSpecValue] | Nonerå   r   ræ   zSequence[SymBool] | Noner5   r6   )r5   zlist[SymBool]ro   rq   )	r8   r9   r:   r;   r)   Úpropertyræ   re   rl   r™   r-   r,   r   r   f  se   „ ñð0 BFð",ð Ø04ñ",à>ð",ð ð	",ð
 .ð",ð 
ó",ðH ò'ó ð'ó ô
r-   r   )r5   r   )rw   r   rx   r7   r5   r6   ),r;   Ú
__future__r   rr   Ú	threadingÚtypingr   r   r   r   rY   Útorchr   r	   Úcollections.abcr
   r   rB   r   Ú__all__r’   r   r   r=   ÚLockrA   rC   r   rz   r   r   r   r   r   r\   r   r   r   r‚   rœ   r7   rÈ   r   r   r™   r-   r,   ú<module>rø      s<  ðòõ
 #ã Û ß 6Ó 6ã ç !ñ ß2å>ò€ð" €ð 
€ð $(€�Ó 'ð
 &�y—~‘~Ó'Ð ó>ôBZ
ˆVô Z
óz
ô"Vˆvô V÷8.
ñ .
÷b2
ñ 2
÷j;
ñ ;
÷|*
ñ *
ðp   &™¨3Ñ.°Ñ5€ˆYÓ 5à! JÑ.€ˆ)Ó .ð '¨Ñ3°hÑ>ÀÑHÐ �)Ó Hð �tÐ,Ñ-Ñ-°°SÐ:JÐ5JÑ0KÑKð �ó ÷
i
ñ i
÷XQ
ò Q
r-   