§
    J�’j0  ã                  óâ  — d Z ddlmZ ddlZddlmZ ddlZddlmZm	Z	 erddl
mZmZmZmZmZmZ d„ Zd	„ Zed2d
dœd3d„¦   «         Ze	 	 d4d
dœd5d„¦   «         Ze	 	 d4d
dœd5d„¦   «         Ze	 	 	 d6ddœd7d„¦   «         Ze	 	 	 d6ddœd7d„¦   «         Ze	 	 	 	 	 d8d9d„¦   «         ZeZe	 	 	 	 	 d8d9d„¦   «         ZeZe	 	 	 d6d5d„¦   «         Ze	 	 	 	 	 	 d:d;d"„¦   «         Ze	 	 	 	 	 	 d:d;d#„¦   «         ZeZe	 	 	 	 d<ddœd=d$„¦   «         Z e	 	 	 	 	 d>ddœd=d%„¦   «         Z!e	 	 	 	 	 d>ddœd=d&„¦   «         Z"	 	 	 d?d@d'„Z#	 	 	 d?d@d(„Z$e$Z%	 	 	 d6d
dœdAd*„Z&	 	 	 	 	 dBdd,œdCd/„Z'	 	 	 	 	 dBdd,œdCd0„Z(	 	 	 	 dDdEd1„Z)dS )Fz¾Implementation of reduction operations, to be wrapped into arrays, dtypes etc
in the 'public' layer.

Anything here only deals with torch objects, e.g. "dtype" is a torch.dtype instance etc
é    )ÚannotationsN)ÚTYPE_CHECKINGé   )Ú_dtypes_implÚ_util)Ú	ArrayLikeÚAxisLikeÚ	DTypeLikeÚKeepDimsÚNotImplementedTypeÚOutArrayc                óH   ‡ — t          j        ‰ ¦  «        dˆ fd„	¦   «         }|S )z–
    Generically handle axis arguments in reductions.
    axis is *always* the 2nd arg in the function so no need to have a look at its signature
    Nc                óÆ   •— |�t          j        || j        ¦  «        }|dk    r2t          j        | j        d¬¦  «        }|                      |¦  «        } d} ‰| |g|¢R i |¤ŽS )N© r   ©Úaxis©r   )r   Únormalize_axis_tupleÚndimÚexpand_shapeÚshapeÚreshape)Úar   ÚargsÚkwdsÚnewshapeÚfuncs        €úKC:\Projects\DSCons\.venv\Lib\site-packages\torch\_numpy\_reductions_impl.pyÚwrappedz"_deco_axis_expand.<locals>.wrapped$   sw   ø€ àÐÝÔ-¨d°A´FÑ;Ô;ˆDà�2Š:ˆ:õ Ô)¨!¬'¸Ð:Ñ:Ô:ˆHØ—	’	˜(Ñ#Ô#ˆAØˆDàˆt�A�tÐ+˜dÐ+Ð+Ð+ dÐ+Ð+Ð+ó    ©N)Ú	functoolsÚwraps)r   r   s   ` r   Ú_deco_axis_expandr$      s?   ø€ õ „_�TÑÔð,ð ,ð ,ð ,ð ,ñ Ôð,ð €Nr    c                óZ   — | €|} | j         s| j        st          j        ¦   «         j        S | S )a$  Return a dtype that is real or complex floating-point.

    For inputs that are boolean or integer dtypes, this returns the default
    float dtype; inputs that are complex get converted to the default complex
    dtype; real floating-point dtypes (`float*`) get passed through unchanged
    )Úis_floating_pointÚ
is_complexr   Údefault_dtypesÚfloat_dtype)ÚdtypeÚother_dtypes     r   Ú_atleast_floatr,   5   s:   € ð €}ØˆØÔ#ð 9 uÔ'7ð 9ÝÔ*Ñ,Ô,Ô8Ð8Ø€Lr    F)Úkeepdimsr   r   r   r	   r-   r   c               ó,   — |                       |¦  «        S r!   )Úcount_nonzero)r   r   r-   s      r   r/   r/   C   s   € à�?Š?˜4Ñ Ô Ð r    ÚoutúOutArray | Nonec               ó  — |                       ¦   «         rt          d| j        › d�¦  «        ‚t          j        |¦  «        }| j        t
          j        k    r|                      t
          j        ¦  «        } t          j	        | |¦  «        S )Nzargmax with dtype=ú.)
