+
    Pj X                     x  a  R" t0 t R t^ RItRt/ t] ^ k / t] ^k RtR R lt ! R R4      t ! R R	4      t	 ! R
 R]4      t
 ! R R]
4      t ! R R]4      t ! R R]4      t ! R R4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R  R!]4      tR# )#ac  
Backends in `einops` are organized to meet the following requirements
- backends are not imported unless those are actually needed, because
    - backends may not be installed
    - importing all available backends will drive to significant memory footprint
    - backends may be present but installed with errors (but never used),
      importing may drive to crashes
- backend should be either symbolic or imperative
    - this determines which methods (from_numpy/to_numpy or create_symbol/eval_symbol) should be defined
- if backend can't provide symbols for shape dimensions, UnknownSize objects are used
NzAlex RogozhnikovFc                    V ^8  d   QhRR/# )   returnAbstractBackend )formats   "i/Users/ahmed/devFolder/Ultron/claude-voice/gateway/.venv/lib/python3.14/site-packages/einops/_backends.py__annotate__r	      s     (H (H, (H    c                d   \        V 4      p\        P                  VR4      pVe   V# \        \        P                  4       4      pV F)  w  rEVP                  V 4      '       g   K  V\        V&   Vu # 	  . p\        P                  4       pV'       d:   VP                  4       pWuP                  4       ,          pVP                  V4       KA  V UU	u. uF  w  rVNK	  	  p
pp	V F  p\        '       d   \        RV4       VP                  V
9  g   K.  VP                  \        P                  9   g   KO  \        '       d   \        RVP                  4       V! 4       pV\        VP                  &   VP                  V 4      '       g   K  V\        V&   Vu # 	  \!        R\        V 4       24      hu up	pi )z
Takes a correct backend (e.g. numpy backend if tensor is numpy.ndarray) for a tensor.
If needed, imports package and creates backend
NzTesting for subclass of zImported backend for zTensor type unknown to einops )type_type2backendgetlist_loaded_backendsitemsis_appropriate_typer   __subclasses__popappend_debug_importingprintframework_namesysmodulesRuntimeError)tensor_type_resultpreviously_loaded_backends_framework_namebackendbackend_subclassesbackendsx_prev_backend_namesBackendSubclasss   &           r   get_backendr(      sv   
 LEt,G!%&6&<&<&>!?$> &&v..#*M% N %? --/H
,,.**,,!!'* )CC(B!(BC-,o>))1CC--<##1?3Q3QR)+;B !7!78..v66+2M%("N . 7V~F
GG Ds   F,c                      a  ] tR t^At o RtR tR tR tR tR t	R t
R tR	 tR
 tR tV 3R lR ltR tR tR tV 3R lR ltR tR tR tR tV 3R ltRtV tR# )r   zJBase backend class, major part of methods are only for debugging purposes.c                    \        4       h)z4helper method should recognize tensors it can handleNotImplementedErrorselfr   s   &&r   r   #AbstractBackend.is_appropriate_typeF       !##r
   c                    \        R 4      hz.framework doesn't support imperative executionr+   r.   r$   s   &&r   
from_numpyAbstractBackend.from_numpyJ       !"RSSr
   c                    \        R 4      hr2   r+   r3   s   &&r   to_numpyAbstractBackend.to_numpyM   r6   r
   c                    \        R 4      hz/framework doesn't support symbolic computationsr+   r.   shapes   &&r   create_symbolAbstractBackend.create_symbolP   s    !"STTr
   c                    \        R 4      hr;   r+   r.   symbolsymbol_value_pairss   &&&r   eval_symbolAbstractBackend.eval_symbolS   s    !"STTr
   c                    \        R 4      h)z"framework doesn't implement aranger+   r.   startstops   &&&r   arangeAbstractBackend.arangeW   s    !"FGGr
   c                    VP                   # )zashape should return a tuple with integers or "shape symbols" (which will evaluate to actual size)r=   r3   s   &&r   r=   AbstractBackend.shape[   s    wwr
   c                $    VP                  V4      # Nreshaper.   r$   r=   s   &&&r   rR   AbstractBackend.reshape_       yyr
   c                $    VP                  V4      # rP   	transposer.   r$   axess   &&&r   rX   AbstractBackend.transposeb       {{4  r
   c                &    \        W4      ! VR 7      # axis)getattrr.   r$   	operationrZ   s   &&&&r   reduceAbstractBackend.reducee   s    q$$//r
   c                    < V ^8  d   QhRS[ /# r   tensorsr   )r   __classdict__s   "r   r	   AbstractBackend.__annotate__h   s     $ $ $r
   c                    \        4       hrP   r+   r.   rh   s   &&r   stack_on_zeroth_dimension)AbstractBackend.stack_on_zeroth_dimensionh       !##r
   c                    \        4       hrP   r+   r.   r$   new_positions   &&&r   add_axisAbstractBackend.add_axisk   rp   r
   c                    ^.V,          pVP                  4        F  w  rVV P                  W4      pWdV&   K  	  V P                  V\        V4      4      # )   )r   rt   tiletupler.   r$   n_axespos2lenrepeatsaxis_positionaxis_lengths   &&&&   r   add_axesAbstractBackend.add_axesn   sM    #,*1--/&Ma/A%0M" +: yyE'N++r
   c                    \        4       h)z!repeats - same lengths as x.shaper+   r.   r$   r}   s   &&&r   rx   AbstractBackend.tileu   r0   r
   c                    < V ^8  d   QhRS[ /# r   r`   int)r   rj   s   "r   r	   rk   y   s     $ $C $r
   c                    \        4       h)zrconcatenates tensors along axis.
