Ë
    üÇ:jCj  ã                   óP  — d dl mZ d dlZd dlmZmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZmZ  edg d	¢«      Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ de«      Z ed«      Z G d„ de«      Z G d„ de«      Zd„ Zd„ Z G d„ de«      Z G d„ de«      Z  G d„ de«      Z! G d„ d e!«      Z"y)!é    )Ú
namedtupleN)ÚConstantÚ	IRBuilder)Úir)ÚtypesÚcgutils)Úglobal_compiler_lock)Úmake_library_cacheÚ	NullCacheÚ_wrapper_info©ÚlibraryÚenvÚnamec                 óú  —  | «       }|j                   j                  |||	j                  |	j                  |«      \  }}|j	                  |j
                  d¬«      5 \  }}|5   ||«       d d d «       |5  |
j                  «       }|j                   j                  ||
|«       |
j                  |«       d d d «       d d d «       t        ||«      D ]@  \  }}|j                  |j                  |j                  |«      |j                  «      |«       ŒB |j                  |j                  |j                  |«      |j                  «      |«       |j                  S # 1 sw Y   ŒðxY w# 1 sw Y   Œ³xY w# 1 sw Y   Œ·xY w©NT©Úlikely)Ú	call_convÚcall_functionÚreturn_typeÚargsÚif_elseÚis_okÚ
gil_ensureÚraise_errorÚgil_releaseÚzipÚstoreÚaddÚloadÚstepÚcode)r!   r   ÚcontextÚfuncÚbuilderÚarraysÚoutÚoffsetsÚstore_offsetÚ	signatureÚpyapir   ÚelemsÚstatusÚretvalÚif_okÚif_errorÚgilÚoffÚarys                       úl/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/numba/np/ufunc/wrappers.pyÚ_build_ufunc_loop_bodyr6      sT  € á‹F€Eð ×&Ñ&×4Ñ4°W¸dØ5>×5JÑ5JØ5>·^±^ÀUóL�N€FˆFð
 
�‰˜Ÿ™¨dˆÓ	3ð #Ñ7H¸¸xØñ 	Ù�&ŒM÷	àñ 	#Ø×"Ñ"Ó$ˆCØ×Ñ×)Ñ)¨'°5¸&ÔAØ×Ñ˜cÔ"÷	#÷#ô ˜ Ó(ò E‰ˆˆSØ�‰�g—k‘k '§,¡,¨sÓ"3°S·X±XÓ>ÀÕDðEð ‡M�M�'—+‘+˜gŸl™l¨<Ó8¸#¿(¹(ÓCØô ð �;‰;Ð÷	ð 	ú÷	#ð 	#ú÷#ð #ús<   ÁE1Á!	EÁ*
E1Á4?E%Â3E1ÅE"	ÅE1Å%E.	Å*E1Å1E:c                 óz  —  | «       }t         j                  gt        |	j                  «      z  }|j	                  d¬«      5  |j
                  j                  ||t         j                  ||«      \  }}|D ]  }|j                  |«       Œ 	 d d d «        |«       t        ||«      D ]@  \  }}|j                  |j                  |j                  |«      |j                  «      |«       ŒB |j                  |j                  |j                  |«      |j                  «      |«       j                  S # 1 sw Y   Œ§xY w)NT)Úkeep_new)r   ÚpyobjectÚlenr   Úerr_pushr   r   Údecrefr   r   r    r!   r"   r#   )r!   r   r$   r%   r&   r'   r(   r)   r*   r+   r   r,   r-   Ú_objargsr.   r/   Úelemr3   r4   s                      r5   Ú_build_ufunc_loop_body_objmoder?   ,   s  € ñ ‹F€Eô —‘Ð¤# i§n¡nÓ"5Ñ5€Hð 
�‰ ˆÓ	&ñ Ø ×*Ñ*×8Ñ8¸À$Ü9>¿¹Ø9AÀ5óJ‰ˆ�ð ò 	ˆDØ�L‰L˜Õñ	÷ñ 
ˆ&„Mô ˜ Ó(ò E‰ˆˆSØ�‰�g—k‘k '§,¡,¨sÓ"3°S·X±XÓ>ÀÕDðEð ‡M�M�'—+‘+˜gŸl™l¨<Ó8¸#¿(¹(ÓCØô ð �;‰;Ð÷'ð ús   ÁA	D1Ä1D:c
                 óV   ‡‡‡‡‡— ˆˆˆfd„}
ˆˆˆfd„}t        |
|| |‰‰‰‰‰|||	¬«      S )Nc            	      óŒ   •— t        ‰‰«      D � �cg c]%  \  } }|j                  ‰j                  | «      «      ‘Œ' }} }|S c c}} w ©N)r   Úload_directr!   )r3   r4   r-   r'   r&   r)   s      €€€r5   r!   z"build_slow_loop_body.<locals>.loadN   sG   ø€ ä!$ W¨fÓ!5÷7Ù�S˜#ð —‘ §¡¨cÓ!2Õ3ð 7ˆñ 7àˆùó7s   ‘*A c                 óH   •— ‰j                  | ‰j                  ‰«      «       y rB   )Ústore_directr!   )r/   r&   r(   r*   s    €€€r5   r   z#build_slow_loop_body.<locals>.storeS   s   ø€ Ø×Ñ˜ §¡¨lÓ!;Õ<ó    ©r   ©r6   )r$   r%   r&   r'   r(   r)   r*   r+   r,   r   r!   r   s     `````     r5   Úbuild_slow_loop_bodyrI   L   s6   ü€ öö
=ô " $¨¨w¸¸gÀvØ"% w°¸iÈØ&)ô+ð +rF   c                 ó®   ‡‡‡‡‡‡‡‡— | j                  ‰|	«      }‰j                  |
||	«      Šˆˆˆˆˆˆfd„}ˆˆˆˆˆfd„}t        ||| |‰‰‰‰‰‰|	‰«      S )Nc            	      ó
  •— t        ‰‰«      D � �cg c]%  \  } }|j                  ‰j                  | «      «      ‘Œ' }} }t        |‰
