§
    OŠtj21  ã                   óÐ  — d dl mZ d dlmZ d dlmZmZ d dlmZ d„ Z	 G d„ de
¦  «        Ze G d„ d	¦  «        ¦   «         Z G d
„ d¦  «        Zd„ Zd„ Zdedee         defd„Zdedefd„Zdedefd„Zdedee         defd„Zdedefd„Zdededefd„Zdededefd„Zdedefd„Zdedefd„ZdZedk    �r-d dlmZ  ee¬¦  «        Ze                     d d!d"¬#¦  «         e                     d$d%ed&¬'¦  «         e                     d(ed)d*¬+¦  «         e                      ¦   «         Z! e¦   «         Zg Z"e!j#        D ]PZ$ ee$¦  «        Z%e% &                    ¦   «         Z'e" (                    e%j)        ¦  «         e *                    e'¦  «         ŒQd,„ ej+         ,                    ¦   «         D ¦   «         Z-d-„ ej+         ,                    ¦   «         D ¦   «         Z.e.d          d          Z/ ee/¦  «        Z0 ee/¦  «        Z1 ee2¦  «        j3        d.z  ej4        z  d/z   &                    ¦   «         Z5e!j6         7                    d0¦  «         8                    d1¦  «        5 Z9e5Z6e6d2 :                    e-¦  «        z  Z6e6d2z  Z6e6e0z  Z6e6d2z  Z6e6e1z  Z6e9 ;                    e6¦  «         d3d3d3¦  «         n# 1 swxY w Y   d4„ ej+         ,                    ¦   «         D ¦   «         Z<d5„ ej+         =                    ¦   «         D ¦   «         Z> ee>e/¦  «        Z? ee/¦  «        Z@ ee>e/¦  «        ZA ee/¦  «        ZB ee/¦  «        ZCe!j6         7                    d6¦  «         8                    d1¦  «        5 Z9e5Z6e6d7z  Z6e6d8z  Z6e6d2z  Z6e6d2 :                    e<¦  «        z  Z6e6d2z  Z6e6e?z  Z6e6d2z  Z6e6eBz  Z6e6d2z  Z6e6e@z  Z6e6d2z  Z6e6eAz  Z6e6d2z  Z6e6eCz  Z6e9 ;                    e6¦  «         d3d3d3¦  «         d3S # 1 swxY w Y   d3S d3S )9é    )Údefaultdict)ÚPath)ÚSequenceÚUnion)Ú	dataclassc                 ó
   — | d uS ©N© )Úxs    úO/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/triton/tools/link.pyÚ_existsr      s   € Ø�Dˆ=Ðó    c                   ó   — e Zd ZdS )ÚLinkerErrorN)Ú__name__Ú
__module__Ú__qualname__r
   r   r   r   r      s   € € € € € Ø€Dr   r   c                   ó”   — e Zd ZU eed<   ee         ed<   ee         ed<   eeedf                  ed<   eed<   eed<   eed<   eed	<   dS )
ÚKernelLinkerMetaÚorig_kernel_nameÚ	arg_namesÚ
arg_ctypesNÚsizesÚsig_hashÚtriton_suffixÚsuffixÚ	num_specs)r   r   r   ÚstrÚ__annotations__r   r   Úintr
   r   r   r   r      s   € € € € € € àÐÐÑØ˜Œ}ÐÐÑØ˜”ÐÐÑØ�E˜#˜t˜)Ô$Ô%Ð%Ð%Ñ%Ø€M€M�MØÐÐÑØ€K€K�KØ€N€N�NØ+Ð+r   r   c                   óZ   — e Zd Zdd„Zdefd„Zdefd„Zdefd	„Zd
