Ë
    Z^(h£·  ã            !       ó–  — U d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddl	mZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlZddlZ G d„ de«      Z G d„ d«      Zeeef   ZdZi Zeed<   	 dddœZg d¢Z G d„ de «      Z!d„ Z" G d„ d«      Z# G d„ d«      Z$dedefd„Z%dedede&fd „Z'd!„ Z(	 	 	 	 	 d]d"ed#ed$eded%e&d&e&dee   fd'„Z)d(ed)ed*ed+ed,eee*f   d-e&d&e&d.e$d/e&ddfd0„Z+d1„ Z,d2„ Z- ej\                  d3«      Z/d4„ Z0d5„ Z1d6„ Z2d7„ Z3 ej\                  d8«      Z4d9„ Z5 ej\                  d:«      Z6d;„ Z7 ej\                  d<«      Z8d=„ Z9d^d>„Z:d?„ Z;d@„ Z<dA„ Z=dB„ Z>dC„ Z? G dD„ dE«      Z@ G dF„ dG«      ZA eA«       ZBi ZC eA«       ZDi ZEeeeFf   edH<   i ZGe
D ]­  ZH eIeHe«      sJ ‚eHj•                  «       D ]�  \  ZKZLeLd   ZMeLdd ZNejž                  eNvr<eDj¡                  eK«       ej¢                  eNv reEj¥                  eKdI«      reMeGeK<   neMeEeK<   ej¦                  eNvsŒiej¢                  eNvsŒxeBj¡                  eK«       eMeCeK<   Œ� Œ¯  ej\                  eBj©                  «       «      ZU ej\                  dJeDj©                  «       › dK�«      ZV ej\                  dL«      ZW ej\                  dM«      ZX ej\                  dN«      ZY ej\                  dO«      ZZ	 d(ed)ed*ed+ed,eee*f   d-e&d&e&d.e$d/e&defdP„Z[d^dQ„Z\dR„ Z]dS„ Z^ ej\                  dT«      Z_dU„ Z`dV„ Za	 	 	 	 	 	 	 	 	 	 	 	 	 	 d_dWedXe&dedYed(ed+ed#edZed%e&d$ed/e&d-e&d&e&d[e&d.ee$   def d\„Zby)`a   The Python Hipify script.
##
# Copyright (c) 2015-2016 Advanced Micro Devices, Inc. All rights reserved.
#               2017-2018 Advanced Micro Devices, Inc. and
#                         Facebook Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
é    Né   )Ú	constants)ÚCUDA_TO_HIP_MAPPINGS)ÚMATH_TRANSPILATIONS)ÚOptional)ÚIterator)ÚMappingÚIterable)ÚEnumc                   ó   — e Zd ZdZdZy)ÚCurrentStater   é   N)Ú__name__Ú
__module__Ú__qualname__ÚINITIALIZEDÚDONE© ó    ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/utils/hipify/hipify_python.pyr   r   -   s   „ Ø€KØ�Dr   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚHipifyResultc                 ó.   — || _         || _        d| _        y )NÚ ©Úcurrent_stateÚhipified_pathÚstatus)Úselfr   r   s      r   Ú__init__zHipifyResult.__init__2   s   € Ø*ˆÔØ*ˆÔØˆ�r   c                 óT   — d| j                   › d| j                  › d| j                  › �S )NzHipifyResult:: current_state: z, hipified_path : z
, status: r   ©r   s    r   Ú__str__zHipifyResult.__str__7   sF   € Ø0°×1CÑ1CÐ0DÐDVÐW[×WiÑWiÐVjÐjtÐuy÷  vAñ  vAð  uBð  Cð  	Dr   N)r   r   r   r    r#   r   r   r   r   r   1   s   „ òó
Dr   r   z;// !!! This is a file automatically generated by hipify!!!
ÚHIPIFY_FINAL_RESULTÚscalar_t)ÚDtypeÚT)!Ú
InputErrorÚopenfÚbcolorsÚGeneratedFileCleanerÚmatch_extensionsÚmatched_files_iterÚpreprocess_file_and_save_resultÚcompute_statsÚadd_dim3ÚprocessKernelLaunchesÚfind_closure_groupÚfind_bracket_groupÚfind_parentheses_groupÚreplace_math_functionsÚhip_header_magicÚreplace_extern_sharedÚget_hip_file_pathÚis_out_of_placeÚis_pytorch_fileÚis_cusparse_fileÚis_special_fileÚis_caffe2_gpu_filer=   ÚTrieÚpreprocessorÚfile_specific_replacementÚfile_add_headerÚfix_static_global_kernelsÚextract_argumentsÚstr2boolr   r   Úhipifyc                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r(   c                 ó2   •— t         ‰| �  |«       || _        y ©N)Úsuperr    Úmessage)r   rJ   Ú	__class__s     €r   r    zInputError.__init__N   s   ø€ Ü‰Ñ˜Ô!Øˆ�r   c                 ó    — d| j                   › �S )NzInput error: )rJ   r"   s    r   r#   zInputError.__str__R   s   € Ø˜tŸ|™|˜nÐ-Ð-r   )r   r   r   r    r#   Ú__classcell__)rK   s   @r   r(   r(   K   s   ø„ ôö.r   r(   c                 ó   — t        | |d¬«      S )NÚignore)Úerrors)Úopen)ÚfilenameÚmodes     r   r)   r)   V   s   € Ü�˜$ xÔ0Ð0r   c                   ó,   — e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
r*   z[95mz[94mz[92mz[93mz[91mz[0mz[1mz[4mN)r   r   r   ÚHEADERÚOKBLUEÚOKGREENÚWARNINGÚFAILÚENDCÚBOLDÚ	UNDERLINEr   r   r   r*   r*   [   s*   „ Ø€FØ€FØ€GØ€GØ€DØ€DØ€DØ�Ir   r*   c                   ó2   — e Zd ZdZdd„Zd„ Zd„ Zdd„Zd„ Zy)	r+   z+Context Manager to clean up generated filesc                 ó>   — || _         t        «       | _        g | _        y rH   )Úkeep_intermediatesÚsetÚfiles_to_cleanÚdirs_to_clean)r   r_   s     r   r    zGeneratedFileCleaner.__init__p   s   € Ø"4ˆÔÜ!›eˆÔØˆÕr   c                 ó   — | S rH   r   r"   s    r   Ú	__enter__zGeneratedFileCleaner.__enter__u   s   € Øˆr   c                 óÎ   — t         j                  j                  |«      s8| j                  j	                  t         j                  j                  |«      «       t        |g|¢­i |¤ŽS rH   )ÚosÚpathÚexistsra   ÚaddÚabspathrQ   )r   ÚfnÚargsÚkwargss       r   rQ   zGeneratedFileCleaner.openx   sH   € Ü�w‰w�~‰~˜bÔ!Ø×Ñ×#Ñ#¤B§G¡G§O¡O°BÓ$7Ô8Ü�BÐ(˜Ò( Ñ(Ð(r   c                 óÚ  — t         j                  j                  |«      \  }}|s"t         j                  j                  |«      \  }}|r4|r2t         j                  j                  |«      s| j	                  |d¬«       t         j                  j                  |«      r|sNt        j                  |«       | j                  j                  t         j                  j                  |«      «       y y )NT)Úexist_ok)
rf   rg   Úsplitrh   ÚmakedirsÚisdirÚmkdirrb   Úappendrj   )r   Údnro   ÚparentÚns        r   rq   zGeneratedFileCleaner.makedirs}   s˜   € Ü—G‘G—M‘M "Ó%‰	ˆ�ÙÜŸ™Ÿ™ fÓ-‰IˆF�AÙ‘a¤§¡§¡¨vÔ 6Ø�M‰M˜&¨4ˆMÔ0Ü�w‰w�}‰}˜RÔ ©Ü�H‰H�RŒLØ×Ñ×%Ñ%¤b§g¡g§o¡o°bÓ&9Õ:ð )1r   c                 óÂ   — | j                   sS| j                  D ]  }t        j                  |«       Œ | j                  d d d…   D ]  }t        j
                  |«       Œ y y )Néÿÿÿÿ)r_   ra   rf   Úunlinkrb   Úrmdir)r   ÚtypeÚvalueÚ	tracebackÚfÚds         r   Ú__exit__zGeneratedFileCleaner.__exit__‡   sY   € Ø×&Ò&Ø×(Ñ(ò �Ü—	‘	˜!•ðà×'Ñ'©¨"¨Ñ-ò �Ü—‘˜•ñð 'r   N©F)	r   r   r   Ú__doc__r    rd   rQ   rq   r�   r   r   r   r+   r+   n   s   „ Ù5ó ò
ò)ó
;ór   r+   rg   Úreturnc                 óB   — | j                  t        j                  d«      S )Nú/)Úreplacerf   Úsep)rg   s    r   Ú_to_unix_pathr‰   �   s   € Ø�<‰<œŸ™ Ó$Ð$r   rR   Ú
extensionsc                 ó,   ‡ — t        ˆ fd„|D «       «      S )z<Helper method to see if filename ends with certain extensionc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrH   ©Úendswith)Ú.0ÚerR   s     €r   ú	<genexpr>z#match_extensions.<locals>.<genexpr>•   s   øè ø€ Ò8¨ˆx× Ñ  ×#Ñ8ùó   ƒ©Úany)rR   rŠ   s   ` r   r,   r,   “   s   ø€ äÓ8¨ZÔ8Ó8Ð8r   c                 ó,   ‡ — t        ˆ fd„|D «       «      S )Nc              3   óJ   •K  — | ]  }t        j                   ‰|«      –— Œ y ­wrH   )Úfnmatch)r�   ÚpatternÚfilepaths     €r   r‘   z_fnmatch.<locals>.<genexpr>™   s   øè ø€ ÒJ°gŒw�‰˜x¨×1ÑJùs   ƒ #r“   )r™   Úpatternss   ` r   Ú_fnmatchr›   ˜   s   ø€ ÜÓJÀÔJÓJÐJr   Ú	root_pathÚincludesÚignoresÚout_of_place_onlyÚis_pytorch_extensionc              #   ó®  K  — t        |«      }t        j                  | d¬«      D �]+  \  }}}	t        j                  j	                  || «      }
|
dk(  rPd|v r|j                  d«       d|v r|j                  d«       d|v r"|j                  d«       |j                  d«       |	D ]ª  }t        t        j                  j                  ||«      «      }t        t        j                  j                  |
|«      «      }t        ||«      sŒbt        ||«      rŒot        ||«      s||v sŒ€|s%t        |«      st        |«      sŒ™|rt        |«      sŒ§|–— Œ¬ �Œ. y ­w)NT)Útopdownú.z.gitÚbuildÚthird_partyzthird_party/nvfuser)r`   rf   Úwalkrg   ÚrelpathÚremovert   r‰   Újoinr›   r,   r:   r=   r9   )rœ   r�   rž   rŠ   rŸ   r    Úexact_matchesÚabs_dirpathÚdirsÚ	filenamesÚrel_dirpathrR   r™   Úrel_filepaths                 r   r-   r-   œ   s(  è ø€ ô ˜“M€Mô +-¯'©'°)ÀTÔ*Jó Ñ&ˆ�d˜IÜ—g‘g—o‘o k°9Ó=ˆØ˜#Òà˜‰~Ø—‘˜FÔ#Ø˜$‰Ø—‘˜GÔ$Ø Ñ$Ø—‘˜MÔ*Ø—‘Ð1Ô2Ø!ò 	ˆHÜ$¤R§W¡W§\¡\°+¸xÓ%HÓIˆHÜ(¬¯©¯©°kÀ8Ó)LÓMˆLô ˜ 8Õ,Ü! (¨GÕ4Ü% h°
Ô;¸xÈ=Ò?Xá+Ü*¨<Ô8ÔASÐT`ÔAaØ Ù(´ÀÔ1NØ Ø“ò	ñùs   ‚DEÄEÄEÄ$1EÚoutput_directoryr™   Ú	all_filesÚheader_include_dirsÚstatsÚhip_clang_launchÚ	clean_ctxÚshow_progressc	                 óf  — t         j                  j                  t         j                  j                  | |«      «      }	t	        t
        j                  |	¬«      }