Assume identical across tensors: devices, dtypes and shapes except selected axis.r+   r.   rh   r`   s   &&&r   concatAbstractBackend.concaty        "##r
   c                    \        4       hrP   r+   r3   s   &&r   is_float_typeAbstractBackend.is_float_type~   r   r
   c                    \        R 4      h)zbackend does not provide layersr+   r.   s   &r   layersAbstractBackend.layers       !"CDDr
   c                "    R V P                    R2# )z<einops backend for >)r   r   s   &r   __repr__AbstractBackend.__repr__   s    %d&9&9%:!<<r
   c                    \        R 4      h)zbackend does not support einsumr+   r.   patternr$   s   &&*r   einsumAbstractBackend.einsum   r   r
   c                &   < V ^8  d   Qh/ S[ ;R&   # )r   r   )str)r   rj   s   "r   r	   rk   A   s       r
   r   N)__name__
__module____qualname____firstlineno____doc__r   r4   r8   r>   rD   rJ   r=   rR   rX   rd   rn   rt   r   rx   r   r   r   r   r   __annotate_func____static_attributes____classdictcell__rj   s   @r   r   r   A   s     T$TTUUH !0$ $$,$$ $
$
E=EQ  r
   r   c                   B   a  ] tR t^t o RtR tR tR tR tR t	Rt
V tR# )	UnknownSizezUpseudo-symbol for symbolic frameworks which do not provide symbols for shape elementsc                    V # rP   r   r.   others   &&r   __floordiv__UnknownSize.__floordiv__       r
   c                    R # Tr   r   s   &&r   __eq__UnknownSize.__eq__   s    r
   c                    V # rP   r   r   s   &&r   __mul__UnknownSize.__mul__   r   r
   c                    V # rP   r   r   s   &&r   __rmul__UnknownSize.__rmul__   r   r
   c                    \        R 4      # rP   )hashr   s   &r   __hash__UnknownSize.__hash__   s    Dzr
   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   s   @r   r   r      s&     _ r
   r   c                   ~   a  ] tR t^t o RtR tR tR tR tR t	V 3R lR lt
R	 tV 3R
 lR ltR tR tR tRtV tR# )NumpyBackendnumpyc                    ^ RI pWn        R#     N)r   np)r.   r   s   & r   __init__NumpyBackend.__init__   s
    r
   c                @    \        WP                  P                  4      # rP   )
isinstancer   ndarrayr-   s   &&r   r    NumpyBackend.is_appropriate_type   s    &''//22r
   c                    V# rP   r   r3   s   &&r   r4   NumpyBackend.from_numpy       r
   c                    V# rP   r   r3   s   &&r   r8   NumpyBackend.to_numpy   r   r
   c                8    V P                   P                  W4      # rP   )r   rJ   rG   s   &&&r   rJ   NumpyBackend.arange       ww~~e**r
   c                    < V ^8  d   QhRS[ /# rg   ri   )r   rj   s   "r   r	   NumpyBackend.__annotate__        & & &r
   c                8    V P                   P                  V4      # rP   )r   stackrm   s   &&r   rn   &NumpyBackend.stack_on_zeroth_dimension       ww}}W%%r
   c                8    V P                   P                  W4      # rP   )r   rx   r   s   &&&r   rx   NumpyBackend.tile       ww||A''r
   c                    < V ^8  d   QhRS[ /# r   r   )r   rj   s   "r   r	   r           7 7C 7r
   c                :    V P                   P                  WR 7      # r^   )r   concatenater   s   &&&r   r   NumpyBackend.concat       ww""7"66r
   c                     VP                   R9   # float16)r   float32float64float128bfloat16dtyper3   s   &&r   r   NumpyBackend.is_float_type       wwSSSr
   c                8    V P                   P                  W4      # rP   )r   expand_dimsrr   s   &&&r   rt   NumpyBackend.add_axis       ww""133r
   c                >    V P                   P                  ! V.VO5!  # rP   )r   r   r   s   &&*r   r   NumpyBackend.einsum       ww~~g***r
   )r   N)r   r   r   r   r   r   r   r4   r8   rJ   rn   rx   r   r   rt   r   r   r   r   s   @r   r   r      sQ     N
3+& &(7 7T4+ +r
   r   c                   B   a a ] tR t^t oRtV 3R ltR tR tRtVt	V ;t
# )
JaxBackendjaxc                p   < \         SV `  4        V P                  V n        ^ RIpVP
                  V n        R# r   )superr   r   onp	jax.numpyr   )r.   r   	__class__s   & r   r   JaxBackend.__init__   s'    77))r
   c                8    V P                   P                  V4      # rP   )r   asarrayr3   s   &&r   r4   JaxBackend.from_numpy   s    wwq!!r
   c                8    V P                   P                  V4      # rP   )r   r  r3   s   &&r   r8   JaxBackend.to_numpy   s    xx""r
   )r   r   )r   r   r   r   r   r   r4   r8   r   r   __classcell__r   rj   s   @@r   r   r      s     N"# #r
   r   c                      a  ] tR t^t o RtR tR tR tR tR t	R t