edefd„Zdede	fd„Z
dS )ÚHeaderParserÚreturnNc                 óR  — dd l }|                     d¦  «        | _        |                     d¦  «        | _        |                     d¦  «        | _        |                     d¦  «        | _        |                     d¦  «        | _        t          t          ¦  «        | _	        d | _
        d S )Nr   z'//[\s]*tt-linker:[\s]*([\w]+):(.+):(.+)z^([\w]+)_([\w]+)_([\w]*)$z[\s]*(\w+)\s(\w+)[,]?z[c,d]z%//[\s]*tt-linker-backend:[\s]*([\w]+))ÚreÚcompileÚlinker_directivesÚkernel_nameÚc_sigÚ
arg_suffixÚbackend_name_rer   ÚlistÚkernelsÚbackend_name)Úselfr%   s     r   Ú__init__zHeaderParser.__init__   s�   € Øˆ	ˆ	ˆ	ð "$§¢Ð,XÑ!YÔ!YˆÔàŸ:š:Ð&DÑEÔEˆÔà—Z’ZÐ ;Ñ<Ô<ˆŒ
àŸ*š* WÑ-Ô-ˆŒà!ŸzšzÐ*TÑUÔUˆÔå"¥4Ñ(Ô(ˆŒØ ˆÔÐÐr   Úheaderc                 ó2  — |                      ¦   «         D �]€}|                     d¦  «        �rg| j                             |¦  «        }t	          |¦  «        rË|                     d¦  «        |                     d¦  «        |                     d¦  «        }}}|                      |¦  «        \  }}}	|                      |¦  «        \  }
}|                      |	|¦  «        \  }}|  	                    d 
                    ||g¦  «        t          |||
|||	|	|¬¦  «        ¦  «         �Œ| j                             |¦  «        }t	          |¦  «        rJ|                     d¦  «        }| j        €	|| _        �Œ[| j        |k    rt          d| j        › d|› �¦  «        ‚�Œ‚d S )	Nz//é   é   é   Ú_)r   r   r   r   r   r   r   r   zdiffering backend z vs. )Ú
splitlinesÚ
startswithr'   Úmatchr   ÚgroupÚ_match_nameÚ_match_c_sigÚ_match_suffixÚ_add_kernelÚjoinr   r+   r.   ÚRuntimeError)r/   r1   ÚlnÚmÚker_namer)   Ú	algo_infoÚnamer   r   Úc_typesr   r   r   r.   s                  r   Úextract_linker_metaz HeaderParser.extract_linker_meta0   s´  € Ø×#Ò#Ñ%Ô%ð 	lñ 	lˆBØ�}Š}˜TÑ"Ô"ñ lØÔ*×0Ò0°Ñ4Ô4�Ý˜1‘:”:ð lØ12·²¸±´¸Q¿WºWÀQ¹Z¼ZÈÏÊÐQRÉÌ Y˜e�HØ-1×-=Ò-=¸hÑ-GÔ-GÑ*�D˜( FØ)-×):Ò):¸5Ñ)AÔ)AÑ&�G˜YØ'+×'9Ò'9¸&À%Ñ'HÔ'HÑ$�I˜uØ×$Ò$ØŸš $¨	Ð!2Ñ3Ô3Ý(Ø-1Ø&/Ø'.Ø"'Ø%-Ø*0Ø#)Ø&/ð	ñ 	ô 	ñô ð ñ ð Ô,×2Ò2°2Ñ6Ô6�AÝ˜q‘z”zð lØ'(§w¢w¨q¡z¤z˜ØÔ,Ð4Ø0<˜DÔ-Ñ-Ø!Ô.°,Ò>Ð>Ý".Ð/jÀDÔDUÐ/jÐ/jÐ\hÐ/jÐ/jÑ"kÔ"kÐkùð9	lð 	lr   rC   c                 ó   — | j                              |¦  «        }t          |¦  «        rD|                     d¦  «        |                     d¦  «        |                     d¦  «        }}}|||fS t	          |› d�¦  «        ‚)Nr3   r4   r5   z is not a valid kernel name)r(   r9   r   r:   r   )r/   rC   rB   rE   r   r   s         r   r;   zHeaderParser._match_nameO   su   € ØÔ×"Ò" 8Ñ,Ô,ˆÝ�1‰:Œ:ð 	*Ø%&§W¢W¨Q¡Z¤Z°·²¸±´¸Q¿WºWÀQ¹Z¼Z˜F�(ˆDØ˜ 6Ð)Ð)Ý˜XÐBÐBÐBÑCÔCÐCr   r)   c                 óì   — | j                              |¦  «        }t          |¦  «        r:g g }}|D ]/\  }}|                     |¦  «         |                     |¦  «         Œ0||fS t	          |› d�¦  «        ‚)Nz" is not a valid argument signature)r)   ÚfindallÚlenÚappendr   )r/   r)   rB   ÚtysÚargsÚtyÚarg_names          r   r<   zHeaderParser._match_c_sigV   s†   € ØŒJ×Ò˜uÑ%Ô%ˆÝˆq‰6Œ6ð 	Ø˜B�ˆCØ !ð &ð &‘��HØ—
’
˜2‘”�Ø—’˜HÑ%Ô%Ð%Ð%Ø˜�9Ðå˜UÐFÐFÐFÑGÔGÐGr   r   c                 ó¸  — |                      d¦  «        }dddœ}d}g }t          t          |¦  «        ¦  «        D ]Á}d}|                     t	          |¦  «        ¦  «        }	|	sŒ)|t          t	          |¦  «        ¦  «        z  }| j                             ||¦  «        rT|dz  }|                     d g|t          |¦  «        z
  z  ¦  «         |                     |||                  ¦  «         |dz  }||d …         }ŒÂt          |¦  «        dk    rt          d|› �¦  «        ‚|                     d gt          |¦  «        t          |¦  «        z
  z  ¦  «         ||fS )Nú,r3   é   )ÚcÚdr   zHas invalid extra suffix: )