|
t        |	<   t        | ||||||||«	      }|r2d|j                  vr$t        |	d|j                  |j                  d¬«       |t        |	<   y )N)r   r   Úignoredz->T)Úflush)rf   rg   rj   r©   r   r   r   r$   r?   r   Úprintr   )r°   r™   r±   r²   r³   r´   r    rµ   r¶   Úfin_pathÚhipify_resultÚresults               r   r.   r.   È   s¡   € ô �w‰w�‰œrŸw™wŸ|™|Ð,<¸hÓGÓH€HÜ ¬|×/GÑ/GÐW_Ô`€MØ$1Ô˜Ñ!ÜÐ*¨H°iÐATÐV[Ø*Ð,@À)È]ó\€Fñ ˜¨&¯-©-Ñ7ÜØ�dØ× Ñ  &§-¡-°tõ	=ð %+Ô˜Ò!r   c                 óØ   — | d   D ��ch c]  \  }}|’Œ	 }}}t        dt        |«      d›�«       t        dj                  |«      «       t        dt        | d   «      d›�«       y c c}}w )NÚunsupported_callsz1Total number of unsupported CUDA function calls: r€   ú, z+
Total number of replaced kernel launches: Úkernel_launches)rº   Úlenr©   )r³   Ú	cuda_callÚ	_filepathr¿   s       r   r/   r/   á   sx   € ØAFÐGZÑA[×\Ñ'=¨	°9šÐ\ÐÑ\ô 
Ð=¼cÐBSÓ>TÐUVÐ=WÐ
XÔYô 
ˆ$�)‰)Ð%Ó
&Ô'ô 
Ð8¼¸UÐCTÑ=UÓ9VÐWXÐ8YÐ
ZÕ[ùó ]s   ‰A&c                 ó  — d}d}| j                  dd«      j                  dd«      } t        d«      D �cg c]  }i ‘Œ }}d||   d<   t        | «      D ]b  \  }}|dkD  r nX|dk(  r|dz  }n
|d	k(  r|dz  }|d
k(  s|t        | «      dz
  k(  sŒ9|dk(  sŒ?||d
k7  z   ||   d<   |dz  }|dk  sŒX|dz   ||   d<   Œd | |d   d   |d   d   dz    }| |d   d   |d   d    }	| |d   d   |d   d    j                  dd«      j	                  d«      }
| |d   d   |d   d    j                  dd«      j	                  d«      }d|
› d	�}d|› d	�}|j                  |
|«      }|	j                  ||«      }|j                  ||	z   ||z   «      }|S c c}w )zBadds dim3() to the second and third arguments in the kernel launchr   ú<<<r   ú>>>r   Ústartr   ú(ú)ú,Úendú
ú zdim3()r‡   ÚrangeÚ	enumeraterÂ   Ústrip)Úkernel_stringÚcuda_kernelÚcountÚclosureÚ_Úarg_locsÚindÚcÚfirst_arg_rawÚsecond_arg_rawÚfirst_arg_cleanÚsecond_arg_cleanÚfirst_arg_dim3Úsecond_arg_dim3Úfirst_arg_raw_dim3Úsecond_arg_raw_dim3s                   r   r0   r0   î   s  € à€EØ€GØ!×)Ñ)¨%°Ó4×<Ñ<¸UÀBÓG€MÜ27¸³(Ö%;¨Q¢bÐ%;€HÐ%;Ø €HˆU�O�GÑÜ˜MÓ*ò 3‰ˆˆQØ�1Š9ÙØ�Š8Ø�q‰L‰GØ�#ŠXØ�q‰LˆGØ�ŠH˜œs =Ó1°AÑ5Ó5¸7Àa»<Ø%(¨A°©HÑ%5ˆH�U‰O˜EÑ"Ø�Q‰JˆEØ�q‹yØ+.°©7�˜‘ Ò(ð3ð " (¨1¡+¨gÑ"6°xÀ±{À5Ñ7IÈAÑ7MÐN€MØ" 8¨A¡;¨wÑ#7¸À¹ÀEÑ8JÐK€Nà# H¨Q¡K°Ñ$8¸À!¹ÀUÑ9KÐL×TÑTÐUYÐ[]Ó^×dÑdÐehÓi€OØ$ X¨a¡[°Ñ%9¸(À1¹+ÀeÑ:LÐM×UÑUÐVZÐ\^Ó_×eÑeÐfiÓjÐà˜_Ð-¨QÐ/€NØÐ.Ð/¨qÐ1€Oà&×.Ñ.¨ÀÓOÐØ(×0Ñ0Ð1AÀ?ÓSÐØ×%Ñ% m°nÑ&DÐFXÐ[nÑFnÓo€KØÐùò7 &<s   ´	Fz([ ]+)(detail?)::[ ]+\\\n[ ]+c           
      óÄ  ‡ — t         j                  d„ ‰ «      Š ˆ fd„}d„ }d„ }t         | |‰ «      «      «      }‰ }|D �]  } ||«      }‰ j                  d|d   «      }	‰ |d   d   |	d	z    }
‰ |d   |d    }|d	   d   d
k(  rdnd	}‰ |d   d   ||   d   d	z    }t	        ||
«      }t        t        d|d   j                  dd«      j                  dd«      «      «      }d|dd
 j                  ddd|z
  z  dz   «      j                  dd«      j                  dd«      j                  |d|z   dz   «      z   }|j                  |
|«      }|d   j                  |«       �Œ  |S )zK Replace the CUDA style Kernel launches with the HIP style kernel launches.c                 óL   — | j                  d«      › | j                  d«      › d�S )Nr   r   z::©Úgroup©Úinps    r   ú<lambda>z'processKernelLaunches.<locals>.<lambda>  s!   € °·±¸1³°¸s¿y¹yÈ»|¸nÈBÐ.O€ r   c                 ó   •— | d   | d   dœdddœdddœdœ}ddi}d}d}d	}d
}|}t        |d   d   dz
  dd«      D ]Á  }‰
|   }	|||fv rJ|	dk(  r||k(  r
|}||d   d<   |dxx   dz  cc<   |	dk(  r$|dxx   dz  cc<   |d   dk(  r||k(  r
||d   d<   |}||k7  sŒ^‰
|   j                  «       s‰
|   dv r-||k7  r
|}||d   d<   |dk(  sŒ�d|d   d<   |d   |d   |d   gc S ||k(  sŒ«||d   d<   |d   |d   |d   gc S  y )NrÈ   rÌ   ©rÈ   rÌ   ry   )Úkernel_launchÚkernel_nameÚtemplatez<>r   r   r   é   rë   ú>rí   ú<>   rÖ   ú#rÉ   rÊ   ú:rì   )rÏ   Úisalnum)Ú	in_kernelÚposrÔ   ÚSTARTÚAT_TEMPLATEÚAFTER_TEMPLATEÚAT_KERNEL_NAMEr   ÚiÚcharÚstrings             €r   Úgrab_method_and_templatez7processKernelLaunches.<locals>.grab_method_and_template  s¯  ø€ ð (1°Ñ'9À)ÈEÑBRÑSØ%'°Ñ3Ø"$¨RÑ0ñ
ˆð �q�	ˆð ˆØˆØˆØˆàˆô �s˜?Ñ+¨GÑ4°qÑ8¸"¸bÓAò %	aˆAØ˜!‘9ˆDð ˜% Ð-Ñ-Ø˜3’;Ø ’Ø!,˜Ø12˜˜J™¨Ñ.Ø˜$“K 1Ñ$“Kà˜3’;Ø˜$“K 1Ñ$“KØ˜T‘{ aÒ'¨V°{Ò-BØ34˜˜J™¨Ñ0Ø!/˜ð ˜Ó$Ø˜!‘9×$Ñ$Ô&¨&°©)Ð7PÑ*PØ Ò/Ø!/˜Ø45˜˜MÑ*¨5Ñ1ð ˜A“vØ67˜˜MÑ*¨7Ñ3ð "% ]Ñ!3°s¸:±È#ÈoÑJ^Ð`Ò`ð  Ó/Ø67˜˜MÑ*¨7Ñ3ð "% ]Ñ!3°s¸:±È#ÈoÑJ^Ð`Ò`ñK%	ar   c                 ó  — d}g }| j                  d|«      dk7  re| j                  d|«      }| j                  d|«      dz   }|dk  rt        d«      ‚|j                  ||| || dœ«       | j                  d|«      dk7  rŒe|S )zKFinds the starting and ending points for all kernel launches in the string.r   rÆ   ry   rÇ   rî   zno kernel end found)rÈ   rÌ   rå   )Úfindr(   rt   )rü   Ú
kernel_endÚkernel_positionsÚkernel_starts       r   Úfind_kernel_boundsz1processKernelLaunches.<locals>.find_kernel_boundsT  sž   € àˆ
ØÐð �k‰k˜% Ó,°Ò2à!Ÿ;™; u¨jÓ9ˆLð  Ÿ™ U¨LÓ9¸AÑ=ˆJØ˜QŠÜ Ð!6Ó7Ð7ð ×#Ñ#¨lÀ:Ø.4°\À:Ð.Nñ%Pô Qð �k‰k˜% Ó,°Ó2ð  Ðr   c                 ó  — d}d}d}| D ]z  }|dk(  r,|dk(  r|dk(  rd}nT|dk(  r|dk(  rd}nG|dk(  rB|dk7  r=|dk7  r8d}n5|dk(  r|d	k(  s|d
k(  r&d}n#|dk(  r|dk(  r|dk(  rd}n|dk(  r|dk(  r|dk7  rd}|}|dk(  r||z  }Œv|dz  }Œ| |S )Nr   r†   z//Ú*z/*ú"ú\ú'úrÍ   Úxr   )rü   Ú
in_commentÚprev_cÚ
new_stringrÙ   s        r   Úmask_commentsz,processKernelLaunches.<locals>.mask_commentsl  sÚ   € Øˆ
ØˆØˆ
Øò 	"ˆAØ˜RÒà˜’8 ¨#¢Ø!%‘JØ˜#’X &¨C¢-Ø!%‘JØ˜#’X &¨D¢.°V¸s²]Ø!$‘JØ˜tÒ#à˜’9  T¢	Ø!#‘JØ˜tÒ#à˜’8 ¨#¢Ø!#‘JØ˜sÒ"à˜’8 ¨$¢Ø!#�JØˆFØ˜RÒØ˜a‘‘
à˜cÑ!‘
ð3	"ð4 Ðr   rÉ   rÌ   r   rÈ   r   ry   rå   rÆ   rÇ   rÊ   zhipLaunchKernelGGL(z, 0é   rÀ   rÁ   )	ÚRE_KERNEL_LAUNCHÚsubÚlistrÿ   r0   rÂ   rC   r‡   rt   )rü   r³   rý   r  r  Úget_kernel_positionsÚoutput_stringÚkernelÚparamsÚparenthesisrÓ   rÒ   Úend_param_indexÚkernel_name_with_templateÚcuda_kernel_dim3Únum_klpÚ
hip_kernels   `                r   r1   r1     s¾  ø€ ô ×!Ñ!Ñ"OÐQWÓX€Fô9aòv ò0ôB  Ñ 2±=ÀÓ3HÓ IÓJÐØ€Mð 'ó 4ˆá)¨&Ó1ˆð —k‘k # v¨e¡}Ó5ˆð ˜V A™Y wÑ/°¸a±Ð@ˆØ˜v g™¨v°e©}Ð=ˆØ% a™y¨Ñ/°2Ò5™!¸1ˆØ$*¨6°!©9°WÑ+=¸fÀ_Ñ>UÐV[Ñ>\Ð_`Ñ>`Ð$aÐ!Ü# M°;Ó?ÐäÔ'¨¨6°'©?×+BÑ+BÀ5È#Ó+N×+VÑ+VÐW\Ð^aÓ+bÓcÓdˆà*Ð-=¸aÀÐ-C×-KÑ-KØ�5˜A ™KÑ(¨5Ñ0ó.2ß29±'¸%ÀÓ2FÇwÁwØ�4óHß ™Ð!:¸CÐB[Ñ<[Ð^aÑ<aÓbñcˆ
ð
 &×-Ñ-¨k¸:ÓFˆð 	ÐÑ ×'Ñ'¨
