§
    Ÿ²Åj¬C  ã                   óº  — d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlZd dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZmZ  ed¦  «        Z ed	¦  «        Z ed
edej!        defd„¦   «         Z"ed
edej!        defd„¦   «         Z"ed
e	dej!        de	fd„¦   «         Z"ed
ddej!        ddfd„¦   «         Z"d„ Z"d
ede#defd„Z$d„ Z% G d„ d¦  «        Z&dedefd„Z'	 d.dededeej(                 fd„Z)dede*fd„Z+dededdfd „Z,d!d"œdeded#e*fd$„Z-d!d!d!d%œd&e.d#e*d'e*d(e*deee ef         gee ef         f         f
d)„Z/d*efd+„Z0d,„ Z1d*edefd-„Z2dS )/é    N)Úwraps)ÚCallableÚ
NamedTupleÚOptionalÚoverloadÚSequenceÚTupleÚTypeVar)Ú	ParamSpec)ÚCustomOutParamAnnotationÚELEMENTWISE_TYPE_PROMOTION_KINDÚNumberÚ
NumberTypeÚ	ShapeTypeÚ
TensorLikeÚTensorLikeType)Ú_pytree)Útree_flattenÚtree_unflattenÚ_TÚ_PÚaÚdtypeÚreturnc                 ó   — d S ©N© ©r   r   s     úMC:\Projects\Historical\venv\Lib\site-packages\torch/_prims_common/wrappers.pyÚ_maybe_convert_to_dtyper       ó   € à€Dó    c                 ó   — d S r   r   r   s     r   r    r        r!   r"   c                 ó   — d S r   r   r   s     r   r    r    %   r!   r"   c                 ó   — d S r   r   r   s     r   r    r    *   r!   r"   c                 ó~  ‡— t          | t          ¦  «        r"| j        ‰k    r|                      ‰¦  «        S | S t          | t          ¦  «        r t          j        ‰¦  «        | ¦  «        S t          | t          ¦  «        rt          ˆfd„| D ¦   «         ¦  «        S | €d S t          dt          | ¦  «        › d�¦  «        ‚)Nc              3   ó8   •K  — | ]}t          |‰¦  «        V — Œd S r   ©r    )Ú.0Úxr   s     €r   ú	<genexpr>z*_maybe_convert_to_dtype.<locals>.<genexpr>8   s.   øè è € ÐBÐB¸1Õ,¨Q°Ñ6Ô6ÐBÐBÐBÐBÐBÐBr"   zReceived unsupported type z+. Expected TensorLike, Number, or Sequence.)Ú
isinstancer   r   Útor   ÚutilsÚdtype_to_type_ctorr   ÚtupleÚ
ValueErrorÚtyper   s    `r   r    r    0   sÌ   ø€ Ý�!•ZÑ Ô ð ØŒ7�eÒÐØ—4’4˜‘;”;ÐØˆÝ�!•VÑÔð 2Ø.�uÔ'¨Ñ.Ô.¨qÑ1Ô1Ð1Ý�!•XÑÔð CÝÐBÐBÐBÐBÀÐBÑBÔBÑBÔBÐBð 	€yØˆtå
ØY¥T¨!¡W¤WÐYÐYÐYñô ð r"   Útypc                 ó  — t          | t          ¦  «        s"dt          | ¦  «        › d�}t          |¦  «        ‚t	          j        t          | ¦  «        |¦  «        s(d| › dt          | ¦  «        › d|› d�}t          |¦  «        ‚ || ¦  «        S )NzFound unknown type z  when trying to convert scalars!zScalar z	 of type z cannot be safely cast to type ú!)r,   r   r2   r1   r.   Úis_weakly_lesser_type)r   r3   Úmsgs      r   Ú_maybe_convert_to_typer8   C   s�   € Ý�a�Ñ Ô ð ØM¥D¨¡G¤GÐMÐMÐMˆÝ˜‰oŒoÐÝÔ&¥t¨A¡w¤w°Ñ4Ô4ð ØR˜ÐRÐR¥D¨¡G¤GÐRÐRÈCÐRÐRÐRˆÝ˜‰oŒoÐàˆ3ˆq‰6Œ6€Mr"   c                 ój   — t          |d¦  «        r |j        D ]}t          | |¬¦  «        r dS ŒdS | |u S )NÚ__args__)r3   Ú
annotationTF)Úhasattrr:   Ú_annotation_has_type)r3   r;   r   s      r   r=   r=   N   sW   € Ýˆz˜:Ñ&Ô&ð ØÔ$ð 	ð 	ˆAÝ#¨¸Ð:Ñ:Ô:ð Ø�t�tðàˆuà�*ÐÐr"   c                   óP   — e Zd ZdZddœdedeee                  fd„Zde	de	fd	„Z
dS )
Ú"elementwise_type_promotion_wrappera  
    Adds elementwise type promotion to a Python reference implementation.

    Takes two kwargs, type_promoting_args and type_promotion_kind.

    type_promoting_args must be a string Sequence specifiying the argument names of all
    arguments that participate in type promotion (and should be type promoted). If the
    arg specifies a Sequence-type then every element of the Sequence will participate in
    type promotion.

    type_promotion_kind must be one of the kinds specified by ELEMENTWISE_TYPE_PROMOTION_KIND.
    See its documentation for details.

    The return_dtype will be coerced to the wrapped function's dtype arg if it is available and
    not None.

    Other type promotion behavior, like validating the Python type of scalar arguments, must
    be handled separately.
    N)Útype_promoting_argsÚtype_promotion_kindr@   c                ó"   — || _         || _        d S r   )Útype_promoting_arg_namesrA   )ÚselfrA   r@   s      r   Ú__init__z+elementwise_type_promotion_wrapper.__init__m   s   € ð )<ˆÔ%Ø#6ˆÔ Ð Ð r"   Úfnr   c                 óz   ‡ ‡‡— t          j        ‰¦  «        Št          ‰¦  «        ˆˆ ˆfd„¦   «         }‰|_        |S )Nc                  óD  •‡‡‡	—  ‰j         | i |¤ŽŠt          ˆfd„‰j        D ¦   «         ¦  «        }t          j        |Ž }t          j        |d‰j        iŽ\  ŠŠ	ˆˆfd„‰j        D ¦   «         }‰j         	                    |¦  «          ‰
di ‰j        ¤Ž}d‰j        v r‰j        d         }|r|Š	t          |t          ¦  «        rt          |‰	¦  «        S t          |t          ¦  «        rt          ˆ	fd„|D ¦   «         ¦  «        S t          dt          |¦  «        › �¦  «        ‚)Nc              3   óh   •K  — | ],}|‰j                              ¦   «         v ¯‰j         |         V — Œ-d S r   )Ú	argumentsÚkeys)r)   r*   Úbounds     €r   r+   zKelementwise_type_promotion_wrapper.__call__.<locals>._fn.<locals>.<genexpr>|   sO   øè è € ð (ð (àØ˜œ×,Ò,Ñ.Ô.Ð.Ð.ð ” Ô"à.Ð.Ð.Ð.ð(ð (r"   rA   c                 ó~   •— i | ]9}|‰j                              ¦   «         v ¯|t          ‰j         |         ‰¦  «        “Œ:S r   )rJ   rK   r    )r)   r*   rL   Úcompute_dtypes     €€r   ú
<dictcomp>zLelementwise_type_promotion_wrapper.__call__.<locals>._fn.<locals>.<dictcomp>ˆ   sP   ø€ ð ð ð àØ˜œ×,Ò,Ñ.Ô.Ð.Ð.ð Õ*¨5¬?¸1Ô+=¸}ÑMÔMà.Ð.Ð.r"   r   c              3   ó8   •K  — | ]}t          |‰¦  «        V — Œd S r   r(   )r)   r*   Úresult_dtypes     €r   r+   zKelementwise_type_promotion_wrapper.__call__.<locals>._fn.<locals>.<genexpr>š   s.   øè è € ÐVÐVÈ!Õ4°Q¸ÑEÔEÐVÐVÐVÐVÐVÐVr"   zUnhandled result type: r   )Úbindr0   rC   ÚpytreeÚarg_tree_leavesr.   Úelementwise_dtypesrA   rJ   Úupdater,   r   r    r   ÚAssertionErrorr2   )ÚargsÚkwargsr@   Úflattened_type_promoting_argsÚpromoted_argsÚresultÚmaybe_dtyperL   rN   rQ   rF   rD   Úsigs          @@@€€€r   Ú_fnz8elementwise_type_promotion_wrapper.__call__.<locals>._fny   sˆ  øøøø€ à�C”H˜dÐ- fÐ-Ð-ˆEÝ"'ð (ð (ð (ð (àÔ6ð(ñ (ô (ñ #ô #Ðõ -3Ô,BÐDWÐ,XÐ)Ý*/Ô*BØ.ð+à$(Ô$<ð+ð +Ñ'ˆM˜<ð
ð ð ð ð àÔ6ðñ ô ˆMð
 ŒO×"Ò" =Ñ1Ô1Ð1à�RÐ*Ð*˜%œ/Ð*Ð*ˆFð ˜%œ/Ð)Ð)Ø#œo¨gÔ6�Øð /Ø#.�Lå˜&¥*Ñ-Ô-ð EÝ.¨v°|ÑDÔDÐDÝ˜&¥(Ñ+Ô+ð WÝÐVÐVÐVÐVÈvÐVÑVÔVÑVÔVÐVÝ Ð!I½4À¹<¼<Ð!IÐ!IÑJÔJÐJr"   ©ÚinspectÚ	signaturer   Ú__signature__)rD   rF   r_   r^   s   `` @r   Ú__call__z+elementwise_type_promotion_wrapper.__call__v   s_   øøø€ ÝÔ Ñ#Ô#ˆå	ˆr‰Œð!	Kð !	Kð !	Kð !	Kð !	Kð !	Kñ 
Œð!	KðF  ˆÔØˆ
r"   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   ÚstrrE   r   rd   r   r"   r   r?   r?   X   s€   € € € € € ðð ð0 8<ð	7ð 7ð 7ð =ð7ð & h¨s¤mÔ4ð	7ð 7ð 7ð 7ð(˜8ð (¨ð (ð (ð (ð (ð (ð (r"   r?   ÚoutÚshapec                 óÆ   — t          j        | j        |¦  «        rdS |                      ¦   «         dk    r,dt	          | j        ¦  «        › d�}t          j        |¦  «         dS )NFr   zCAn output with one or more elements was resized since it had shape a   which does not match the required output shape {str(shape)}. This behavior is deprecated, and in a future PyTorch release outputs will not be resized unless they have zero elements. You can explicitly reuse an out tensor t by resizing it, inplace, to zero elements with t.resize_(0).T)r.   Ú
same_shaperk   Únumelri   ÚwarningsÚwarn)rj   rk   r7   s      r   Ú_resize_output_checkrq   ¢   st   € åÔ˜œ	 5Ñ)Ô)ð ØˆuØ
‡y‚y�{„{�aÒÐðtÕRUÐVYÔV_ÑR`ÔR`ð tð tð tð 	õ 	Œ�cÑÔÐØˆ4r"   Úmemory_formatc                 óT   — t          | |¦  «        r|                      ||¬¦  «        S | S )N)rr   )rq   Úresize_)rj   rk   rr   s      r   Ú_maybe_resize_outru   ³   s1   € õ
 ˜C Ñ'Ô'ð Ø�{Š{˜5°ˆ{Ñ>Ô>Ð>àˆ
r"   r*   c                 óR   — |                       ¦   «         dk    o| j        j        dk    S )Nr   Úcpu)ÚdimÚdevicer2   )r*   s    r   Úis_cpu_scalarrz   ¾   s"   € Ø�5Š5‰7Œ7�aŠ<Ð2˜AœHœM¨UÒ2Ð2r"   Ú	copy_fromÚcopy_toc                 ój   — | j         |j         k    r"d| j         › d|j         › d�}t          |¦  «        ‚d S )NzAttempting to copy from device z to device z*, but cross-device copies are not allowed!)ry   ÚRuntimeError)r{   r|   r7   s      r   Úcheck_copy_devicesr   Â   s]   € ØÔ˜7œ>Ò)Ð)ðT¨iÔ.>ð Tð TØ œðTð Tð Tð 	õ ˜3ÑÔÐð *Ð)r"   F)Úexact_dtyper€   c                 ó2  ‡ ‡— t          ‰ ¦  «        st          ‰ ‰¬¦  «         |r(t          j        ‰ j        ‰j        k    ˆ ˆfd„¦  «         n7t          j        t          j        ‰ j        ‰j        ¬¦  «        ˆ ˆfd„¦  «         ‰                     ‰ ¦  «        S )N©r{   r|   c                  ó*   •— d‰ j         › d‰j         › d�S )Nz"Expected out tensor to have dtype z	 but got z instead©r   r‚   s   €€r   ú<lambda>z _safe_copy_out.<locals>.<lambda>Ö   s,   ø€ ð /¸¼ð /ð /Ø”}ð/ð /ð /€ r"   )Ú	cast_fromÚcast_toc                  ó*   •— d‰ j         › d‰j         › d�S )NzAttempting to cast from z to out tensor with dtype z0, but this can't be cast because it is not safe!r„   r‚   s   €€r   r…   z _safe_copy_out.<locals>.<lambda>Ü   s-   ø€ ð =¨y¬ð =ð =ÐZaÔZgð =ð =ð =€ r"   )rz   r   ÚtorchÚ_checkr   r.   Úcan_safe_cast_toÚcopy_©r{   r|   r€   s   `` r   Ú_safe_copy_outrŽ   Ë   sÌ   øø€ õ ˜Ñ#Ô#ð AÝ Y¸Ð@Ñ@Ô@Ð@ð ð 
ÝŒØŒO˜wœ}Ò,ð/ð /ð /ð /ð /ñ	
ô 	
ð 	
ð 	
õ 	ŒÝÔ"¨Y¬_ÀgÄmÐTÑTÔTð=ð =ð =ð =ð =ñ	
ô 	
ð 	
ð �=Š=˜Ñ#Ô#Ð#r"   )r€   Úpass_is_outÚpreserve_memory_formatÚ	out_namesr�   r�   c                 óì   ‡ ‡‡‡‡‡‡— dŠt          ‰¦  «        dk    r‰Št          ‰¦  «        dk    Šˆfd„Šdt          t          t          f         dt          t          t          f         fˆˆ ˆˆˆˆfd„}|S )N©rj   r   é   c                 ó4   •— ‰rt          j        | ¦  «        nd S r   )r.   Úsuggest_memory_format)Útr�   s    €r   Úmaybe_compute_memory_formatz0out_wrapper.<locals>.maybe_compute_memory_formatö   s   ø€ Ø1GÐQ�uÔ*¨1Ñ-Ô-Ð-ÈTÐQr"   rF   r   c                 óâ  •‡ ‡‡‡‡— ‰rt           n=t          t          d„ t          t	          ‰¦  «        ¦  «        D ¦   «         ¦  «                 }‰rt           n!t          d‰ j        › �d„ ‰D ¦   «         ¦  «        Št          j        ‰ ¦  «        ŠdŠt          ˆfd„‰D ¦   «         ¦  «        Št          ‰ ¦  «        ddœdt          j        d	t          j        fˆ
ˆˆ ˆˆˆˆˆˆf	d
„¦   «         }t          j        dt          j        j        d|¬¦  «        }t!          ‰j        t$          ¦  «        s‰j        ‰j        |fv sJ ‚g ‰j                             ¦   «         ¢|‘R }t-          |d„ ¬¦  «        }t          j        |‰¬¦  «        |_        t3          t5          ‰ di ¦  «        ¦  «        |_        ||j        d<   ‰|j        d<   ‰r‰‰	k    r‰d         |j        t8          <   dt:          j        › d�|_        |S )z?
        Adds the out parameter to a Python reference.
        c              3   ó$   K  — | ]}t           V — Œd S r   ©r   )r)   Ú_s     r   r+   z4out_wrapper.<locals>._out_wrapper.<locals>.<genexpr>   s"   è è € ÐKÐK°�^ÐKÐKÐKÐKÐKÐKr"   Úreturn_types_c                 ó    — g | ]}|t           f‘ŒS r   r›   )r)   Úos     r   ú
<listcomp>z5out_wrapper.<locals>._out_wrapper.<locals>.<listcomp>  s   € Ð/WÐ/WÐ/WÈ°µNÐ0CÐ/WÐ/WÐ/Wr"   )ry   r   c              3   ó*   •K  — | ]}|‰j         v V — Œd S r   )Ú
parameters)r)   Úpr^   s     €r   r+   z4out_wrapper.<locals>._out_wrapper.<locals>.<genexpr>  s*   øè è € ÐHÐH°A˜A ¤Ð/ÐHÐHÐHÐHÐHÐHr"   Nr“   rX   rY   c                 ón  •	‡ ‡‡— ‰r ‰ �‰
D ]}t          ‰ |¦  «        }||vr|||<   Œˆfd„}t          ‰ t          t          f¦  «        r‰ D ]} ||¦  «         Œn |‰ ¦  «         ‰r ‰‰d‰ d ui|¤ŽŠn ‰‰i |¤ŽŠt          ‰t          ¦  «        r‰s7t          ‰t
          ¦  «        r t          ‰¦  «        t          ‰¦  «        k    sJ ‚‰ �á‰rIt          ‰ t          ¦  «        sJ ‚t          ‰ ‰j         ‰‰¦  «        ¦  «         t          ‰‰ ‰	¬¦  «         n˜t          ‰ t
          ¦  «        sJ ‚t          j        t          ‰ ¦  «        t          ‰¦  «        k    ˆ ˆfd„¦  «         t          ‰‰ ¦  «        D ]6\  }}t          ||j         ‰|¦  «        ¦  «         t          ||‰	¬¦  «         Œ7n‰Š ‰r‰ n ‰‰ Ž S )Nc                 óž   •— t          | t          ¦  «        r4t          ‰d         t          ¦  «        rt          ‰d         | ¬¦  «         d S d S d S )Nr   r‚   )r,   r   r   )rj   rX   s    €r   Úmaybe_check_copy_deviceszPout_wrapper.<locals>._out_wrapper.<locals>._fn.<locals>.maybe_check_copy_devices  sa   ø€ Ý˜c¥:Ñ.Ô.ð Gµ:¸dÀ1¼gÅzÑ3RÔ3Rð GÝ&°°a´À#ÐFÑFÔFÐFÐFÐFðGð Gð Gð Gr"   Úis_outr�   c                  óH   •— dt          ‰¦  «        › dt          ‰ ¦  «        › �S )Nzexpected tuple of z elements but got )Úlen)rj   r\   s   €€r   r…   z@out_wrapper.<locals>._out_wrapper.<locals>._fn.<locals>.<lambda>F  s(   ø€ Ð ^µS¸±[´[Ð ^Ð ^ÕTWÐX[ÑT\ÔT\Ð ^Ð ^€ r"   )Úgetattrr,   r0   Úlistr   r	   r©   ru   rk   rŽ   r‰   Ú_check_typeÚzip)rj   rX   rY   ÚkÚout_attrr¦   rŸ   Úrr\   r€   Úfactory_kwargsrF   Úis_factory_fnÚ	is_tensorr˜   r‘   r�   Úreturn_types   ``      @€€€€€€€€€r   r_   z.out_wrapper.<locals>._out_wrapper.<locals>._fn  sp  øøøø€ àð -  Ø'ð -ð -�AÝ& s¨A™œ�HØ ��Ø$,˜˜q™	øðGð Gð Gð Gð Gõ ˜#¥¥t˜}Ñ-Ô-ð .Øð 0ð 0�AØ,Ð,¨QÑ/Ô/Ð/Ð/ð0ð )Ð(¨Ñ-Ô-Ð-àð -Ø˜˜TÐF¨3°d¨?ÐF¸vÐFÐF��à˜˜TÐ, VÐ,Ð,�å˜6¥:Ñ.Ô.ðàðõ ˜f¥eÑ,Ô,ðõ ˜‘K”K¥3 y¡>¤>Ò1Ð1Ð1ð2ð
 ˆð" ð XÝ% c­:Ñ6Ô6Ð6Ð6Ð6å%Ø˜Vœ\Ð+FÐ+FÀvÑ+NÔ+Nñô ð õ #¨V¸SÈkÐZÑZÔZÐZÐZå% c­5Ñ1Ô1Ð1Ð1Ð1ÝÔ%Ý˜C™œ¥C¨¡K¤KÒ/Ø^Ð^Ð^Ð^Ð^ñô ð õ !$ F¨CÑ 0Ô 0ð Xð X™˜˜1å)¨!¨Q¬WÐ6QÐ6QÐRSÑ6TÔ6TÑUÔUÐUÝ&°¸AÈ;ÐWÑWÔWÐWÐWðXð
 �à#Ð:�3�3¨¨°cÐ):Ð:r"   rj   )ÚkindÚdefaultr;   c                 ó   — | j         S r   )rµ   )r£   s    r   r…   z3out_wrapper.<locals>._out_wrapper.<locals>.<lambda>a  s   € ¨a¬f€ r"   )Úkey)r¢   Úreturn_annotationÚ__annotations__r   r   zThis function is wrapped by z.out_wrapper) r   r	   r0   Úranger©   r   re   ra   rb   Úallr   r   rX   rY   Ú	ParameterÚKEYWORD_ONLYr,   r¹   ri   Úemptyr¢   ÚvaluesÚsortedÚ	Signaturerc   Údictrª   rº   r   Úout_wrapperrf   Ú!_torch_decompositions_out_wrapper)rF   Úout_typer_   Ú	out_paramÚparamsr±   r²   r´   r^   Údefault_out_namesr€   r³   r˜   r‘   r�   s   `    @@@@€€€€€€r   Ú_out_wrapperz!out_wrapper.<locals>._out_wrapperù   s‰  øøøøøø€ ð ðM�NˆNå•uÐKÐKµU½3¸y¹>¼>Ñ5JÔ5JÐKÑKÔKÑKÔKÔLð 	ð ð�NˆNåØ- ¤Ð-Ð-Ð/WÐ/WÈYÐ/WÑ/WÔ/Wñô ð 	õ Ô Ñ#Ô#ˆØ,ˆÝÐHÐHÐHÐH¸ÐHÑHÔHÑHÔHˆå	ˆr‰ŒØ$(ð @	;ð @	;ð @	;•r”wð @	;µB´Ið @	;ð @	;ð @	;ð @	;ð @	;ð @	;ð @	;ð @	;ð @	;ð @	;ð @	;ð @	;ð @	;ñ 