ÚsplitÚrangerK   r8   r   r*   r9   ÚextendrL   Ú	Exception)
r/   r   r)   rN   Ús2ir   r   ÚiÚposÚidx_matcheds
             r   r=   zHeaderParser._match_suffixa   sZ  € Ø�{Š{˜3ÑÔˆØ˜BÐÐˆØˆ	Øˆå•s˜4‘y”yÑ!Ô!ð 	"ð 	"ˆAØˆCØ ×+Ò+­C°©F¬FÑ3Ô3ˆKØð ØØ•3•s˜1‘v”v‘;”;ÑˆCØŒ×$Ò$ V¨SÑ1Ô1ð Ø˜Q‘�	Ø—’˜d˜V q­3¨u©:¬:¡~Ñ6Ñ7Ô7Ð7Ø—’˜S ¨¤Ô-Ñ.Ô.Ð.Ø�q‘�Ø˜C˜D˜D”\ˆFˆFåˆv‰;Œ;˜Š?ˆ?ÝÐA¸ÐAÐAÑBÔBÐBØ�Š�d�V�s 4™yœy­3¨u©:¬:Ñ5Ñ6Ñ7Ô7Ð7à˜%ÐÐr   rE   Úkerc                 óZ  — || j         v r�| j         |         d         }t          |j        |j        ¦  «        D ]S\  }}||k    rHt          d|› dd                     |j        ¦  «        › dd                     |j        ¦  «        › �¦  «        ‚ŒT| j         |                              |¦  «         d S )Néÿÿÿÿz Mismatched signature for kernel z: 
	existing sig is: rR   z
	current is: )r-   Úzipr   r   r?   rL   )r/   rE   r^   ÚlastÚcurÚnew_s         r   r>   zHeaderParser._add_kernelz   sö   € Ø�4”<ÐÐØ%)¤\°$Ô%7¸Ô%;ˆDå  ¤°#´.ÑAÔAð ð ‘	��TØ˜$’;�;Ý%ð ^¸4ð  ^ð  ^ÐX[×X`ÒX`ÐaeÔapÑXqÔXqð  ^ð  ^ð  DG÷  DLò  DLð  MPô  M[ñ  D\ô  D\ð  ^ð  ^ñô ð ð ð
 	Œ�TÔ×!Ò! #Ñ&Ô&Ð&Ð&Ð&r   )r#   N)r   r   r   r0   r   rG   r;   r<   r=   r   r>   r
   r   r   r"   r"      sÍ   € € € € € ð!ð !ð !ð !ð"l¨#ð lð lð lð lð>D Cð Dð Dð Dð Dð	H #ð 	Hð 	Hð 	Hð 	Hð  Cð  °ð  ð  ð  ð  ð2