j                  «      D ��cg c]  \  }}‰	j	                  ||‰«      ‘Œ }}}|S c c}} w c c}}w rB   )r   rC   r!   r   Úfrom_native_value)r3   r4   r-   ÚvÚtr'   r&   Úenv_managerr)   r,   r+   s        €€€€€€r5   r!   z!build_obj_loop_body.<locals>.load`   s‹   ø€ ô "% W¨fÓ!5÷7Ù�S˜#ð —‘ §¡¨cÓ!2Õ3ð 7ˆñ 7ô ! ¨	¯©Ó7÷9Ù�Q˜ð ×(Ñ(¨¨A¨{Õ;ð 9ˆñ 9àˆùó7ùó9s   ‘*A9ÁA?c                 óN  •— t        j                  ‰| «      }‰j                  |d¬«      5  ‰j                  ‰j                  | «      }|j
                  �J ‚‰j                  |j                  ‰j                  ‰«      «       ‰j                  | «       d d d «       y # 1 sw Y   y xY wr   )
r   Úis_not_nullÚif_thenÚto_native_valuer   ÚcleanuprE   Úvaluer!   r<   )r/   r   Únativer&   r(   r,   r+   r*   s      €€€€€r5   r   z"build_obj_loop_body.<locals>.storei   s�   ø€ Ü×#Ñ# G¨VÓ4ˆð �_‰_˜U¨4ˆ_Ó0ñ 	!à×*Ñ*¨9×+@Ñ+@À&ÓIˆFØ—>‘>Ð)Ð)Ð)à×Ñ˜VŸ\™\¨7¯<©<¸Ó+EÔFà�L‰L˜Ô ÷	!÷ 	!ñ 	!ús   «A'BÂB$)Úget_env_bodyÚget_env_managerr?   )r$   r%   r&   r'   r(   r)   r*   r+   r,   Úenvptrr   Úenv_bodyr!   r   rO   s     ```````     @r5   Úbuild_obj_loop_bodyr[   [   sh   ÿ€ à×#Ñ# G¨VÓ4€HØ×'Ñ'¨¨X°vÓ>€K÷ñ ÷!ð !ô *¨$°°wÀÀgØ*0°#°wÀØ*3°V¸UóDð DrF   c                 óN   ‡‡‡— ˆˆfd„}ˆˆfd„}t        ||| ||‰‰||||	|
¬«      S )Nc                  óN   •— ‰D � cg c]  } | j                  ‰«      ‘Œ }} |S c c} w rB   )Úload_aligned)r4   r-   r'   Úinds     €€r5   r!   z"build_fast_loop_body.<locals>.load}   s5   ø€ à"ö$Øð ×!Ñ! #Õ&ð $ˆð $àˆùò$s   †"c                 ó*   •— ‰j                  | ‰«       y rB   )Ústore_aligned)r/   r_   r(   s    €€r5   r   z#build_fast_loop_body.<locals>.store‚   s   ø€ Ø×Ñ˜& #Õ&rF   rG   rH   )r$   r%   r&   r'   r(   r)   r*   r+   r_   r,   r   r!   r   s      ``   `    r5   Úbuild_fast_loop_bodyrb   {   s6   ú€ õõ
'ô " $¨¨w¸¸gÀvØ"% w°¸iÈØ&)ô+ð +rF   c                 ó|
  — t        |t        «      sJ ‚t        j                  d«      }t        j                  |«      }t        j                  |«      }|j                  t        j                  «      }	t        j                  |	«      }
t        j                  t        j                  «       ||
|
|g«      }|j                  «       j                  d«      }|j                  d«      }|rP|j                  j                  t        j                  t        j                  gt!        |j"                  «      z  «      }n0|j                  j                  |j$                  |j"                  «      }t        j&                  |||¬«      }|j(                  j+                  d«       t        j&                  ||d|j,                  z   «      }|j"                  \  }}}}d|_        d|_        d	|_        d
|_        t/        |j1                  d«      «      }|j3                  |j4                  «      }|j6                  }|j9                  |j;                  |j<                  |«      «      }|j9                  |d¬«      }g }t?        |j"                  «      D ]$  \  }}|jA                  tC        ||||||«      «       Œ& tC        ||||t!        |«      |j$                  «      }g }|jE                  t        j                  d«      }|D ];  } tG        jH                  ||	«      }!|jA                  |!«       |jK                  ||!«       Œ= tG        jH                  ||	«      }"|jK                  ||"«       tF        jL                  }#|D ]  }$|jO                  |#|$jP                  «      }#Œ  |jS                  |«      }%|rh|%jU                  «       }&tG        jV                  |||	¬«      5  tY        |||||||"||%||«       ddd«       |%j[                  |&«       |j]                  «        nº|j_                  |#«      5 \  }'}(|'5  tG        jV                  |||	¬«      5 })ta        |||||||"||)jb                  |%|¬«       ddd«       ddd«       |(5  tG        jV                  |||	¬«      5  te        |||||||"||%|¬«
       ddd«       ddd«       ddd«       |j]                  «        ~|jg                  |«       |ji                  | «       tk        |||j,                  ¬«      S # 1 sw Y   �Œ!xY w# 1 sw Y   Œ²xY w# 1 sw Y   Œ¶xY w# 1 sw Y   Œ‰xY w# 1 sw Y   Œ�xY w# 1 sw Y   Œ‘xY w)z�
    Wrap the scalar function with a loop that iterates over the arguments

    Returns
    -------
    (library, env, name)
    é   Úufunc_wrapperÚ ©r   Úalwaysinlinez
__ufunc__.r   ÚdimsÚstepsÚdataÚentryÚ	loopcountr   ©ÚintpNrG   r   )6Ú
isinstanceÚstrr   ÚIntTypeÚPointerTypeÚget_value_typer   ro   ÚFunctionTypeÚVoidTypeÚcodegenÚcreate_libraryÚcreate_ir_moduler   Úget_function_typer9   r:   r   r   ÚFunctionÚ
attributesr    r   r   Úappend_basic_blockÚget_env_nameÚfndescÚenvironmentr!   Údeclare_env_globalÚmoduleÚ	enumerateÚappendÚ	UArrayArgÚget_constantr   Úalloca_oncer   Útrue_bitÚand_Úis_unit_stridedÚget_python_apir   Ú	for_ranger[   r   Úret_voidr   rb   ÚindexrI   Úadd_ir_moduleÚadd_linking_libraryr   )*r   r$   Úfnamer+   ÚobjmodeÚcresÚbyte_tÚ
byte_ptr_tÚbyte_ptr_ptr_tÚintp_tÚ
intp_ptr_tÚfntyÚ
wrapperlibÚwrapper_moduleÚ	func_typer%   ÚwrapperÚarg_argsÚarg_dimsÚ	arg_stepsÚarg_datar&   Úenvnamer   rY   rm   r'   ÚiÚtypr(   r)   ÚzeroÚ_Úpr*   Úunit_stridedr4   r,   r2   rŠ   Ú
is_stridedÚloops*                                             r5   Úbuild_ufunc_wrapperr«   Š   s­  € ô �eœSÔ!Ð!Ð!Ü�Z‰Z˜‹]€FÜ—‘ Ó'€JÜ—^‘^ JÓ/€NØ×#Ñ#¤E§J¡JÓ/€FÜ—‘ Ó'€Jä�?‰?œ2Ÿ;™;›=¨>¸:Ø+5°zð+Có D€Dð —‘Ó"×1Ñ1°/ÓB€JØ×0Ñ0°Ó4€NÙØ×%Ñ%×7Ñ7Ü�N‰NœUŸ^™^Ð,¬s°9·>±>Ó/BÑBóD‰	ð ×%Ñ%×7Ñ7Ø×!Ñ! 9§>¡>ó3ˆ	ô �;‰;�~ y°uÔ=€DØ‡O�O×Ñ˜Ô'ä�k‰k˜.¨$°¸t¿y¹yÑ0HÓI€GØ.5¯l©lÑ+€Hˆh˜	 8Ø€H„MØ€H„MØ€I„NØ€H„Mä˜×2Ñ2°7Ó;Ó<€Gð ×"Ñ" 4§;¡;Ó/€GØ
×
Ñ
€CØ�\‰\˜'×4Ñ4°W·^±^ÀWÓMÓN€Fð —‘˜X¨K�Ó8€Ið €FÜ˜IŸN™NÓ+ò P‰ˆˆ3Ø�‰”i ¨°(¸IÀqÈ#ÓNÕOðPô �G˜W h°	¼3¸v»;Ø×)Ñ)ó+€Cð €GØ×Ñ¤§
¡
¨AÓ.€DØò ˆÜ×Ñ ¨Ó0ˆØ�‰�qÔØ�‰�d˜AÕðô
 ×&Ñ& w°Ó7€LØ‡M�M�$˜Ô%ä×#Ñ#€LØò GˆØ—|‘| L°#×2EÑ2EÓF‰ðGð ×"Ñ" 7Ó+€EÙà×ÑÓ ˆÜ×Ñ˜w¨	¸Ô?ñ 	ÜØ˜˜w¨°°WØ˜i¨°¸ô÷	ð
 	×Ñ˜#ÔØ×ÑÕð �_‰_˜\Ó*ð 	Ñ.K¨À
Ø ñ Ü×&Ñ& w°	ÀÔGð È4Ü(Ø  w°¸¸WØ$ i°·±¸UØ"õ÷÷ð ñ ä×&Ñ& w°	ÀÔGñ Ü(Ø  w°¸¸WØ$ i°Ø"õ÷÷÷	ð$ 	×ÑÔØð ×Ñ˜^Ô,Ø×"Ñ" 7Ô+Ü °¸7¿<¹<ÔHÐH÷C	ñ 	ú÷ð ú÷ð ú÷ð ú÷ð ú÷	ð 	úsx   Ï S5ÐT2ÐTÐ0!TÑTÑ
T2Ñ#T&Ñ<TÒT&ÒT2Ó5S?ÔTÔTÔT	ÔT2ÔT#ÔT&Ô&T/	Ô+T2Ô2T;c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)r…   c                 óÎ  — || _         || _        || _        | j                   j                  t        j
                  |«      }| j                  j                  |j                  ||g«      «      }|j                  |«      }	| j                  j                  ||	j                  «       «      | _        | j                   j                  |	«      }
| j                   j                  t        j
                  |
«      | _        | j                  j                  ||g«      }| j                  j                  |«      | _        |j                  d| j                  | j                  «      | _        || _        y )Nz==)r$   r&   Úfe_typer†   r   ro   r!   ÚgepÚget_data_typeÚbitcastÚ
as_pointerÚdataptrÚget_abi_sizeofÚabisizer"   Úicmp_unsignedrŠ   )Úselfr$   r&   r   rj   r£   r®   ÚoffsetÚoffseted_argsÚ	data_typeÚsizeofÚoffseted_steps               r5   Ú__init__zUArrayArg.__init__ú   s  € ØˆŒØˆŒØˆŒØ—‘×*Ñ*¬5¯:©:°qÓ9ˆØŸ™×)Ñ)¨'¯+©+°d¸V¸HÓ*EÓFˆØ×)Ñ)¨'Ó2ˆ	Ø—|‘|×+Ñ+¨MØ,5×,@Ñ,@Ó,BóDˆŒà—‘×,Ñ,¨YÓ7ˆØ—|‘|×0Ñ0´·±¸VÓDˆŒØŸ™×(Ñ(¨°°Ó9ˆØ—L‘L×%Ñ% mÓ4ˆŒ	Ø&×4Ñ4°TØ59·\±\À4Ç9Á9ó NˆÔàˆ�rF   c                 óº   — t        j                  | j                  | j                  |«      }| j                  j                  | j                  | j                  |«      S )zm
        Generic load from the given *byteoffset*.  load_aligned() is
        preferred if possible.
        )r   Úpointer_addr&   r³   r$   Úunpack_valuer®   )r·   Ú
byteoffsetÚptrs      r5   rC   zUArrayArg.load_direct  sA   € ô
 ×!Ñ! $§,¡,°·±¸jÓIˆØ�|‰|×(Ñ(¨¯©°t·|±|ÀSÓIÐIrF   c                 ó²   — | j                   j                  | j                  |g«      }| j                  j	                  | j                   | j
                  |«      S rB   )r&   r¯   r³   r$   rÀ   r®   )r·   r_   rÂ   s      r5   r^   zUArrayArg.load_aligned  sA   € ð �l‰l×Ñ˜tŸ|™|¨c¨UÓ3ˆØ�|‰|×(Ñ(¨¯©°t·|±|ÀSÓIÐIrF   c                 ó¾   — t        j                  | j                  | j                  |«      }| j                  j                  | j                  | j                  ||«       y rB   )r   r¿   r&   r³   r$   Ú
pack_valuer®   )r·   rU   rÁ   rÂ   s       r5   rE   zUArrayArg.store_direct  s>   € Ü×!Ñ! $§,¡,°·±¸jÓIˆØ�‰×Ñ §¡¨d¯l©l¸EÀ3ÕGrF   c                 ó¶   — | j                   j                  | j                  |g«      }| j                  j	                  | j                   | j
                  ||«       y rB   )r&   r¯   r³   r$   rÅ   r®   )r·   rU   r_   rÂ   s       r5   ra   zUArrayArg.store_aligned  s>   € Ø�l‰l×Ñ˜tŸ|™|¨c¨UÓ3ˆØ�‰×Ñ §¡¨d¯l©l¸EÀ3ÕGrF   N)Ú__name__Ú
__module__Ú__qualname__r½   rC   r^   rE   ra   © rF   r5   r…   r…   ù   s   „ òò"JòJòHóHrF   r…   Úgufc                   ó¦   — e Zd Zd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
d„ Zd	„ Zd
„ Zed„ «       Zd„ Zd„ Zd„ Zy)Ú_GufuncWrapperc                 ó  — || _         || _        || _        || _        | j                  j
                  t        j                  k(  | _        |rt        | j                   ¬«      n	t        «       | _        t        |«      | _        y)a,  
        The *is_parfors* argument is a boolean that indicates if the GUfunc
        being built is to be used as a ParFors kernel. If True, it disables
        the caching on the wrapper as a separate unit because it will be linked
        into the caller function and cached along with it.
        )Úpy_funcN)rÏ   r“   ÚsinÚsoutr+   r   r   r9   Úis_objectmodeÚGufWrapperCacher   ÚcacheÚboolÚ
is_parfors)r·   rÏ   r“   rÐ   rÑ   rÔ   rÖ   s          r5   r½   z_GufuncWrapper.__init__&  sd   € ð ˆŒØˆŒ	ØˆŒØˆŒ	Ø!Ÿ^™^×7Ñ7¼5¿>¹>ÑIˆÔáô &¨d¯l©lÕ;Ü$-£Kð 	Œ
ä˜zÓ*ˆ�rF   c                 ó.   — | j                   j                  S rB   )r“   r   ©r·   s    r5   r   z_GufuncWrapper.library6  s   € à�y‰y× Ñ Ð rF   c                 ó.   — | j                   j                  S rB   )r“   Útarget_contextrØ   s    r5   r$   z_GufuncWrapper.context:  s   € à�y‰y×'Ñ'Ð'rF   c                 ó.   — | j                   j                  S rB   )r$   r   rØ   s    r5   r   z_GufuncWrapper.call_conv>  s   € à�|‰|×%Ñ%Ð%rF   c                 ó.   — | j                   j                  S rB   )r“   r+   rØ   s    r5   r+   z_GufuncWrapper.signatureB  s   € à�y‰y×"Ñ"Ð"rF   c                 ó.   — | j                   j                  S rB   )r“   r   rØ   s    r5   r   z_GufuncWrapper.fndescF  s   € à�y‰y×ÑÐrF   c                 ó.   — | j                   j                  S rB   )r“   r€   rØ   s    r5   r   z_GufuncWrapper.envJ  s   € à�y‰y×$Ñ$Ð$rF   c                 óX  — t        j                  d«      }t        j                  |«      }t        j                  |«      }| j                  j	                  t
        j                  «      }t        j                  |«      }t        j                  t        j                  «       ||||g«      }|S )Nrd   )	r   rr   rs   r$   rt   r   ro   ru   rv   )r·   r”   r•   r–   r—   r˜   r™   s          r5   Ú_wrapper_function_typez%_GufuncWrapper._wrapper_function_typeN  s|   € Ü—‘˜A“ˆÜ—^‘^ FÓ+ˆ
ÜŸ™¨
Ó3ˆØ—‘×,Ñ,¬U¯Z©ZÓ8ˆÜ—^‘^ FÓ+ˆ
ä�‰œrŸ{™{›}¨~¸zØ/9¸:ð/Gó HˆàˆrF   c                 ó  — | j                   j                  t        j                  «      }| j	                  «       }|j                  d«      }| j                  j                  | j                  j                  | j                  j                  «      }| j                  j                  }t        j                  |||¬«      }|j                  j                  d«       t        j                  |||«      }	d|	_        |	j"                  \  }
}}}d|
_        d|_        d|_        d|_        t'        |	j)                  d	«      «      }|j+                  |d
¬«      }| j                   j-                  |«      }t/        «       }| j0                  | j2                  fD ]  }|D ]  }|t/        |«      z  }Œ Œ i }| j0                  D ]  }|D ]  }||vsŒt5        |«      ||<   Œ Œ i }|j7                  «       D ]U  \  }}|j+                  |j9                  || j                   j;                  t        j                  |dz   «      g«      «      ||<   ŒW g }t5        | j0                  «      t5        | j2                  «      z   }t=        t?        | j@                  j"                  | j0                  | j2                  z   «      «      D ]D  \  }\  }}tC        | j                   ||
||||||«	      }|t5        |«      z  }|jE                  |«       ŒF |j)                  d«      }| jG                  ||«       tI        jJ                  |||¬«      5 }|D �cg c]  }|jM                  |jN                  «      ‘Œ } }| jQ                  |||| «      \  }!}"tI        jR                  ||"|«       ddd«       |jU                  |«       |jW                  |«       | jY                  ||«       |j[                  «        |j]                  |«       |j_                  | j`                  «       yc c}w # 1 sw Y   ŒxY w)zí
        The LLVM IRBuilder code to create the gufunc wrapper.
        The *library* arg is the CodeLibrary to which the wrapper should
        be added.  The *name* arg is the name of the wrapper function being
        created.
        Ú_gufunc_wrapperrg   rh   Úweak_odrr   ri   rj   rk   rl   rm   é   z.returnrn   N)1r$   rt   r   ro   rà   ry   r   rz   r   ÚrestypeÚargtypesÚllvm_func_namer   r{   r|   r    Úlinkager   r   r   r}   r!   r‹   ÚsetrÐ   rÑ   r:   Úitemsr¯   r†   rƒ   r   r+   Ú