Ö3ð14ð4 Ðr   c                 óÐ   — d}d}|}d\  }}|t        | «      k  rM| |   |d   k(  r|du rd}d}|}n#|dz  }n| |   |d   k(  r|r|dz  }|dk(  r|}||fS |dz  }|t        | «      k  rŒMy)aÊ  Generalization for finding a balancing closure group

         if group = ["(", ")"], then finds the first balanced parentheses.
         if group = ["{", "}"], then finds the first balanced bracket.

    Given an input string, a starting position in the input string, and the group type,
    find_closure_group returns the positions of group[0] and group[1] as a tuple.

    Example:
        >>> find_closure_group("(hi)", 0, ["(", ")"])
        (0, 3)
    Fr   )ry   ry   Tr   )NN)rÂ   )Úinput_stringrÈ   rå   Úinside_parenthesisÚparensrõ   Úp_startÚp_ends           r   r2   r2   ®  s¬   € ð ÐØ€FØ
€CØ�N€GˆUà
”�LÓ!Ò
!Ø˜Ñ  a¡Ò(Ø! UÑ*Ø%)Ð"Ø�Ø‘à˜!‘‘Ø˜#Ñ %¨¡(Ò*Ñ/AØ�a‰KˆFà˜Š{Ø�Ø �~Ð%àˆq‰ˆð ”�LÓ!Ó
!ð  r   c                 ó"   — t        | |ddg¬«      S )z%Finds the first balanced parantheses.ú{ú}rä   ©r2   ©r  rÈ   s     r   r3   r3   Ô  ó   € ä˜l¨E¸#¸s¸ÔDÐDr   c                 ó"   — t        | |ddg¬«      S )z!Finds the first balanced bracket.rÉ   rÊ   rä   r&  r'  s     r   r4   r4   Ù  r(  r   z\bassert[ ]*\(c                 ó^   — | }t         D ]!  }|j                  |› d�t         |   › d�«      }Œ# |S )a‹  FIXME: Temporarily replace std:: invocations of math functions
        with non-std:: versions to prevent linker errors NOTE: This
        can lead to correctness issues when running tests, since the
        correct version of the math function (exp/expf) might not get
        called.  Plan is to remove this function once HIP supports
        std:: math function calls inside device code

    rÉ   )r   r‡   )r  r  Úfuncs      r   r5   r5   á  sJ   € ð !€MÜ#ò \ˆØ%×-Ñ-°$°°q¨kÔ>QÐRVÑ>WÐ=XÐXYÐ;ZÓ[‰ð\ð Ðr   z:?:?\b(__syncthreads)\b(\w*\()c                 ó¦   ‡— | Šddg}t        ˆfd„|D «       «      r‰S d‰v }|d‰v z  }|d‰v z  }|t        j                  ‰«      duz  }|rd| z   Š‰S )	a  If the file makes kernel builtin calls and does not include the cuda_runtime.h header,
    then automatically add an #include to match the "magic" includes provided by NVCC.
    TODO:
        Update logic to ignore cases where the cuda_runtime.h is included by another file.
    zhip/hip_runtime.hzhip/hip_runtime_api.hc              3   óX   •K  — | ]!  }t        j                  d |› d|› d�‰«      –— Œ# y­w)z#include ("z"|<z>)N)ÚreÚsearch)r�   Úextr  s     €r   r‘   z#hip_header_magic.<locals>.<genexpr>   s+   øè ø€ Ò