r'   ÚNotImplementedErrorr*   r   Úallow_only_single_axisÚtorchÚboolÚtoÚuint8Úargmax©r   r   r0   r-   s       r   r:   r:   H   óu   € ð 	‡|‚|�~„~ð CÝ!Ð"A°q´wÐ"AÐ"AÐ"AÑBÔBÐBåÔ'¨Ñ-Ô-€Dà„w•%”*ÒÐà�DŠD•”ÑÔˆåŒ<˜˜4Ñ Ô Ð r    c               ó  — |                       ¦   «         rt          d| j        › d�¦  «        ‚t          j        |¦  «        }| j        t
          j        k    r|                      t
          j        ¦  «        } t          j	        | |¦  «        S )Nzargmin with dtype=r3   )
r'   r4   r*   r   r5   r6   r7   r8   r9   Úargminr;   s       r   r>   r>   \   r<   r    )Úwherer?   r   c               ó^   — t          j        |¦  «        }|€i nd|i}t          j        | fi |¤ŽS ©NÚdim)r   r5   r6   Úany©r   r   r0   r-   r?   Úaxis_kws         r   rC   rC   p   ó=   € õ Ô'¨Ñ-Ô-€DØ�Lˆbˆb u¨d m€GÝŒ9�QÐ"Ð"˜'Ð"Ð"Ð"r    c               ó^   — t          j        |¦  «        }|€i nd|i}t          j        | fi |¤ŽS rA   )r   r5   r6   ÚallrD   s         r   rH   rH   ~   rF   r    Úinitialc                ó‚   — |                       ¦   «         rt          d| j        › �¦  «        ‚|                      |¦  «        S )Nzamax with dtype=)r'   r4   r*   Úamax©r   r   r0   r-   rI   r?   s         r   rK   rK   Œ   ó>   € ð 	‡|‚|�~„~ð @Ý!Ð">°Q´WÐ">Ð">Ñ?Ô?Ð?à�6Š6�$‰<Œ<Ðr    c                ó‚   — |                       ¦   «         rt          d| j        › �¦  «        ‚|                      |¦  «        S )Nzamin with dtype=)r'   r4   r*   ÚaminrL   s         r   rO   rO   ž   rM   r    c                óX   — |                       |¦  «        |                      |¦  «        z
  S r!   )rK   rO   r;   s       r   ÚptprQ   °   s#   € ð �6Š6�$‰<Œ<˜!Ÿ&š& ™,œ,Ñ&Ð&r    r*   úDTypeLike | Nonec                ó   — |�>t          |t          j        ¦  «        s$t          dt	          |¦  «        j        › �¦  «        ‚|t          j        k    rt          j        ¦   «         j	        }|€i nd|i} | j
        dd|i|¤ŽS )Nz)dtype must be None or a torch.dtype, got rB   r*   r   )Ú
