ó
    ±“,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J	r	  SSK
JrJr  SSKJr  S SKrSS	KJr  SS
KJr  SSKJr  S rSS jr\" SS5      \l        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 5       r\R2                  " SS\5        S r\R2                  " SS\5        g)é    Né   )ÚTensor)Úregistry)ÚBackendé   )Ú_make_iskwargÚ_unsupported_op)Úapi)Ú _make_doc_adapt_numpylike_reduce)Ú%_make_doc_adapt_numpylike_elementwise)Ú_make_doc_adapt_with_vmapc                  ó¶  ^• [         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Jm  U4S jnS nU [         R$                  R                  XS.$ )Nzmlx.coreÚmx)Úas_r   c                 ó0   >• [        U TR                  5      $ ©N)Ú
isinstanceÚarray)Útensorr   s    €Ú©C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\einx/_src/frontend/impl/mlx.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ÚconcatenateÚInlineGraphÚSkipCastÚmlx.coreÚcorer&   )r%   r   r#   r   s      @r   Ú_get_backend_kwargsr9      sö   ø€ Ü	×	Ñ	×	 Ñ	 ×	(Ñ	(¨¸Ð	(Ð	>€Bä×Ñ×"Ñ"×.Ñ.¨r¯z©zÓ:Ü×Ñ×"Ñ"×0Ñ0°·±Ó>Ü×Ñ×"Ñ"×2Ñ2°2·?±?ÓCÜ×Ñ×"Ñ"×2Ñ2°2·>±>ÓBÜ×Ñ×$Ñ$Ó&Ü×Ñ×!Ñ!Ó#ð€Mõ õ,ò3ð +¼¿¹×8NÑ8NÐgzñ  Tð  Tr   c           	      óž  • [        U 5      n[        R                  R                  5       n[        R
                  R                  U5      n[        R                  " U5      n[        R                  R                  R                  U 5      n [        R                  R                  XUR                  R                  S9n [        R                  R                  X5      n [        R                  R                  XR                  R                  S9n [        R                   R                  XUSS9n [#        U [$        R&                  " S0 [)        5       D6S9$ )N©Úexpected_typeÚ	bijective)ÚiskwargÚel_opÚimplicit_output©Úbackend© )r   r'   r(   ÚmlxÚadapterÚclassical_from_mlxÚopsÚvmap_from_mlxr)   ÚconstantÚdecomposednamedtensor_from_vmapÚopr8   r   Ú&namedtensor_from_decomposednamedtensorÚnamedtensor_calltensorfactoryÚeinx_from_namedtensorr
   ÚtypesÚSimpleNamespacer9   )rK   r(   r>   rD   r,   Úvmaps         r   Úadapt_with_vmaprR   $   sù   € Ü˜BÓ€GÜ
×
Ñ
×
Ñ
Ó
 €Cä×*Ñ*×.Ñ.¨sÓ3€IÜ× Ò  Ó%€Dä	×	Ñ	×	 Ñ	 ×	)Ñ	)¨"Ó	-€BÜ	×	0Ñ	0×	3Ñ	3°BÈCÏHÉHÏNÉNÐ	3Ð	[€BÜ	×	7Ñ	7×	:Ñ	:¸2Ó	I€BÜ	×	.Ñ	.×	1Ñ	1°"ÇHÁHÇNÁNÐ	1Ð	S€BÜ	×	&Ñ	&×	)Ñ	)¨"ÀYÐ`kÐ	)Ð	l€Bäˆrœ5×0Ò0ÑIÔ3FÓ3HÑIÑJÐJr   rD   z``mlx.core.vmap``c           	      ót  • [        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                  R                  S9n [        R                  R                  X5      n [        R                  R                  XR                  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ÚaxisrC   )Únamer>   s     r   Ú<lambda>Ú(adapt_numpylike_reduce.<locals>.<lambda>8   s   € °d¸f±n×6VÉÐQUËÐ6Vr   r;   ©r>   rA   rC   )r   r'   r(   rD   rE   rF   rG   r)   rI   Ú$decomposednamedtensor_from_classicalÚreducer8   r   rL   rK   rM   rN   r
   rO   rP   r9   ©rK   r>   rD   r,   s       r   Úadapt_numpylike_reducer]   7   så   € Ü#0°Ó#4ÓV€GÜ
