ó
    ±“,j*  ã                   ó†  • 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SS9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Ú
tensorflowÚtf)Úas_r   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/tensorflow.pyÚis_supported_tensorÚ0_get_backend_kwargs.<locals>.is_supported_tensor   s   ø€ Ü˜& "§)¡)Ó,Ð,ó    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Ú	transposeÚSkipBroadcastToÚbroadcast_toÚSkipConcatenateÚconcatÚInlineGraphÚSkipCastr   r%   )r$   r   r"   r   s      @r   Ú_get_backend_kwargsr6      sö   ø€ Ü	×	Ñ	×	 Ñ	 ×	(Ñ	(¨¸4Ð	(Ð	@€Bä×Ñ×"Ñ"×.Ñ.¨r¯z©zÓ:Ü×Ñ×"Ñ"×0Ñ0°·±Ó>Ü×Ñ×"Ñ"×2Ñ2°2·?±?ÓCÜ×Ñ×"Ñ"×2Ñ2°2·9±9Ó=Ü×Ñ×$Ñ$Ó&Ü×Ñ×!Ñ!Ó#ð€Mó õ-ò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>   ©Úbackendr;   )r
   r&   r'   r   ÚadapterÚclassical_from_tensorflowÚopsr(   ÚconstantÚ$decomposednamedtensor_from_classicalÚreducer   Ú&namedtensor_from_decomposednamedtensorÚopÚnamedtensor_calltensorfactoryÚeinx_from_namedtensorr   ÚtypesÚSimpleNamespacer6   ©rN   r>   r   r+   s       r   Úadapt_numpylike_reducerT   &   sÝ   € Ü#0°Ó#4ÓV€GÜ	×	Ñ	×	$Ñ	$Ó	&€Bä×1Ñ1×5Ñ5°bÓ9€Iä	×	Ñ	×	 Ñ	 ×	)Ñ	)¨"Ó	-€BÜ	×	5Ñ	5×	<Ñ	<¸RÏyÉyÐ	<Ð	Y€BÜ	×	7Ñ	7×	:Ñ	:¸2Ó	I€BÜ	×	.Ñ	.×	1Ñ	1°"ÇIÁIÐ	1Ð	N€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      $ r9   r;   r<   s     r   r?   Ú-adapt_numpylike_elementwise.<locals>.<lambda>9   rA   r   rB   rD   rE   r;   )r
   r&   r'   r   rG   rH   rI   r(   rJ   rK   Úelementwiser   rM   rN   rO   rP   r   rQ   rR   r6   rS   s       r   Úadapt_numpylike_elementwiserY   8   sâ   € Ü#0°Ó#4ÓV€GÜ	×	Ñ	×	$Ñ	$Ó	&€Bä×1Ñ1×5Ñ5°bÓ9€Iä	×	Ñ	×	 Ñ	 ×	)Ñ	)¨"Ó	-€BÜ	×	5Ñ	5×	AÑ	AÀ"Ð_a×_hÑ_hÐ	AÐ	i€BÜ	×	7Ñ	7×	:Ñ	:¸2Ó	I€BÜ	×	.Ñ	.×	1Ñ	1°"ÇIÁIÐ	1Ð	N€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$ )NrB   éûÿÿÿ©rI   r=   Úpriorityr;   )r&   r'   r   rG   rH   rI   rM   rO   r   rP   r   r6   )r   r+   Údecomposednamedtensor_opsr=   Únamedtensor_opsÚeinx_opsÚcreates         €r   Ú
new_createÚ$_backend_creator.<locals>.new_createK   s    ø€ Ü×Ñ×(Ñ(Ó*ˆä×5Ñ5×9Ñ9¸"Ó=ˆ	á*0°Ó*?Ñ'Ð!ä!×HÑH×LÑLÐMfÓrˆÜ!×?Ñ?×CÑCÀO×clÑclÐCÐmˆÜ×0Ñ0×4Ñ4°_ÓEˆäÐU˜8¸ÑUÔ?RÓ?TÑUÐUr   r;   )rb   rc   s   ` r   Ú_backend_creatorre   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útensorflow.numpylike)rG   rI   rX   rK   ÚgetattrrL   Úpreserve_shapeÚargfindÚ	update_atÚupdate_at_ravelledÚget_at_ravelledrh   )r   r+   r=   r_   s       r   Úcreate_backend_numpylikerp   [   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   ri   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Úmultiplyrh   útensorflow.einsum)rG   Úeinsum_from_tensorflowÚ!decomposednamedtensor_from_einsumrr   rs   rt   rh   )r   r+   Úeinsumr_   s       r   Úcreate_backend_einsumry   o   sz   € ä×+Ò+¨BÓ/€Fô ×7Ñ7×:Ñ:¸6ÓBÜ×8Ñ8×<Ñ<¸VÓDÜ×=Ñ=×FÑFÀvÓNÜ×8Ñ8×<Ñ<¸VÓDñ	!Ðð %Ð&9Ð9Ð9r   ru   c                  ó”   • [        5       R                  n [        5       R                  nU SUS   0-  n[        SUSSS.[	        5       D6$ )Nrh   r   r   r]   r;   )rp   rI   ry   r   r6   )Úeinx_ops_numpylikeÚeinx_ops_einsumra   s      r   Úcreate_backendr}   €   sN   € Ü1Ó3×7Ñ7ÐÜ+Ó-×1Ñ1€OØ! U¨O¸EÑ,BÐ$CÑC€HäÐX�x l¸QÑXÔBUÓBWÑXÐXr   )Úeinx._src.tracerÚ_srcr&   Úeinx._src.adapterrG   r   rQ   r   ÚinspectÚ	functoolsr   rF   r   r   Ú_utilr
   Ú_docsr   r   r6   rT   Ú__doc__rY   re   rp   Úregister_on_importry   r}   r;   r   r   Ú<module>r‡      sÕ   ðß !Ð !ß #Ð #Ý Ý Û Û Û Ý Ý Ý Ý  Ý 3Ý 8òTò,Kñ "BÓ!CÐ Ô òKñ 'LÓ&MÐ Ô #òð" ñ=ó ð=ð  	× Ò ˜LÐ*@ÐBZÔ [ð ñ
:ó ð
:ð 	× Ò ˜LÐ*=Ð?TÔ UòYð 	× Ò ˜L¨,¸Õ Gr   