WÈŒ2�9‰9˜ C 5¨¨C¨5°Ð3°]×CÑ
Wùs   ƒ'*ÚhipLaunchKernelGGLÚ
__global__Ú
__shared__Nz#include "hip/hip_runtime.h"
)r”   ÚRE_SYNCTHREADSr/  )r  ÚheadersÚhasDeviceLogicr  s      @r   r6   r6   ô  s„   ø€ ð !€Mð #Ð$;Ð<€GÜ
Ó
WÈwÔ
WÔWØÐð *¨]Ð:€NØ�l mÐ3Ñ3€NØ�l mÐ3Ñ3€NØ”n×+Ñ+¨MÓ:À$ÐFÑF€Nñ Ø8¸<ÑGˆàÐr   zGextern\s+([\w\(\)]+)?\s*__shared__\s+([\w:<>\s]+)\s+(\w+)\s*\[\s*\]\s*;c                 ó8   — | }t         j                  d„ |«      }|S )a�  Match extern __shared__ type foo[]; syntax and use HIP_DYNAMIC_SHARED() MACRO instead.
       https://github.com/ROCm-Developer-Tools/HIP/blob/master/docs/markdown/hip_kernel_language.md#__shared__
    Example:
        "extern __shared__ char smemChar[];" => "HIP_DYNAMIC_SHARED( char, smemChar)"
        "extern __shared__ unsigned char smem[];" => "HIP_DYNAMIC_SHARED( unsigned char, my_smem)"
    c                 ó|   — d| j                  d«      xs d› d| j                  d«      › d| j                  d«      › d�S )	NzHIP_DYNAMIC_SHARED(r   r   rÎ   r   rÀ   rî   rÊ   rä   ræ   s    r   rè   z'replace_extern_shared.<locals>.<lambda>  s<   € Ð)¨#¯)©)°A«,Ò*<¸"Ð)=¸Q¸s¿y¹yÈ»|¸nÈBÈsÏyÉyÐYZË|ÈnÐ\]Ð^€ r   )ÚRE_EXTERN_SHAREDr  )r  r  s     r   r7   r7     s(   € ð !€MÜ$×(Ñ(Ù^Ð`móo€Mð Ðr   c                 óž  — t         j                  j                  | «      rJ ‚|st        | «      s| S t         j                  j	                  | «      \  }}t         j                  j                  |«      \  }}|dk(  rd}|}|}|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|d	k7  r|j                  dd«      }|s%||k(  r t         j                  j                  |d«      }|r||k(  r||z   |k(  r|d
z   }t         j                  j                  |||z   «      S )z3
    Returns the new name of the hipified file
    ú.cuú.hipÚcudaÚhipÚCUDAÚHIPÚTHCÚTHHzcaffe2/coreÚ_hip)rf   rg   Úisabsr9   rp   Úsplitextr‡   r©   )r¯   r    ÚdirpathrR   Úrootr0  Úorig_filenameÚorig_dirpaths           r   r8   r8   "  s/  € ô �w‰w�}‰}˜\Ô*Ð*Ð*Ù¬¸Ô(EØÐäŸ™Ÿ™ lÓ3Ñ€GˆXÜ—‘× Ñ  Ó*�I€Dˆ#ðH ˆe‚|Øˆà€MØ€Là�o‰o˜f eÓ,€GØ�o‰o˜f eÓ,€GØ�o‰o˜e UÓ+€Gà�<‰<˜ Ó&€DØ�<‰<˜ Ó&€Dà�-ÒØ�|‰|˜E 5Ó)ˆá G¨|Ò$;Ü—'‘'—,‘,˜w¨Ó.ˆá ¨<Ò 7¸TÀC¹ZÈMÒ<YØ�f‰}ˆä�7‰7�<‰<˜ ¨¡Ó,Ð,r   c                 ó²   — t         j                  j                  | «      rJ ‚| j                  d«      ry| j                  d«      ry| j                  d«      ryy)Nútorch/Fúthird_party/nvfuser/útools/autograd/templates/T©rf   rg   rD  Ú
