
    Vpf/                    b   U d dl mZ d dlmZ d dlmZmZ d dlZd dlZd dlm	Z	 d dl
Zd dlmZmZmZ d dlZd dlmZ d dlmZ d d	l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 d dl m!Z! d dlm"Z# d dl$m%Z& ee'cZ'Z(ee)cZ)Z*e&j+        Z,e&j+        j-        Z.d Z/ej0        1                                Z2dadZ3dbdZ4ee!de5ee!df         df         f         Z6dcdZ7d Z8dddZ9ee3ee3iZ:de;d <   d! e:ej<        <    G d" d#e=          Z>d$ Z?d% Z@d& ZAd' ZBi ZCd(e;d)<   eCD                    d* eD                        eAeCejE        <   e@eCejF        jG        <   eCD                    d+ e2D                        e/eCejH        <   e/eCejI        <   e/eCejJ        <   ded-ZKd. ZLdfd1ZMdgd3ZNi ZOd4e;d5<   d6 eOejI        <   d7 eOejJ        <   d8 eOejH        <   eOD                    d9 eD                        eNeOejE        <   eOD                    d: e2D                        dhdDZPejQ         G dE dF                      ZRdG ZSdHZTeTs G dI dJe          ZUneZUi ZVdKe;dL<   dMe;dN<    eeW          ZX eY            ZZdOe;dP<   didQZ[ddRdjdVZ\ G dW dX          Z]dkd[Z^dXe;d\<    e]eVge^          Z_ G d] d^e          Z`d_e;d`<    e`            ZadS )l    )annotations)defaultdict)CallableSequenceN)partial)AnyProtocolUnion)core)dtypes)source_info_util)numpy_scalar_types)ConcreteArrayShapedArray)AxisEnv)safe_zipsafe_map)Shape)
xla_bridge)
xla_clientc                    | S N xs    Y/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/_src/interpreters/xla.pyidentityr   2   s        avalr   returnSequence[xc.Shape]c                    t          j        |           } | j        t          j        k    rt          j        d          n| j        }t          j                            || j	                  fS )Nbool)
r   physical_avaldtyper   float0npxcr   array_shapeshape)r   r%   s     r   _make_array_shaper+   6   sS    		D	!	!$"jFM99"(6


tz%
(

udj
1
1	33r   c                    |d}|g }n-t          |t                    r|g|                                z  }t                              | ||                                ||          S )N )
isinstancer#   
leaf_countxops	Parameter$with_major_to_minor_layout_if_absent)buildernumr*   name
replicateds        r   	parameterr7   =   sq    	\DJJ*d## 3 0 0 2 22J	BBDDd"
$ 
$ $r   .shardingSpatialShardingc                    t          j                    }t          | t                    ret          | d         t                    sJt          d | D                       sJ t          t          t          t          |                               S | t           j        j
        j        |_        nbt           j        j
        j        |_        t          |           |_        t          t          t!          j        |                               |_        |S )zConverts a SpatialSharding to an OpSharding.

  See
  https://github.com/tensorflow/tensorflow/blob/main/tensorflow/compiler/xla/xla_data.proto#L601
  for details on the OpSharding proto.
  r   c              3  H   K   | ]}|d u pt          |t                    V  d S r   )r.   tuple).0ss     r   	<genexpr>z$sharding_to_proto.<locals>.<genexpr>^   s5      CCQqDy0Jq%00CCCCCCr   )r(   
OpShardingr.   r<   intalltuple_sharding_protolistmapsharding_to_protoType
REPLICATEDtypeOTHERtile_assignment_dimensionsranger'   prodtile_assignment_devices)r8   protos     r   rF   rF   U   s     -//%%   HHQK)E)E HCC(CCCCCCCCS):H%E%E F FGGG#.EJJ#)EJ'+H~~E$$(rwx/@/@)A)A$B$BE!	,r   c                    t          j                    t          fd| D                       sJ t           j        j        j        _        | _        S )Nc              3  R   K   | ]!}t          |t                              V  "d S r   )r.   rI   )r=   erO   s     r   r?   z'tuple_sharding_proto.<locals>.<genexpr>k   s3      77AZ4;;''777777r   )r(   r@   rB   rG   TUPLErI   tuple_shardings)elemsrO   s    @r   rC   rC   i   sS    
-//%	7777777	7	7777}!'%*%	,r   core.AbstractValuec                    	 t          t          |                    |           S # t          $ r%}t          dt          |                      |d }~ww xY w)NzNo xla_shape_handler for type: )_xla_shape_handlersrI   KeyError	TypeError)r   errs     r   aval_to_xla_shapesr\   u   sc    MtDzz*4000	 M M M
Bd4jjBB
C
CLMs   !$ 
A AAzCdict[type[core.AbstractValue], Callable[[Any], Sequence[xc.Shape]]]rX   c                @    t           j                                        fS r   )r(   r   token_shape_s    r   <lambda>ra      s    RX5I5I5K5K4M r   c                      e Zd ZdS )InvalidInputExceptionN)__name__
__module____qualname__r   r   r   rc   rc      s        $r   rc   c                |   t          |           }t                              |          }|r ||           S |j        D ]+}t                              |          }|r ||           c S ,t	          | d          r!t          |                                           S t          d|  dt          |            d          )N__jax_array__
Argument 'z
' of type z is not a valid JAX type.)rI   canonicalize_dtype_handlersget__mro__hasattrcanonicalize_dtyperh   rc   )r   typhandlers      r   rn   rn      s    Q#'++C00'WWQZZ[ " "c)--c22G!wwqzz!!!!Q   1aoo//000B1BBQBBB	D 	D Dr   c                     t          d          )Nznumpy masked arrays are not supported as direct inputs to JAX functions. Use arr.filled() to convert the value to a standard numpy array.)
ValueErrorr   s    r    _canonicalize_masked_array_dtypers      s     V 	W 	W Wr   c                Z    t          j        | t          j        | j                            S r   )r'   asarrayr   rn   r%   r   s    r   _canonicalize_ndarray_dtyperv      s!    	Av099	:	::r   c           	     v    t          j        |t          j        t          j        | |                              S r   )r'   ru   r   rn   _scalar_type_to_dtype)ro   r   s     r   !_canonicalize_python_scalar_dtypery      s6    		"6#?Q#G#G	H	H
J 
J Jr   zdict[Any, Callable]rj   c              #  (   K   | ]}|t           fV  d S r   )rv   r=   ts     r   r?   r?      sA       #B #B)*Q#$#B #B #B #B #B #Br   c              #  D   K   | ]}|t          t          |          fV  d S r   )r   ry   r{   s     r   r?   r?      sK       #O #O;<Q11556#O #O #O #O #O #Or   r   c                |   t          |           }t                              |          }|r ||           S |j        D ]+}t                              |          }|r ||           c S ,t	          | d          r!t          |                                           S t          d|  dt          |            d          )Nrh   ri   z' of type 'z' is not a valid JAX type)rI   pytype_aval_mappingsrk   rl   rm   abstractifyrh   rZ   )r   ro   aval_fns      r   r   r      s    Q# $$S))'WWQZZ[ " "c"&&s++G!wwqzz!!!!Q   *q(()))OqOOT!WWOOOPPPr   c                Z    t          dt          j        | |          | t          u          S )Nr   )	weak_type)r   r   rx   r#   )ro   vals     r   _make_abstract_python_scalarr      s3     
R5c3??"$
0 
0 
0 0r   r   
np.genericc                    t          j        |           }t          j        |           t	          t          j        |           t          j        |                    S r   )r'   r%   r   check_valid_dtyper   r*   rn   r   r%   s     r   #_make_shaped_array_for_numpy_scalarr      sC    
(1++%5!!!	RXa[[&";E"B"B	C	CCr   
np.ndarrayc                    | j         }t          j        |           t          | j        t          j        |                    S r   )r%   r   r   r   r*   rn   r   s     r   "_make_shaped_array_for_numpy_arrayr      s7    
'%5!!!	QWf7>>	?	??r   z.dict[Any, Callable[[Any], core.AbstractValue]]r   c                    | j         S r   _avalr   s    r   ra   ra      s    ag r   c                    | j         S r   r   r   s    r   ra   ra      s    AG r   c                    t           j        S r   )r   abstract_tokenr_   s    r   ra   ra      s	    T-@ r   c              #  (   K   | ]}|t           fV  d S r   )r   r{   s     r   r?   r?      s<       9 9 !  CD 9 9 9 9 9 9r   c              #  D   K   | ]}|t          t          |          fV  d S r   )r   r   r{   s     r   r?   r?      sK       J J67Q,a001J J J J J Jr   platformstraxis_envr   primcore.Primitiveavals_inSequence[core.AbstractValue]	avals_outc                   t          j        d|j                   t          j                    fd|D             }| #|t
          |          v rt
          |          |         }n|t          v rt          |         }t          | |t          j	                              } ||||g|R i |}	|j
        r.                    t                              |	                    S |	\  }
                    |
          S )Nprimitive_computation_c           	     p    g | ]2}t          |          D ] }t          t                    |          !3S r   )r\   r7   next)r=   a	xla_shapeccountss      r   