isinstancer6   r*   ÚAssertionErrorÚtypeÚ__name__r7   r   r(   Ú	int_dtypeÚsum©r   r   r*   r0   r-   rI   r?   rE   s           r   rY   rY   º   s�   € ð Ð¥¨Eµ5´;Ñ!?Ô!?ÐÝØN½¸U¹¼Ô8LÐNÐNñ
ô 
ð 	
ð •”
ÒÐÝÔ+Ñ-Ô-Ô7ˆà�Lˆbˆb u¨d m€GØˆ1Œ5Ð(Ð(�uÐ( Ð(Ð(Ð(r    c                ó¨   — t          j        |¦  «        }|t          j        k    rt	          j        ¦   «         j        }|€i nd|i} | j        dd|i|¤ŽS ©NrB   r*   r   )r   r5   r6   r7   r   r(   rX   ÚprodrZ   s           r   r]   r]   Ð   s`   € õ Ô'¨Ñ-Ô-€Dà•”
ÒÐÝÔ+Ñ-Ô-Ô7ˆà�Lˆbˆb u¨d m€GØˆ1Œ6Ð)Ð)˜Ð) Ð)Ð)Ð)r    c               ó^   — t          || j        ¦  «        }|€i nd|i} | j        dd|i|¤Ž}|S r\   )r,   r*   Úmean)r   r   r*   r0   r-   r?   rE   Úresults           r   r_   r_   æ   sG   € õ ˜5 !¤'Ñ*Ô*€Eà�Lˆbˆb u¨d m€GØˆQŒVÐ+Ð+˜%Ð+ 7Ð+Ð+€Fà€Mr    c               ó²   — |}t          || j        ¦  «        }t          j        | |¦  «        }|                     ||¬¦  «        }	t          j        |	|¦  «        S ©N)rB   Ú
correction)r,   r*   r   Úcast_if_neededÚstd©
r   r   r*   r0   Úddofr-   r?   Úin_dtypeÚtensorr`   s
             r   re   re   ø   óT   € ð €HÝ˜5 !¤'Ñ*Ô*€EÝÔ! ! UÑ+Ô+€FØ�ZŠZ˜D¨TˆZÑ2Ô2€FÝÔ ¨Ñ1Ô1Ð1r    c               ó²   — |}t          || j        ¦  «        }t          j        | |¦  «        }|                     ||¬¦  «        }	t          j        |	|¦  «        S rb   )r,   r*   r   rd   Úvarrf   s
             r   rl   rl   
  rj   r    c                óü   — |t           j        k    rt          j        ¦   «         j        }|€| j        }t          j        | |¬¦  «        \  \  } }t          j        || j	        ¦  «        }|  
                    ||¬¦  «        S ©Nr   )r   r*   )r6   r7   r   r(   rX   r*   r   Úaxis_none_flattenÚnormalize_axis_indexr   Úcumsum©r   r   r*   r0   s       r   rq   rq   !  ss   € ð •”
ÒÐÝÔ+Ñ-Ô-Ô7ˆØ€}Ø”ˆåÔ(¨°Ð6Ñ6Ô6�J�D€Qˆ$ÝÔ% d¨A¬FÑ3Ô3€Dà�8Š8˜ Uˆ8Ñ+Ô+Ð+r    c                óü   — |t           j        k    rt          j        ¦   «         j        }|€| j        }t          j        | |¬¦  «        \  \  } }t          j        || j	        ¦  «        }|  
                    ||¬¦  «        S rn   )r6   r7   r   r(   rX   r*   r   ro   rp   r   Úcumprodrr   s       r   rt   rt   2  ss   € ð •”
ÒÐÝÔ+Ñ-Ô-Ô7ˆØ€}Ø”ˆåÔ(¨°Ð6Ñ6Ô6�J�D€Qˆ$ÝÔ% d¨A¬FÑ3Ô3€Dà�9Š9˜$ eˆ9Ñ,Ô,Ð,r    Úweightsc               ó|  — |€Ut          | |¬¦  «        }t          j        |                      ¦   «         |                     ¦   «         z  |j        ¬¦  «        }�n| j        j        s|                      ¦   «         } | j        |j        k    r”|€t          d¦  «        ‚|j	        dk    rt          d¦  «        ‚|j        d         | j        |         k    rt          d¦  «        ‚t          j        || j	        dz
  dz  |j        z   ¦  «        }|                     d	|¦  «        }t          j        | |¦  «        }t          | |z  ||¬¦  «        }t          |||¬¦  «        }||z  }|rt!          j        ||| j	        ¦  «        }|r@|j        |j        k    r,t          j        ||j        ¦  «                             ¦   «         }||fS |S )
