§
    9˜ºh_.  ã                   óz  — 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/¦  «        Z1e!j2         3                    d.¦  «         4                    d/¦  «        5 Z5d0Z2e2d1 6                    e-¦  «        z  Z2e2d1z  Z2e2e0z  Z2e2d1z  Z2e2e1z  Z2e5 7                    e2¦  «         d2d2d2¦  «         n# 1 swxY w Y   d3„ ej+         ,                    ¦   «         D ¦   «         Z8d4„ ej+         9                    ¦   «         D ¦   «         Z: ee:e/¦  «        Z; ee/¦  «        Z< ee:e/¦  «        Z= ee/¦  «        Z> ee/¦  «        Z?e!j2         3                    d5¦  «         4                    d/¦  «        5 Z5d)Z2e2d0z  Z2e2d6z  Z2e2d7z  Z2e2d1z  Z2e2d1 6                    e8¦  «        z  Z2e2d1z  Z2e2e;z  Z2e2d1z  Z2e2e>z  Z2e2d1z  Z2e2e<z  Z2e2d1z  Z2e2e=z  Z2e2d1z  Z2e2e?z  Z2e5 7                    e2¦  «         d2d2d2¦  «         d2S # 1 swxY w Y   d2S d2S )8é    )Údefaultdict)ÚPath)ÚSequenceÚUnion)Ú	dataclassc                 ó
   — | d uS ©N© )Úxs    úY/var/www/html/services/rag-service/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                 ó  — dd l }|                     d¦  «        | _        |                     d¦  «        | _        |                     d¦  «        | _        |                     d¦  «        | _        t          t          ¦  «        | _        d S )Nr   z'//[\s]*tt-linker:[\s]*([\w]+):(.+):(.+)z^([\w]+)_([\w]+)_([\w]+)$z[\s]*(\w+)\s(\w+)[,]?z[c,d])	ÚreÚcompileÚlinker_directivesÚkernel_nameÚc_sigÚ
arg_suffixr   ÚlistÚkernels)Úselfr%   s     r   Ú__init__zHeaderParser.__init__   sq   € Øˆ	ˆ	ˆ	ð "$§¢Ð,XÑ!YÔ!YˆÔàŸ:š:Ð&DÑEÔEˆÔà—Z’ZÐ ;Ñ<Ô<ˆŒ
àŸ*š* WÑ-Ô-ˆŒå"¥4Ñ(Ô(ˆŒˆˆr   Úheaderc                 óF  — |                      ¦   «         D �]
}|                     d¦  «        rò| j                             |¦  «        }t	          |¦  «        rÉ|                     d¦  «        |                     d¦  «        |                     d¦  «        }}}|                      |¦  «        \  }}}	|                      |¦  «        \  }
}|                      |	|¦  «        \  }}|  	                    d 
                    ||g¦  «        t          |||
|||	|	|¬¦  «        ¦  «         �Œd S )Nz//é   é   é   Ú_)r   r   r   r   r   r   r   r   )Ú
splitlinesÚ
startswithr'   Úmatchr   ÚgroupÚ_match_nameÚ_match_c_sigÚ_match_suffixÚ_add_kernelÚjoinr   )r-   r/   ÚlnÚmÚker_namer)   Ú	algo_infoÚnamer   r   Úc_typesr   r   r   s                 r   Úextract_linker_metaz HeaderParser.extract_linker_meta-   s.  € Ø×#Ò#Ñ%Ô%ð 	ñ 	ˆBØ�}Š}˜TÑ"Ô"ð ØÔ*×0Ò0°Ñ4Ô4�Ý˜1‘:”:ð Ø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Ø#)Ø&/ð	ñ 	ô 	ñô ð ùð	ð 	r   r@   c                 ó   — | j                              |¦  «        }t          |¦  «        rD|                     d¦  «        |                     d¦  «        |                     d¦  «        }}}|||fS t	          |› d�¦  «        ‚)Nr1   r2   r3   z is not a valid kernel name)r(   r7   r   r8   r   )r-   r@   r?   rB   r   r   s         r   r9   zHeaderParser._match_nameD   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)   r?   ÚtysÚargsÚtyÚarg_names          r   r:   zHeaderParser._match_c_sigK   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 �]"}|                     t	          |¦  «        ¦  «        }|dk    rt          |› d�¦  «        ‚|t          t	          |¦  «        ¦  «        z  }| j                             ||¦  «        rT|dz  }|                     d g|t          |¦  «        z
  z  ¦  «         | 	                    |||                  ¦  «         |dz  }|t          |¦  «        dz
  k     r||d …         }Œì|                     d gt          |¦  «        t          |¦  «        z
  z  ¦  «         �Œ$||fS )Nú,r1   é   )ÚcÚdr   éÿÿÿÿz is not a valid kernel suffix)