GUArrayArgr„   Úgen_prologuer   rŒ   Úget_array_at_offsetrŽ   Úgen_loop_bodyÚcbranch_or_continueÚbranchÚposition_at_endÚgen_epiloguer�   r�   r�   r   )#r·   r   r   r—   r™   r›   rœ   r‘   r%   r�   rž   rŸ   r    r¡   r&   rm   r,   Úunique_symsÚgrpÚsymsÚsym_mapÚsÚsym_dimr£   r'   Ústep_offsetr¤   Úsymr4   Úbbreturnrª   Úar   Ú	innercallÚerrors#                                      r5   Ú_build_wrapperz_GufuncWrapper._build_wrapperY  s©  € ð —‘×,Ñ,¬U¯Z©ZÓ8ˆØ×*Ñ*Ó,ˆà ×1Ñ1Ð2CÓDˆØ—N‘N×4Ñ4°T·[±[×5HÑ5HØ59·[±[×5IÑ5IóKˆ	à—‘×*Ñ*ˆÜ�{‰{˜>¨9¸5ÔAˆà�‰×Ñ˜NÔ+Ü—+‘+˜n¨d°DÓ9ˆð %ˆŒØ29·,±,Ñ/ˆ�(˜I xØˆŒØˆŒØ ˆ	ŒØˆŒä˜G×6Ñ6°wÓ?Ó@ˆØ—L‘L °�LÓ<ˆ	Ø—‘×+Ñ+¨GÓ4ˆô “eˆØ—H‘H˜dŸi™iÐ(ò 	)ˆCØò )�Øœs 4›yÑ(‘ñ)ð	)ð ˆØ—H‘Hò 	.ˆDØò .�Ø˜GÒ#Ü!$ W£�G˜A’Jñ.ð	.ð
 ˆØ—M‘M“Oò 	@‰DˆAˆqØ Ÿ™ g§k¡k°(Ø37·<±<×3LÑ3LÜ6;·j±jØ67¸!±eó4=ð 3>ó'?ó @ˆG�AŠJð	@ð ˆÜ˜$Ÿ(™(“m¤c¨$¯)©)£nÑ4ˆÜ&¤s¨4¯>©>×+>Ñ+>Ø+/¯8©8°d·i±iÑ+?ó(Aó Bò 	‰MˆA‰z��Sä˜TŸ\™\¨7°HØ&¨¨;¸¸SÀ'óKˆCàœ3˜s›8Ñ#ˆKØ�M‰M˜#Õð	ð ×-Ñ-¨iÓ8ˆð 	×Ñ˜' 5Ô)ô ×Ñ˜w¨	¸Ô?ð 	BÀ4Ø?EÖF¸!�A×)Ñ)¨$¯*©*Õ5ÐFˆDÐFØ#×1Ñ1°'¸5À$ÈÓMÑˆI�uä×'Ñ'¨°¸ÔA÷		Bð 	�‰�xÔ Ø×Ñ Ô)ð 	×Ñ˜' 5Ô)à×ÑÔð 	×Ñ˜nÔ-Ø×#Ñ# D§L¡LÕ1ùò G÷	Bð 	Bús   Ì-PÌ2"O=Í0PÏ=PÐPc                 ó>  — | j                   rF| j                  j                  «       j                  t	        | «      «      }| j                  ||«       |S | j                  j                  | j                  j                  | j                  j                  «      }|€„| j                  j                  «       j                  t	        | «      «      }|j                  «        | j                  ||«       | j                  j                  | j                  j                  |«       |S rB   )rÖ   r$   rw   rx   rq   rÿ   rÔ   Úload_overloadr“   r+   rÚ   Úenable_object_cachingÚsave_overload©r·   Úwrapper_namerš   s      r5   Ú_compile_wrapperz_GufuncWrapper._compile_wrapper­  sÚ   € à�?Š?àŸ™×-Ñ-Ó/×>Ñ>¼sÀ4»yÓIˆJà×Ñ 
¨LÔ9ð  Ðð Ÿ™×1Ñ1Ø—	‘	×#Ñ# T§Y¡Y×%=Ñ%=óˆJð Ð!à!Ÿ\™\×1Ñ1Ó3×BÑBÄ3ÀtÃ9ÓM�
Ø×0Ñ0Ô2à×#Ñ# J°Ô=à—
‘
×(Ñ(¨¯©×)<Ñ)<¸jÔIàÐrF   c                 ó†   — d| j                   j                  z   }| j                  |«      }t        || j                  |¬«      S )Nz__gufunc__.r   )r   Úmangled_namer  r   r   r  s      r5   Úbuildz_GufuncWrapper.buildÅ  s>   € à$ t§{¡{×'?Ñ'?Ñ?ˆØ×*Ñ*¨<Ó8ˆ
ÜØ D§H¡H°<ô
ð 	
rF   c                 óº  — | j                   j                  ||| j                  j                  | j                  j                  |«      \  }}|j                  |j                  d¬«      5  |j                  «       }| j                  j                   j                  |||«       |j                  |«       d d d «       |j                  |j                  fS # 1 sw Y   Œ!xY w)NFr   )r   r   r+   r   r   rR   Úis_errorr   r$   r   r   r#   )r·   r&   r,   r%   r   r.   r/   r2   s           r5   rî   z_GufuncWrapper.gen_loop_bodyÍ  s²   € ØŸ™×5Ñ5Ø�T˜4Ÿ>™>×5Ñ5°t·~±~×7JÑ7JØó‰ˆ�ð �_‰_˜VŸ_™_°Uˆ_Ó;ñ 	#Ø×"Ñ"Ó$ˆCØ�L‰L×"Ñ"×.Ñ.¨w¸¸vÔFØ×Ñ˜cÔ"÷	#ð
 �{‰{˜FŸO™OÐ+Ð+÷	#ð 	#ús   Á(A	CÃCc                  ó   — y rB   rÊ   ©r·   r&   r,   s      r5   rì   z_GufuncWrapper.gen_prologueÙ  ó   € ØrF   c                  ó   — y rB   rÊ   r  s      r5   rò   z_GufuncWrapper.gen_epilogueÜ  r  rF   N)rÇ   rÈ   rÉ   r½   Úpropertyr   r$   r   r+   r   r   rà   rÿ   r  r	   r	  rî   rì   rò   rÊ   rF   r5   rÍ   rÍ   %  s³   „ ò+ð  ñ!ó ð!ð ñ(ó ð(ð ñ&ó ð&ð ñ#ó ð#ð ñ ó ð ð ñ%ó ð%ò	òR2òhð0 ñ
ó ð
ò
,òórF   rÍ   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Ú_GufuncObjectWrapperc                 óX   — t        | j                  |||| j                  |«      \  }}||fS rB   )Ú_prepare_call_to_object_moder$   r+   )r·   r&   r,   r%   r   rý   rþ   s          r5   rî   z"_GufuncObjectWrapper.gen_loop_bodyá  s5   € Ü7¸¿¹Ø8?ÀÈØ8<¿¹Ø8<ó>Ñˆ	�5ð ˜%ÐÐrF   c                 ó.   — |j                  «       | _        y rB   )r   r2   r  s      r5   rì   z!_GufuncObjectWrapper.gen_prologueè  s   € à×#Ñ#Ó%ˆ�rF   c                 ó:   — |j                  | j                  «       y rB   )r   r2   r  s      r5   rò   z!_GufuncObjectWrapper.gen_epilogueì  s   € à×Ñ˜$Ÿ(™(Õ#rF   N)rÇ   rÈ   rÉ   rî   rì   rò   rÊ   rF   r5   r  r  à  s   „ ò ò&ó$rF   r  c                 ó¤   — |j                   }|j                  t        j                  k(  rt        nt
        } || |||||¬«      j                  «       S )N)rÖ   )r+   r   r   r9   r  rÍ   r	  )rÏ   r“   rÐ   rÑ   rÔ   rÖ   r+   Úwrapclss           r5   Úbuild_gufunc_wrapperr  ñ  sM   € Ø—‘€Ià×'Ñ'¬5¯>©>Ò9õ $ä"ð ñ Ø��s˜D %°Jôç�eƒgðrF   c           
      ó  — |j                   }|j                  d«      }| j                  t        j                  «      }| j                  t        j
                  «      }	t        j                  |	«      }
