Ë
    [^(h"  ã                   ó  — d dl Z d dlZd dlmZ d dlmZmZ d dl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mZmZmZmZmZmZmZ d dlmZ eeeeeeeefZ eeeeefZ!dgerdgng z   Z" G d	„ d
e«      Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(dd„Z)d„ Z*y)é    N)ÚSequence)ÚpartialÚwraps)Ú	TEST_CUDA)Ú_dispatch_dtypesÚ	all_typesÚall_types_andÚall_types_and_complexÚall_types_and_complex_andÚall_types_and_halfÚcomplex_typesÚfloating_and_complex_typesÚfloating_and_complex_types_andÚfloating_typesÚfloating_types_andÚfloating_types_and_halfÚintegral_typesÚintegral_types_and)Útorch_to_numpy_dtype_dictÚcpuÚcudac                   ó   — e Zd Zy)Ú_dynamic_dispatch_dtypesN)Ú__name__Ú
__module__Ú__qualname__© ó    úb/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/testing/_internal/opinfo/utils.pyr   r   7   s   „ àr   r   c                 ó&  — |dv sJ ‚t         s%|dk(  r t        j                  d«       t        d«      S t	        «       }t        t        j                  t        j                  t        j                  «      D ]V  }	  || ||d«      }d}|D ]-  }	  | |j                  g|j                  ¢­i |j                  ¤Ž Œ/ |sŒF|j                  |«       ŒX t        |«      S # t        $ r t        j                  d|› d|› �«       Y ŒŠw xY w# t        $ r d}Y  ŒYw xY w)	N)r   r   r   zGWARNING: CUDA is not available, empty_dtypes dispatch will be returned!r   Fz.WARNING: Unable to generate sample for device:z and dtype:T)r   ÚwarningsÚwarnr   Úsetr   ÚtorchÚboolÚbfloat16ÚhalfÚRuntimeErrorÚinputÚargsÚkwargsÚadd)ÚopÚsample_inputs_fnÚdevice_typeÚsupported_dtypesÚdtypeÚsamplesÚ	supportedÚsamples           r   Úget_supported_dtypesr5   <   s  € à˜/Ñ)Ð)Ð)Ý˜¨Ò.Ü�‰ØUô	
ô (¨Ó+Ð+ä“uÐÜ*¬5¯:©:´u·~±~ÄuÇzÁzÓRò (ˆð
	Ù& r¨;¸¸uÓEˆGð ˆ	Øò 	ˆFðÙ�6—<‘<Ð? &§+¡+Ò?°·±Ó?ð	ò Ø× Ñ  Õ'ð3(ô6 $Ð$4Ó5Ð5øô1 ò 	ô
 �M‰MØ@ÀÀÈ[ÐY^ÐX_Ð`ôñ ð	ûô   ò à!�	Úðús$   Á7CÂ
*DÃ$C>Ã=C>ÄDÄDc                 óp  — t        j                  dd«      }t        | «      dk(  r	 |dd«      S t        | «      }t        D ]-  }t         |«       «      |k(  sŒ |||j
                  dz   «      c S  d }d}t        D ]9  }t         |«       «      }|j                  |«      sŒ%t        |«      }||kD  sŒ6|}|}Œ; |€ |dt        | «      «      S  |t        gt        t        | «      t         |«       «      z
  «      ¢­Ž |j
                  t        t        t        | «      t         |«       «      z
  «      «      z   «      S )NÚreturn_typezdispatch_fn dispatch_fn_strr   r   z()g        )ÚcollectionsÚ
namedtupleÚlenr#   ÚCOMPLETE_DTYPES_DISPATCHr   ÚEXTENSIBLE_DTYPE_DISPATCHÚissubsetÚstrr   Útuple)Údtypesr7   Ú
set_dtypesÚdispatchÚchosen_dispatchÚchosen_dispatch_scoreÚdispatch_dtypesÚscores           r   Údtypes_dispatch_hintrG   d   s6  € ô ×(Ñ(¨Ð8UÓV€Kô ˆ6ƒ{�aÒÙ˜2˜tÓ$Ð$ä�V“€JÜ,ò Cˆä‰x‹z‹?˜jÓ(Ù˜x¨×):Ñ):¸TÑ)AÓBÒBðCð
 €OØÐÜ-ò 'ˆÜ™h›j›/ˆØ×'Ñ'¨
Ô3Øä�OÓ$ˆØÐ(Ó(Ø$)Ð!Ø&‰Oð'ð ÐÙ˜2œs 6›{Ó+Ð+áÜ�Ð@œ5¤ V£¬s±8³:«Ñ!>Ó?Ò@Ø×ÑœC¤¤c¨&£k´C¹»
³OÑ&CÓ DÓEÑEóð r   c                 ó   — | j                   S ©N)Údynamic_dtypes)r-   s    r   Úis_dynamic_dtype_setrK   Š   s   € ð ×ÑÐr   c                 ó¦   — d| j                   › dt        | j                  «      j                  › dt        | j                  «      j                  › d�}|S )Nz
        OpInfo(z,
               dtypes=z,
               dtypesIfCUDA=z,
        )
        )ÚnamerG   r@   Údispatch_fn_strÚdtypesIfCUDA)r-   Úfmt_strs     r   Ústr_format_dynamic_dtyperQ   �   sY   € ðØ—‘ˆyð Ü+¨B¯I©IÓ6×FÑFÐGð HÜ1°"·/±/ÓB×RÑRÐSð T	ð€Gð €Nr   c                 ó8   ‡ ‡— d„ Št        ‰ «      ˆ ˆfd„«       }|S )Nc                 óÈ   — | t         j                  t        t         j                  t         j                  t         j
                  t         j                  t         j                  fv S rI   )ÚnpÚbool_r%   Úuint8Úint8Úint16Úint32Úint64)r1   s    r   Úis_integralz=np_unary_ufunc_integer_promotion_wrapper.<locals>.is_integral§   sA   € ØÜ�H‰HÜÜ�H‰HÜ�G‰GÜ�H‰HÜ�H‰HÜ�H‰Hð
ð 
ð 	
r   c                 óœ   •— t         t        j                  «          } ‰| j                  «      r ‰| j	                  |«      «      S  ‰| «      S rI   )r   r$   Úget_default_dtyper1   Úastype)ÚxÚnp_dtypeÚfnr[   s     €€r   Ú
wrapped_fnz<np_unary_ufunc_integer_promotion_wrapper.<locals>.wrapped_fn²   sA   ø€ ô -¬U×-DÑ-DÓ-FÑGˆá�q—w‘wÔÙ�a—h‘h˜xÓ(Ó)Ð)Ù�!‹uˆr   )r   )ra   rb   r[   s   ` @r   Ú(np_unary_ufunc_integer_promotion_wrapperrc   ›   s(   ù€ ò	
ô ˆ2ƒYôó ðð Ðr   c                 óT   ‡ ‡— t        ‰ «      dt        j                  fˆ ˆfd„«       }|S )aA  Wraps a NumPy reduction operator.

    The wrapper function will forward dim, keepdim, mask, and identity
    kwargs to the wrapped function as the NumPy equivalent axis,
    keepdims, where, and initiak kwargs, respectively.

    Args:
        f: NumPy reduction operator to wrap
        supports_keepdims (bool, optional): Whether the NumPy operator accepts
            keepdims parameter. If it does not, the wrapper will manually unsqueeze
            the reduced dimensions if it was called with keepdim=True. Defaults to True.

    Returns:
        Wrapped function

    r_   c                 óz  •— t        |j                  «       «      }|j                  dd «      }|j                  dd«      }d|v r;t        |t        «      rt        |«      n|}| j                  dk(  r
|dv rd |d<   n||d<   d|v r‰
r||d<   d|v rS|j                  d«      }|�@|j                  t        j                  k(  sJ ‚|j                  «       j                  «       |d	<   d
|v r€|j                  d
«      }|�m|j                  t        j                  u r.|j                  «       j                  t        j                  «      }n|j                  «       }|j                  «       |d<    ‰	| g|¢­i |¤Ž}|rI‰
sG| j                  dkD  r8|€t!        t#        | j                  «      «      n|}t%        j&                  ||«      }|S )NÚdimÚkeepdimFr   >   ©r   ©éÿÿÿÿr   rj   ÚaxisÚkeepdimsÚmaskÚwhereÚidentityÚinitial)r#   ÚkeysÚpopÚ
isinstancer   r?   ÚndimÚlayoutr$   Ústridedr   Únumpyr1   r&   ÚtoÚfloat32ÚlistÚrangerT   Úexpand_dims)r_   r*   r+   rq   rf   rg   rm   ro   ÚresultÚfÚsupports_keepdimss            €€r   Úwrapperz*reference_reduction_numpy.<locals>.wrapperÑ   sŠ  ø€ ô �6—;‘;“=Ó!ˆà�j‰j˜ Ó%ˆØ—*‘*˜Y¨Ó.ˆà�D‰=Ü *¨3´Ô 9”%˜”*¸sˆCð �v‰v˜Š{˜sÐ&:Ñ:Ø!%��v’à!$��v‘à˜ÑÑ!2Ø!(ˆF�:Ñà�T‰>Ø—:‘:˜fÓ%ˆDØÐØ—{‘{¤e§m¡mÒ3Ð3Ð3Ø"&§(¡(£*×"2Ñ"2Ó"4��w‘à˜ÑØ—z‘z *Ó-ˆHØÐ#Ø—>‘>¤U§^¡^Ñ3Ø'Ÿ|™|›~×0Ñ0´·±Ó?‘Hà'Ÿ|™|›~�HØ$,§N¡NÓ$4��yÑ!á�1Ð&�tÒ&˜vÑ&ˆñ Ñ,°·±¸!²Ø),¨”$”u˜QŸV™V“}Ô%¸#ˆCÜ—^‘^ F¨CÓ0ˆFàˆr   )r   ÚnptÚNDArray)r~   r   r€   s   `` r   Úreference_reduction_numpyrƒ   ¿   s.   ù€ ô$ ˆ1ƒXð*”3—;‘;õ *ó ð*ðX €Nr   c                 óŠ  — d|vr›t        j                  | j                  t         j                  «      r | j	                  t         j
                  «      } nMt        j                  | j                  t         j                  «      r| j	                  t         j                  «      } t        t         j                  «      } || g|¢­i |¤ŽS )aR  
    The function will call np.prod with type as np.int64 if the input type
    is int or uint64 if is uint. This is necessary because windows np.prod uses by default
    int32 while on linux it uses int64.
    This is for fixing integer overflow https://github.com/pytorch/pytorch/issues/77320

    Returns:
        np.prod of input
    r1   )
