ó
    ±“,ji  ã                   ó†  • S SK Js  Jr  S SKJs  Jr  SSKJr  SSKJr  S SKrS SKrS SK	r	S SK	J
r
  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  S rS r\" 5       \l        S r\" 5       \l        S r\S 5       r\R2                  " SS\5        \S 5       r\R2                  " SS\5        S r\R2                  " SS\5        g)é    Né   )Úapi)ÚTensor)Úpartial)Úregistry)ÚBackendé   )Ú_make_iskwarg)Ú _make_doc_adapt_numpylike_reduce)Ú%_make_doc_adapt_numpylike_elementwisec                  ó´  ^• [         R                  R                  R                  S5      m[         R                  R
                  R                  TR                  5      [         R                  R
                  R                  TR                  5      [         R                  R
                  R                  TR                  5      [         R                  R
                  R                  TR                  5      [         R                  R                  5       [         R                  R                  5       /n SS KmU4S jnS nU [         R"                  R                  XS.$ )NÚtinygradr   c                 ó0   >• [        U TR                  5      $ ©N)Ú
isinstancer   )Útensorr   s    €Ú®C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\einx/_src/frontend/impl/tinygrad.pyÚis_supported_tensorÚ0_get_backend_kwargs.<locals>.is_supported_tensor   s   ø€ Ü˜& (§/¡/Ó2Ð2ó    c                 ó:   • [        S U R                   5       5      $ )Nc              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   )Úint)Ú.0Úxs     r   Ú	<genexpr>Ú9_get_backend_kwargs.<locals>.get_shape.<locals>.<genexpr>!   s   é € Ð2¢\ ”S˜—V�V¢\ùs   ‚)ÚtupleÚshape)r   s    r   Ú	get_shapeÚ&_get_backend_kwargs.<locals>.get_shape    s   € ÜÑ2 V§\¢\Ó2Ó2Ð2r   )ÚoptimizationsÚcompilerr   r    )ÚtracerÚ	signatureÚpythonÚimport_Ú	optimizerÚ	classicalÚSkipReshapeÚreshapeÚSkipTransposeÚpermuteÚSkipBroadcastToÚexpandÚSkipConcatenateÚcatÚInlineGraphÚSkipCastr   r#   )r"   r   r    r   s      @r   Ú_get_backend_kwargsr4      sõ   ø€ Ü×Ñ×&Ñ&×.Ñ.¨zÓ:€Hä×Ñ×"Ñ"×.Ñ.¨x×/?Ñ/?Ó@Ü×Ñ×"Ñ"×0Ñ0°×1AÑ1AÓBÜ×Ñ×"Ñ"×2Ñ2°8·?±?ÓCÜ×Ñ×"Ñ"×2Ñ2°8·<±<Ó@Ü×Ñ×$Ñ$Ó&Ü×Ñ×!Ñ!Ó#ð€Mó õ3ò3ð +¼¿¹×8NÑ8NÐgzñ  Tð  Tr   c           	      óL  • [        U 5      4S jn[        R                  R                  5       n[        R
                  R                  U5      n[        R                  R                  R                  U 5      n [        R                  R                  XR                  S9n [        R                  R                  X5      n [        R                  R                  XR                  S9n [        R                  R                  XS9n [!        U ["        R$                  " S0 ['        5       D6S9$ )Nc                 ó*   • U S:g  =(       a    U" U 5      $ ©NÚaxis© ©ÚnameÚiskwargs     r   Ú<lambda>Ú(adapt_numpylike_reduce.<locals>.<lambda>'   ó   € °d¸f±n×6VÉÐQUËÐ6Vr   ©Úexpected_type©r<   ©Úbackendr9   )r
   r$   r%   r   ÚadapterÚclassical_from_tinygradÚopsr&   ÚconstantÚ$decomposednamedtensor_from_classicalÚreducer   Ú&namedtensor_from_decomposednamedtensorÚopÚnamedtensor_calltensorfactoryÚeinx_from_namedtensorr   ÚtypesÚSimpleNamespacer4   ©rL   r<   r   r)   s       r   Úadapt_numpylike_reducerR   &   sÝ   € Ü#0°Ó#4ÓV€GÜ×Ñ×(Ñ(Ó*€Hä×/Ñ/×3Ñ3°HÓ=€Iä	×	Ñ	×	 Ñ	 ×	)Ñ	)¨"Ó	-€BÜ	×	5Ñ	5×	<Ñ	<¸RÏÉÐ	<Ð	_€BÜ	×	7Ñ	7×	:Ñ	:¸2Ó	I€BÜ	×	.Ñ	.×	1Ñ	1°"ÇOÁOÐ	1Ð	T€BÜ	×	&Ñ	&×	-Ñ	-¨bÐ	-Ð	B€Bäˆrœ5×0Ò0ÑIÔ3FÓ3HÑIÑJÐJr   c           	      óN  • [        U 5      4S jn[        R                  R                  5       n[        R
                  R                  U5      n[        R                  R                  R                  U 5      n [        R                  R                  XUR                  S9n [        R                  R                  X5      n [        R                  R                  XR                  S9n [        R                  R                  XS9n [!        U ["        R$                  " S0 ['        5       D6S9$ )Nc                 ó*   • U S:g  =(       a    U" U 5      $ r7   r9   r:   s     r   r=   Ú-adapt_numpylike_elementwise.<locals>.<lambda>9   r?   r   r@   rB   rC   r9   )r
   r$   r%   r   rE   rF   rG   r&   rH   rI   Úelementwiser   rK   rL   rM   rN   r   rO   rP   r4   rQ   s       r   Úadapt_numpylike_elementwiserW   8   sâ   € Ü#0°Ó#4ÓV€GÜ×Ñ×(Ñ(Ó*€Hä×/Ñ/×3Ñ3°HÓ=€Iä	×	Ñ	×	 Ñ	 ×	)Ñ	)¨"Ó	-€BÜ	×	5Ñ	5×	AÑ	AÀ"Ð_g×_nÑ_nÐ	AÐ	o€BÜ	×	7Ñ	7×	:Ñ	:¸2Ó	I€BÜ	×	.Ñ	.×	1Ñ	1°"ÇOÁOÐ	1Ð	T€BÜ	×	&Ñ	&×	2Ñ	2°2Ð	2Ð	G€Bäˆrœ5×0Ò0ÑIÔ3FÓ3HÑIÑJÐJr   c                 ó   ^ • U 4S jnU$ )Nc                  óˆ  >• [         R                  R                  5       n [        R                  R                  U 5      nT" X5      u  p#[        R                  R                  X!5      n[        R                  R                  X@R                  S9n[        R                  R                  U5      n[        SXSSS.[        5       D6$ )Nr@   éûÿÿÿ©rG   r;   Úpriorityr9   )r$   r%   r   rE   rF   rG   rK   rM   r   rN   r   r4   )r   r)   Údecomposednamedtensor_opsr;   Únamedtensor_opsÚeinx_opsÚcreates         €r   Ú
new_createÚ$_backend_creator.<locals>.new_createK   s    ø€ Ü×#Ñ#×,Ñ,Ó.ˆä×3Ñ3×7Ñ7¸ÓAˆ	á*0°Ó*EÑ'Ð!ä!×HÑH×LÑLÐMfÓrˆÜ!×?Ñ?×CÑCÀO×crÑcrÐCÐsˆÜ×0Ñ0×4Ñ4°_ÓEˆäÐU˜8¸ÑUÔ?RÓ?TÑUÐUr   r9   )r`   ra   s   ` r   Ú_backend_creatorrc   J   s   ø€ õVð Ðr   c                 óô  • [         R                  R                   Vs0 s H,  o"[         R                  R                  [	        X5      U5      _M.     sn[         R                  R
                   Vs0 s H+  o"[         R                  R                  [	        X5      5      _M-     sn-  [         R                  R                   Vs0 s H+  o"[         R                  R                  [	        X5      5      _M-     sn-  [         R                  R                   Vs0 s H,  o"[         R                  R                  [	        X5      U5      _M.     sn-  [         R                  R                   Vs0 s H,  o"[         R                  R                  [	        X5      U5      _M.     sn-  [         R                  R                  U5      [         R                  R                  U5      S.-  nUS4$ s  snf s  snf s  snf s  snf s  snf )N)Úget_atÚdotútinygrad.numpylike)rE   rG   rV   rI   ÚgetattrrJ   Úpreserve_shapeÚargfindÚ	update_atÚupdate_at_ravelledÚget_at_ravelledrf   )r   r)   r;   r]   s       r   Úcreate_backend_numpylikern   [   s(  € ô zA÷  zEñ  zE÷  zQò  zQó  	Rò  zQÐquŒw×;Ñ;×GÑGÌÐPYÓH`ÐbkÓlÒ	lñ  zQñ  	RÜkr×kvÑkv×k}Òk}Ó
~Òk}Ðcg”×=Ñ=×DÑDÄWÈYÓE]Ó^Ò^Ñk}Ñ
~ñ	äsz×s~Ñs~÷  tNò  tNó  Oò  tNÐko”×=Ñ=×LÑLÌWÐU^ÓMeÓfÒfñ  tNñ  Oñ	Oô x÷  xCñ  xC÷  xKò  xKó  Lò  xKÐos”×=Ñ=×EÑEÄgÈiÓF^Ð`iÓjÒjñ  xKñ  Lñ	Lô CJ÷  CNñ  CN÷  CXò  CXó  Yò  CXÐz~”×=Ñ=×PÑPÔQXÐYbÓQiÐktÓuÒuñ  CXñ  Yñ		Yô ×BÑB×RÑRÐS\Ó]Ü×?Ñ?×CÑCÀIÓNñ
ñ	
ð ð %Ð&:Ð:Ð:ùò 	RùÚ
~ùò Oùò Lùò Ys   �3G!Á.2G&Ã 2G+Ä3G0Å%3G5r   rg   c                 ó,  • [         R                  " U 5      n[         R                  R                  U5      [         R                  R	                  U5      [         R                  R                  U5      [         R                  R                  U5      S.nUS4$ )N)ÚidÚsumÚmultiplyrf   útinygrad.einsum)rE   Úeinsum_from_tinygradÚ!decomposednamedtensor_from_einsumrp   rq   rr   rf   )r   r)   Úeinsumr]   s       r   Úcreate_backend_einsumrw   o   sz   € ä×)Ò)¨(Ó3€Fô ×7Ñ7×:Ñ:¸6ÓBÜ×8Ñ8×<Ñ<¸VÓDÜ×=Ñ=×FÑFÀvÓNÜ×8Ñ8×<Ñ<¸VÓDñ	!Ðð %Ð&7Ð7Ð7r   rs   c                  ó”   • [        5       R                  n [        5       R                  nU SUS   0-  n[        SUSSS.[	        5       D6$ )Nrf   r   r   r[   r9   )rn   rG   rw   r   r4   )Úeinx_ops_numpylikeÚeinx_ops_einsumr_   s      r   Úcreate_backendr{   €   sN   € Ü1Ó3×7Ñ7ÐÜ+Ó-×1Ñ1€OØ! U¨O¸EÑ,BÐ$CÑC€HäÐV�x j¸1ÑVÔ@SÓ@UÑVÐVr   )Úeinx._src.tracerÚ_srcr$   Úeinx._src.adapterrE   r   rO   r   ÚinspectÚ	functoolsr   rD   r   r   Ú_utilr
   Ú_docsr   r   r4   rR   Ú__doc__rW   rc   rn   Úregister_on_importrw   r{   r9   r   r   Ú<module>r…      sÕ   ðß !Ð !ß #Ð #Ý Ý Û Û Û Ý Ý Ý Ý  Ý 3Ý 8òTò,Kñ "BÓ!CÐ Ô òKñ 'LÓ&MÐ Ô #òð" ñ;ó ð;ð  	× Ò ˜JÐ(<Ð>VÔ Wð ñ
8ó ð
8ð 	× Ò ˜JÐ(9Ð;PÔ QòWð 	× Ò ˜J¨
°NÕ Cr   