| j                  t        j                  «      }| j                  t        j                  «      }t        j                  |||
|
|||g«      }t        j                  ||d«      }t        j                  |t        j                  d«      d¬«      }|j                  t        j                   |«       g }g }t#        t%        ||j&                  «      «      D �]Î  \  }\  }}t        j                  ||d¬«      }|j)                  |«       t+        |t        j,                  «      �r| j/                  |«      } || ||¬«      }t1        |d	«      }t1        ||j2                  «      }|j5                  |j7                  d
«      ||g«      }|j5                  |j7                  d«      ||g«      }|j9                  |j:                  |«      }t=        j>                  tA        |j>                  «      «      }t1        ||jB                  «      }t1        ||jD                  «      }|jG                  |||||||g«      } n|jI                  ||«      } |j                  | |«       |j)                  | «       t        jJ                  || «      }!|j                  |!|«       t        jL                  ||!|«       �ŒÑ t        j                  gtO        |«      z  }"| jP                  jS                  ||t        j                  |"|«      \  }#}$|j                  |#jT                  |«       |jW                  |$«       |jY                  |«       |j[                  |«       |D ]"  }|jW                  |j]                  |«      «       Œ$ |#j^                  }%|%|j]                  |«      fS )Nzufunc.core.returnÚnumba_ndarray_newrä   rþ   rg   T)Úzfill)rU   r   ÚshapeÚstrides)0r‚   r}   rt   r   Úint32ro   r   rs   Úvoidptrr9   ru   r   Úget_or_insert_functionr‡   rr   r   rˆ   rƒ   r   r   r„   rp   ÚArrayÚ
make_arrayr   Úndimr¯   Ú_get_ptr_by_namer±   rk   ÚnpÚdtyperq   ÚnumÚitemsizeÚcallrL   Úis_nullrï   r:   r   r   r  r<   rð   rñ   r!   r#   )&r$   r&   r,   r%   r+   r   ÚmodÚbb_core_returnÚll_intÚll_intpÚll_intp_ptrÚ
ll_voidptrÚll_pyobjr™   Úfn_array_newÚerror_pointerÚobject_argsÚobject_pointersr£   ÚargÚargtyÚobjptrÚaryclsÚarrayr¥   Úndri   r  rk   r'  Útype_numr)  ÚobjÚobj_is_nullÚ
object_sigr.   r/   rý   s&                                         r5   r  r  û  sg  € à
�.‰.€Cà×/Ñ/Ð0CÓD€Nð ×#Ñ#¤E§K¡KÓ0€FØ×$Ñ$¤U§Z¡ZÓ0€GÜ—.‘. Ó)€KØ×'Ñ'¬¯©Ó6€JØ×%Ñ%¤e§n¡nÓ5€HÜ�?‰?˜8 f¨kØ&1°:Ø&,¨fð&6ó 7€Dô ×1Ñ1°#°tØ2EóG€Lô ×'Ñ'¨´·±¸A³ÀWÔM€MØ‡M�M”'×"Ñ" MÔ2ð €KØ€Oä$¤S¨¨y¯~©~Ó%>Ó?ó %J‰ˆ‰<ˆC�ä×$Ñ$ W¨h¸dÔCˆØ×Ñ˜vÔ&ä�eœUŸ[™[Õ)ð ×'Ñ'¨Ó.ˆFÙ˜7 G°3Ô7ˆEä˜F AÓ&ˆDô ˜& %§*¡*Ó-ˆBØ—;‘;˜u×5Ñ5°gÓ>ÀÀtÀÓMˆDØ—k‘k %×"8Ñ"8¸Ó"CØ#'¨ ,ó0ˆGà—?‘? 5§:¡:¨zÓ:ˆDÜ—H‘HœS §¡Ó-Ó.ˆEô   ¨¯	©	Ó2ˆHÜ ¨¯©Ó7ˆHð —,‘,˜|¨b°$¸ÀØ.6¸ð.Bó C‰Cð ×)Ñ)¨%°Ó5ˆCà�‰�c˜6Ô"Ø×Ñ˜3Ôä—o‘o g¨sÓ3ˆØ�‰�k =Ô1Ü×#Ñ# G¨[¸.ÖIðK%JôP —.‘.Ð!¤C¨Ó$4Ñ4€Jà×&Ñ&×4Ñ4Ø�”u—~‘~ zØó�N€FˆFð ‡M�M�&—/‘/ =Ô1ð 
‡L�L�Ôà‡N�N�>Ô"à×Ñ˜NÔ+ð "ò +ˆØ�‰�W—\‘\ &Ó)Õ*ð+ð —‘€IØ�g—l‘l =Ó1Ð1Ð1rF   c                   ó   — e Zd Zd„ Zd„ Zy)rë   c
           	      ó¾  — || _         || _        |j                  t        j                  |«      }