×
Ñ
×
Ñ
Ó
 €Cä×*Ñ*×.Ñ.¨sÓ3€Iä	×	Ñ	×	 Ñ	 ×	)Ñ	)¨"Ó	-€BÜ	×	5Ñ	5×	<Ñ	<¸RÏxÉxÏ~É~Ð	<Ð	^€BÜ	×	7Ñ	7×	:Ñ	:¸2Ó	I€BÜ	×	.Ñ	.×	1Ñ	1°"ÇHÁHÇNÁNÐ	1Ð	S€BÜ	×	&Ñ	&×	-Ñ	-¨bÐ	-Ð	B€Bäˆrœ5×0Ò0ÑIÔ3FÓ3HÑIÑJÐJr   c           	      ón  • [        U 5      n[        R                  R                  5       n[        R
                  R                  U5      n[        R                  R                  R                  U 5      n [        R                  R                  XUR                  R                  S9n [        R                  R                  X5      n [        R                  R                  XR                  R                  S9n [        R                   R                  XS9n [#        U [$        R&                  " S0 [)        5       D6S9$ )Nr;   rY   rA   rC   )r   r'   r(   rD   rE   rF   rG   r)   rI   rZ   Úelementwiser8   r   rL   rK   rM   rN   r
   rO   rP   r9   r\   s       r   Úadapt_numpylike_elementwiser`   I   sé   € Ü˜BÓ€GÜ
×
Ñ
×
Ñ
Ó
 €Cä×*Ñ*×.Ñ.¨sÓ3€Iä	×	Ñ	×	 Ñ	 ×	)Ñ	)¨"Ó	-€BÜ	×	5Ñ	5×	AÑ	AÀ"Ð_b×_gÑ_g×_mÑ_mÐ	AÐ	n€BÜ	×	7Ñ	7×	:Ñ	:¸2Ó	I€BÜ	×	.Ñ	.×	1Ñ	1°"ÇHÁHÇNÁNÐ	1Ð	S€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                  R                  S9n[        R                  R                  U5      n[        SXSSS.[        5       D6$ )Nr;   éûÿÿÿ©rG   rV   ÚpriorityrC   )r'   r(   rD   rE   rF   rG   rL   rM   r8   r   rN   r   r9   )rD   r,   Údecomposednamedtensor_opsrV   Únamedtensor_opsÚeinx_opsÚcreates         €r   Ú
new_createÚ$_backend_creator.<locals>.new_create\   s¦   ø€ Ü×Ñ×"Ñ"Ó$ˆä×.Ñ.×2Ñ2°3Ó7ˆ	á*0°Ó*@Ñ'Ð!ä!×HÑH×LÑLÐMfÓrˆÜ!×?Ñ?×CÑCÀO×ckÑck×cqÑcqÐCÐrˆÜ×0Ñ0×4Ñ4°_ÓEˆäÐU˜8¸ÑUÔ?RÓ?TÑUÐUr   rC   )ri   rj   s   ` r   Ú_backend_creatorrl   [   s   ø€ õVð Ðr   c                 ó   • [         R                  " U 5      n[         R                  R                   Vs0 s H,  o3[         R                  R                  [        X5      U5      _M.     sn[         R                  R                   Vs0 s H+  o3[         R                  R                  [        X5      5      _M-     sn-  [         R                  R                   Vs0 s H+  o3[         R                  R                  [        X5      5      _M-     sn-  [         R                  R                   Vs0 s H,  o3[         R                  R                  [        X5      U5      _M.     sn-  [         R                  R                   Vs0 s H,  o3[         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úmlx.numpylike)rE   Úeinsum_from_mlxrG   r_   rZ   Úgetattrr[   Úpreserve_shapeÚargfindÚ	update_atÚupdate_at_ravelledÚget_at_ravelledÚ!decomposednamedtensor_from_einsumro   )rD   r,   ÚeinsumrV   rf   s        r   Úcreate_backend_numpylikerz   l   sR  € ä×$Ò$ SÓ)€Fô 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ô
 ×AÑA×QÑQÐR[Ó\Ôel÷  fOñ  fO÷  fSñ  fSð  TZó  f[ñ  \ñ	\ð ð % oÐ5Ð5ùò 	RùÚ
~ùò Oùò Lùò Ys   ³3G7Â2G<Ã2HÄ(3HÅ;3Hrp   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Úmultiplyro   ú
mlx.einsum)rE   rq   rx   r|   r}   r~   ro   )rD   r,   ry   rf   s       r   Úcreate_backend_einsumr€      sy   € ä×$Ò$ SÓ)€Fô ×7Ñ7×:Ñ:¸6ÓBÜ×8Ñ8×<Ñ<¸VÓDÜ×=Ñ=×FÑFÀvÓNÜ×8Ñ8×<Ñ<¸VÓDñ	!Ðð % lÐ2Ð2r   r   c                 ó´  • [         R                  " U 5      n[         R                  R                  U5      n[         R                  R                   Vs0 s H:  nU[         R
                  R                  X4   X R                  R                  SUS9_M<     sn[         R                  R                   Vs0 s H  oD[        US5      _M     sn-  nUS4$ s  snf s  snf )NT)r<   Úallow_squeeze_unsqueezer,   úmlx.vmap)rE   rH   Úelementary_from_classicalrG   ÚallrJ   rK   r8   r   ru   r	   )rD   r,   rQ   Úelementary_opsrV   rf   s         r   Úcreate_backend_vmapr‡   �   sÐ   € ä× Ò  Ó%€DÜ×6Ñ6×:Ñ:¸9ÓE€Nô —K‘K—O’Oó	!ò $ˆDð 	Œg×5Ñ5×8Ñ8ØÑ  $·h±h·n±nÐ^bÐnwð 9ð 
ò 	
ñ $ñ	!ô
 >E¿[¹[×=RÒ=RÓSÒ=R°TŒ˜t ZÓ0Ò	0Ñ=RÑSñ!TÐð % jÐ0Ð0ùò!ùò
 	Ts   ÁACÂ1Crƒ   c                  ó”   • [        5       R                  n [        5       R                  nU SUS   0-  n[        SUSSS.[	        5       D6$ )Nro   rD   r   rd   rC   )rz   rG   r€   r   r9   )Úeinx_ops_numpylikeÚeinx_ops_einsumrh   s      r   Úcreate_backendr‹   ¢   sN   € Ü1Ó3×7Ñ7ÐÜ+Ó-×1Ñ1€OØ! U¨O¸EÑ,BÐ$CÑC€HäÐQ�x e°aÑQÔ;NÓ;PÑQÐQr   r   )Úeinx._src.tracerÚ_srcr'   Úeinx._src.adapterrE   rO   r   rB   r   r   Ú_utilr   r	   r
   Ú_docsr   r   r   r9   rR   Ú__doc__r]   r`   rl   rz   Úregister_on_importr€   r‡   r‹   rC   r   r   Ú<module>r“      s  ðß !Ð !ß #Ð #Ý Ý Ý ß 1Ý Û Ý 3Ý 8Ý ,òTô,Kñ  4°EÐ;NÓO€Ô òKñ "BÓ!CÐ Ô òKñ 'LÓ&MÐ Ô #òð" ñ6ó ð6ð 	× Ò ˜E ?Ð4LÔ Mð ñ
3ó ð
3ð 	× Ò ˜E <Ð1FÔ Gð ñ1ó ð1ð 	× Ò ˜E :Ð/BÔ CòRð 	× Ò ˜E 5¨.Õ 9r   