ÚsplitÚrangerH   Úfindr   r   r*   r7   ÚextendrI   )	r-   r   r)   rK   Ús2ir   r   ÚiÚposs	            r   r;   zHeaderParser._match_suffixV   s^  € Ø�{Š{˜3ÑÔˆØ˜BÐÐˆØˆ	Øˆõ •s˜4‘y”yÑ!Ô!ð 	@ñ 	@ˆAØ—+’+�c !™fœfÑ%Ô%ˆCØ�bŠyˆyÝ! VÐ"JÐ"JÐ"JÑKÔKÐKØ•3•s˜1‘v”v‘;”;ÑˆCØŒ×$Ò$ V¨SÑ1Ô1ð Ø˜Q‘�	Ø—’˜d˜V q­3¨u©:¬:¡~Ñ6Ñ7Ô7Ð7Ø—’˜S ¨¤Ô-Ñ.Ô.Ð.Ø�q‘�Ø•3�t‘9”9˜q‘=Ò Ð Ø   œ��à—’˜d˜V¥s¨4¡y¤yµ3°u±:´:Ñ'=Ñ>Ñ?Ô?Ð?Ñ?Ø˜%ÐÐr   rB   Ú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 )NrS   z Mismatched signature for kernel z: 
	existing sig is: rO   z
	current is: )r,   Úzipr   r   r=   rI   )r-   rB   r[   ÚlastÚcurÚnew_s         r   r<   zHeaderParser._add_kernelm   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   r.   r   rD   r9   r:   r;   r   r<   r
   r   r   r"   r"      sÈ   € € € € € ð)ð )ð )ð )ð¨#ð ð ð ð ð.D Cð Dð Dð Dð Dð	H #ð 	Hð 	Hð 	Hð 	Hð  Cð  °ð  ð  ð  ð  ð.
' ð 
'Ð*:ð 
'ð 
'ð 
'ð 
'ð 
'ð 
'r   r"   c                 óp   — d                      d„ t          | j        | j        ¦  «        D ¦   «         ¦  «        S )Nú, c                 ó"   — g | ]\  }}|› d |› �‘ŒS ©ú r
   ©Ú.0rL   Úargs      r   ú
<listcomp>z0gen_signature_with_full_args.<locals>.<listcomp>{   s&   € ÐRÐRÐR©¨¨C˜�m�m˜c�m�mÐRÐRÐRr   )r=   r]   r   r   ©r?   s    r   Úgen_signature_with_full_argsrk   z   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 ©r1   r
   )rg   rL   Úhints      r   ri   z!gen_signature.<locals>.<listcomp>   s!   € ÐLÐLÐL™˜˜DÀ$È!Â)À)�À)À)À)r   c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS rn   r
   ©rg   rh   ro   s      r   ri   z!gen_signature.<locals>.<listcomp>€   s!   € ÐMÐMÐM™˜˜dÀ4È1Â9À9�À9À9À9r   rb   c                 ó"   — g | ]\  }}|› d |› �‘ŒS rd   r
   rf   s      r   ri   z!gen_signature.<locals>.<listcomp>�   s&   € ÐLÐLÐL¡w r¨3˜�]�]˜S�]�]ÐLÐLÐLr   )r]   r   r   r   r=   )r?   Ú	arg_typesr   Úsigs       r   Úgen_signatureru   ~   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   rB   Úmetasr#   c           	      óF   — d| › dt          |d         ¦  «        › d| › d| › d�	S )Nú

CUresult ú(CUstream stream, rS   z);
void load_ú();
void unload_ú();
    )rk   )rB   rv   s     r   Úmake_algo_declsr|   †   sS   € ðØ
ðð Ý">¸uÀR¼yÑ"IÔ"Iðð àðð ð ðð ð ð r   Úmetac                 óˆ   — d| j         › dt          | ¦  «        › d| j         › dt          | ¦  «        › d| j         › d| j         › d�S )Nrx   ú_default(CUstream stream, z);
CUresult ry   z, int algo_id);
void load_rz   r{   )r   rk   )r}   s    r   Úmake_global_declr€   �   s�   € ðØ
Ô
ðð Ý;WÐX\Ñ;]Ô;]ðð à
Ô
ðð å3OÐPTÑ3UÔ3Uðð ð Ô ðð ð Ô"ð	ð ð ð r   c                 ó˜   — d| j         › dt          | ¦  «        › d�}|d| j         › dd                     | j        ¦  «        › d�z  }|dz  }|S )	Nú	CUresult r   z){
ú	  return ú	(stream, rb   z, 0);
ú}
©r   rk   r=   r   ©r}   Úsrcs     r   Úmake_default_algo_kernelr‰   ™   sd   € Ø
p�dÔ+Ð
pÐ
pÕGcÐdhÑGiÔGiÐ
pÐ
pÐ
p€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   rj   s    r   ú<lambda>z.make_kernel_hints_dispatcher.<locals>.<lambda>£   ó
   € ¨Q¬[¨L€ r   )Úkeyr‚   r4   ry   ú);
rS   z){c                 ó   — | j          S r	   r�   rj   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 )NrP   ú(z % z == 0)r1   z == ú)r
   )Úvalro   s     r   rŽ   z.make_kernel_hints_dispatcher.<locals>.<lambda>«   sT   € Ø�rŠzˆzð 7 #Ð6Ð6¨$Ð6Ð6Ð6Ð6ð �qŠyˆyð &�SÐ%Ð%˜dÐ%Ð%Ð%Ð%àð	 r   z && c                 ó2   •— g | ]\  }}|® ‰||¦  «        ‘ŒS r	   r
   )rg   r–   ro   Úcond_fns      €r   ri   z0make_kernel_hints_dispatcher.<locals>.<listcomp>°   s9   ø€ ð 