|j                  |j                  ||
gd¬«      d¬«      }|| _        |j                  ||
gd¬«      }|j                  |«      }t        |t        j                  «      �r
| }t        |«      |j                  k7  r;t        |«      dk(  r|j                  dk(  rnt        dj                  |dz   «      «      ‚|j                  }|D �cg c]  }|	|   ‘Œ	 }}g }t        |«      D ]Z  }|j                  ||j                  t        j                  ||z   «      gd¬«      }|j                  |«      }|j                  |«       Œ\ |rt         nt"        } ||j$                  |||||¬	«      | _        y |rt        d
j                  ||dz   «      «      ‚t)        ||¬«      | _        y c c}w )Nzdata.ptrrg   rk   zcore.step.ptrr   rä   z.type and shape signature mismatch for arg #{0}zstep.ptr©r'  r$  Ú	core_stepÚ	as_scalarr  r  z2scalar type {0} given for non scalar argument #{1}©r'  Ústride)r$   r&   r†   r   ro   r!   r¯   rk   rp   r"  r:   r$  Ú	TypeErrorÚformatÚranger„   Ú_ArrayAsScalarArgLoaderÚ_ArrayArgLoaderr'  Ú_loaderÚ_ScalarArgLoader)r·   r$   r&   r   rj   r£   rù   r¤   rõ   rø   r¸   rk   Úcore_step_ptrrD  rE  r$  r÷   r  r  ÚjÚstepptrr"   Úldclss                          r5   r½   zGUArrayArg.__init__\  sÝ  € ð ˆŒØˆŒà×%Ñ%¤e§j¡j°!Ó4ˆà�|‰|˜GŸK™K¨¨v¨h¸Z˜KÓHØ!'ð ó )ˆàˆŒ	àŸ™ E¨F¨8¸/˜ÓJˆØ—L‘L Ó/ˆ	ä�cœ5Ÿ;™;Õ'Ø ˜ˆIô �4‹y˜CŸH™HÒ$Ü�t“9 ’> c§h¡h°!¢mð ä#ð %+ß+1©6°!°a±%«=ó:ð :ð —8‘8ˆDØ)-Ö. A�W˜Q“ZÐ.ˆEÐ.ØˆGä˜4“[ò %�Ø!Ÿ+™+ eØ'.×';Ñ';¼E¿J¹JØ<GÈ!¹Oó(Mð 'Nà+5ð &ó 7�ð —|‘| GÓ,�Ø—‘˜tÕ$ð%ñ "õ -ä)ð ñ ! s§y¡yØ&*Ø+4Ø+4Ø',Ø)0ô2ˆD�Lñ Üð !0ß06±°s¸AÀ¹EÓ0BóDð Dä+°#¸iÔHˆD�Lùò5 /s   ÄGc                 ó|   — | j                   j                  | j                  | j                  | j                  |¬«      S )N)r$   r&   rk   r_   )rM  r!   r$   r&   rk   )r·   r_   s     r5   rí   zGUArrayArg.get_array_at_offset—  s3   € Ø�|‰|× Ñ ¨¯©¸t¿|¹|Ø&*§i¡i°Sð !ó :ð 	:rF   N)rÇ   rÈ   rÉ   r½   rí   rÊ   rF   r5   rë   rë   [  s   „ ò9Ióv:rF   rë   c                   ó   — e Zd ZdZd„ Zd„ Zy)rN  zÊ
    Handle GFunc argument loading where a scalar type is used in the core
    function.
    Note: It still has a stride because the input to the gufunc can be an array
          for this argument.
    c                 ó    — || _         || _        y rB   rF  )r·   r'  rG  s      r5   r½   z_ScalarArgLoader.__init__¤  s   € ØˆŒ