' ð 
'Ð*:ð 
'ð 
'ð 
'ð 
'ð 
'ð 
'r   r"   c                 óp   — d                      d„ t          | j        | j        ¦  «        D ¦   «         ¦  «        S )Nú, c                 ó"   — g | ]\  }}|› d |› �‘ŒS ©ú r
   ©Ú.0rO   Úargs      r   ú
<listcomp>z0gen_signature_with_full_args.<locals>.<listcomp>ˆ   s&   € ÐRÐRÐR©¨¨C˜�m�m˜c�m�mÐRÐRÐRr   )r?   ra   r   r   ©rB   s    r   Úgen_signature_with_full_argsro   ‡   s1   € Ø�9Š9ÐRÐRµ3°q´|ÀQÄ[Ñ3QÔ3QÐRÑRÔRÑSÔSÐSr   c                 óð   — d„ t          | j        | j        ¦  «        D ¦   «         }d„ t          | j        | j        ¦  «        D ¦   «         }d                     d„ t          ||¦  «        D ¦   «         ¦  «        }|S )Nc                 ó$   — g | ]\  }}|d k    ¯|‘ŒS ©r3   r
   )rk   rO   Úhints      r   rm   z!gen_signature.<locals>.<listcomp>Œ   s!   € ÐLÐLÐL™˜˜DÀ$È!Â)À)�À)À)À)r   c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS rr   r
   ©rk   rl   rs   s      r   rm   z!gen_signature.<locals>.<listcomp>�   s!   € ÐMÐMÐM™˜˜dÀ4È1Â9À9�À9À9À9r   rf   c                 ó"   — g | ]\  }}|› d |› �‘ŒS rh   r
   rj   s      r   rm   z!gen_signature.<locals>.<listcomp>Ž   s&   € ÐLÐLÐL¡w r¨3˜�]�]˜S�]�]ÐLÐLÐLr   )ra   r   r   r   r?   )rB   Ú	arg_typesr   Úsigs       r   Úgen_signaturery   ‹   ss   € ØLÐL¥C¨¬°a´gÑ$>Ô$>ÐLÑLÔL€IØMÐM¥c¨!¬+°q´wÑ&?Ô&?ÐMÑMÔM€IØ