ð 
ð 
á��TØÐð ˆG�C˜ÑÔàÐÐr   z  if (z)
zif (1)
c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS rn   r
   rq   s      r   ri   z0make_kernel_hints_dispatcher.<locals>.<listcomp>·   s"   € ÐWÐWÐW™Y˜S $ÈTÐUVÊYÈY�SÈYÈYÈYr   z    return r„   rb   z#  return CUDA_ERROR_INVALID_VALUE;
r…   ©ÚloadÚunloadz
// z for: c                 ó   — | j          S r	   r�   rj   s    r   rŽ   z.make_kernel_hints_dispatcher.<locals>.<lambda>¿   ó
   € °´°€ r   úvoid ú();
z() {c                 ó   — | j          S r	   r�   rj   s    r   rŽ   z.make_kernel_hints_dispatcher.<locals>.<lambda>Ã   rž   r   ú  )Úsortedr   r   r   ru   rk   r=   r]   r   r   Úany)rB   rv   rˆ   r}   Úcondsr   Úmoder˜   s          @r   Úmake_kernel_hints_dispatcherr§   ¡   sõ  ø€ Ø
&˜dÐ
&Ð
&Ð
&€CÝ�uÐ"8Ð"8Ð9Ñ9Ô9ð |ð |ˆØÐ{˜4Ô0Ð{Ð{°4´=Ð{Ð{À4Ä;Ð{Ð{ÕboÐptÑbuÔbuÐ{Ð{Ð{Ñ{ˆˆØˆ4�K€CàÐ\˜Ð\Ð\Õ0LÈUÐSUÌYÑ0WÔ0WÐ\Ð\Ð\Ñ]€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ØÐ1Ñ1€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‚   ry   z, int algo_id){
z   assert (algo_id < (int)sizeof(z_kernels));
rƒ   z_kernels[algo_id](stream, rb   r‘   r…   r†   r‡   s     r   Ú!make_kernel_meta_const_dispatcherr©   Ê   s   € Ø
u�dÔ+Ð
uÐ
uÕ?[Ð\`Ñ?aÔ?aÐ
uÐ
uÐ
u€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 )Nz3typedef CUresult (*kernel_func_t)(CUstream stream, r‘   zkernel_func_t z_kernels[] = {
r¢   z,
z};
)rk   r   )rª   r}   rˆ   rB   s       r   Úmake_func_pointersr¬   Ó   sf   € à
hÕ@\Ð]aÑ@bÔ@bÐ
hÐ
hÐ
h€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Ÿ   r4   z(void){
r¢   r    z}

©r   )rª   r}   rˆ   r¦   rB   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|   ©rg   rB   r}   s      r   ri   ri     s&   € ÐWÐWÐW±*°$¸•/ $¨Ñ-Ô-ÐWÐWÐWr   c                 ó   — g | ]\  }}|‘ŒS r
   r
   rÀ   s      r   ri   ri     s   € Ð@Ð@Ð@™:˜4 �$Ð@Ð@Ð@r   z.hÚwz#include <cuda.h>
r‹   Nc                 ó4   — g | ]\  }}t          ||¦  «        ‘ŒS r
   )r§   rÀ   s      r   ri   ri   *  s'   € Ð^Ð^Ð^¹¸¸tÕ(¨¨tÑ4Ô4Ð^Ð^Ð^r   c                 ó   — g | ]}|‘ŒS r
   r
   )rg   rB   s     r   ri   ri   +  s   € Ð4Ð4Ð4�dˆTÐ4Ð4Ð4r   z.cz#include <stdint.h>
z#include <assert.h>
)@Úcollectionsr   Úpathlibr   Útypingr   r   Údataclassesr   r   Ú	Exceptionr   r   r"   rk   ru   r   r|   r€   r‰   r§   r©   r¬   r°   r³   rµ   Údescr   Úargparser·   ÚparserÚadd_argumentÚ
parse_argsrK   Úincludesr¹   r/   Úh_pathÚ	read_textÚh_strrI   rB   rD   r,   ÚitemsÚ
algo_declsÚ
meta_listsr}   Úget_num_algos_declÚglobal_declÚ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³  ðØ #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à !Ð !Ð !Ð !Ð !Ð !ðð ð ð	ð 	ð 	ð 	ð 	�)ñ 	ô 	ð 	ð ð	,ð 	,ð 	,ð 	,ð 	,ñ 	,ô 	,ñ „ð	,ðZ'ð Z'ð Z'ð Z'ð Z'ñ Z'ô Z'ð Z'ðz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Ø	Œ×	Ò	˜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‰ˆØÐ"Ñ"ˆØ
�Š�‰Œˆð#ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð ðe Ðs&   È$AI4É4I8É;I8Ì+A6N.Î.N2Î5N2