Øˆ�rF   c                 óð   — |j                  ||j                  || j                  «      g«      }|j                  ||j	                  | j
                  «      j                  «       «      }|j                  |«      S rB   )r¯   ÚmulrG  r±   r°   r'  r²   r!   )r·   r$   r&   rk   r_   Údptrs         r5   r!   z_ScalarArgLoader.load¨  s_   € à�{‰{˜4 '§+¡+¨c°4·;±;Ó"?Ð!@ÓAˆØ�‰˜tØ&×4Ñ4°T·Z±ZÓ@×KÑKÓMóOˆà�|‰|˜DÓ!Ð!rF   N)rÇ   rÈ   rÉ   Ú__doc__r½   r!   rÊ   rF   r5   rN  rN  œ  s   „ ñòó"rF   rN  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)rL  zD
    Handle GUFunc argument loading where an array is expected.
    c                 óX   — || _         || _        || _        || _        || _        || _        y rB   rC  )r·   r'  r$  rD  rE  r  r  s          r5   r½   z_ArrayArgLoader.__init__µ  s,   € ØˆŒ
ØˆŒ	Ø"ˆŒØ"ˆŒØˆŒ
Øˆ�rF   c           
      ó@  — t        j                  | j                  | j                  d¬«      }|j	                  |«      } |||«      }t        j                  |||j                  | j                  |«      «      }| j                  ||«      \  }	}