startswith©r¯   s    r   r9   r9   j  sP   € Ü�w‰w�}‰}˜\Ô*Ð*Ð*Ø×Ñ˜xÔ(ØØ×ÑÐ5Ô6ØØ×ÑÐ:Ô;ØØr   c                 óú   — t         j                  j                  | «      rJ ‚| j                  d«      r| j                  d«      ryy| j                  d«      ry| j                  d«      ry| j                  d«      ryy)Nzaten/zaten/src/ATen/core/FTrK  rL  rM  rN  rP  s    r   r:   r:   v  ss   € Ü�w‰w�}‰}˜\Ô*Ð*Ð*Ø×Ñ˜wÔ'Ø×"Ñ"Ð#8Ô9ØØØ×Ñ˜xÔ(ØØ×ÑÐ5Ô6ØØ×ÑÐ:Ô;ØØr   c                 ó>   — t        | «      rd| j                  «       v S y)NÚsparseF©r:   ÚlowerrP  s    r   r;   r;   …  s!   € Ü�|Ô$Ø˜<×-Ñ-Ó/Ð/Ð/Ør   c                 óŒ   — t        | «      r9d| j                  «       v ryd| j                  «       v rd| j                  «       v ryyy)NrS  TÚlinalgÚbatchlinearalgebralibblasFrT  rP  s    r   r<   r<   ‹  sI   € Ü�|Ô$Ø�|×)Ñ)Ó+Ñ+ØØ˜×+Ñ+Ó-Ñ-Ø*¨l×.@Ñ.@Ó.BÑBØØØr   c                 ó
  — t         j                  j                  | «      rJ ‚| j                  d«      ryt         j                  j	                  | «      }t         j                  j                  |«      \  }}d|v xs |dv xr d|vS )Nzc10/cudaTÚgpu©r;  ú.cuhÚcudnn)rf   rg   rD  rO  ÚbasenamerE  )r¯   rR   rÖ   r0  s       r   r=   r=   •  st   € Ü�w‰w�}‰}˜\Ô*Ð*Ð*Ø×Ñ˜zÔ*ØÜ�w‰w×Ñ Ó-€HÜ�W‰W×Ñ˜hÓ'�F€A€sØ�XÐÒ7 ¨Ð!7ÒV¸gÈXÐ>UÐVr   c                   ó   — e Zd ZdZd„ Zy)ÚTrieNodez�A Trie node whose children are represented as a directory of char: TrieNode.
       A special char '' represents end of word
    c                 ó   — i | _         y rH   )Úchildrenr"   s    r   r    zTrieNode.__init__¢  s	   € Øˆ�r   N)r   r   r   rƒ   r    r   r   r   r`  r`  �  s   „ ñór   r`  c                   ó^   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Ze	j                  d„ «       Zd„ Zd	„ Zy
)r>   z£Creates a Trie out of a list of words. The trie can be exported to a Regex pattern.
    The corresponding Regex should match much faster than a simple Regex union.c                 ó–   — t        «       | _        t        j                  d¬«      | _        | j                  j                  «       | _        y)z,Initialize the trie with an empty root node.F)ÚusedforsecurityN)r`  rG  ÚhashlibÚmd5Ú_hashÚdigestÚ_digestr"   s    r   r    zTrie.__init__©  s/   € ä“JˆŒ	Ü—[‘[°Ô7ˆŒ
Ø—z‘z×(Ñ(Ó*ˆ�r   c                 ó>  — | j                   j                  |j                  «       «       | j                   j                  «       | _        | j
                  }|D ]5  }|j                  j                  |t        «       «       |j                  |   }Œ7 d|j                  d<   y)zAdd a word to the Trie. Tr   N)	rh  ÚupdateÚencoderi  rj  rG  rb  Ú
setdefaultr`  ©r   ÚwordÚnoderû   s       r   ri   zTrie.add¯  sz   € à�
‰
×Ñ˜$Ÿ+™+›-Ô(Ø—z‘z×(Ñ(Ó*ˆŒØ�y‰yˆàò 	'ˆDØ�M‰M×$Ñ$ T¬8«:Ô6Ø—=‘= Ñ&‰Dð	'ð !ˆ�‰�bÒr   c                 ó   — | j                   S )zReturn the root node of Trie. )rG  r"   s    r   Údumpz	Trie.dumpº  s   € à�y‰yÐr   c                 ó,   — t        j                  |«      S )z Escape a char for regex. )r.  Úescape)r   rû   s     r   Úquotez
Trie.quote¾  s   € ä�y‰y˜‹Ðr   c                 ó‚   — | j                   }|D ]!  }||j                  v r|j                  |   }Œ! y d|j                  v S )zZSearch whether word is present in the Trie.
        Returns True if yes, else return FalseFr   )rG  rb  ro  s       r   r/  zTrie.searchÂ  sJ   € ð �y‰yˆØò 	ˆDØ�t—}‘}Ñ$Ø—}‘} TÑ*‘áð		ð �T—]‘]Ð"Ð"r   c                 óN  — |}d|j                   v r't        |j                   j                  «       «      dk(  ryg }g }d}t        |j                   j                  «       «      D ]o  }t	        |j                   |   t
        «      rN	 | j                  |j                   |   | j                  «      }|j                  | j                  |«      |z   «       Œnd}Œq t        |«      dkD   }	t        |«      dkD  rIt        |«      dk(  r|j                  |d   «       n&|j                  ddj                  |«      z   dz   «       t        |«      dk(  r|d   }
nddj                  |«      z   d	z   }
|r|	r|
d
z  }
|
S d|
› d�}
|
S # t        $ r$ |j                  | j                  |«      «       Y �ŒBw xY w)zžConvert a Trie into a regular expression pattern

        Memoized on the hash digest of the trie, which is built incrementally
        during add().
        r   r   Nr   ú[ú]z(?:ú|rÊ   ú?z)?)rb  rÂ   ÚkeysÚsortedÚ