<listcomp>z,primitive_subcomputation.<locals>.<listcomp>   sa     H H H1CA1F1FH H$- 4<<33 H H H Hr   )r3   r   r   
name_stack)r(   
XlaBuilderr5   itcount_backend_specific_translations_translationsTranslationContextr   new_name_stackmultiple_resultsbuildr0   Tuple)r   r   r   r   r   paramsxla_argsrulectxansr   r   r   s              @@r   primitive_subcomputationr      s+   
 	m8TY8899!8::&H H H H HH H H(
,X666)(3D9DD}D1x(&6&E&G&G	I 	I 	I#S(I;;;;F;;#	 774::a%%&&&	BA771::r   c                  >    e Zd ZU ded<   ded<   ded<   ded<   d	 Zd
S )r   zxc.XlaBuilderr3   
str | Noner   r   r   z str | source_info_util.NameStackr   c                &    t          j        | fi |S r   )dataclassesreplace)selfkws     r   r   zTranslationContext.replace   s    +"5d"A"Ab"A"AAr   N)rd   re   rf   __annotations__r   r   r   r   r   r      sM          ....AAAAAr   r   c                    t          |                                                                         }fdt          |          D             S )Nc                F    g | ]}t                               |          S r   )r0   GetTupleElement)r=   ir   s     r   r   z#xla_destructure.<locals>.<listcomp>   s)    	D	D	D1$