�)Š)ÐLÐLµ#°iÀÑ2KÔ2KÐLÑLÔLÑ
MÔ
M€CØ€Jr   rE   Úmetasr#   c           	      óF   — d| › dt          |d         ¦  «        › d| › d| › d�	S )Nú
TT_ResultTy ú(TT_StreamTy stream, r`   z);
void load_ú();
void unload_ú();
    )ro   )rE   rz   s     r   Úmake_algo_declsr€   “   sS   € ðØðð Ý(DÀUÈ2ÄYÑ(OÔ(Oðð àðð ð ðð ð ð r   Úmetac                 óˆ   — d| j         › dt          | ¦  «        › d| j         › dt          | ¦  «        › d| j         › d| j         › d�S )Nr|   ú_default(TT_StreamTy stream, z);
TT_ResultTy r}   z, int algo_id);
void load_r~   r   )r   ro   )r�   s    r   Úmake_global_declr„   œ   s�   € ðØÔ"ðð ÝA]Ð^bÑAcÔAcðð àÔ"ðð å9UÐVZÑ9[Ô9[ðð ð Ô ðð ð Ô"ð	ð ð ð r   c                 ó˜   — d| j         › dt          | ¦  «        › d�}|d| j         › dd                     | j        ¦  «        › d�z  }|dz  }|S )	NúTT_ResultTy rƒ   z){
ú	  return ú	(stream, rf   z, 0);
ú}
©r   ro   r?   r   ©r�   Úsrcs     r   Úmake_default_algo_kernelr�   ¦   sd   € Ø
v˜Ô.Ð
vÐ
vÕMiÐjnÑMoÔMoÐ
vÐ
vÐ
v€CØÐZ˜Ô-ÐZÐZ¸¿	º	À$Ä.Ñ8QÔ8QÐZÐZÐZÑ[€CØˆ5�L€CØ€Jr   c                 óÀ  ‡— d| › d�}t          |d„ ¬¦  «        D ]0}|d|j        › d|j        › d|j        › dt	          |¦  «        › d�	z  }Œ1|dz  }|d| › dt          |d	         ¦  «        › d
�z  }|dz  }t          |d„ ¬¦  «        D ]µ}d„ Šd                     ˆfd„t          |j        |j	        ¦  «        D ¦   «         ¦  «        }|t          |j	        ¦  «        rd|› d�ndz  }d„ t          |j        |j	        ¦  «        D ¦   «         }|d|j        › d|j        › d|j        › dd                     |¦  «        › d�	z  }Œ¶|dz  }|dz  }|dz  }dD ]�}|d|› d| › d�z  }t          |d„ ¬¦  «        D ]#}|d|› d|j        › d|j        › d|j        › d�	z  }Œ$|d|› d| › d�z  }|dz  }t          |d„ ¬¦  «        D ]#}|d |› d|j        › d|j        › d|j        › d�	z  }Œ$|dz  }Œ‘|S )!Nz// launcher for: ú
c                 ó   — | j          S r	   ©r   rn   s    r   ú<lambda>z.make_kernel_hints_dispatcher.<locals>.<lambda>°   ó
   € ¨Q¬[¨L€ r   )Úkeyr†   r6   r}   ú);
r`   z){c                 ó   — | j          S r	   r‘   rn   s    r   r’   z.make_kernel_hints_dispatcher.<locals>.<lambda>¶   r“   r   c                 óB   — |dk    r	d| › d|› d�n|dk    r	d| › d|› d�nd S )	NrS   z((uintptr_t)z % z == 0)r3   ú(z == ú)r
   )Úvalrs   s     r   r’   z.make_kernel_hints_dispatcher.<locals>.<lambda>¸   sU   € Ø�rŠzˆzð B¨SÐAÐA°TÐAÐAÐAÐAð �qŠyˆyð &�SÐ%Ð%˜dÐ%Ð%Ð%Ð%àð	 r   z && c                 ó2   •— g | ]\  }}|® ‰||¦  «        ‘ŒS r	   r
   )rk   rš   rs   Úcond_fns      €r   rm   z0make_kernel_hints_dispatcher.<locals>.<listcomp>½   s9   ø€ ð 
ð 
ð 
á��TØÐð ˆG�C˜ÑÔàÐÐr   z  if (z)
zif (1)
c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS rr   r
   ru   s      r   rm   z0make_kernel_hints_dispatcher.<locals>.<listcomp>Ä   s"   € ÐWÐWÐW™Y˜S $ÈTÐUVÊYÈY�SÈYÈYÈYr   z    return rˆ   rf   z!  return TT_ERROR_INVALID_VALUE;
r‰   ©ÚloadÚunloadz
// z for: c                 ó   — | j          S r	   r‘   rn   s    r   r’   z.make_kernel_hints_dispatcher.<locals>.<lambda>Ì   ó
   € °´°€ r   úvoid ú();