isinstancer`  Ú_patternrj  rt   rv  Ú	Exceptionr©   )r   rG  ri  rq  ÚaltÚccÚqrû   ÚrecurseÚcconlyr½   s              r   r€  zTrie._patternÏ  s‰  € ð ˆà�—‘Ñ¤3 t§}¡}×'9Ñ'9Ó';Ó#<ÀÒ#AØàˆØˆØˆÜ˜4Ÿ=™=×-Ñ-Ó/Ó0ò 	ˆDÜ˜$Ÿ-™-¨Ñ-¬xÔ8ð0Ø"Ÿm™m¨D¯M©M¸$Ñ,?ÀÇÁÓN�GØ—J‘J˜tŸz™z¨$Ó/°'Ñ9Õ:ð ‘ð	ô ˜“X ‘\Ð!ˆäˆr‹7�QŠ;Ü�2‹w˜!Š|Ø—
‘
˜2˜a™5Õ!à—
‘
˜3 §¡¨£Ñ,¨sÑ2Ô3äˆs‹8�qŠ=Ø˜‘V‰Fà˜SŸX™X c›]Ñ*¨SÑ0ˆFáÙØ˜#‘�ð ˆð ˜v˜h bÐ)�Øˆøô- !ò 0Ø—I‘I˜dŸj™j¨Ó.×/ð0ús   ÂAE7Å7)F$Æ#F$c                 óN   — | j                  | j                  | j                  «      S ©z#Export the Trie to a regex pattern.©r€  rG  rj  r"   s    r   r˜   zTrie.patternû  ó   € à�}‰}˜TŸY™Y¨¯©Ó5Ð5r   c                 óN   — | j                  | j                  | j                  «      S rˆ  r‰  r"   s    r   Úexport_to_regexzTrie.export_to_regexÿ  rŠ  r   N)r   r   r   rƒ   r    ri   rs  rv  r/  Ú	functoolsÚ	lru_cacher€  r˜   rŒ  r   r   r   r>   r>   ¥  sF   „ ñSò+ò	!òòò#ð ×Ññ)ó ð)òV6ó6r   r>   ÚPYTORCH_MAPr   z(?<=\W)(z)(?=\W)z#include "([^"]+)"z#include <([^>]+)>z"#define THC_GENERIC_FILE "([^"]+)"z\.cu\bc	                 ób
  ‡ ‡‡‡‡‡‡‡‡‡— t         j                  j                  t         j                  j                  ‰ |«      «      Št        ‰   }	|‰vr%d|	_        d|	_        t        j                  |	_	        |	S t        t         j                  j                  |‰ «      «      }
t        ‰d¬«      5 }|j                  «       t        k(  r.d|	_        d|	_        t        j                  |	_	        |	cddd«       S |j                  d«       |j!                  «       }ddd«       }t         j                  j                  t         j                  j                  ‰ t#        |
‰«      «      «      }t         j                  j%                  t         j                  j'                  |«      «      s.‰j)                  t         j                  j'                  |«      «       d„ Šˆfd„}‰rt*        j-                  ‰|«      }n]t/        |
«      rt*        j-                  ||«      }n;t1        |
«      rt*        j-                  ‰|«      }nd	„ }t2        j-                  ||«      }d#ˆˆˆˆˆˆˆ ˆˆf	d„	}t4        j-                   |dd
«      |«      }t6        j-                   |dd«      |«      }t8        j-                   |d«      |«      }|j;                  d«      r:|j=                  dd«      }|j=                  dd«      }t>        j-                  d|«      }‰stA        |‰«      }|j;                  d«      rd|vrtC        |«      }tE        |«      }‰ri||k(  rdt         j                  j'                  ‰«      t         j                  j'                  |«      k(  r%‰|	_        d|	_        t        j                  |	_	        |	S ‰|k7  rtG        ‰d«      r	t        |z   }d
}t         j                  j%                  |«      r)t        |d¬«      5 }|j!                  «       |k7  }ddd«       |rT	 ‰j                  |dd¬«      5 }|jI                  |«       ddd«       ||	_        d|	_        t        j                  |	_	        |	S ||	_        d"|	_        t        j                  |	_	        |	S # 1 sw Y   �ŒmxY w# 1 sw Y   Œ‘xY w# 1 sw Y   ŒlxY w# tJ        $ r~}tM        tN        jP                  › d|› d|jR                  › d‰› dtN        jT                  › �	tV        jX                  ¬ «       ‰|	_        d!|	_        t        j                  |	_	        |	cY d}~S d}~ww xY w)$z< Executes the CUDA -> HIP conversion on the specified file. Nz[ignored, not to be hipified]zutf-8)Úencodingz#[ignored, input is hipified output]r   c                 ó2   — t         | j                  d«         S ©Nr   )r�  rå   ©Úms    r   Úpt_replzpreprocessor.<locals>.pt_repl[  s   € Ü˜1Ÿ7™7 1›:Ñ&Ð&r   c                 óZ   •— t         j                  | j                  d«       ‰| «      «      S r“  )ÚPYTORCH_SPECIAL_MAPÚgetrå   )r•  r–  s    €r   Úpt_special_replz%preprocessor.<locals>.pt_special_repl^  s"   ø€ ä"×&Ñ& q§w¡w¨q£z±7¸1³:Ó>Ð>r   c                 ó2   — t         | j                  d«         S r“  )Ú
CAFFE2_MAPrå   r”  s    r   Úc2_replzpreprocessor.<locals>.c2_replk  s   € Ü! !§'¡'¨!£*Ñ-Ð-r   Tc                 ó*   •	‡ ‡— ˆˆˆˆˆˆˆˆ	ˆ
ˆˆ fd„}|S )Nc                 óN  •‡— | j                  d«      }t        j                  j                  |«      Š|j	                  d«      s"|j	                  d«      r;|j	                  d«      s*‰j                  t        | j                  d«      ‰«      «      S ‰�rƒt        ˆfd„‰D «       «      �rnd }d }‰rt        j                  j                  ‰«      }t        j                  j                  t        j                  j                  ||«      «      }t        j                  j                  |«      r|}|}|€ˆ‰D ]ƒ  }t        j                  j                  ‰|«      }t        j                  j                  t        j                  j                  ||«      «      }t        j                  j                  |«      sŒ€|}|}Œ… |€| j                  d«      S |t        vrt        ‰|‰‰‰‰‰‰‰«	       ná|t        v rÙt        |   }|j                  t        j                   k(  r³t        j                  j#                  |‰«      }t        j                  j                  t        j                  j                  ‰t        |‰«      «      «      }	|	|_        |t        |<   ‰j                  t        j                  j#                  |	�|	|«      «      S ||«      «      S t        |   j$                  }
‰j                  t        j                  j#                  |
�|
|«      «      S ||«      «      S | j                  d«      S )Nr   )z	ATen/cudazATen/native/cudazATen/native/nested/cudazATen/native/quantized/cudazATen/native/sparse/cudazATen/native/transformers/cudazTHC/rA  ÚTHCPc              3   ó@   •K  — | ]  }|j                  ‰«      –— Œ y ­wrH   r�   )r�   ÚsrR   s     €r   r‘   z>preprocessor.<locals>.mk_repl.<locals>.repl.<locals>.<genexpr>€  s   øè ø€ Ò,UÀa¨Q¯Z©Z¸×-AÑ,Uùr’   r   )rå   rf   rg   r^  rO  Úformatr8   r”   Údirnamerj   r©   rh   r$   r.   r   r   r   r§   r   )r•  r   Ú
header_dirÚheader_filepathÚheader_dir_to_checkÚheader_path_to_checkÚheader_include_dirÚheader_resultÚheader_rel_pathÚheader_fout_pathÚhipified_header_filepathrR   r±   rµ   r»   r²   r´   Úinclude_current_dirr    r°   r¶   r³   Útempls              @€€€€€€€€€€€r   Úreplz+preprocessor.<locals>.mk_repl.<locals>.replq  sÃ  ù€ Ø—‘˜“
ˆAÜ—w‘w×'Ñ'¨Ó*ˆHà—‘ð &ô 'ð —‘˜eÔ$¨Q¯\©\¸&Ô-Aà—|‘|Ô$5°a·g±g¸a³jÐBVÓ$WÓXÐXâ$¬Ó,UÈ9Ô,UÕ)UØ!�
Ø"&�á&Ü*,¯'©'¯/©/¸(Ó*CÐ'Ü+-¯7©7¯?©?¼2¿7¹7¿<¹<ÐH[Ð]^Ó;_Ó+`Ð(Ü—w‘w—~‘~Ð&:Ô;Ø%8˜
Ø*>˜à"Ð*Ø.Aò CÐ*Ü.0¯g©g¯l©lÐ;KÐM_Ó.`Ð+Ü/1¯w©w¯©¼r¿w¹w¿|¹|ÐL_ÐabÓ?cÓ/dÐ,ÜŸ7™7Ÿ>™>Ð*>Õ?Ø)<˜JØ.B™OðCð #Ð*ØŸ7™7 1›:Ð%à"Ô*=Ñ=Ü3Ð4DØ4CØ4=Ð?RÐTYÐ[kØ4HÈ)ÐUbõdð %Ô(;Ñ;Ü$7¸Ñ$H�MØ$×2Ñ2´l×6NÑ6NÒNä*,¯'©'¯/©/¸/ÐK[Ó*\˜Ü+-¯7©7¯?©?¼2¿7¹7¿<¹<ÐHXÜHYÐZiÐkó  IAó<Bó ,CÐ(à6F˜Ô3Ø?LÔ+¨OÑ<Ø$Ÿ|™|¬B¯G©G¯O©OÐP`ÐPlÐ<LØR\ó-^ó  _ð _ØAPÐR\ó-^ó  _ð _ä+>¸Ñ+O×+]Ñ+]Ð(Ø—|‘|¤B§G¡G§O¡OÐPhÐPtÐ4LØJTó%Vó Wð WØ9HÈ*ó%Vó Wð Wð —7‘7˜1“:Ðr   r   )r¯  r®  r°  r±   rµ   r»   r²   r´   r    r°   r¶   r³   s   `` €€€€€€€€€r   Úmk_replzpreprocessor.<locals>.mk_replp  s   ú€ ÷9	ö 9	ðt ˆr   z#include "{0}"z#include <{0}>Fz#define THC_GENERIC_FILE "{0}"zCMakeLists.txtr?  r@  rA  rB  r<  r[  Ú	PowKernelz[skipped, no changes])r;  r\  ú.cú.ccú.cppú.hú.hppÚwz[ok]zFailed to save z with "z", leaving z unchanged.©Úfilez[skipped, no permissions]z[skipped, already hipified])T)-rf   rg   rj   r©   r$   r   r   r   r   r   r‰   r§   rQ   ÚreadlineÚHIPIFY_C_BREADCRUMBÚseekÚreadr8   rh   r¤  rq   ÚRE_PYTORCH_PREPROCESSORr  r<   r:   ÚRE_CAFFE2_PREPROCESSORÚRE_QUOTE_HEADERÚRE_ANGLE_HEADERÚRE_THC_GENERIC_FILErŽ   r‡   ÚRE_CU_SUFFIXr1   r5   r6   r,   ÚwriteÚPermissionErrorrº   r*   rX   ÚstrerrorrZ   ÚsysÚstderr)r°   r™   r±   r²   r³   r´   r    rµ   r¶   r¼   r¯   ÚfinÚoutput_sourceÚorig_output_sourceÚ	fout_pathrš  r�  r±  Údo_writeÚfout_oldÚfoutr�   r»   r–  s   ` ```````             @@r   r?   r?   5  sd  ÿù€ ô �w‰w�‰œrŸw™wŸ|™|Ð,<¸hÓGÓH€HÜ'¨Ñ1€MØ�yÑ Ø&*ˆÔ#Ø>ˆÔÜ&2×&7Ñ&7ˆÔ#ØÐä ¤§¡§¡°Ð;KÓ!LÓM€Lä	ˆh Ô	)ð #¨SØ�<‰<‹>Ô0Ò0Ø*.ˆMÔ'Ø#HˆMÔ Ü*6×*;Ñ*;ˆMÔ'Ø ÷#ñ #ð 	�‰�ŒØŸ™›
ˆ÷#ð 'Ðô —‘—‘¤§¡§¡Ð-=Ô?PÐQ]Ð_sÓ?tÓ uÓv€IÜ�7‰7�>‰>œ"Ÿ'™'Ÿ/™/¨)Ó4Ô5Ø×Ñœ2Ÿ7™7Ÿ?™?¨9Ó5Ô6ò'ô?ñ
 Ü/×3Ñ3°G¸]ÓK‰ä˜<Ô(Ü3×7Ñ7¸ÈÓW‰MÜ˜\Ô*Ü3×7Ñ7¸ÀÓO‰Mò.ä2×6Ñ6°wÀÓNˆM÷;õ ;ôx $×'Ñ'©Ð0@À$Ó(GÈÓW€MÜ#×'Ñ'©Ð0@À%Ó(HÈ-ÓX€MÜ'×+Ñ+©GÐ4TÓ,UÐWdÓe€Mð ×ÑÐ)Ô*Ø%×-Ñ-¨f°eÓ<ˆØ%×-Ñ-¨e°UÓ;ˆÜ$×(Ñ(¨°Ó?ˆñ Ü-¨m¸UÓCˆð 	×Ñ˜/Ô*°À8Ñ0KÜ.¨}Ó=ˆô % ]Ó3€Mñ 	Ø -Ò/Ü�G‰G�O‰O˜HÓ%¬¯©¯©¸Ó)CÒCà&.ˆÔ#Ø6ˆÔÜ&2×&7Ñ&7ˆÔ#ØÐð �9ÒÔ!1°(Ð<nÔ!oÜ+¨mÑ;ˆà€HÜ	‡w�w‡~�~�iÔ Ü�) gÔ.ð 	8°(Ø—}‘}“¨-Ñ7ˆH÷	8áð	!Ø—‘ 	¨3¸�ÓAð *ÀTØ—
‘
˜=Ô)÷*à*3ˆMÔ'Ø#)ˆMÔ Ü*6×*;Ñ*;ˆMÔ'Ø Ð ð '0ˆÔ#Ø<ˆÔÜ&2×&7Ñ&7ˆÔ#ØÐ÷C#ñ #ú÷X	8ð 	8ú÷*ð *ûô ò 	!Ü”W—_‘_Ð% _°Y°K¸wÀqÇzÁzÀlÐR]Ð^fÐ]gÐgrÔsz×sÑsð  sAð  BÜ—z‘zõ#à*2ˆMÔ'Ø#>ˆMÔ Ü*6×*;Ñ*;ˆMÔ'Ø Õ ûð	!úsU   Â0<RÃ6!RÏ+RÐ
R' ÐRÐ0,R' ÒRÒRÒR$Ò R' Ò'	T.Ò0A3T)Ô#T.Ô)T.c                 óX  ‡— t        | d«      5 }|j                  «       }|r2t        j                  dt        j                  |«      › d�ˆfd„|«      }n|j                  |‰«      }|j                  d«       |j                  |«       |j                  «        d d d «       y # 1 sw Y   y xY w)Núr+z\b(z)\bc                 ó   •— ‰S rH   r   )r
  Úreplace_strings    €r   rè   z+file_specific_replacement.<locals>.<lambda>ñ  s   ø€ Èn€ r   r   )	r)   r¾  r.  r  ru  r‡   r½  rÅ  Útruncate)r™   Úsearch_stringrÔ  Ústrictr   Úcontentss     `   r   r@   r@   í  s‹   ø€ Ü	ˆx˜Ó	ð  !Ø—6‘6“8ˆÙÜ—v‘v ¤R§Y¡Y¨}Ó%=Ð$>¸cÐBÓD\Ð^fÓg‰Hà×'Ñ'¨°~ÓFˆHØ	�‰ˆqŒ	Ø	�‰�ÔØ	�
‰
Œ÷÷ ñ ús   ŽB	B Â B)c                 ó  — t        | d«      5 }|j                  «       }|d   dk7  r|d   dk7  rd|› d�}d|› d�|z   }|j                  d«       |j                  |«       |j	                  «        d d d «       y # 1 sw Y   y xY w)	NrÒ  r   rð   ry   rï   r  z	#include z 
)r)   r¾  r½  rÅ  rÕ  )r™   Úheaderr   rØ  s       r   rA   rA   ù  s…   € Ü	ˆx˜Ó	ð  !Ø—6‘6“8ˆØ�!‰9˜Ò  r¡
¨cÒ 1Ø˜˜ �]ˆFØ ˜x sÐ+¨xÑ7ˆØ	�‰ˆqŒ	Ø	�‰�ÔØ	�
‰
Œ÷÷ ñ ús   �A"A8Á8Bc                 ó*   — | j                  dd«      } | S )z<Static global kernels in HIP results in a compilation error.z __global__ staticr2  )r‡   )Úin_txts    r   rB   rB     s   € à�^‰^Ð0°,Ó?€FØ€Mr   z#include .*\nc                 óê  — g }dddœ}| }|dz   }|t        |«      k  rÖ||   dk(  r|dxx   dz  cc<   nT||   dk(  r|dxx   dz  cc<   n>||   dk(  r|dxx   dz  cc<   n(||   dk(  r ||dz
     dk7  r|d   dkD  r|dxx   dz  cc<   |d   dk(  r|d   dk(  r|j                  ||d	œ«       	 |S |d   dk(  r)|d   dk(  r!||   d
k(  r|j                  ||d	œ«       |dz   }|dz  }|t        |«      k  rŒÖ|S )ad   Return the list of arguments in the upcoming function parameter closure.
        Example:
        string (input): '(blocks, threads, 0, THCState_getCurrentStream(state))'
        arguments (output):
            '[{'start': 1, 'end': 7},
            {'start': 8, 'end': 16},
            {'start': 17, 'end': 19},
            {'start': 20, 'end': 53}]'
    r   )rð   rÉ   r   rÉ   rÊ   rð   rï   ú-rê   rË   )rÂ   rt   )rÈ   rü   Ú	argumentsÚclosuresÚcurrent_positionÚargument_start_poss         r   rC   rC     sj  € ð €IàØñ€Hð ÐØ)¨AÑ-Ðð œS ›[Ò
(ØÐ"Ñ# sÒ*Ø�S‹M˜QÑŒMØÐ$Ñ%¨Ò,Ø�S‹M˜QÑŒMØÐ$Ñ%¨Ò,Ø�S‹M˜QÑŒMØÐ$Ñ%¨Ò,°Ð8HÈ1Ñ8LÑ1MÐQTÒ1TÐYaÐbeÑYfÐijÒYjØ�S‹M˜QÑ‹Mð �C‰=˜AÒ (¨3¡-°1Ò"4à×ÑÐ'9ÐBRÑSÔTØð Ðð �C‰=˜AÒ (¨3¡-°1Ò"4¸Ð@PÑ9QÐUXÒ9XØ×ÑÐ'9ÐBRÑSÔTØ!1°AÑ!5Ðà˜AÑÐð+ œS ›[Ó
(ð. Ðr   c                 óx   — | j                  «       dv ry| j                  «       dv ryt        j                  d«      ‚)zArgumentParser doesn't support type=bool. Thus, this helper method will convert
    from possible string types to True / False.)ÚyesÚtrueÚtÚyÚ1T)ÚnoÚfalser   rw   Ú0FzBoolean value expected.)rU  ÚargparseÚArgumentTypeError)Úvs    r   rD   rD   ;  s:   € ð 	‡w�wƒyÐ2Ñ2ØØ	