|j                  |j                  | j                  «      «      }|j                  ||j                  ||j                  j                  «      |	|
|j!                  t         j"                  |«      d ¬«       |j%                  «       S )NÚA)r'  r$  Úlayout)rk   r  r  r)  Úmeminfo)r   r"  r'  r$  r#  r   r¿   rW  rD  Ú_shape_and_stridesr´   r°   Úpopulate_arrayr±   rk   Útyper†   ro   Ú	_getvalue)r·   r$   r&   rk   r_   Úarytypr:  r;  Úoffseted_datar  r  r)  s               r5   r!   z_ArrayArgLoader.load½  sø   € Ü—‘ 4§:¡:°D·I±IÀcÔJˆØ×#Ñ# FÓ+ˆá�w Ó(ˆÜ×+Ñ+¨GØ,0Ø,3¯K©K¸¿¹Ø8;ó-=ó>ˆð
 ×0Ñ0°¸'ÓB‰ˆˆwà×)Ñ)¨'×*?Ñ*?ÀÇ
Á
Ó*KÓLˆØ×Ñ˜uØ$+§O¡O°MØ49·J±J·O±Oó%Eà%*Ø'.Ø(/×(<Ñ(<¼U¿Z¹ZØ=Eó)Gà'+ð 	ô 	-ð �‰Ó Ð rF   c                 óŠ   — t        j                  || j                  «      }t        j                  || j                  «      }||fS rB   )r   Ú
pack_arrayr  r  )r·   r$   r&   r  r  s        r5   r`  z"_ArrayArgLoader._shape_and_stridesÕ  s8   € Ü×"Ñ" 7¨D¯J©JÓ7ˆÜ×$Ñ$ W¨d¯l©lÓ;ˆØ�gˆ~ÐrF   N)rÇ   rÈ   rÉ   rY  r½   r!   r`  rÊ   rF   r5   rL  rL  °  s   „ ñòò!ó0rF   rL  c                   ó   — e Zd ZdZd„ Zy)rK  z˜
    Handle GUFunc argument loading where the shape signature specifies
    a scalar "()" but a 1D array is used for the type of the core function.
    c                 óæ   — |j                  t        j                  d«      }|j                  t        j                  d«      }t        j                  ||g«      }t        j                  ||g«      }||fS )Nrä   r   )r†   r   ro   r   rg  )r·   r$   r&   Úoner¥   r  r  s          r5   r`  z*_ArrayAsScalarArgLoader._shape_and_stridesá  s`   € à×"Ñ"¤5§:¡:¨qÓ1ˆØ×#Ñ#¤E§J¡J°Ó2ˆÜ×"Ñ" 7¨S¨EÓ2ˆÜ×$Ñ$ W¨t¨fÓ5ˆØ�gˆ~ÐrF   N)rÇ   rÈ   rÉ   rY  r`  rÊ   rF   r5   rK  rK  Û  s   „ ñó
rF   rK  )#Úcollectionsr   Únumpyr&  Úllvmlite.irr   r   Úllvmliter   Ú
numba.corer   r   Únumba.core.compiler_lockr	   Únumba.core.cachingr
   r   r   r6   r?   rI   r[   rb   r«   Úobjectr…   rÓ   rÍ   r  r  r  rë   rN  rL  rK  rÊ   rF   r5   ú<module>rs     sÁ   ðÝ "ã ç +Ý ç %Ý 9ß <ñ ˜?Ò,FÓG€òò8ò@+òDò@+òlIô^&H�ô &HñR % UÓ+€ôx�Vô xôv$˜>ô $ò"ò]2ô@>:�ô >:ôB"�vô "ô((�fô (ôV˜oõ rF   