Œð@	;õD Ô%ØÝÔ"Ô/ØØð	
ñ 
ô 
ˆ	õ ˜#Ô/µÑ5Ô5ð 	
¸Ô9NØŒIØðS
ð :
ð :
ð :
ð 
ð 5�#”.×'Ò'Ñ)Ô)Ð4¨9Ð4Ð4ˆõ
 ˜Ð$4Ð$4Ð5Ñ5Ô5ˆå#Ô-Ø°ð
ñ 
ô 
ˆÔõ #¥7¨2Ð/@À"Ñ#EÔ#EÑFÔFˆÔØ%-ˆÔ˜EÑ"Ø(3ˆÔ˜HÑ%ð ð 	I˜Ð&7Ò7Ð7Ø<EÀa¼LˆCÔÕ 8Ñ9ð
 1tÍ{ÔOeÐ0sÐ0sÐ0sˆÔ-àˆ
r"   )r©   r   r   r   )r€   r�   r�   r‘   rÊ   rÉ   r³   r˜   s   ```` @@@r   rÄ   rÄ   ã   sÂ   øøøøøøø€ ð !ÐÝ
ˆ9�~„~˜ÒÐà%ˆ	å�I‘” !Ò#€IðRð Rð Rð Rð Rð|�¥"¥b &Ô)ð |­hµr½2°vÔ.>ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð |ð| Ðr"   rF   c                 ó0   — t          j        | d„ ¬¦  «        S )Nc                 ó$   — t          | d¦  «         S )NrÅ   )r<   )Úfs    r   r…   z+_maybe_remove_out_wrapper.<locals>.<lambda>}  s   € �7 1Ð&IÑJÔJÐJ€ r"   )Ústop)ra   Úunwrap)rF   s    r   Ú_maybe_remove_out_wrapperrÐ   z  s$   € ÝŒ>Ø
ØJÐJðñ ô ð r"   c                 óŠ   ‡ ‡‡— ˆ fd„Š G ˆfd„dt           j        j        ¦  «        Št          ‰ ¦  «        ˆˆfd„¦   «         }|S )Nc                 ó„   •— t           j                             ¦   «         5   ‰| i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S r   )r‰   Ú_CÚ_AutoDispatchBelowAutograd)rX   rY   Úprims     €r   Úredispatch_primz0backwards_not_supported.<locals>.redispatch_prim‚  s�   ø€ ÝŒX×0Ò0Ñ2Ô2ð 	)ð 	)Ø�4˜Ð( Ð(Ð(ð	)ð 	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	)ð 	)s    5µ9¼9c                   ó@   •— e Zd Zeˆ fd„¦   «         Zed„ ¦   «         ZdS )ú6backwards_not_supported.<locals>.BackwardsNotSupportedc                 óB   •— t          ||¦  «        \  }} ‰||¦  «        S r   )r   )ÚctxÚ	args_specÚ	flat_argsrX   rY   rÖ   s        €r   Úforwardz>backwards_not_supported.<locals>.BackwardsNotSupported.forward‡  s(   ø€ å)¨)°YÑ?Ô?‰LˆD�&Ø"�? 4¨Ñ0Ô0Ð0r"   c                 ó    — t          d¦  «        ‚)Nzbackwards not supported on prim)r~   )rÚ   rX   s     r   Úbackwardz?backwards_not_supported.<locals>.BackwardsNotSupported.backwardŒ  s   € åÐ@ÑAÔAÐAr"   N)re   rf   rg   ÚstaticmethodrÝ   rß   )rÖ   s   €r   ÚBackwardsNotSupportedrØ   †  sX   ø€ € € € € Ø	ð	1ð 	1ð 	1ð 	1ñ 
Œð	1ð 
ð	Bð 	Bñ 
Œð	Bð 	Bð 	Br"   rá   c                  ó¸   •— t          | |f¦  «        \  }}t          j        ¦   «         r't          d„ |D ¦   «         ¦  «        r ‰j        |g|¢R Ž S  ‰| |¦  «        S )Nc              3   óX   K  — | ]%}t          |t          j        ¦  «        ¯|j        V — Œ&d S r   )r,   r‰   ÚTensorÚrequires_grad)r)   r   s     r   r+   zBbackwards_not_supported.<locals>._autograd_impl.<locals>.<genexpr>“  sI   è è € ð +
ð +
Ø !µ*¸QÅÄÑ2MÔ2Mð+
ØŒOð+
ð +
ð +
ð +
ð +
ð +
r"   )r   r‰   Úis_grad_enabledÚanyÚapply)rX   rY   rÜ   rÛ   rá   rÖ   s       €€r   Ú_autograd_implz/backwards_not_supported.<locals>._autograd_impl�  s‡   ø€ å+¨T°6¨NÑ;Ô;Ñˆ	�9ÝÔ Ñ"Ô"ð 	1¥sð +
ð +
Ø%.ð+
ñ +
ô +
ñ (
ô (
ð 	1ð /Ð(Ô.¨yÐE¸9ÐEÐEÐEÐEà"�? 4¨Ñ0Ô0Ð0r"   )r‰   ÚautogradÚFunctionr   )rÕ   ré   rá   rÖ   s   ` @@r   Úbackwards_not_supportedrì   �  s™   øøø€ ð)ð )ð )ð )ð )ðBð Bð Bð Bð Bð Bð B¥¤Ô 7ñ Bô Bð Bõ ˆ4�[„[ð1ð 1ð 1ð 1ð 1ñ „[ð1ð& Ðr"   c                 ór   ‡ — t          j        ‰ ¦  «        }t          ‰ ¦  «        ˆ fd„¦   «         }||_        |S )zQ
    Allows unary operators that accept tensors to work with Python numbers.
    c                  óŠ  •— t          | ¦  «        dk    r¨t          | d         t          ¦  «        r�t          j        t          | d         ¦  «        ¦  «        }t          | ¦  «        }t          j        | d         |¬¦  «        |d<    ‰|i |¤Ž}t          |t          j	        ¦  «        sJ ‚| 
                    ¦   «         S  ‰| i |¤ŽS )Nr   r„   )r©   r,   r   r.   Útype_to_dtyper2   r«   r‰   Útensorrä   Úitem)rX   rY   r   Úargs_r\   rF   s        €r   r_   z-elementwise_unary_scalar_wrapper.<locals>._fn°  s´   ø€ åˆt‰9Œ9�qŠ=ˆ=�Z¨¨Q¬µÑ8Ô8ˆ=ÝÔ'­¨T°!¬W©¬Ñ6Ô6ˆEÝ˜‘J”JˆEÝ”| D¨¤G°5Ð9Ñ9Ô9ˆE�!‰HØ�R˜Ð) &Ð)Ð)ˆFÝ˜f¥e¤lÑ3Ô3Ð3Ð3Ð3Ø—;’;‘=”=Ð àˆr�4Ð"˜6Ð"Ð"Ð"r"   r`   )rF   r^   r_   s   `  r   Ú elementwise_unary_scalar_wrapperró   ª  sM   ø€ õ Ô
˜BÑ
Ô
€Cå
ˆ2�Y„Yð	#ð 	#ð 	#ð 	#ñ „Yð	#ð €CÔØ€Jr"   r   )3ra   ro   Ú	functoolsr   Útypingr   r   r   r   r   r	   r
   Útyping_extensionsr   r‰   Útorch._prims_commonÚ_prims_commonr.   r   r   r   r   r   r   r   Útorch.utilsr   rS   Útorch.utils._pytreer   r   r   r   r   r    r2   r8   r=   r?   rq   rr   ru   Úboolrz   r   rŽ   ri   rÄ   rÐ   rì   ró   r   r"   r   ú<module>rü      sF  ðà €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ 'Ð 'Ð 'Ð 'Ð 'Ð 'à €€€Ø #Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð *Ð )Ð )Ð )Ð )Ð )Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ð €WˆT�]„]€Ø€Yˆt�_„_€ð 
ð	˜~ð 	°e´kð 	Ànð 	ð 	ð 	ñ 
„ð	ð 
ð	˜zð 	°%´+ð 	À*ð 	ð 	ð 	ñ 
„ð	ð 
ð	˜xð 	°´ð 	Àð 	ð 	ð 	ñ 
„ð	ð 
ð	˜tð 	¨E¬Kð 	¸Dð 	ð 	ð 	ñ 
„ð	ð
ð ð ð&˜jð ¨tð ¸
ð ð ð ð ðð ð ðFð Fð Fð Fð Fñ Fô Fð FðT˜nð °Yð ð ð ð ð( 48ðð Ø	ðàðð ˜EÔ/Ô0ðð ð ð ð3�^ð 3¨ð 3ð 3ð 3ð 3ð  ^ð  ¸nð  ÐQUð  ð  ð  ð  ð PUð$ð $ð $Ø ð$Ø+9ð$ØHLð$ð $ð $ð $ð4 ØØ#(ð	Tð Tð TØðTàðTð ðTð !ð	Tð
 ˆx˜˜B˜ÔÐ  (¨2¨r¨6Ô"2Ð2Ô3ðTð Tð Tð Tðn (ð ð ð ð ð#ð #ð #ðR¨ð °hð ð ð ð ð ð r"   