�‰‹Ð4Ñ	4Øä×(Ñ(Ð)BÓCÐCr   Úproject_directoryÚshow_detailedÚheader_extensionsÚextra_filesÚhipify_extra_files_onlyc                 ód  ‡‡‡	— | dk(  rt        j                  «       } t         j                  j                  | «      s t	        d«       t        j                  d«       |s| j                  d«       | dz   }| |k7  r@‰D �cg c]  }|j                  | |«      ‘Œ c}Š‰	D �cg c]  }|j                  | |«      ‘Œ c}Š	t         j                  j                  |«      st        j                  | |«       t        t        t        ‰«      «      Št        t        t        ‰	«      «      Š	t        t        |‰‰	|||¬«      «      }t        |«      }|D ]W  }t         j                  j!                  |«      s t         j                  j#                  ||«      }||vsŒG|j%                  |«       ŒY ddlm} |D ]{  }t         j                  j!                  |«      r	 ||«      }n& |t         j                  j#                  ||«      «      }|j+                  ˆˆ	ˆfd	„|j-                  d
«      D «       «       Œ} |€t/        d¬«      }g g dœ}|s|n|D ]  }t1        |||||||||
«	       Œ t	        t2        j4                  dz   t2        j6                  z   t
        j8                  ¬«       |rt;        |«       t<        S c c}w c c}w )Nr   z,The project folder specified does not exist.r   r†   Ú_amd)r�   rž   rŠ   rŸ   r    r   )ÚPathc              3   óÖ   •K  — | ]`  }|j                  «       sŒt        t        |«      ‰«      r8t        t        |«      ‰«      s#t        |j                  ‰«      rt        |«      –— Œb y ­wrH   )Úis_filer›   Ústrr,   Úname)r�   rg   rñ  rž   r�   s     €€€r   r‘   zhipify.<locals>.<genexpr>�  sP   øè ø€ ò 
ØÈÏÉÍÜœ˜T› HÔ-Üœc $›i¨Ô1Ü  §¡Ð,=Ô>ô ��Iñ
ùs   ƒA)™AA)r  T)r_   )r¿   rÁ   z-Successfully preprocessed all matching files.r¹  )rf   Úgetcwdrg   rh   rº   rÈ  ÚexitÚrstripr‡   ÚshutilÚcopytreer  Úmapr‰   r-   r`   rD  r©   rt   Úpathlibrö  ÚextendÚrglobr+   r.   r*   rW   rZ   rÉ  r/   r$   )rï  rð  rŠ   rñ  r°   r²   r�   rò  rŸ   rž   r¶   r´   r    ró  rµ   ÚincluderO   r±   Úall_files_setr   rö  r©  Úheader_include_dir_pathr³   r™   s      `  `  `               r   rE   rE   F  sk  ú€ ð" ˜BÒÜŸI™I›KÐô �7‰7�>‰>Ð+Ô,ÜÐ<Ô=Ü�‰�Œñ Ø× Ñ  Ô%Ø,¨vÑ5ÐàÐ,Ò,ØX`ÖaÈW�G—O‘OÐ$5Ð7GÕHÒaˆØU\Ö]È6�6—>‘>Ð"3Ð5EÕFÒ]ˆô �7‰7�>‰>Ð*Ô+Ü�‰Ð)Ð+;Ô<ä”Cœ xÓ0Ó1€HÜ”3”} gÓ.Ó/€GäÔ'Ð(8À8Ø07ÀJØ:KØ=QôSó T€Iô ˜	“N€MØò  ˆÜ�w‰w�}‰}˜QÔÜ—‘—‘Ð-¨qÓ1ˆAØ�MÒ!Ø×Ñ˜QÕð	 õ Ø1ò 