Nr   )r*   z;Axis must be specified when shapes of a and weights differ.r   z81D weights expected when shapes of a and weights differ.r   z5Length of weights not compatible with specified axis.)r   éÿÿÿÿ)r_   r6   Ú	as_tensorÚnumelr*   r&   Údoubler   Ú	TypeErrorr   Ú
ValueErrorÚbroadcast_toÚswapaxesr   Úresult_type_implrY   r   Úapply_keepdimsÚclone)	r   r   ru   Úreturnedr-   r`   ÚwsumÚresult_dtypeÚ	numerators	            r   Úaverager†   F  sË  € ð €Ý�a˜dÐ#Ñ#Ô#ˆÝŒ˜qŸwšw™yœy¨6¯<ª<©>¬>Ñ9ÀÄÐNÑNÔNˆ‰àŒwÔ(ð 	Ø—’‘
”
ˆAð Œ7�g”mÒ#Ð#Øˆ|ÝØQñô ð ð Œ|˜qÒ Ð ÝØNñô ð ð Œ}˜QÔ 1¤7¨4¤=Ò0Ð0Ý ØKñô ð õ
 Ô(¨°1´6¸A±:ÀÑ2EÈÌÑ2UÑVÔVˆGØ×&Ò& r¨4Ñ0Ô0ˆGõ $Ô4°Q¸Ñ@Ô@ˆÝ˜˜G™ T°Ð>Ñ>Ô>ˆ	Ý�7˜D¨Ð5Ñ5Ô5ˆØ˜TÑ!ˆð ð <ÝÔ% f¨d°A´FÑ;Ô;ˆàð ØŒ:˜œÒ%Ð%ÝÔ% d¨F¬LÑ9Ô9×?Ò?ÑAÔAˆDØ�tˆ|Ðàˆr    Úlinear)ÚinterpolationÚqrˆ   c               óü  — |r	 | j         j        s-t          j        ¦   «         j        }|                      |¦  «        } | j         t          j        k    r|                      t          j        ¦  «        } |€+|  	                    ¦   «         } | 	                    ¦   «         }d}nt          j        || j        ¦  «        }t          j        |¦  «        }t          j        || j         ¦  «        }t          j        | |||¬¦  «        S )Nr   )r   rˆ   )r*   r&   r   r(   r)   r8   r6   Úfloat16Úfloat32Úflattenr   r   r   r5   rd   Úquantile)	r   r‰   r   r0   Úoverwrite_inputÚmethodr-   rˆ   r*   s	            r   rŽ   rŽ   {  sÛ   € ð ð ð
 	àŒ7Ô$ð ÝÔ+Ñ-Ô-Ô9ˆØ�DŠD�‰KŒKˆð 	„w•%”-ÒÐØ�DŠD•”ÑÔˆà€|Ø�IŠI‰KŒKˆØ�IŠI‰KŒKˆØˆˆåÔ)¨$°´Ñ7Ô7ˆõ
 Ô'¨Ñ-Ô-€DåÔ˜Q ¤Ñ(Ô(€AåŒ>˜!˜Q T¸Ð@Ñ@Ô@Ð@r    c          	     óÎ   — t          j        |j        ¦  «        t          u r+|                     t          j        ¦   «         j        ¦  «        }|dz  }t          | ||||||¬¦  «        S )Ng      Y@)r   r�   r�   r-   rˆ   )r   Úpython_type_for_torchr*   Úintr8   r(   r)   rŽ   )	r   r‰   r   r0   r�   r�   r-   rˆ   Úqqs	            r   Ú
percentiler•   ¦  sn   € õ Ô)¨!¬'Ñ2Ô2µcÐ9Ð9Ø�DŠD•Ô,Ñ.Ô.Ô:Ñ;Ô;ˆØ	
ˆU‰€BåØ	Ø
ØØ'ØØØ#ðñ ô ð r    c                óP   — t          | t          j        d¦  «        ||||¬¦  «        S )Ng      à?)r   r�   r0   r-   )rŽ   r6   rx   )r   r   r0   r�   r-   s        r   Úmedianr—   Á  s7   € õ Ø	ÝŒ˜ÑÔØØ'ØØðñ ô ð r    r!   )r   r   r   r	   r-   r   )NN)r   r   r   r	   r0   r1   r-   r   )NNF)
r   r   r   r	   r0   r1   r-   r   r?   r   )NNFNN)r   r   r   r	   r0   r1   r-   r   rI   r   r?   r   )NNNFNN)r   r   r   r	   r*   rR   r0   r1   r-   r   rI   r   r?   r   )NNNF)r   r   r   r	   r*   rR   r0   r1   r-   r   r?   r   )NNNr   F)NNN)r   r   r   r	   r*   rR   r0   r1   )r   r   ru   r   )NNFr‡   F)r   r   r‰   r   r   r	   r0   r1   r-   r   rˆ   r   )NNFF)r   r   r0   r1   r-   r   )*Ú__doc__Ú
__future__r   r"   Útypingr   r6   Ú r   r   Ú_normalizationsr   r	   r
   r   r   r   r$   r,   r/   r:   r>   rC   rH   rK   ÚmaxrO   ÚminrQ   rY   r]   Úproductr_   re   rl   rq   rt   Ú
cumproductr†   rŽ   r•   r—   r   r    r   ú<module>r¡      s+  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à €€€à !Ð !Ð !Ð !Ð !Ð !Ð !Ð !ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð.ð ð ð ð!Èuð !ð !ð !ð !ð !ñ Ôð!ð ð Øð!ð
 ð!ð !ð !ð !ð !ñ Ôð!ð& ð Øð!ð
 ð!ð !ð !ð !ð !ñ Ôð!ð& ð ØØð	
#ð !%ð
#ð 
#ð 
#ð 
#ð 
#ñ Ôð
#ð ð ØØð	
#ð !%ð
#ð 
#ð 
#ð 
#ð 
#ñ Ôð
#ð ð ØØØ"&Ø $ðð ð ð ñ Ôðð €ð ð ØØØ"&Ø $ðð ð ð ñ Ôðð €ð ð ØØð	'ð 'ð 'ð 'ñ Ôð'ð ð Ø"ØØØ"&Ø $ð)ð )ð )ð )ñ Ôð)ð* ð Ø"ØØØ"&Ø $ð*ð *ð *ð *ñ Ôð*ð$ €ð ð Ø"ØØðð !%ðð ð ð ð ñ Ôðð" ð Ø"ØØ	
Øð2ð !%ð2ð 2ð 2ð 2ð 2ñ Ôð2ð" ð Ø"ØØ	
Øð2ð !%ð2ð 2ð 2ð 2ð 2ñ Ôð2ð0 Ø"Øð	,ð ,ð ,ð ,ð ,ð& Ø"Øð	-ð -ð -ð -ð -ð" €
ð
 
ØØð	1ð ð1ð 1ð 1ð 1ð 1ð 1ðp ØØØØð(Að )-ð(Að (Að (Að (Að (Að (Að\ ØØØØðð )-ðð ð ð ð ð ð: 
ØØØðð ð ð ð ð ð r    