z() {c                 ó   — | j          S r	   r‘   rn   s    r   r’   z.make_kernel_hints_dispatcher.<locals>.<lambda>Ð   r¢   r   ú  )Úsortedr   r   r   ry   ro   r?   ra   r   r   Úany)rE   rz   rŒ   r�   Úcondsr   Úmoderœ   s          @r   Úmake_kernel_hints_dispatcherr«   ®   s  ø€ Ø
&˜dÐ
&Ð
&Ð
&€CÝ�uÐ"8Ð"8Ð9Ñ9Ô9ð Bð BˆØð  B˜dÔ3ð  Bð  B°d´mð  Bð  BÀdÄkð  Bð  BÕhuÐvzÑh{Ôh{ð  Bð  Bð  Bñ  	BˆˆØˆ4�K€CàÐb˜4ÐbÐbÕ6RÐSXÐY[ÔS\Ñ6]Ô6]ÐbÐbÐbÑc€CØˆ4�K€CÝ�uÐ"8Ð"8Ð9Ñ9Ô9ð vð vˆðð ð 	ð —’ð 
ð 
ð 
ð 
å  ¤°´Ñ<Ô<ð
ñ 
ô 
ñ ô ˆð
 	¥s¨4¬:¡¤ÐFÐ#˜Ð#Ð#Ð#Ð#¸Jñ 	ˆàWÐW­#¨d¬n¸d¼jÑ*IÔ*IÐWÑWÔWˆ	ØÐu˜TÔ2ÐuÐu°T´]ÐuÐuÀTÄ[ÐuÐuÐ[_×[dÒ[dÐenÑ[oÔ[oÐuÐuÐuÑuˆˆØˆ4�K€CØÐ/Ñ/€CØˆ5�L€Cà"ð ð ˆØÐ+�tÐ+Ð+ 4Ð+Ð+Ð+Ñ+ˆÝ˜5Ð&<Ð&<Ð=Ñ=Ô=ð 	]ð 	]ˆDØÐ\˜4Ð\Ð\ $Ô"7Ð\Ð\¸$¼-Ð\Ð\È$Ì+Ð\Ð\Ð\Ñ\ˆCˆCØÐ)�tÐ)Ð)˜dÐ)Ð)Ð)Ñ)ˆØˆt‰ˆÝ˜5Ð&<Ð&<Ð=Ñ=Ô=ð 	\ð 	\ˆDØÐZ˜ÐZÐZ Ô 5ÐZÐZ¸¼ÐZÐZÈÌÐZÐZÐZÑ[ˆCˆCØˆu‰ˆˆØ€Jr   c                 ó´   — d| j         › dt          | ¦  «        › d�}|d| j         › d�z  }|d| j         › dd                     | j        ¦  «        › d	�z  }|d
z  }|S )Nr†   r}   z, int algo_id){
z   assert (algo_id < (int)sizeof(z_kernels));
r‡   z_kernels[algo_id](stream, rf   r•   r‰   rŠ   r‹   s     r   Ú!make_kernel_meta_const_dispatcherr­   ×   s   € Ø
{˜Ô.Ð
{Ð
{ÕEaÐbfÑEgÔEgÐ
{Ð
{Ð
{€CØÐR¨dÔ.CÐRÐRÐRÑR€CØÐg�tÔ,ÐgÐgÈÏ	Ê	ÐRVÔR`ÑHaÔHaÐgÐgÐgÑg€CØˆ5�L€CØ€Jr   Únamesc                 ón   — dt          |¦  «        › d�}|d|j        › d�z  }| D ]}|d|› d�z  }Œ|dz  }|S )Nz9typedef TT_ResultTy (*kernel_func_t)(TT_StreamTy stream, r•   zkernel_func_t z_kernels[] = {
r¦   z,
z};
)ro   r   )r®   r�   rŒ   rE   s       r   Úmake_func_pointersr°   à   sf   € à
nÕFbÐcgÑFhÔFhÐ
nÐ
nÐ
n€CØÐD˜DÔ1ÐDÐDÐDÑD€CØð ð ˆØˆ~�Dˆ~ˆ~ˆ~ÑˆˆØˆ6�M€CØ€Jr   c                 ób   — d}dD ])}|d|› d|j         › d�z  }| D ]}|d|› d|› d�z  }Œ|dz  }Œ*|S )	NÚ rž   r£   r6   z(void){
r¦   r¤   z}

©r   )r®   r�   rŒ   rª   rE   s        r   Úmake_kernel_load_defr´   ë   sv   € Ø
€CØ"ð ð ˆØÐ?�tÐ?Ð?˜dÔ3Ð?Ð?Ð?Ñ?ˆØð 	+ð 	+ˆDØÐ*˜Ð*Ð*˜tÐ*Ð*Ð*Ñ*ˆCˆCØˆw‰ˆˆØ€Jr   c                 ó   — d| j         › d�}|S )Núint z_get_num_algos(void);r³   r‹   s     r   Úmake_get_num_algos_declr·   õ   s   € Ø
=�Ô&Ð
=Ð
=Ð
=€CØ€Jr   c                 óR   — d| j         › d�}|d| j         › d| j         › d�z  }|dz  }|S )Nr¶   z_get_num_algos(void){
z  return (int)(sizeof(z_kernels) / sizeof(z_kernels[0]));
r‰   r³   r‹   s     r   Úmake_get_num_algos_defr¹   ú   sG   € Ø
@�Ô&Ð
@Ð
@Ð
@€CØÐu DÔ$9ÐuÐuÈdÔNcÐuÐuÐuÑu€CØˆ5�L€CØ€Jr   a0  
Triton ahead-of-time linker:

This program takes in header files generated by compile.py, and generates a
single entry-point responsible for dispatching the user's input to the right
kernel given the specializations that were compiled.

Example usage:
python link.py /path/to/headers/*.h -o kernel_name
Ú__main__)ÚArgumentParser)ÚdescriptionÚheadersú+z_Paths to header files to link. Must include linker directive annotations (autogenerated by ttc))ÚnargsÚhelpz--outz-ozOut filename)ÚtyperÀ   z--prefixr²   z(String to prefix kernel dispatcher names)rÁ   ÚdefaultrÀ   c                 ó4   — g | ]\  }}t          ||¦  «        ‘ŒS r
   )r€   ©rk   rE   r�   s      r   rm   rm   (  s&   € ÐWÐWÐW±*°$¸•/ $¨Ñ-Ô-ÐWÐWÐWr   c                 ó   — g | ]\  }}|‘ŒS r
   r
   rÄ   s      r   rm   rm   )  s   € Ð@Ð@Ð@™:˜4 �$Ð@Ð@Ð@r   Úextrazlink.hz.hÚwr�   Nc                 ó4   — g | ]\  }}t          ||¦  «        ‘ŒS r
   )r«   rÄ   s      r   rm   rm   8  s'   € Ð^Ð^Ð^¹¸¸tÕ(¨¨tÑ4Ô4Ð^Ð^Ð^r   c                 ó   — g | ]}|‘ŒS r
   r
   )rk   rE   s     r   rm   rm   9  s   € Ð4Ð4Ð4�dˆTÐ4Ð4Ð4r   z.cz#include <stdint.h>
z#include <assert.h>
)DÚcollectionsr   Úpathlibr   Útypingr   r   Údataclassesr   r   rY   r   r   r"   ro   ry   r   r€   r„   r�   r«   r­   r°   r´   r·   r¹   Údescr   Úargparser»   ÚparserÚadd_argumentÚ
parse_argsrN   Úincludesr½   r1   Úh_pathÚ	read_textÚh_strrL   rE   rG   r-   ÚitemsÚ
algo_declsÚ
meta_listsr�   Úget_num_algos_declÚglobal_declÚ__file__Úparentr.   Úbackend_preludeÚoutÚwith_suffixÚopenÚfpr?   ÚwriteÚdefsÚkeysr®   Úfunc_pointers_defÚmeta_const_defÚload_unload_defÚget_num_algos_defÚdefault_algo_kernelr
   r   r   ú<module>rë      sÖ  ðØ #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à !Ð !Ð !Ð !Ð !Ð !ðð ð ð	ð 	ð 	ð 	ð 	�)ñ 	ô 	ð 	ð ð	,ð 	,ð 	,ð 	,ð 	,ñ 	,ô 	,ñ „ð	,ðg'ð g'ð g'ð g'ð g'ñ g'ô g'ð g'ðTTð Tð Tðð ð ð˜#ð  hÐ/?Ô&@ð ÀSð ð ð ð ðÐ+ð °ð ð ð ð ðÐ#3ð ¸ð ð ð ð ð% sð %°8Ð<LÔ3Mð %ÐRUð %ð %ð %ð %ðRÐ,<ð Àð ð ð ð ð˜cð Ð)9ð ¸cð ð ð ð ð ð Ð+;ð Àð ð ð ð ðÐ"2ð °sð ð ð ð ð
Ð!1ð °cð ð ð ð ð	€ð ˆzÒÑØ'Ð'Ð'Ð'Ð'Ð'àˆ^¨Ð-Ñ-Ô-€FØ
×ÒØØØnð ñ ô ð ð
 ×Ò˜ ¨D°~ÐÑFÔFÐFØ
×ÒØØØØ7ð	 ñ ô ð ð ×ÒÑÔ€Dð ˆ\‰^Œ^€FØ€HØ”,ð *ð *ˆØ��f‘”ˆØ× Ò Ñ"Ô"ˆØ�Š˜œÑ$Ô$Ð$Ø×"Ò" 5Ñ)Ô)Ð)Ð)ð XÐWÀÄ×@TÒ@TÑ@VÔ@VÐWÑWÔW€JØ@Ð@¨¬×)=Ò)=Ñ)?Ô)?Ð@Ñ@Ô@€JØ�aŒ=˜Ô€DØ0Ð0°Ñ6Ô6ÐØ"Ð" 4Ñ(Ô(€KØ�t˜H‘~”~Ô,¨wÑ6¸Ô9LÑLÈxÑW×bÒbÑdÔd€OØ	Œ×	Ò	˜dÑ	#Ô	#×	(Ò	(¨Ñ	-Ô	-ð °ØˆØˆt�yŠy˜Ñ$Ô$Ñ$ˆØˆt‰ˆØÐ!Ñ!ˆØˆt‰ˆØˆ{ÑˆØ
�Š�‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð _Ð^ÀvÄ~×G[ÒG[ÑG]ÔG]Ð^Ñ^Ô^€DØ4Ð4˜fœn×1Ò1Ñ3Ô3Ð4Ñ4Ô4€EØ*Ð*¨5°$Ñ7Ô7ÐØ6Ð6°tÑ<Ô<€NØ*Ð*¨5°$Ñ7Ô7€OØ.Ð.¨tÑ4Ô4ÐØ2Ð2°4Ñ8Ô8ÐØ	Œ×	Ò	˜dÑ	#Ô	#×	(Ò	(¨Ñ	-Ô	-ð °ØˆØÐ&Ñ&ˆØÐ&Ñ&ˆØˆt‰ˆØˆt�yŠy˜‰ŒÑˆØˆt‰ˆØÐ Ñ ˆØˆt‰ˆØÐ Ñ ˆØˆt‰ˆØˆ~ÑˆØˆt‰ˆØˆÑˆØˆt‰ˆØÐ"Ñ"ˆØ
�Š�‰Œˆð!ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð ðg Ðs&   ÉAJ$Ê$J(Ê+J(ÍA1OÏOÏ O