R tV 3R	 lR
 ltR tR tV 3R lR ltR tR tR tR tRtV tR# )TorchBackendtorchc                &    ^ RI pWn         ^RIHp R# )r   N)_torch_specific)r	   r  )r.   r	  r  s   &  r   r   TorchBackend.__init__   s    
%r
   c                @    \        WP                  P                  4      # rP   )r   r	  Tensorr-   s   &&r   r    TorchBackend.is_appropriate_type   s    &**"3"344r
   c                x    V P                   P                  V4      pV P                  V4      '       d   R Vn        V# r   )r	  r4   r   requires_gradr.   r$   variables   && r   r4   TorchBackend.from_numpy   s4    ::((+h''%)H"r
   c                Z    VP                  4       P                  4       P                  4       # rP   detachcpur   r3   s   &&r   r8   TorchBackend.to_numpy       xxz~~%%''r
   c                d    V P                   P                  WV P                   P                  R 7      # r   )r	  rJ   int64rG   s   &&&r   rJ   TorchBackend.arange   s&    zz  DJJ4D4D EEr
   c                P   VR 8X  d   VP                  VR7      # VR8X  d   VP                  VR7      # VR8X  d   VP                  VR7      # VR8X  d   VP                  VR7      # VR9   d1   \	        V4      RRR1,           F  p\        W4      ! VR7      pK  	  V# \        RV4      h)	mindimmaxsummeanNUnknown reduction )anyallprod)aminamaxr%  r&  sortedra   r,   )r.   r$   rc   reduced_axesis   &&&& r   rd   TorchBackend.reduce   s    66l6++%66l6++%55\5**& 66l6++00L)$B$//A)a0 0H%&:IFFr
   c                $    VP                  V4      # rP   permuterY   s   &&&r   rX   TorchBackend.transpose      yyr
   c                    < V ^8  d   QhRS[ /# rg   ri   )r   rj   s   "r   r	   TorchBackend.__annotate__  s     ) ) )r
   c                8    V P                   P                  V4      # rP   )r	  r   rm   s   &&r   rn   &TorchBackend.stack_on_zeroth_dimension  s    zz((r
   c                    R.V,          pVP                  4        F  w  rVV P                  W4      pWdV&   K  	  VP                  V4      # rw   r+  r   rt   expandrz   s   &&&&   r   r   TorchBackend.add_axes
  G    $-*1--/&Ma/A%0M" +: xx  r
   c                $    VP                  V4      # rP   repeatr   s   &&&r   rx   TorchBackend.tile      xx  r
   c                    < V ^8  d   QhRS[ /# r   r   )r   rj   s   "r   r	   r8    s     1 1C 1r
   c                :    V P                   P                  WR 7      # r"  )r	  catr   s   &&&r   r   TorchBackend.concat  s    zz~~g~00r
   c                8    V P                   P                  W4      # rP   )r	  	unsqueezerr   s   &&&r   rt   TorchBackend.add_axis  s    zz##A44r
   c                    VP                   V P                  P                  V P                  P                  V P                  P                  V P                  P
                  39   # rP   )r   r	  r   r   r   r   r3   s   &&r   r   TorchBackend.is_float_type  sE    ww4::--tzz/A/A4::CUCUW[WaWaWjWjkkkr
   c                    ^RI Hp V# )rw   r	  )r   r	  )r.   r	  s   & r   r   TorchBackend.layers  
    !r
   c                >    V P                   P                  ! V.VO5!  # rP   )r	  r   r   s   &&*r   r   TorchBackend.einsum"  s    zz  -1--r
   rQ  Nr   r   r   r   r   r   r   r4   r8   rJ   rd   rX   rn   r   rx   r   rt   r   r   r   r   r   r   s   @r   r  r     sg     N&5(FG") )!!1 15l
. .r
   r  c                   ~   a  ] tR tRt o RtR tR tR tR tR t	V 3R lR	 lt
R
 tV 3R lR ltR tR tR tRtV tR# )CupyBackendi&  cupyc                    ^ RI pWn         R# r   rY  )r.   rY  s   & r   r   CupyBackend.__init__)  s
    	r
   c                @    \        WP                  P                  4      # rP   )r   rY  r   r-   s   &&r   r   CupyBackend.is_appropriate_type.  s    &))"3"344r
   c                8    V P                   P                  V4      # rP   )rY  r  r3   s   &&r   r4   CupyBackend.from_numpy1      yy  ##r
   c                8    V P                   P                  V4      # rP   )rY  asnumpyr3   s   &&r   r8   CupyBackend.to_numpy4  ra  r
   c                8    V P                   P                  W4      # rP   )rY  rJ   rG   s   &&&r   rJ   CupyBackend.arange7  s    yy,,r
   c                    < V ^8  d   QhRS[ /# rg   ri   )r   rj   s   "r   r	   CupyBackend.__annotate__:       ( ( (r
   c                8    V P                   P                  V4      # rP   )rY  r   rm   s   &&r   rn   %CupyBackend.stack_on_zeroth_dimension:      yyw''r
   c                8    V P                   P                  W4      # rP   )rY  rx   r   s   &&&r   rx   CupyBackend.tile=  s    yy~~a))r
   c                    < V ^8  d   QhRS[ /# r   r   )r   rj   s   "r   r	   rh  @  s     9 9C 9r
   c                :    V P                   P                  WR 7      # r^   )rY  r   r   s   &&&r   r   CupyBackend.concat@  s    yy$$W$88r
   c                8    V P                   P                  W4      # rP   )rY  r   rr   s   &&&r   rt   CupyBackend.add_axisC  s    yy$$Q55r
   c                     VP                   R9   # r   r   r3   s   &&r   r   CupyBackend.is_float_typeF  r   r
   c                >    V P                   P                  ! V.VO5!  # rP   )rY  r   r   s   &&*r   r   CupyBackend.einsumI      yy,!,,r
   r[  N)r   r   r   r   r   r   r   r4   r8   rJ   rn   rx   r   rt   r   r   r   r   r   s   @r   rX  rX  &  sQ     N
5$$-( (*9 96T- -r
   rX  c                   H   a  ] tR tRt o RtV 3R lR ltR tR tR tRt	V t
R	# )
HashableTupleiM  z.Overcomes non-hashability of symbolic elementsc                    < V ^8  d   QhRS[ /# )r   elements)ry   )r   rj   s   "r   r	   HashableTuple.__annotate__P  s     ! ! !r
   c                    Wn         R # rP   r|  )r.   r|  s   &&r   r   HashableTuple.__init__P  s     r
   c              #  :   "   V P                    R j  xL
  R #  L5irP   r  r   s   &r   __iter__HashableTuple.__iter__S  s     ==  s   c                ,    \        V P                  4      # rP   )lenr|  r   s   &r   __len__HashableTuple.__len__V  s    4==!!r
   c                (    V P                   V,          # rP   r  )r.   items   &&r   __getitem__HashableTuple.__getitem__Y  s    }}T""r
   r  N)r   r   r   r   r   r   r  r  r  r   r   r   s   @r   rz  rz  M  s&     8! !!"# #r
   rz  c                      a  ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
 tR tV 3R lR ltR tV 3R lR ltR tR tR tR tRtV tR# )TensorflowBackendi_  
tensorflowc                    ^ RI pWn        R# r   )r  tfr.   r  s   & r   r   TensorflowBackend.__init__b  s
    r
   c                l    \        WP                  P                  V P                  P                  34      # rP   )r   r  r  Variabler-   s   &&r   r   %TensorflowBackend.is_appropriate_typeg  s$    &77>>4773C3C"DEEr
   c                |    V P                   P                  4       '       g   Q hV P                   P                  V4      # rP   )r  executing_eagerlyconvert_to_tensorr3   s   &&r   r4   TensorflowBackend.from_numpyj  s0    ww((****ww((++r
   c                f    V P                   P                  4       '       g   Q hVP                  4       # rP   )r  r  r   r3   s   &&r   r8   TensorflowBackend.to_numpyn  s'    ww((****wwyr
   c                8    V P                   P                  W4      # rP   )r  rangerG   s   &&&r   rJ   TensorflowBackend.aranger  s    ww}}U))r
   c                   V P                   P                  4       '       dA   \        ;QJ d    . R  VP                   4       F  NK  	  5# ! R  VP                   4       4      # VP                  P	                  4       pV P                   P                  V4      p\        \        V4       UUu. uF  w  rET;'       g	    W4,          NK  	  upp4      p \        V4       V# u uppi   \         d    \        T4      u # i ; i)c              3   R   "   T F  qf   \        4       M
\        V4      x  K  	  R # 5irP   )r   r   ).0ds   & r   	<genexpr>*TensorflowBackend.shape.<locals>.<genexpr>w  s     QA)Q?s   %')	r  r  ry   r=   as_list	enumerater   BaseExceptionrz  )r.   r$   static_shapetf_shaper#  sr=   s   &&     r   r=   TensorflowBackend.shapeu  s    77$$&&5QQ5Q5QQQQ77??,Lww}}Q'HIl<ST<S&#1---<STUE,U U ! ,$U++,s   )C
9C
C" "C;:C;c                J    \        V P                  R V,           4      ! WR7      # )reduce_r_   )ra   r  rb   s   &&&&r   rd   TensorflowBackend.reduce  s    tww	I 56qDDr
   c                8    V P                   P                  W4      # rP   )r  rR   rS   s   &&&r   rR   TensorflowBackend.reshape  s    wwq((r
   c                8    V P                   P                  W4      # rP   )r  rX   rY   s   &&&r   rX   TensorflowBackend.transpose  s    ww  ))r
   c                    < V ^8  d   QhRS[ /# rg   ri   )r   rj   s   "r   r	   TensorflowBackend.__annotate__  r   r
   c                8    V P                   P                  V4      # rP   )r  r   rm   s   &&r   rn   +TensorflowBackend.stack_on_zeroth_dimension  r   r
   c                8    V P                   P                  W4      # rP   )r  rx   r   s   &&&r   rx   TensorflowBackend.tile  r   r
   c                    < V ^8  d   QhRS[ /# r   r   )r   rj   s   "r   r	   r    s     2 2C 2r
   c                :    V P                   P                  WR 7      # r^   )r  r   r   s   &&&r   r   TensorflowBackend.concat  s    ww~~g~11r
   c                8    V P                   P                  W4      # rP   )r  r   rr   s   &&&r   rt   TensorflowBackend.add_axis  r   r
   c                     VP                   R9   # r   r   r3   s   &&r   r   TensorflowBackend.is_float_type  r   r
   c                    ^RI Hp V# )rw   )r  )r   r  r  s   & r   r   TensorflowBackend.layers  s    &r
   c                >    V P                   P                  ! V.VO5!  # rP   )r  r   r   s   &&*r   r   TensorflowBackend.einsum  r   r
   )r  N)r   r   r   r   r   r   r   r4   r8   rJ   r=   rd   rR   rX   rn   rx   r   rt   r   r   r   r   r   r   s   @r   r  r  _  sl     !N
F,*,E)*& &(2 24T
+ +r
   r  c                      a  ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
 tR tV 3R lR ltR tV 3R lR ltR tR tR tRtV tR# )TFKerasBackendi  ztensorflow.kerasc                r    ^ RI pWn        VP                  V n        VP                  P                  V n        R# r   )r  r  kerasr!   K)r.   r  s   & r   r   TFKerasBackend.__init__  s&    XX
!!r
   c                ~    V P                   P                  V4      ;'       d    V P                  P                  V4      # rP   )r  	is_tensorr  is_keras_tensorr-   s   &&r   r   "TFKerasBackend.is_appropriate_type  s.    ww  (KKTVV-C-CF-KKr
   c                :    V P                   P                  VR 7      # ))batch_shape)r  Inputr<   s   &&r   r>   TFKerasBackend.create_symbol  s    zzE22r
   c                    V P                   P                  P                  V UUu. uF  w  r4VNK	  	  uppV4      pTP                  V UUu. uF  w  rFVNK	  	  upp4      # u uppi u uppi rP   )r  modelsModelpredict_on_batch)r.   rB   rC   varr%   modelvals   &&&    r   rD   TFKerasBackend.eval_symbol  sa    

!!''=O(P=O#=O(PRXY%%;M&N;Mxs;M&NOO )Q&Ns   A 
A&
c                8    V P                   P                  W4      # rP   )r  rJ   rG   s   &&&r   rJ   TFKerasBackend.arange  s    vv}}U))r
   c                `    V P                   P                  V4      p\        \        V4      4      # rP   )r  r=   rz  ry   rS   s   && r   r=   TFKerasBackend.shape  s"    QU5\**r
   c                <    \        V P                  V4      ! WR 7      # r^   )ra   r  rb   s   &&&&r   rd   TFKerasBackend.reduce  s    tvvy)!77r
   c                8    V P                   P                  W4      # rP   )r  rR   rS   s   &&&r   rR   TFKerasBackend.reshape  s    vv~~a''r
   c                8    V P                   P                  W4      # rP   )r  permute_dimensionsrY   s   &&&r   rX   TFKerasBackend.transpose  s    vv((11r
   c                    < V ^8  d   QhRS[ /# rg   ri   )r   rj   s   "r   r	   TFKerasBackend.__annotate__  s     % % %r
   c                8    V P                   P                  V4      # rP   )r  r   rm   s   &&r   rn   (TFKerasBackend.stack_on_zeroth_dimension  s    vv||G$$r
   c                8    V P                   P                  W4      # rP   )r  rx   r   s   &&&r   rx   TFKerasBackend.tile  s    vv{{1&&r
   c                    < V ^8  d   QhRS[ /# r   r   )r   rj   s   "r   r	   r         6 6C 6r
   c                :    V P                   P                  WR 7      # r^   )r  r   r   s   &&&r   r   TFKerasBackend.concat  s    vv!!'!55r
   c                8    V P                   P                  W4      # rP   )r  r   rr   s   &&&r   rt   TFKerasBackend.add_axis  s    vv!!!22r
   c                >    R V P                   P                  V4      9   # )float)r  r   r3   s   &&r   r   TFKerasBackend.is_float_type  s    $&&,,q/))r
   c                    ^RI Hp V# )rw   )r  )r   r  )r.   r  s   & r   r   TFKerasBackend.layers  rS  r
   )r  r  r  N)r   r   r   r   r   r   r   r>   rD   rJ   r=   rd   rR   rX   rn   rx   r   rt   r   r   r   r   r   s   @r   r  r    sf     'N"L3P*+8(2% %'6 63* r
   r  c                      a  ] tR tRt o RtR tR tR tR tR t	R t
R	 tV 3R
 lR ltR tR tV 3R lR ltR tR tR tR tRtV tR# )OneFlowBackendi  oneflowc                    ^ RI pWn        R# r   )r  flow)r.   r  s   & r   r   OneFlowBackend.__init__  s
    	r
   c                @    \        WP                  P                  4      # rP   )r   r  r  r-   s   &&r   r   "OneFlowBackend.is_appropriate_type  s    &))"2"233r
   c                x    V P                   P                  V4      pV P                  V4      '       d   R Vn        V# r   )r  r4   r   r  r  s   && r   r4   OneFlowBackend.from_numpy  s4    99''*h''%)H"r
   c                Z    VP                  4       P                  4       P                  4       # rP   r  r3   s   &&r   r8   OneFlowBackend.to_numpy  r  r
   c                d    V P                   P                  WV P                   P                  R 7      # r  )r  rJ   r  rG   s   &&&r   rJ   OneFlowBackend.arange  s$    yy499??CCr
   c                    \        VR R7       Fb  pVR8X  d   VP                  VR7      w  rK   VR8X  d   VP                  VR7      w  rK=  VR9   d   \        W4      ! VR7      pKX  \	        RV4      h	  V# )Treverser!  r"  r$  r'  )r%  r&  r*  r(  r)  )r.  r!  r$  ra   r,   )r.   r$   rc   r/  r`   r%   s   &&&&  r   rd   OneFlowBackend.reduce  sv    <6DE!uuu1e#uuu1CCA)d3)*>	JJ 7 r
   c                $    VP                  V4      # rP   r3  rY   s   &&&r   rX   OneFlowBackend.transpose  r6  r
   c                    < V ^8  d   QhRS[ /# rg   ri   )r   rj   s   "r   r	   OneFlowBackend.__annotate__  ri  r
   c                8    V P                   P                  V4      # rP   )r  r   rm   s   &&r   rn   (OneFlowBackend.stack_on_zeroth_dimension  rl  r
   c                    R.V,          pVP                  4        F  w  rVV P                  W4      pWdV&   K  	  VP                  ! V!  # r<  r=  rz   s   &&&&   r   r   OneFlowBackend.add_axes  sG    $-*1--/&Ma/A%0M" +: xx!!r
   c                $    VP                  V4      # rP   rB  r   s   &&&r   rx   OneFlowBackend.tile  rE  r
   c                    < V ^8  d   QhRS[ /# r   r   )r   rj   s   "r   r	   r    s     3 3C 3r
   c                :    V P                   P                  WR 7      # rH  )r  r   r   s   &&&r   r   OneFlowBackend.concat  s    yy22r
   c                8    V P                   P                  W4      # rP   )r  rL  rr   s   &&&r   rt   OneFlowBackend.add_axis  s    yy""133r
   c                    VP                   V P                  P                  V P                  P                  V P                  P                  39   # rP   )r   r  r   r   r   r3   s   &&r   r   OneFlowBackend.is_float_type  s6    ww499,,dii.?.?ARARSSSr
   c                    ^RI Hp V# )rw   )r  )r   r  )r.   r  s   & r   r   OneFlowBackend.layers  s
    #r
   c                >    V P                   P                  ! V.VO5!  # rP   )r  r   r   s   &&*r   r   OneFlowBackend.einsum   rx  r
   )r  NrV  r   s   @r   r  r    sf     N
4(D
( ("!3 34T
- -r
   r  c                      a a ] tR tRt oRtR tR tR tR tR t	V 3R lt
R	 tR
 tV3R lR ltR tR tV3R lR ltR tR tR tR tR tRtVtV ;t# )PaddleBackendi$  paddlec                    ^ RI pWn         R# r   r  r.   r  s   & r   r   PaddleBackend.__init__'  s
    r
   c                8    V P                   P                  V4      # rP   )r  r  r-   s   &&r   r   !PaddleBackend.is_appropriate_type,  s    {{$$V,,r
   c                J    V P                   P                  V4      pR Vn        V# )F)r  	to_tensorstop_gradient)r.   r$   r   s   && r   r4   PaddleBackend.from_numpy/  s#    &&q)$r
   c                >    VP                  4       P                  4       # rP   )r  r   r3   s   &&r   r8   PaddleBackend.to_numpy4  s    xxz!!r
   c                d    V P                   P                  WV P                   P                  R 7      # r  )r  rJ   r  rG   s   &&&r   rJ   PaddleBackend.arange7  s&    {{!!%T[[5F5F!GGr
   c                   < \        V4      VP                  8X  d    \        SV `  WV4      P	                  ^ 4      # \        SV `  WV4      # )r   )r  ndimr   rd   squeeze)r.   r$   rc   rZ   r   s   &&&&r   rd   PaddleBackend.reduce:  s@    t97>!5==a@@7>!55r
   c                $    VP                  V4      # rP   rW   rY   s   &&&r   rX   PaddleBackend.transposeA  r\   r
   c                    R.V,          pVP                  4        F  w  rVV P                  W4      pWdV&   K  	  VP                  V4      # r<  r=  rz   s   &&&&   r   r   PaddleBackend.add_axesD  r@  r
   c                    < V ^8  d   QhRS[ /# rg   ri   )r   rj   s   "r   r	   PaddleBackend.__annotate__K  s     * * *r
   c                8    V P                   P                  V4      # rP   )r  r   rm   s   &&r   rn   'PaddleBackend.stack_on_zeroth_dimensionK  s    {{  ))r
   c                $    VP                  V4      # rP   rQ   rS   s   &&&r   rR   PaddleBackend.reshapeN  rU   r
   c                $    VP                  V4      # rP   )rx   r   s   &&&r   rx   PaddleBackend.tileQ  s    vvgr
   c                    < V ^8  d   QhRS[ /# r   r   )r   rj   s   "r   r	   r7  T  r  r
   c                :    V P                   P                  WR 7      # r^   )r  r   r   s   &&&r   r   PaddleBackend.concatT  s    {{!!'!55r
   c                $    VP                  V4      # rP   rL  rr   s   &&&r   rt   PaddleBackend.add_axisW      {{<((r
   c                    VP                   V P                  P                  V P                  P                  V P                  P                  39   # rP   )r   r  r   r   r   r3   s   &&r   r   PaddleBackend.is_float_typeZ  s6    ww4;;..0C0CT[[EXEXYYYr
   c                    ^RI Hp V# )rw   r!  )r   r  r"  s   & r   r   PaddleBackend.layers]  s
    "r
   c                >    V P                   P                  ! V.VO5!  # rP   )r  r   r   s   &&*r   r   PaddleBackend.einsumb  s    {{!!'.A..r
   c                ,    \        VP                  4      # rP   )ry   r=   r3   s   &&r   r=   PaddleBackend.shapee  s    QWW~r
   r!  )r   r   r   r   r   r   r   r4   r8   rJ   rd   rX   r   rn   rR   rx   r   rt   r   r   r   r=   r   r   r  r  s   @@r   r  r  $  sp     N
-
"H6!!* * 6 6)Z
/ r
   r  c                      a  ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
 tR tV 3R lR ltR tR tV 3R lR ltR tR tRtV tR# )TinygradBackendii  tinygradc                    ^ RI pWn         R# r   rO  )r.   rO  s   & r   r   TinygradBackend.__init__l  s
     r
   c                @    \        WP                  P                  4      # rP   )r   rO  r  r-   s   &&r   r   #TinygradBackend.is_appropriate_typeq  s    &--"6"677r
   c                8    V P                   P                  V4      # rP   )rO  r  r3   s   &&r   r4   TinygradBackend.from_numpyt  s    }}##A&&r
   c                "    VP                  4       # rP   )r   r3   s   &&r   r8   TinygradBackend.to_numpyw  s    wwyr
   c                L    V P                   P                  P                  W4      # rP   )rO  r  rJ   rG   s   &&&r   rJ   TinygradBackend.arangez  s    }}##**577r
   c                    VP                   # rP   rM   r3   s   &&r   r=   TinygradBackend.shape}  s    wwr
   c                $    VP                  V4      # rP   rQ   rS   s   &&&r   rR   TinygradBackend.reshape  rU   r
   c                $    VP                  V4      # rP   r3  rY   s   &&&r   rX   TinygradBackend.transpose  r6  r
   c                R    \        VR R7       F  p\        W4      ! VR7      pK  	  V# )Tr  r_   )r.  ra   )r.   r$   rc   rZ   r`   s   &&&& r   rd   TinygradBackend.reduce  s'    4.D%40A /r
   c                    < V ^8  d   QhRS[ /# rg   ri   )r   rj   s   "r   r	   TinygradBackend.__annotate__  s     3 3 3r
   c                L    V P                   P                  P                  V4      # rP   )rO  r  r   rm   s   &&r   rn   )TinygradBackend.stack_on_zeroth_dimension  s    }}##))'22r
   c                $    VP                  V4      # rP   rB  rr   s   &&&r   rt   TinygradBackend.add_axis  rD  r
   c                $    VP                  V4      # rP   rB  r   s   &&&r   rx   TinygradBackend.tile  rE  r
   c                    < V ^8  d   QhRS[ /# r   r   )r   rj   s   "r   r	   rd    s     Z ZC Zr
   c                t    \        V4      ^8  d!   V^ ,          P                  ! VR,          RV/ # V^ ,          # )rw   :rw   NNr#  )r  rI  r   s   &&&r   r   TinygradBackend.concat  s3    9<W9Iwqz~~wr{55YwWXzYr
   c                `    V P                   P                  P                  VP                  4      # rP   )rO  dtypesis_floatr   r3   s   &&r   r   TinygradBackend.is_float_type  s!    }}##,,QWW55r
   c                R    V P                   P                  P                  ! V.VO5!  # rP   )rO  r  r   r   s   &&*r   r   TinygradBackend.einsum  s"    }}##**77Q77r
   rQ  N)r   r   r   r   r   r   r   r4   r8   rJ   r=   rR   rX   rd   rn   rt   rx   r   r   r   r   r   r   s   @r   rN  rN  i  sf     N!
8'8 
3 3)!Z Z68 8r
   rN  c                      a  ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
 tR tV 3R lR ltR tV 3R lR ltR tR tRtV tR# )PyTensorBackendi  pytensorc                    ^ RI Hp Wn        R# )r   )r   N)rv  r   ptr-   s   & r   r   PyTensorBackend.__init__  s
    #r
   c                @    \        WP                  P                  4      # rP   )r   rx  TensorVariabler-   s   &&r   r   #PyTensorBackend.is_appropriate_type  s    &''"8"899r
   c                \    VP                   V P                  P                  P                  9   # rP   )r   rx  r   float_dtypesr3   s   &&r   r   PyTensorBackend.is_float_type  s    ww$'',,3333r
   c                8    V P                   P                  V4      # rP   )rx  	as_tensorr3   s   &&r   r4   PyTensorBackend.from_numpy  s    ww  ##r
   c                "    VP                  4       # rP   )evalr3   s   &&r   r8   PyTensorBackend.to_numpy  s    vvxr
   c                    \        V\        \        ,          4      '       g   V3pV P                  P	                  VR 7      # )rM   )r   ry   r   rx  r   r<   s   &&r   r>   PyTensorBackend.create_symbol  s/    %..HEww~~E~**r
   c                6    VP                  \        V4      4      # rP   )r  dictrA   s   &&&r   rD   PyTensorBackend.eval_symbol  s    {{4 2344r
   c                8    V P                   P                  W4      # rP   )rx  rJ   rG   s   &&&r   rJ   PyTensorBackend.arange  r   r
   c                    \         ;QJ d<    . R  \        VP                  P                  VP                  4       4       F  NK  	  5# ! R  \        VP                  P                  VP                  4       4       4      # )c              3   6   "   T F  w  rVe   TMTx  K  	  R # 5irP   r   )r  
static_dimsymbolic_dims   &  r   r  (PyTensorBackend.shape.<locals>.<genexpr>  s$      
,F(
 %0JlB,Fs   )ry   zipr   r=   r3   s   &&r   r=   PyTensorBackend.shape  sZ    u 
,/agg,F
u 	
u 
,/agg,F
 
 	
r
   c                    < V ^8  d   QhRS[ /# rg   ri   )r   rj   s   "r   r	   PyTensorBackend.__annotate__  r   r
   c                8    V P                   P                  V4      # rP   )rx  r   rm   s   &&r   rn   )PyTensorBackend.stack_on_zeroth_dimension  r   r
   c                8    V P                   P                  W4      # rP   )rx  rx   r   s   &&&r   rx   PyTensorBackend.tile  r   r
   c                    < V ^8  d   QhRS[ /# r   r   )r   rj   s   "r   r	   r    r   r
   c                :    V P                   P                  WR 7      # r^   )rx  r   r   s   &&&r   r   PyTensorBackend.concat  r   r
   c                8    V P                   P                  W4      # rP   )rx  r   rr   s   &&&r   rt   PyTensorBackend.add_axis  r   r
   c                >    V P                   P                  ! V.VO5!  # rP   )rx  r   r   s   &&*r   r   PyTensorBackend.einsum  r   r
   )rx  N)r   r   r   r   r   r   r   r   r4   r8   r>   rD   rJ   r=   rn   rx   r   rt   r   r   r   r   s   @r   ru  ru    s_     N
:4$+
5+
& &(7 74+ +r
   ru  c                   ~   a  ] tR tRt o RtR tR tR tR tR t	V 3R lR	 lt
R
 tR tV 3R lR ltR tR tRtV tR# )
MLXBackendi  mlxc                2    ^ RI Hp ^ RIpWn        W n        R# r   )mlx.corecorer   mxr   )r.   r  r   s   &  r   r   MLXBackend.__init__  s    r
   c                @    \        WP                  P                  4      # rP   )r   r  arrayr-   s   &&r   r   MLXBackend.is_appropriate_type  s    &''--00r
   c                8    V P                   P                  V4      # rP   )r  r  r3   s   &&r   r4   MLXBackend.from_numpy  s    ww}}Qr
   c                    VP                   V P                  P                  8X  d&   VP                  V P                  P                  4      pV P
                  P                  V4      # rP   )r   r  r   astyper   r   r  r3   s   &&r   r8   MLXBackend.to_numpy  sA    77dgg&&&)Aww}}Qr
   c                8    V P                   P                  W4      # rP   )r  rJ   rG   s   &&&r   rJ   MLXBackend.arange  r   r
   c                    < V ^8  d   QhRS[ /# rg   ri   )r   rj   s   "r   r	   MLXBackend.__annotate__  r   r
   c                8    V P                   P                  V4      # rP   )r  r   rm   s   &&r   rn   $MLXBackend.stack_on_zeroth_dimension  r   r
   c                8    V P                   P                  W4      # rP   )r  r   rr   s   &&&r   r   MLXBackend.add_axes  r   r
   c                8    V P                   P                  W4      # rP   )r  rx   r   s   &&&r   rx   MLXBackend.tile  r   r
   c                    < V ^8  d   QhRS[ /# r   r   )r   rj   s   "r   r	   r    r   r
   c                :    V P                   P                  WR 7      # r^   )r  r   r   s   &&&r   r   MLXBackend.concat  r   r
   c                v    V P                   P                  VP                  V P                   P                  4      # rP   )r  
issubdtyper   floatingr3   s   &&r   r   MLXBackend.is_float_type  s'    ww!!!''477+;+;<<r
   c                >    V P                   P                  ! V.VO5!  # rP   )r  r   r   s   &&*r   r   MLXBackend.einsum  r   r
   )r  r   N)r   r   r   r   r   r   r   r4   r8   rJ   rn   r   rx   r   r   r   r   r   r   s   @r   r  r    sP     N1  
+& &4(7 7=+ +r
   r  c                h    V ^8  d   Qh/ ^ \         9   d
   \        ;R&   ^\         9   d
   \        ;R&   # )r   r   r   )__conditional_annotations__r  )r   s   "r   r	   r	      s0     
 
   $ !
"  t #
r
   )r  r   r   
__author__r   r   r   r(   r   r   r   r   r  rX  rz  r  r  r  r  rN  ru  r  r	   )r  s   @r   <module>r     s   
 
    (HVIE IEX &$+? $+N# #$J.? J.Z$-/ $-N# #$C+ C+L6_ 6rC-_ C-LBO BJ28o 28j3+o 3+l(+ (+r
   