sA
&
&	D	D	Dr   )len	get_shapetuple_shapesrL   )r   r   num_elementss    ` r   xla_destructurer      sJ    Q[[%%224455,	D	D	D	Dl0C0C	D	D	DDr   Fc                      e Zd Zdd
ZdS )TranslationRuler   r   r   r   r   argsxc.XlaOpr    Sequence[xc.XlaOp]c                    dS )zAA translation rule lowers a primitive invocation into an XLA HLO.Nr   )r   r   r   r   r   r   s         r   __call__zTranslationRule.__call__  s      r   N
r   r   r   r   r   r   r   r   r    r   )rd   re   rf   r   r   r   r   r   r     s.        N N N N N Nr   r   z%dict[core.Primitive, TranslationRule]r   z0dict[str, dict[core.Primitive, TranslationRule]]r   zset[core.Primitive]initial_style_primitivesc                :    t                               |            d S r   )r   add)r   s    r    register_initial_style_primitiver     s    t$$$$$r   )r   r   r   Nonec               p    ||t           | <   d S t          j        |          D ]}|t          |         | <   d S r   )r   xbexpand_platform_aliasr   )r   r   r   ps       r   register_translationr     sQ    M$ %h// 5 504$Q'--5 5r   c                      e Zd Zd
dZddZd	S )_TranslationRuleAdapterwrap_fn5Callable[[core.Primitive, Callable], TranslationRule]c                "    || _         || _        d S r   )r   _wrap_fn)r   translationsr   s      r   __init__z _TranslationRuleAdapter.__init__(  s    %DDMMMr   keyr   valuer   c                P    |                      ||          }| j        D ]}|||<   d S r   )r   r   )r   r   r   wrappedr   s        r   __setitem__z#_TranslationRuleAdapter.__setitem__-  s>    mmC''G* " "!l3" "r   N)r   r   )r   r   r   r   )rd   re   rf   r   r   r   r   r   r   r   '  s<           
" " " " " "r   r   fr   c                L     t          j                  d fd
            }|S )Nr   r   r   r   r   r   r   r    r   c                     | j         g|R i |}j        st          d |D                       rt          | j         |          S |gS )Nc              3  V   K   | ]$}t          t          |                    d k    V  %dS )   N)r   r\   )r=   r   s     r   r?   z9_wrap_old_translation.<locals>.wrapped.<locals>.<genexpr>:  s8      DD$C"4(())A-DDDDDDr   )r3   r   anyr   )r   r   r   r   r   r   r   r   s         r   r   z&_wrap_old_translation.<locals>.wrapped4  si     !CK
%$
%
%
%"
%
%C DD)DDDDDS[#...Ulr   r   )	functoolswraps)r   r   r   s   `` r   _wrap_old_translationr   3  sC    ?1       
.r   r   c                      e Zd Zd ZdS )#_BackendSpecificTranslationsAdapterc                v    d t          j        |          D             }t          |t                    x}| |<   |S )Nc                (    g | ]}t           |         S r   )r   )r=   r   s     r   r   zC_BackendSpecificTranslationsAdapter.__missing__.<locals>.<listcomp>F  s3     B B B 9; B B Br   )r   r   r   r   )r   r   translation_tablesrets       r   __missing__z/_BackendSpecificTranslationsAdapter.__missing__E  sV    B B#%#;C#@#@B B B-13 3 3C$s)Jr   N)rd   re   rf   r   r   r   r   r   r   D  s#            r   r   z"dict[str, _TranslationRuleAdapter]backend_specific_translations)r   r   r    r!   )NN)r8   r9   )r   rV   r    r!   )r    r   )r   r   r    r   )r   r   r    r   )
r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   r   r   r   r   r    r   )r   r   r   r   r    r   )b
__future__r   collectionsr   collections.abcr   r   r   r   r   	itertoolsr   typingr   r	   r
   numpyr'   jax._srcr   r   r   jax._src.abstract_arraysr   jax._src.corer   r   jax._src.sharding_implsr   jax._src.utilr   r   jax._src.typingr   r   r   jax._src.libr   r(   rE   
unsafe_mapzip
unsafe_zip_xlaxeopsr0   r   python_scalar_dtypeskeys_scalar_typesr+   r7   r<   r9   rF   rC   r\   rX   r   AbstractToken	Exceptionrc   rn   rs   rv   ry   rj   updatendarraymaMaskedArrayTokenDArrayMutableArrayr   r   r   r   r   r   	dataclassr   r   MYPYr   r   dictr   setr   r   r   r   r   r   r   r   r   r   r   <module>r     s  " # " " " " " " # # # # # # . . . . . . . .                   ' ' ' ' ' ' ' ' ' '                 % % % % % % 7 7 7 7 7 7 4 4 4 4 4 4 4 4 + + + + + + , , , , , , , , ! ! ! ! ! ! % % % % % % ) ) ) ) ) )CZCZW	w{   +00224 4 4 4
$ 
$ 
$ 
$* tU5+=s+B%CCD   (  M M M M "$A     
 +N*M D& '
    I   

D 
D 
DW W W; ; ;J J J 46  5 5 5 5  " " #B #B.@#B #B #B B B B*E BJ '1Q BE- .  " " #O #O@M#O #O #O O O O*2 DJ '+3 DK (19 D- .	Q 	Q 	Q 	Q0 0 0D D D D
@ @ @ @ HJ  I I I I$5$5 T[ !*;*; T& '#@#@ TZ      9 9%79 9 9 9 9 9#E RZ      J J;HJ J J J J J   8 B B B B B B B BE E E  	N N N N N N N N N /79 9 9 9 9 P P P P!,T!2!2 03  5 5 5 5% % % % 15
5 
5 
5 
5 
5 
5"	" 	" 	" 	" 	" 	" 	" 	"    ' & & &&&8MNN    +    B A A A C C E E   r   