ÐÜ�7‰7�=‰=Ð+Ô,Ù&*Ð+=Ó&>Ñ#á&*¬2¯7©7¯<©<Ð8HÐJ\Ó+]Ó&^Ð#Ø×Ñõ 
Ø"9×"?Ñ"?ÀÓ"Dô
õ 	
ð

ð ÐÜ(¸DÔAˆ	ð 46È"ÑM€Eá&=‘YÀ;ò qˆÜ'Ð(8¸(ÀIÐObØ(-Ð/?ÐAUÐW`Ðboõ	qðqô 
Œ'�/‰/ÐKÑ
KÌgÏlÉlÑ
ZÔad×akÑakÕlñ Ü�eÔäÐùòg bùÚ]s   Á=J(ÂJ-)r   r   r   FFr‚   )F)r;  r\  r³  r´  rµ  r¶  z.inr·  )r\  r¶  r·  r   r   )r  r   Fr   TFFFN)crƒ   rì  r—   r.  rþ  rÈ  rf   r   r   Úcuda_to_hip_mappingsr   r   Útypingr   Úcollections.abcr   r	   r
   Úenumr   r�  rf  r   r   Údictrù  ÚHipifyFinalResultr¼  r$   Ú__annotations__ÚPYTORCH_TEMPLATE_MAPÚ__all__r�  r(   r)   r*   r+   r‰   Úboolr,   r›   r-   r  r.   r/   r0   Úcompiler  r1   r2   r3   r4   Ú	RE_ASSERTr5   r4  r6   r9  r7   r8   r9   r:   r;   r<   r=   r`  r>   ÚCAFFE2_TRIErœ  ÚPYTORCH_TRIEr�  Úobjectr˜  Úmappingr  ÚitemsÚsrcr}   ÚdstÚ	meta_dataÚ
API_CAFFE2ri   ÚAPI_SPECIALr™  ÚAPI_PYTORCHrŒ  rÀ  r¿  rÁ  rÂ  rÃ  rÄ  r?   r@   rA   rB   Ú
RE_INCLUDErC   rD   rE   r   r   r   ú<module>r     sz  ðòó0 Û Û 	Û Û 
Û 	å Ý 6Ý 5å Ý $ß -Ý Û Û ô�4ô ÷Dñ Dð ˜˜lÐ*Ñ+Ð ØTÐ Ø)+Ð Ð&Ó +ðà!+°*Ñ=Ð òs€ô.�ô .ò1÷
ñ ÷&ñ ðD%˜ð % ó %ð9˜sð 9°ð 9¸Tó 9ò
Kð  ØØ!Ø"'Ø%*ñ)Øð)àð)ð ð)ð ð	)ð
  ð)ð #ð)ð 08¸©}ó)ðX+Øð+àð+ð ð+ð &ð	+ð
 �C˜�I‰ð+ð ð+ð #ð+ð (ð+ð ð+ð !%ó+ò2
\ò ðF �2—:‘:Ð>Ó?Ð òWòt#òLEò
Eð
 ˆB�J‰JÐ(Ó)€	òð  �—‘Ð=Ó>€òð: �2—:‘:ÐhÓiÐ òóE-òPòòòòW÷ñ ÷\6ñ \6ñ| ‹f€Ø€
Ù‹v€Ø!#€ˆT�#�v�+ÑÓ #ð Ð à#ò "€GÙ�g˜wÔ'Ð'Ð'Ø—m‘m“oò "‰
ˆˆUØ�A‰hˆØ˜!˜"�Iˆ	Ø×Ñ yÑ0Ø×Ñ˜SÔ!ð ×$Ñ$¨	Ñ1°k·o±oÀcÈ2Ô6NØ+.Ð# CÒ(à#&�˜CÑ Ø× Ñ ¨	Ò1°i×6KÑ6KÐS\Ò6\Ø�O‰O˜CÔ Ø!ˆJ�sŠOñ"ð"ð  $˜Ÿ™ K×$?Ñ$?Ó$AÓBÐ Ø$˜"Ÿ*™*¨°×1MÑ1MÓ1OÐ0PÐPWÐ%XÓYÐ à�"—*‘*Ð2Ó3€Ø�"—*‘*Ð2Ó3€Ø �b—j‘jÐ!FÓGÐ Øˆr�z‰z˜)Ó$€ððvØðvàðvð ðvð &ð	vð
 �C˜�I‰ðvð ðvð #ðvð (ðvð ðvð !-óvóp	òòð ˆR�Z‰ZÐ(Ó)€
ò+ò\Dð  ØTØ"8ØØ$&ØØØ#ØØØ"Ø!&Ø$)Ø04ñRØðRàðRð ðRð  ð	Rð
 ðRð "ðRð ðRð ðRð ðRð ðRð ðRð ðRð ðRð "ðRð Ð,Ñ-ðRð  ô!Rr   