rT   Ú
issubdtyper1   Úsignedintegerr^   rZ   ÚunsignedintegerÚuint64rƒ   Úprod)Úar*   r+   ra   s       r   Ú
prod_numpyr‹     sƒ   € ð �fÑÜ�=‰=˜Ÿ™¤"×"2Ñ"2Ô3Ø—‘œŸ™Ó"‰AÜ�]‰]˜1Ÿ7™7¤B×$6Ñ$6Ô7Ø—‘œŸ™Ó#ˆAä	"¤2§7¡7Ó	+€BÙˆaÐ!�$Ò!˜&Ñ!Ð!r   )T)+r8   r!   Úcollections.abcr   Ú	functoolsr   r   rw   rT   Únumpy.typingÚtypingr�   r$   Ú#torch.testing._internal.common_cudar   Ú$torch.testing._internal.common_dtyper   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Ú$torch.testing._internal.common_utilsr   r;   r<   ÚDEVICESr   r5   rG   rK   rQ   rc   rƒ   r‹   r   r   r   ú<module>r”      s¼   ðó Û Ý $ß $ã Ý ã Ý 9÷÷ ÷ ÷ õ  Kð ØØØØØØØð	Ð ð ØØ"ØØðÐ ð ˆ'¡�f‘X°Ñ
3€ô	Ð/ô 	ò
%6òP#òLòò!óH?óD"r   