Ë
    ¥š¾jƒ  ã                   ó´   — d dl mZmZ d dlZd dlmZmZmZmZ d dl	m
Z
 d dlmZ d„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Z G d„ de«      Z G d„ de¬«      Z G d„ de«      Zy)é    )ÚABCMetaÚabstractmethodN)ÚCallableÚListÚProtocolÚSequence)Úfind_paths_if©Úmake_tensordesc_argsc                 ó²   — | j                   g| j                  ¢| j                  ¢| j                  dk(  ‘| j                  ‘| j                  ¢| j                  ¢S )NÚnan)ÚbaseÚshapeÚstridesÚpaddingÚround_f32_to_tf32©Úargs    ú`/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/triton/backends/driver.pyÚdecompose_descriptorr   	   sT   € ð �H‰HÐv�s—y‘yÐv 3§;¡;Ðv°·±¸uÑ0DÐvÀc×F[ÑF[ÐvÐ^a×^gÑ^gÐvÐjm×juÑjuÐvÐvó    c                 óH   — t        | t        «      xr | j                  d«      S )NÚ
tensordesc)Ú
isinstanceÚstrÚ
startswithr   s    r   Ú_is_descriptorr      s   € Ü�cœ3ÓÒ@ C§N¡N°<Ó$@Ð@r   c                 óÖ   ‡ ‡‡‡‡	— t        ‰j                  «       «      Št        ‰d„ «      }t        |«      dk(  r‰ S i Š	|D ]  }‰	}|D ]  }|j	                  |i «      }Œ Œ ˆ ˆˆ	ˆˆfd„}|S )Nc                 ó   — t        |«      S ©N)r   )Ú_Úxs     r   ú<lambda>z-wrap_handle_tensordesc_impl.<locals>.<lambda>   s   € ¼^ÈAÓ=N€ r   r   c                  óL   •— | d d }| d   }t        |‰‰‰|‰«      } ‰g |¢|‘­Ž S )Néÿÿÿÿr
   )	ÚargsÚ	base_argsÚkernel_argsÚwrappedÚlauncherÚmake_tensordesc_argÚrelevant_pathsÚ	signatureÚtensordesc_metas	       €€€€€r   Úinnerz*wrap_handle_tensordesc_impl.<locals>.inner"   sH   ø€ Ø˜˜"�Iˆ	Ø˜2‘hˆÜ&ØØØØØØó
ˆñ Ð,˜Ð, GÒ,Ð,r   )ÚtupleÚvaluesr	   ÚlenÚ
setdefault)
r*   r-   r.   r+   Útensordesc_pathsÚpathÚcurÚstepr/   r,   s
   ````     @r   Úwrap_handle_tensordesc_implr8      s‚   ü€ Ü�i×&Ñ&Ó(Ó)€IÜ$ YÑ0NÓOÐÜ
ÐÓ Ò!Øˆð
 €NØ ò +ˆØˆØò 	+ˆDØ—.‘.  rÓ*‰Cñ	+ð+÷
-ð -ð €Lr   c                 ó"  — t        j                  d| «      }|s
J d| › �«       ‚|j                  d«      }|j                  d«      }|j                  d«      dz   }t        j                  d| «      }|rt        |j                  d«      «      n|}||fS )Nz+tensordesc(?:_im2col)?<([^[>]*)\[([^\]]*)\]z"Malformed tensor descriptor type: é   é   ú,z,input_rank=(\d+))ÚreÚmatchÚgroupÚcountÚsearchÚint)Ú
descriptorr>   ÚdtypeÚblock_shapeÚ
block_ndimÚ
rank_matchÚndims          r   Ú_parse_descriptorrI   2   s‹   € Ü�H‰HÐCÀZÓP€EÙÐCÐ6°z°lÐCÓCˆ5à�K‰K˜‹N€EØ—+‘+˜a“.€KØ×"Ñ" 3Ó'¨!Ñ+€Jä—‘Ð/°Ó<€JÙ'1Œ3ˆz×Ñ Ó"Ô#°z€DØ�4ˆ=Ðr   c                 ó†  — t        | «      \  }}g }|s[|j                  d|z   «       t        d|z  «      D ]  }|j                  d«       Œ |j                  d«       |j                  d«       n|j                  |«       t        |«      D ]  }|j                  d«       Œ t        |«      D ]  }|j                  d«       Œ |S )NÚ*r;   Úi64Úi1Úi32)rI   ÚappendÚrange)rC   Úhas_tensordesc_metaÚdescriptor_typerD   rH   Úexpandedr!   s          r   Ú_expand_descriptorrT   ?   s´   € Ü# JÓ/�K€Eˆ4Ø€Hñ Ø�‰˜˜e™Ô$Ü�q˜4‘x“ò 	#ˆAØ�O‰O˜EÕ"ð	#à�‰˜ÔØ�‰˜Õà�‰˜Ô(ä�4‹[ò ˆØ�‰˜Õðä�4‹[ò ˆØ�‰˜Õðà€Or   c                 óX   ‡‡‡— t        |«      Šg }ˆˆˆfd„Šg }| D ]  } ‰||«       Œ |S )Nc                 óò   •— t        | «      r|j                  t        | ‰‰«      «       y t        | t        «      r-g }| D ]  } ‰||«       Œ |j                  t	        |«      «       y |j                  | «       y r    )r   ÚextendrT   r   r0   rO   )r-   Úresultr/   ÚsrR   rQ   Úvisits       €€€r   rZ   zexpand_signature.<locals>.visitZ   sh   ø€ Ü˜)Ô$Ø�M‰MÔ,¨YÐ8KÈ_Ó]Ô^ØÜ˜	¤5Ô)ØˆEØò  �Ù�a˜•ð à�M‰Mœ% ›,Õ'à�M‰M˜)Õ$r   )Úbool)r-   r.   rR   rX   rY   rQ   rZ   s     `  @@r   Úexpand_signaturer\   U   s=   ú€ Ü˜Ó/Ðà€Fö
%ð €FØò ˆÙˆa�Õðà€Mr   c                   ó,   — e Zd Zdedee   dee   fd„Zy)ÚBenchmarkerÚkernel_callÚ	quantilesÚreturnc                 ó   — y r    © )Úselfr_   r`   Úkwargss       r   Ú__call__zBenchmarker.__call__n   ó   € Ør   N)Ú__name__Ú
__module__Ú__qualname__r   r   Úfloatr   rf   rc   r   r   r^   r^   l   s'   „ ð Hð ¸DÀ¹Kð ÐV^Ð_dÑVeô r   r^   c                   óŽ   — e Zd Zeed„ «       «       Zededefd„«       Zed„ «       Zed„ «       Z	ede
fd„«       Zded	efd
„Zdd„Zy)Ú
DriverBasec                  ó   — y r    rc   ©rd   s    r   Ú	is_activezDriverBase.is_activet   s   € ð 	r   Útyra   c                  ó   — y)zù
        Converts a Triton type string to its corresponding C++ type string for this backend.

        Args:
            ty (str): The Triton type string. e.g., 'i32', '*fp16', 'fp32'.

        Returns:
            str: The C++ type string.
        Nrc   )rd   rq   s     r   Úmap_python_to_cpp_typez!DriverBase.map_python_to_cpp_typey   s   € ð 	r   c                  ó   — y r    rc   ro   s    r   Úget_current_targetzDriverBase.get_current_target†   ó   € àr   c                  ó   — y r    rc   ro   s    r   Úget_active_torch_devicez"DriverBase.get_active_torch_deviceŠ   rv   r   c                 ó   — t         ‚)z[
        Return the benchmarking function that this backend should use by default.
        ©ÚNotImplementedErrorro   s    r   Úget_benchmarkerzDriverBase.get_benchmarkerŽ   s
   € ô
 "Ð!r   ÚsizeÚ	alignmentc                 ó   — t         ‚)ze
        Allocate profile scratch when no explicit profile allocator override was installed.
        rz   )rd   r}   r~   Ústreams       r   Ú allocate_default_profile_scratchz+DriverBase.allocate_default_profile_scratch•   s
   € ô "Ð!r   Nc                  ó   — y r    rc   ro   s    r   Ú__init__zDriverBase.__init__›   rg   r   )ra   N)rh   ri   rj   Úclassmethodr   rp   r   rs   ru   rx   r^   r|   rB   r�   rƒ   rc   r   r   rm   rm   r   s™   „ àØñó ó ðð ð
¨ð 
°ò 
ó ð
ð ñó ðð ñó ðð ð" ò "ó ð"ð"°Sð "ÀSó "ôr   rm   )Ú	metaclassc                   ó(   — e Zd Zd„ Zd„ Zdedefd„Zy)Ú	GPUDriverc                 óþ   ‡— dd l Š‰j                  j                  | _        	 ddlm} || _        ‰j                  j                  | _        ‰j                  j                  | _
        y # t        $ r ˆfd„| _        Y ŒLw xY w)Nr   )Ú_cuda_getCurrentRawStreamc                 óN   •— ‰j                   j                  | «      j                  S r    )ÚcudaÚcurrent_streamÚcuda_stream)ÚidxÚtorchs    €r   r#   z$GPUDriver.__init__.<locals>.<lambda>©   s   ø€ °%·*±*×2KÑ2KÈCÓ2P×2\Ñ2\€ r   )r�   r‹   Úget_device_capabilityÚtorch._Cr‰   Úget_current_streamÚImportErrorÚcurrent_deviceÚget_current_deviceÚ
set_deviceÚset_current_device)rd   r‰   r�   s     @r   rƒ   zGPUDriver.__init__¡   sj   ø€ ãØ%*§Z¡Z×%EÑ%EˆÔ"ð	]Ý:Ø&?ˆDÔ#ð #(§*¡*×";Ñ";ˆÔØ"'§*¡*×"7Ñ"7ˆÕøô ò 	]Û&\ˆDÖ#ð	]ús   ¢A& Á&A<Á;A<c                 ó   — |S r    rc   )rd   Útensormaps_infor&   s      r   Úassemble_tensormap_to_argz#GPUDriver.assemble_tensormap_to_arg®   s   € Øˆr   r}   r~   c                 ó  — dd l }| j                  «       }| j                  «       }|€|j                  ||j                  |¬«      S |dk(  rH|j                  |j                  |«      «      5  |j                  ||j                  |¬«      cd d d «       S |j                  ||¬«      }|j                  |«      5  |j                  ||j                  |¬«      }d d d «       j                  |«       |S # 1 sw Y   ŒgxY w# 1 sw Y   Œ(xY w)Nr   )rD   Údevice)rœ   )	r�   rx   Úget_device_interfaceÚzerosÚint8r€   Údefault_streamÚExternalStreamÚrecord_stream)	rd   r}   r~   r€   r�   rœ   Údevice_interfaceÚlaunch_streamÚscratchs	            r   r�   z*GPUDriver.allocate_default_profile_scratch±   sý   € ÛØ×-Ñ-Ó/ˆØ×4Ñ4Ó6ÐØˆ>Ø—;‘;˜t¨5¯:©:¸f�;ÓEÐEØ�QŠ;Ø!×(Ñ(Ð)9×)HÑ)HÈÓ)PÓQñ JØ—{‘{ 4¨u¯z©zÀ&�{ÓI÷Jñ Jà(×7Ñ7¸ÀvÐ7ÓNˆØ×$Ñ$ ]Ó3ñ 	IØ—k‘k $¨e¯j©jÀ�kÓHˆG÷	Ià×Ñ˜mÔ,Øˆ÷Jð Jú÷	Ið 	Iús   Á*C0Â6C<Ã0C9Ã<DN)rh   ri   rj   rƒ   rš   rB   r�   rc   r   r   r‡   r‡   Ÿ   s   „ ò
8òð°Sð ÀSô r   r‡   )Úabcr   r   r=   Útypingr   r   r   r   Útriton._utilsr	   Útriton._C.libtritonr   r   r   r8   rI   rT   r\   r^   rm   r‡   rc   r   r   ú<module>rª      s\   ðß 'Û 	ß 5Ó 5å 'Ý 4òwòAòò>
òò,ô.�(ô ô*˜7õ *ôZ�
õ r   