
    Upf$                    *   d dl mZ d dl mZmZmZm	Z
mZmZ ej        Zd dlZd dlmZmZ ej         G d dej                              Z ej        e           G d dej                              Zddd	d
ej        fdZ ej        e           G d dej                              Zddd	d
ej        fdZ  ej        e           G d dej                              Z!ddd	d
ej        fdZ" ej        e           G d dej                              Z#ddd	d
ej        fdZ$ ej        e           G d dej                              Z%ddd	d
ej        fdZ& ej        e           G d dej                              Z'ddd	d
ej        fdZ( ej        e           G d dej                              Z)ddd	d
ej        fdZ* ej        e           G d dej                              Z+ddd	d
ej        fd Z, ej        e           G d! d"ej                              Z-ddd	d
ej        fd#Z. ej        e           G d$ d%ej                              Z/ddd	d
ej        fd&Z0 ej        e           G d' d(ej                              Z1ddd	d
ej2        fd)Z3 ej        e           G d* d+ej                              Z4ddd	d
ej        fd,Z5 ej        e           G d- d.ej                              Z6ddd	d
ej        fd/Z7 ej        e           G d0 d1ej                              Z8ddddd2d
ej        fd3Z9 ej        e           G d4 d5ej                              Z:dddddd6d
ej2        fd7Z; ej        e           G d8 d9ej                              Z<ddd	d
ej        fd:Z= ej        e           G d; d<ej                              Z>ddd	d
ej        fd=Z? ej        e           G d> d?ej                              Z@ddd	d
ej        fd@ZA ej        e           G dA dBej                              ZBddd	d
ej        fdCZC ej        e           G dD dEej                              ZDddd	d
ej        fdFZE ej        e           G dG dHej                              ZFddddId
ej        fdJZG ej        e           G dK dLej                              ZHddddMd
ej        fdNZI ej        e           G dO dPej                              ZJddddQd
ej2        fdRZK ej        e           G dS dTej                              ZLddd	d
ej        fdUZM ej        e           G dV dWej                              ZNddddddXd
ej        fdYZO ej        e           G dZ d[ej                              ZPddd	d
ej        fd\ZQ ej        e           G d] d^ej                              ZRddd	d
ej        fd_ZS ej        e           G d` daej                              ZTddd	d
ej        fdbZU ej        e           G dc ddej                              ZVddd	d
ej        fdeZW ej        e           G df dgej                              ZXddd	d
ej2        fdhZY ej        e           G di djej                              ZZddd	d
ej        fdkZ[ ej        e           G dl dmej                              Z\ddd	d
ej        fdnZ] ej        e           G do dpej                              Z^ddd	d
ej        fdqZ_ ej        e           G dr dsej                              Z`ddd	d
ej        fdtZa ej        e           G du dvej                              Zbddd	d
ej        fdwZc ej        e           G dx dyej                              Zdddddd2d
ej        fdzZe ej        e           G d{ d|ej                              Zfddd	d
ej        fd}Zg ej        e           G d~ dej                              Zhdddddd
ej2        fdZi ej        e           G d dej                              Zjddd	d
ej2        fdZk ej        e           G d dej                              Zldddddd
ej2        fdZm ej        e           G d dej                              Znddd	d
ej        fdZo ej        e           G d dej                              Zpddd	d
ej2        fdZq ej        e           G d dej                              Zrddd	d
ej        fdZs ej        e           G d dej                              Ztddd	d
ej2        fdZu ej        e           G d dej                              Zvddd	d
ej2        fdZw ej        e           G d dej                              Zxddd	d
ej        fdZy ej        e           G d dej                              Zzddd	d
ej        fdZ{ ej        e           G d dej                              Z|ddd	d
ej2        fdZ} ej        e           G d dej                              Z~ddd	d
ej2        fdZdS )    )_cext)equally_sized_accessorget_default_loc_contextget_op_result_or_op_resultsget_op_result_or_valueget_op_results_or_valuessegmented_accessorN)SequenceUnionc                       e Zd ZdZdS )_DialecttpuN)__name__
__module____qualname__DIALECT_NAMESPACE     ]/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jaxlib/mosaic/python/_tpu_gen.pyr   r      s        r   r   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	e	j
        d             Z	ej        d	             Zej
        d
             Zej        d             Z xZS )AllReduceOpztpu.all_reducer   TNlocipc          
         g }g }i }d }	|                     t          |                     t          |          }
t          |t          j                  st          j                            d          s|n(t	          j                            d          ||
          |d<   t          |t          j                  st          j                            d          s|n(t	          j                            d          ||
          |d<   |	                    |d         j
        gdz             d }t                                          |                     ||||	||                     d S )	NI64AttrcontextdimTPU_ReductionKindAttrkindr      
attributesoperands
successorsregionsr   r   append_get_op_result_or_value_ods_get_default_loc_context
isinstance_ods_ir	AttributeAttrBuildercontainsgetextendtypesuper__init__build_generic)selfinputr    r"   r   r   r&   resultsr%   r(   _ods_context_ods_successors	__class__s               r   r6   zAllReduceOp.__init__   s   HGJGOO+E22333/44LsG%&&D$$Y//D i((lCCC u
 tW&''S$$%<==S$$ 566t\RRR v NNHQK$%)***O	GGT'':]lv}  DG  LN'  O  O  P  P  P  P  Pr   c                 &    | j         j        d         S Nr   	operationr&   r8   s    r   r9   zAllReduceOp.input0       >"1%%r   c                 &    | j         j        d         S Nr    rA   r%   rB   s    r   r    zAllReduceOp.dim4       >$U++r   c                 F    |t          d          || j        j        d<   d S N4'None' not allowed as value for mandatory attributesr    
ValueErrorrA   r%   r8   values     r   r    zAllReduceOp.dim8   +    }MNNN',DNe$$$r   c                 &    | j         j        d         S )Nr"   rF   rB   s    r   r"   zAllReduceOp.kind>       >$V,,r   c                 F    |t          d          || j        j        d<   d S )NrJ   r"   rK   rM   s     r   r"   zAllReduceOp.kindB   +    }MNNN(-DNf%%%r   c                 &    | j         j        d         S r?   rA   r:   rB   s    r   outputzAllReduceOp.outputH       >!!$$r   )r   r   r   OPERATION_NAME_ODS_REGIONSr6   builtinspropertyr9   r    setterr"   rV   __classcell__r=   s   @r   r   r      s       #.,.2t P P P P P P P& & & & , , , :- - :-
 - - - ;. . ;.
 % % % % % % %r   r   r   returnc          	      D    t          t          | ||||                    S )Nr9   r    r"   r   r   )_get_op_result_or_op_resultsr   ra   s        r   
all_reducerc   L   s%    	%k3TWZ_a&b&b&b	c	ccr   c                   N     e Zd ZdZdZddd fd
Zej        d             Z xZ	S )AllocaSemaphoreOpztpu.sem_allocr   Nr   c                    g }g }i }d }t          |          }|                    |           d }	t                                          |                     ||||	|||                     d S Nr%   r:   r&   r'   r(   r   r   r,   r*   r5   r6   r7   r8   resultr   r   r&   r:   r%   r(   r;   r<   r=   s             r   r6   zAllocaSemaphoreOp.__init__U       HGJG/44LNN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zAllocaSemaphoreOp.result_   rW   r   
r   r   r   rX   rY   r6   rZ   r[   rk   r]   r^   s   @r   re   re   O   sw        ".,$(T a a a a a a a % % % % % % %r   re   c                @    t          t          | ||                    S Nrk   r   r   )rb   re   rq   s      r   	sem_allocrr   c   s!    	%&7v3SU&V&V&V	W	WWr   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )AssumeLayoutOpztpu.assume_layoutr   Nr   c                   g }g }i }d }|                     t          |                     t          |          }	|                     |           d }
t                                          |                     ||||
|||                     d S rg   r*   r+   r,   r5   r6   r7   r8   rk   r9   r   r   r&   r:   r%   r(   r;   r<   r=   s              r   r6   zAssumeLayoutOp.__init__l       HGJGOO+E22333/44LNN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   r9   zAssumeLayoutOp.inputw   rC   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zAssumeLayoutOp.result{   rW   r   r   r   r   rX   rY   r6   rZ   r[   r9   rk   r]   r^   s   @r   rt   rt   f   s        &.,+/D 	a 	a 	a 	a 	a 	a 	a & & & % % % % % % %r   rt   c                B    t          t          | |||                    S Nrk   r9   r   r   )rb   rt   r~   s       r   assume_layoutr      s#    	%nF%UX]_&`&`&`	a	aar   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	e	j
        d             Z	ej        d	             Z xZS )
AssumeMultipleOpztpu.assume_multipler   Nr   c          
         g }g }i }d }|                     t          |                     t          |          }	t          |t          j                  st          j                            d          s|n(t	          j                            d          ||	          |d<   |	                    |d         j
        gdz             d }
t                                          |                     |||
|||                     d S )NI32Attrr   multipler   r#   r$   r)   )r8   rN   r   r   r   r&   r:   r%   r(   r;   r<   r=   s              r   r6   zAssumeMultipleOp.__init__   s"   HGJGOO+E22333/44Lx*++I$$Y//Ihh i((<HHH z NNHQK$%)***O	GGT'':]lv}  DG  LN'  O  O  P  P  P  P  Pr   c                 &    | j         j        d         S r?   r@   rB   s    r   rN   zAssumeMultipleOp.value   rC   r   c                 &    | j         j        d         S )Nr   rF   rB   s    r   r   zAssumeMultipleOp.multiple   s    >$Z00r   c                 F    |t          d          || j        j        d<   d S )NrJ   r   rK   rM   s     r   r   zAssumeMultipleOp.multiple   s+    }MNNN,1DNj)))r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zAssumeMultipleOp.result   rW   r   )r   r   r   rX   rY   r6   rZ   r[   rN   r   r\   rk   r]   r^   s   @r   r   r      s        (.,-1d P P P P P P P & & & 1 1 1 ?2 2 ?2
 % % % % % % %r   r   c                B    t          t          | |||                    S )NrN   r   r   r   )rb   r   r   s       r   assume_multipler      s$    	%&6UX[^ce&f&f&f	g	ggr   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )	BitcastOpztpu.bitcastr   Nr   c                   g }g }i }d }|                     t          |                     t          |          }	|                     |           d }
t                                          |                     ||||
|||                     d S rg   rv   r8   rV   r9   r   r   r&   r:   r%   r(   r;   r<   r=   s              r   r6   zBitcastOp.__init__   rx   r   c                 &    | j         j        d         S r?   r@   rB   s    r   r9   zBitcastOp.input   rC   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zBitcastOp.output   rW   r   r   r   r   rX   rY   r6   rZ   r[   r9   rV   r]   r^   s   @r   r   r      s         .,+/D 	a 	a 	a 	a 	a 	a 	a & & & % % % % % % %r   r   c                B    t          t          | |||                    S NrV   r9   r   r   )rb   r   r   s       r   bitcastr      s#    	%ivUPSXZ&[&[&[	\	\\r   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )BitcastVregOpztpu.bitcast_vregr   Nr   c                   g }g }i }d }|                     t          |                     t          |          }	|                     |           d }
t                                          |                     ||||
|||                     d S rg   rv   r   s              r   r6   zBitcastVregOp.__init__   rx   r   c                 &    | j         j        d         S r?   r@   rB   s    r   r9   zBitcastVregOp.input   rC   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zBitcastVregOp.output   rW   r   r   r^   s   @r   r   r      s        %.,+/D 	a 	a 	a 	a 	a 	a 	a & & & % % % % % % %r   r   c                B    t          t          | |||                    S r   )rb   r   r   s       r   bitcast_vregr      #    	%m6TW\^&_&_&_	`	``r   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	e	j
        d             Z	ej        d	             Z xZS )
BroadcastInSublanesOpztpu.broadcast_in_sublanesr   Nr   c                   g }g }i }d }	|                     t          |                     t          |          }
t          |t          j                  st          j                            d          s|n(t	          j                            d          ||
          |d<   |                     |           d }t                      
                    |                     |||||	||                     d S )Nr   r   lanerh   r*   r+   r,   r-   r.   r/   r0   r1   r2   r5   r6   r7   )r8   rV   sourcer   r   r   r&   r:   r%   r(   r;   r<   r=   s               r   r6   zBroadcastInSublanesOp.__init__   s   HGJGOO+F33444/44LtW&''E$$Y//E$$ i((|DDD v NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   r   zBroadcastInSublanesOp.source   rC   r   c                 &    | j         j        d         S )Nr   rF   rB   s    r   r   zBroadcastInSublanesOp.lane   rQ   r   c                 F    |t          d          || j        j        d<   d S )NrJ   r   rK   rM   s     r   r   zBroadcastInSublanesOp.lane  rS   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zBroadcastInSublanesOp.output  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r   r   r\   rV   r]   r^   s   @r   r   r      s        ..,264 a a a a a a a & & & - - - ;. . ;.
 % % % % % % %r   r   c          	      D    t          t          | ||||                    S )NrV   r   r   r   r   )rb   r   r   s        r   broadcast_in_sublanesr     s(    	%&;6RX_cilqs&t&t&t	u	uur   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	e	j
        d             Z	ej        d	             Z xZS )
ConcatenateOpztpu.concatenater   Nr   c                   g }g }i }d }	|                     t          |                     t          |          }
t          |t          j                  st          j                            d          s|n(t	          j                            d          ||
          |d<   |	                    |           d }t                                          |                     |||||	||                     d S Nr   r   	dimensionrh   r3   _get_op_results_or_valuesr,   r-   r.   r/   r0   r1   r2   r*   r5   r6   r7   )r8   rV   sourcesr   r   r   r&   r:   r%   r(   r;   r<   r=   s               r   r6   zConcatenateOp.__init__  s   HGJGOO-g66777/44Ly'+,, J$$Y// Jyy i((LIII { NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S Nr#   r   lenrA   r&   r8   _ods_variadic_group_lengths     r   r   zConcatenateOp.sources#  :    !$T^%<!=!=!AA!E>"1Q)C%C#CDDr   c                 &    | j         j        d         S Nr   rF   rB   s    r   r   zConcatenateOp.dimension(      >$[11r   c                 F    |t          d          || j        j        d<   d S NrJ   r   rK   rM   s     r   r   zConcatenateOp.dimension,  +    }MNNN-2DNk***r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zConcatenateOp.output2  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r   r   r\   rV   r]   r^   s   @r   r   r     s        $.,8< a a a a a a a E E E 2 2 2 3 3 3
 % % % % % % %r   r   c          	      D    t          t          | ||||                    S )NrV   r   r   r   r   )rb   r   r   s        r   concatenater   6  s&    	%m67^gmpuw&x&x&x	y	yyr   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	ej        d             Z
 xZS )	CreateMaskOpztpu.create_maskr   Nr   c                b   g }g }i }d }	|                     t          |                     |                     t          |                     t          |          }
|                    |           d }t	                                          |                     |||||	||                     d S rg   r3   r   r,   r*   r5   r6   r7   )r8   rV   lowhighr   r   r&   r:   r%   r(   r;   r<   r=   s               r   r6   zCreateMaskOp.__init__?  s    HGJGOO-c22333OO-d33444/44LNN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 n    t          t          j        ddd          \  }}| j        j        |||z            S )N   r   _ods_equally_sized_accessorrA   r&   r8   startpgs      r   r   zCreateMaskOp.lowK  5    +I,>1aHHIE2>"5#344r   c                 n    t          t          j        ddd          \  }}| j        j        |||z            S )Nr   r   r#   r   r   s      r   r   zCreateMaskOp.highP  r   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zCreateMaskOp.outputU  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r   r   rV   r]   r^   s   @r   r   r   9  s        $.,/3 
a 
a 
a 
a 
a 
a 
a 5 5 5 5 5 5 % % % % % % %r   r   c          	      D    t          t          | ||||                    S )NrV   r   r   r   r   )rb   r   r   s        r   create_maskr   Y  s&    	%l&cPTZ]bd&e&e&e	f	ffr   c                       e Zd ZdZdZddd fd
Zej        d             Zej	        d             Zej        d             Z
e
j	        d	             Z
ej        d
             Zej	        d             Zej        d             Z xZS )CreateSubelementMaskOpztpu.create_subelement_maskr   Nr   c                D   g }g }i }	d }
t          |          }t          |t          j                  st          j                            d          s|n(t          j                            d          ||          |	d<   t          |t          j                  st          j                            d          s|n(t          j                            d          ||          |	d<   t          |t          j                  st          j                            d          s|n(t          j                            d          ||          |	d<   |                    |           d }t                      	                    | 
                    |	||||
||                     d S )Nr   r   fromtonum_subelemsrh   r,   r-   r.   r/   r0   r1   r2   r*   r5   r6   r7   )r8   rV   from_r   r   r   r   r&   r:   r%   r(   r;   r<   r=   s                r   r6   zCreateSubelementMaskOp.__init__b  s   HGJG/44Lug'((F$$Y//F%% i((EEE v
 r7$%%C$$Y//C i((\BBB t
 |W.//#M$$Y//#M,, i((|LLL ~ NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S )Nr   rF   rB   s    r   r   zCreateSubelementMaskOp.from_x  rQ   r   c                 F    |t          d          || j        j        d<   d S )NrJ   r   rK   rM   s     r   r   zCreateSubelementMaskOp.from_|  rS   r   c                 &    | j         j        d         S )Nr   rF   rB   s    r   r   zCreateSubelementMaskOp.to  s    >$T**r   c                 F    |t          d          || j        j        d<   d S )NrJ   r   rK   rM   s     r   r   zCreateSubelementMaskOp.to  s+    }MNNN&+DNd###r   c                 &    | j         j        d         S )Nr   rF   rB   s    r   r   z#CreateSubelementMaskOp.num_subelems      >$^44r   c                 F    |t          d          || j        j        d<   d S )NrJ   r   rK   rM   s     r   r   z#CreateSubelementMaskOp.num_subelems  +    }MNNN05DNn---r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zCreateSubelementMaskOp.output  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r   r\   r   r   rV   r]   r^   s   @r   r   r   \  s-       /.,=Ad a a a a a a a, - - - 	<. . <.
 + + + 9, , 9,
 5 5 5 6 6 6
 % % % % % % %r   r   c          
      F    t          t          | |||||                    S )NrV   r   r   r   r   r   )rb   r   r   s         r   create_subelement_maskr     sE    	%&<FRW\^my  @C  HJ  'K  'K  'K  
L  
L  Lr   c                   N     e Zd ZdZdZddd fd
Zej        d             Z xZ	S )DelayOpz	tpu.delayr   Nr   c                    g }g }i }d }|                     t          |                     t          |          }d }	t                                          |                     ||||	|||                     d S rg   rv   )r8   nanosr   r   r&   r:   r%   r(   r;   r<   r=   s             r   r6   zDelayOp.__init__  s    HGJGOO+E22333/44LO	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   r   zDelayOp.nanos  rC   r   )
r   r   r   rX   rY   r6   rZ   r[   r   r]   r^   s   @r   r   r     sw        .,#'D a a a a a a a & & & & & & &r   r   c                @    t          t          | ||                    S )Nr   r   r   )rb   r   r   s      r   delayr     s    	%gEsr&J&J&J	K	KKr   c                   N     e Zd ZdZdZddd fd
Zej        d             Z xZ	S )
DeviceIdOpztpu.device_idr   Nr   c          
          g }g }i }d }t          |          }d }t                                          |                     ||||||                     d S Nr$   r,   r5   r6   r7   
r8   r   r   r&   r:   r%   r(   r;   r<   r=   s
            r   r6   zDeviceIdOp.__init__  s    HGJG/44LO	GGT'':]lv}  DG  LN'  O  O  P  P  P  P  Pr   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zDeviceIdOp.result  rW   r   rn   r^   s   @r   r   r     sw        "., T P P P P P P P % % % % % % %r   r   c                 >    t          t          | |                    S Nr   )rb   r   r   s     r   	device_idr     s    	%jSR&@&@&@	A	AAr   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	ej        d             Z
e
j        d	             Z
ej        d
             Z xZS )DynamicGatherOpztpu.dynamic_gatherr   Nr   c                0   g }g }i }	d }
|                     t          |                     |                     t          |                     t          |          }t          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |	d<   |                     |           d }t                      
                    |                     |	||||
||                     d S r   r   r8   rV   r   indicesr   r   r   r&   r:   r%   r(   r;   r<   r=   s                r   r6   zDynamicGatherOp.__init__  s5   HGJGOO+F33444OO+G44555/44Ly'+,, J$$Y// Jyy i((LIII { NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   r   zDynamicGatherOp.source  rC   r   c                 &    | j         j        d         S Nr#   r@   rB   s    r   r  zDynamicGatherOp.indices  rC   r   c                 &    | j         j        d         S r   rF   rB   s    r   r   zDynamicGatherOp.dimension  r   r   c                 F    |t          d          || j        j        d<   d S r   rK   rM   s     r   r   zDynamicGatherOp.dimension  r   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zDynamicGatherOp.output  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r   r  r   r\   rV   r]   r^   s   @r   r   r     s        '.,@D a a a a a a a  & & & & & & 2 2 2 3 3 3
 % % % % % % %r   r   c          
      F    t          t          | |||||                    S NrV   r   r  r   r   r   )rb   r   r  s         r   dynamic_gatherr    sC    	%oVF\cox  B  GI  'J  'J  'J  
K  
K  Kr   c                       e Zd ZdZdZddddd fd
Zej        d             Zej        d             Z	ej        d             Z
e
j        d	             Z
ej        d
             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Z xZS )DynamicRotateOpztpu.dynamic_rotater   Nstridestride_dimensionr   r   c                   g }	g }
i }d }|	                     t          |                     |	                     t          |                     t          |          }t          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |d<   |gt          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |d<   |gt          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |d<   |
                     |           d }t                      
                    |                     ||
|	||||                     d S )NSI32Attrr   r   r  r  rh   r   )r8   rk   rN   amountr   r  r  r   r   r&   r:   r%   r(   r;   r<   r=   s                  r   r6   zDynamicRotateOp.__init__  s   HGJGOO+E22333OO+F33444/44Ly'+,, K$$Z00 Kyy j)))\JJJ { 67,--4L((444L66 

!
!*
-
-fl
K
K
K &h/ ##W%677HV((44HVGWGW 

!
!*
-
-.>
U
U
U &00B%C NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   rN   zDynamicRotateOp.value  rC   r   c                 &    | j         j        d         S r  r@   rB   s    r   r  zDynamicRotateOp.amount  rC   r   c                 &    | j         j        d         S r   rF   rB   s    r   r   zDynamicRotateOp.dimension  r   r   c                 F    |t          d          || j        j        d<   d S r   rK   rM   s     r   r   zDynamicRotateOp.dimension#  r   r   c                 F    d| j         j        vrd S | j         j        d         S Nr  rF   rB   s    r   r  zDynamicRotateOp.stride)  '    t~000T>$X..r   c                 f    ||| j         j        d<   d S d| j         j        v r| j         j        d= d S d S r  rF   rM   s     r   r  zDynamicRotateOp.stride/  H    ,1dn)))	T^.	.	.
.
#H
-
-
- 
/	.r   c                      | j         j        d= d S r  rF   rB   s    r   r  zDynamicRotateOp.stride6      !(+++r   c                 F    d| j         j        vrd S | j         j        d         S Nr  rF   rB   s    r   r  z DynamicRotateOp.stride_dimension:  (    !:::T>$%788r   c                 f    ||| j         j        d<   d S d| j         j        v r| j         j        d= d S d S r!  rF   rM   s     r   r  z DynamicRotateOp.stride_dimension@  J    6;dn 2333	t~8	8	8
.
#$6
7
7
7 
9	8r   c                      | j         j        d= d S r!  rF   rB   s    r   r  z DynamicRotateOp.stride_dimensionG      !"4555r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zDynamicRotateOp.resultK  rW   r   )r   r   r   rX   rY   r6   rZ   r[   rN   r  r   r\   r  deleterr  rk   r]   r^   s   @r   r  r    s       '.,AEX\bfko a a a a a a a0 & & & & & & 2 2 2 3 3 3
 / / /
 
=. . =. 
>, , >, 9 9 9
 8 8 8 6 6 6 % % % % % % %r   r  r  c                J    t          t          | |||||||                    S )Nrk   rN   r  r   r  r  r   r   )rb   r  r*  s           r   dynamic_rotater+  O  sQ    	%oV5Y_kt  ~D  Wg  mp  uw  'x  'x  'x  
y  
y  yr   c                        e Zd ZdZg dZdZdddddd fd
Zej        d             Z	ej        d             Z
ej        d	             Zej        d
             Zej        d             Zej        d             Z xZS )EnqueueDMAOpztpu.enqueue_dma)r#   r   r#   r#   r   r   r   Nsource_semaphorer   core_idr   r   c                `   g }	g }
i }d }|	                     t          |                     |	                     |t          |          nd            |	                     t          |                     |	                     t          |                     |	                     |t          |          nd            |	                     |t          |          nd            t          |          }d }t                                          |                     ||
|	||||                     d S rg   rv   )r8   r   targettarget_semaphorer/  r   r0  r   r   r&   r:   r%   r(   r;   r<   r=   s                  r   r6   zEnqueueDMAOp.__init__Z  sP   HGJGOO+F33444OOAQA]+,<===cghhhOO+F33444OO+,<==>>>OO):O+I666UYZZZOO8K+G444QUVVV/44LO	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 h    t          | j        j        | j        j        d         d          }|d         S NoperandSegmentSizesr   _ods_segmented_accessorrA   r&   r%   r8   operand_ranges     r   r   zEnqueueDMAOp.sourcei  6    +		 		"#8	91> >M r   c                     t          | j        j        | j        j        d         d          }t	          |          dk    r|d         nd S Nr6  r#   r   r8  rA   r&   r%   r   r9  s     r   r/  zEnqueueDMAOp.source_semaphorep  M    +		 		"#8	91> >M  #=11A55=4?r   c                 h    t          | j        j        | j        j        d         d          }|d         S Nr6  r   r   r7  r9  s     r   r2  zEnqueueDMAOp.targetw  r;  r   c                 h    t          | j        j        | j        j        d         d          }|d         S Nr6     r   r7  r9  s     r   r3  zEnqueueDMAOp.target_semaphore~  r;  r   c                     t          | j        j        | j        j        d         d          }t	          |          dk    r|d         nd S )Nr6     r   r>  r9  s     r   r   zEnqueueDMAOp.device_id  r?  r   c                     t          | j        j        | j        j        d         d          }t	          |          dk    r|d         nd S )Nr6     r   r>  r9  s     r   r0  zEnqueueDMAOp.core_id  r?  r   )r   r   r   rX   _ODS_OPERAND_SEGMENTSrY   r6   rZ   r[   r   r/  r2  r3  r   r0  r]   r^   s   @r   r-  r-  R  s7       $.(..,KO[_imsw  }A a a a a a a a    @ @ @       @ @ @ @ @ @ @ @ @ @r   r-  r.  c                J    t          t          | |||||||                    S )Nr   r2  r3  r/  r   r0  r   r   )rb   r-  rK  s           r   enqueue_dmarL    sU    	%l&br  FV  bk  u|  BE  JL  'M  'M  'M  
N  
N  Nr   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )EraseLayoutOpztpu.erase_memref_layoutr   Nr   c                   g }g }i }d }|                     t          |                     t          |          }	|                     |           d }
t                                          |                     ||||
|||                     d S rg   rv   )r8   rk   operandr   r   r&   r:   r%   r(   r;   r<   r=   s              r   r6   zEraseLayoutOp.__init__  s    HGJGOO+G44555/44LNN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   rP  zEraseLayoutOp.operand  rC   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zEraseLayoutOp.result  rW   r   )r   r   r   rX   rY   r6   rZ   r[   rP  rk   r]   r^   s   @r   rN  rN    s        ,.,-1d 	a 	a 	a 	a 	a 	a 	a & & & % % % % % % %r   rN  c                B    t          t          | |||                    S )Nrk   rP  r   r   )rb   rN  rT  s       r   erase_memref_layoutrU    s#    	%m67X[`b&c&c&c	d	ddr   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	e	j
        d             Z	ej        d	             Zej
        d
             Zej        d             Z xZS )GatherOpz
tpu.gatherr   Nr   c                   g }g }i }	d }
|                     t          |                     t          |          }t          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |	d<   t          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |	d<   |                     |           d }t                      
                    |                     |	||||
||                     d S )NDenseI32ArrayAttrr   r  r   r   rh   r   r  s                r   r6   zGatherOp.__init__  s   HGJGOO+F33444/44Lw)**R$$%899RWW 1227LQQQ y
 y'+,, J$$Y// Jyy i((LIII { NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   r   zGatherOp.source  rC   r   c                 &    | j         j        d         S )Nr  rF   rB   s    r   r  zGatherOp.indices      >$Y//r   c                 F    |t          d          || j        j        d<   d S )NrJ   r  rK   rM   s     r   r  zGatherOp.indices  +    }MNNN+0DNi(((r   c                 &    | j         j        d         S r   rF   rB   s    r   r   zGatherOp.dimension  r   r   c                 F    |t          d          || j        j        d<   d S r   rK   rM   s     r   r   zGatherOp.dimension  r   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zGatherOp.output  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r   r  r\   r   rV   r]   r^   s   @r   rW  rW    s       .,@D a a a a a a a& & & & 0 0 0 >1 1 >1
 2 2 2 3 3 3
 % % % % % % %r   rW  c          
      F    t          t          | |||||                    S r
  )rb   rW  r  s         r   gatherrc    s?    	%hfVU\hqwz  @B  'C  'C  'C  
D  
D  Dr   c                   N     e Zd ZdZdZddd fd
Zej        d             Z xZ	S )GetBarrierSemaphoreOpztpu.sem_barrierr   Nr   c                    g }g }i }d }t          |          }|                    |           d }	t                                          |                     ||||	|||                     d S rg   ri   r8   	semaphorer   r   r&   r:   r%   r(   r;   r<   r=   s             r   r6   zGetBarrierSemaphoreOp.__init__  s    HGJG/44LNN9O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   rU   rB   s    r   rh  zGetBarrierSemaphoreOp.semaphore  rW   r   )
r   r   r   rX   rY   r6   rZ   r[   rh  r]   r^   s   @r   re  re    sw        $.,'+ a a a a a a a % % % % % % %r   re  c                @    t          t          | ||                    S Nrh  r   r   )rb   re  rl  s      r   sem_barrierrm    s"    	%&;iUX]_&`&`&`	a	aar   c                   N     e Zd ZdZdZddd fd
Zej        d             Z xZ	S )GetInternalScratchOpztpu.internal_scratchr   Nr   c                    g }g }i }d }t          |          }|                    |           d }	t                                          |                     ||||	|||                     d S rg   ri   rj   s             r   r6   zGetInternalScratchOp.__init__  rl   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zGetInternalScratchOp.result  rW   r   rn   r^   s   @r   ro  ro    w        ).,$(T a a a a a a a % % % % % % %r   ro  c                @    t          t          | ||                    S rp   )rb   ro  rq   s      r   internal_scratchrt    s!    	%&:&cVX&Y&Y&Y	Z	ZZr   c                        e Zd ZdZdZddd fd
Zej        d             Zej	        d             Zej        d             Z
 xZS )	GetIterationBoundOpztpu.iteration_boundr   Nr   c          
      |   g }g }i }d }t          |          }t          |t          j                  st          j                            d          s|n(t          j                            d          ||          |d<   d }	t                                          | 	                    |||	|||                     d S )Nr   r   r    r$   
r,   r-   r.   r/   r0   r1   r2   r5   r6   r7   )r8   r    r   r   r&   r:   r%   r(   r;   r<   r=   s             r   r6   zGetIterationBoundOp.__init__  s    HGJG/44LsG%&&D$$Y//D i((lCCC u O	GGT'':]lv}  DG  LN'  O  O  P  P  P  P  Pr   c                 &    | j         j        d         S rE   rF   rB   s    r   r    zGetIterationBoundOp.dim+  rG   r   c                 F    |t          d          || j        j        d<   d S rI   rK   rM   s     r   r    zGetIterationBoundOp.dim/  rO   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zGetIterationBoundOp.result5  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r    r\   rk   r]   r^   s   @r   rv  rv    s        (.,!%$ P P P P P P P , , , :- - :-
 % % % % % % %r   rv  c                @    t          t          | ||                    S )Nr    r   r   )rb   rv  r}  s      r   iteration_boundr~  9  s     	%&9csr&R&R&R	S	SSr   c                        e Zd ZdZdZdddd fd
Zej        d             Zej	        d             Zej
        d             Zej        d	             Z xZS )
IotaOpztpu.iotar   Nr   r   r   c                   g }g }i }d }t          |          }	|gt          |t          j                  st          j                            d          s|n(t          j                            d          ||	          |d<   |                    |           d }
t                      	                    | 
                    ||||
|||                     d S r   r   )r8   rV   r   r   r   r&   r:   r%   r(   r;   r<   r=   s              r   r6   zIotaOp.__init__B  s   HGJG/44L9g/00:N((33:N 

!
!)
,
,Y
M
M
M )5 NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 F    d| j         j        vrd S | j         j        d         S r   rF   rB   s    r   r   zIotaOp.dimensionP  '    $.333T>$[11r   c                 f    ||| j         j        d<   d S d| j         j        v r| j         j        d= d S d S r   rF   rM   s     r   r   zIotaOp.dimensionV  H    /4dn,,,	1	1	1
.
#K
0
0
0 
2	1r   c                      | j         j        d= d S r   rF   rB   s    r   r   zIotaOp.dimension]      !+...r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zIotaOp.outputa  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r   r\   r(  rV   r]   r^   s   @r   r  r  <  s        .,*.DT a a a a a a a 2 2 2
 1 1 1 / / / % % % % % % %r   r  r  c                B    t          t          | |||                    S )NrV   r   r   r   )rb   r  r  s       r   iotar  e  s#    	%fFiUX]_&`&`&`	a	aar   c                   0    e Zd ZdZdZdddd fd
Zej        d             Zej        d             Z	ej        d             Z
e
j        d	             Z
ej        d
             Zej        d             Zej        d             Zej        d             Z xZS )LoadOpztpu.loadr   Nsublane_strider   r   c                   g }g }	i }
d }|                     t          |                     |                    t          |                     t	          |          }t          |t          j                  st          j        	                    d          s|n(t          j        
                    d          ||          |
d<   |gt          |t          j                  st          j        	                    d          s|n(t          j        
                    d          ||          |
d<   |	                     |           d }t                                          |                     |
|	|||||                     d S NDenseBoolArrayAttrr   sublane_maskr   r  rh   r*   r+   r3   r   r,   r-   r.   r/   r0   r1   r2   r5   r6   r7   )r8   rk   baser  r  r  r   r   r&   r:   r%   r(   r;   r<   r=   s                 r   r6   zLoadOp.__init__n  s   HGJGOO+D11222OO-g66777/44L|W.//#X$$%9::#X,, 233L,WWW ~ !>7#455DS((33DS>> 

!
!)
,
,^\
R
R
R $..>#? NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   r  zLoadOp.base  rC   r   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S Nr   r#   r   r   s     r   r  zLoadOp.indices  r   r   c                 &    | j         j        d         S Nr  rF   rB   s    r   r  zLoadOp.sublane_mask  r   r   c                 F    |t          d          || j        j        d<   d S NrJ   r  rK   rM   s     r   r  zLoadOp.sublane_mask  r   r   c                 F    d| j         j        vrd S | j         j        d         S Nr  rF   rB   s    r   r  zLoadOp.sublane_stride  (    t~888T>$%566r   c                 f    ||| j         j        d<   d S d| j         j        v r| j         j        d= d S d S r  rF   rM   s     r   r  zLoadOp.sublane_stride  J    49dn 0111	T^6	6	6
.
#$4
5
5
5 
7	6r   c                      | j         j        d= d S r  rF   rB   s    r   r  zLoadOp.sublane_stride      !"2333r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zLoadOp.result  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r  r  r  r\   r  r(  rk   r]   r^   s   @r   r  r  h  sW       .,LPVZ_c a a a a a a a( & & & E E E 5 5 5 6 6 6
 7 7 7
 6 6 6 4 4 4 % % % % % % %r   r  r  c                H    t          t          | ||||||                    S )Nrk   r  r  r  r  r   r   )rb   r  r  s          r   loadr    sI    	%fFweq  CQ  WZ  _a  'b  'b  'b  
c  
c  cr   c                        e Zd ZdZdZdddd fd
Zej        d             Zej        d             Z	e	j
        d             Z	ej        d	             Zej
        d
             Z xZS )LogOpztpu.logr   N	formattedr   r   c                   g }g }i }d }	|                     t          |                     t          |          }
t          |t          j                  st          j                            d          s|n(t	          j                            d          ||
          |d<   |gt          |t          j                  st          j                            d          s|n(t	          j                            d          ||
          |d<   d }t                      
                    |                     |||||	||                     d S )NStrAttrr   tagBoolAttrr  rh   )r3   r   r,   r-   r.   r/   r0   r1   r2   r5   r6   r7   )r8   inputsr  r  r   r   r&   r:   r%   r(   r;   r<   r=   s               r   r6   zLogOp.__init__  sq   HGJGOO-f55666/44LsG%&&D$$Y//D i((lCCC u 9g/00:O((44:O 

!
!*
-
-i
N
N
N )5 O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S r   r   r   s     r   r  zLogOp.inputs  r   r   c                 &    | j         j        d         S )Nr  rF   rB   s    r   r  z	LogOp.tag  rG   r   c                 F    |t          d          || j        j        d<   d S )NrJ   r  rK   rM   s     r   r  z	LogOp.tag  rO   r   c                 &    | j         j        d         S )Nr  rF   rB   s    r   r  zLogOp.formatted  r   r   c                 F    |t          d          || j        j        d<   d S )NrJ   r  rK   rM   s     r   r  zLogOp.formatted  r   r   )r   r   r   rX   rY   r6   rZ   r[   r  r  r\   r  r]   r^   s   @r   r  r    s        .,/3$ a a a a a a a$ E E E , , , :- - :-
 2 2 2 3 3 3 3 3 3 3r   r  r  c          	      D    t          t          | ||||                    S )Nr  r  r  r   r   )rb   r  r  s        r   logr    s%    	%e6si]`eg&h&h&h	i	iir   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )
MaskCastOpztpu.mask_castr   Nr   c                   g }g }i }d }|                     t          |                     t          |          }	|                     |           d }
t                                          |                     ||||
|||                     d S rg   rv   rw   s              r   r6   zMaskCastOp.__init__  rx   r   c                 &    | j         j        d         S r?   r@   rB   s    r   r9   zMaskCastOp.input  rC   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zMaskCastOp.result  rW   r   r{   r^   s   @r   r  r    s        ".,+/D 	a 	a 	a 	a 	a 	a 	a & & & % % % % % % %r   r  c                B    t          t          | |||                    S r}   )rb   r  r~   s       r   	mask_castr    s#    	%jeQTY[&\&\&\	]	]]r   c                       e Zd ZdZdZdddddd fd
Zej        d             Zej        d             Z	ej        d             Z
ej        d	             Zej        d
             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Z xZS )MatmulOpz
tpu.matmulr   Ntranspose_lhstranspose_rhs	precisionr   r   c                   g }
g }i }d }|
                     t          |                     |
                     t          |                     |
                     t          |                     t          |          }|gt          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |d<   |gt          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |d<   |gt          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |d<   |                     |           d }t                      
                    |                     |||
||||	                     d S )Nr  r   r  r  TPU_ContractPrecisionEnumr  rh   r   )r8   rk   lhsrhsaccr  r  r  r   r   r&   r:   r%   r(   r;   r<   r=   s                   r   r6   zMatmulOp.__init__  s/   HGJGOO+C00111OO+C00111OO+C00111/44L ='"344BS((44BS 

!
!*
-
-m\
R
R
R #-_"=  ='"344BS((44BS 

!
!*
-
-m\
R
R
R #-_"= 9g/00:`(()DEE:` 

!
!"=
>
>yR^
_
_
_ )5 NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   r  zMatmulOp.lhs  rC   r   c                 &    | j         j        d         S r  r@   rB   s    r   r  zMatmulOp.rhs   rC   r   c                 &    | j         j        d         S )Nr   r@   rB   s    r   r  zMatmulOp.acc$  rC   r   c                 &    | j         j        d         S )Nr  rF   rB   s    r   r  zMatmulOp.transpose_lhs(      >$_55r   c                 F    |t          d          || j        j        d<   d S )NrJ   r  rK   rM   s     r   r  zMatmulOp.transpose_lhs,  +    }MNNN16DNo...r   c                 &    | j         j        d         S )Nr  rF   rB   s    r   r  zMatmulOp.transpose_rhs2  r  r   c                 F    |t          d          || j        j        d<   d S )NrJ   r  rK   rM   s     r   r  zMatmulOp.transpose_rhs6  r  r   c                 F    d| j         j        vrd S | j         j        d         S Nr  rF   rB   s    r   r  zMatmulOp.precision<  r  r   c                 f    ||| j         j        d<   d S d| j         j        v r| j         j        d= d S d S r  rF   rM   s     r   r  zMatmulOp.precisionB  r  r   c                      | j         j        d= d S r  rF   rB   s    r   r  zMatmulOp.precisionI  r  r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zMatmulOp.resultM  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r  r  r  r  r\   r  r  r(  rk   r]   r^   s   @r   r  r    s       .,=AQUaekotx a a a a a a a2 & & & & & & & & & 6 6 6 7 7 7
 6 6 6 7 7 7
 2 2 2
 1 1 1 / / / % % % % % % %r   r  r  c                L    t          t          | ||||||||	  	                  S )N	rk   r  r  r  r  r  r  r   r   )rb   r  r  s	            r   matmulr  Q  sS    	%hf#3TWgt  ER  ^g  mp  uw  'x  'x  'x  
y  
y  yr   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )MemRefReshapeOpztpu.memref_reshaper   Nr   c                   g }g }i }d }|                     t          |                     t          |          }	|                     |           d }
t                                          |                     ||||
|||                     d S rg   rv   rw   s              r   r6   zMemRefReshapeOp.__init__Z  rx   r   c                 &    | j         j        d         S r?   r@   rB   s    r   r9   zMemRefReshapeOp.inpute  rC   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zMemRefReshapeOp.resulti  rW   r   r{   r^   s   @r   r  r  T          '.,+/D 	a 	a 	a 	a 	a 	a 	a & & & % % % % % % %r   r  c                B    t          t          | |||                    S r}   )rb   r  r~   s       r   memref_reshaper  m  #    	%oV5VY^`&a&a&a	b	bbr   c                        e Zd ZdZg dZdZddd fd
Zej        d             Z	ej        d             Z
ej        d	             Zej        d
             Z xZS )MemRefSliceOpztpu.memref_slice)r#   r  r   Nr   c                   g }g }i }	d }
|                     t          |                     |                     t          |                     |                     t          |                     t          |          }|                     |           d }t	                                          |                     |	||||
||                     d S rg   )r*   r+   r   r,   r5   r6   r7   )r8   rk   mem_refbase_idxdynamic_sizesr   r   r&   r:   r%   r(   r;   r<   r=   s                r   r6   zMemRefSliceOp.__init__x  s    HGJGOO+G44555OO-h77888OO-m<<===/44LNN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 h    t          | j        j        | j        j        d         d          }|d         S r5  r7  r9  s     r   r  zMemRefSliceOp.mem_ref  r;  r   c                 \    t          | j        j        | j        j        d         d          }|S )Nr6  r#   r7  r9  s     r   r  zMemRefSliceOp.base_idx  1    +		 		"#8	91> >M r   c                 \    t          | j        j        | j        j        d         d          }|S Nr6  r   r7  r9  s     r   r  zMemRefSliceOp.dynamic_sizes  r  r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zMemRefSliceOp.result  rW   r   )r   r   r   rX   rI  rY   r6   rZ   r[   r  r  r  rk   r]   r^   s   @r   r  r  p  s        %.$**,FJt a a a a a a a          % % % % % % %r   r  c          
      F    t          t          | |||||                    S )Nrk   r  r  r  r   r   )rb   r  r  s         r   memref_slicer    sG    	%m67]e  vC  IL  QS  'T  'T  'T  
U  
U  Ur   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )MemRefSqueezeOpztpu.memref_squeezer   Nr   c                   g }g }i }d }|                     t          |                     t          |          }	|                     |           d }
t                                          |                     ||||
|||                     d S rg   rv   rw   s              r   r6   zMemRefSqueezeOp.__init__  rx   r   c                 &    | j         j        d         S r?   r@   rB   s    r   r9   zMemRefSqueezeOp.input  rC   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zMemRefSqueezeOp.result  rW   r   r{   r^   s   @r   r  r    r  r   r  c                B    t          t          | |||                    S r}   )rb   r  r~   s       r   memref_squeezer    r  r   c                   N     e Zd ZdZdZddd fd
Zej        d             Z xZ	S )PRNGRandomBitsOpztpu.prng_random_bitsr   Nr   c                    g }g }i }d }t          |          }|                    |           d }	t                                          |                     ||||	|||                     d S rg   ri   )r8   rV   r   r   r&   r:   r%   r(   r;   r<   r=   s             r   r6   zPRNGRandomBitsOp.__init__  rl   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zPRNGRandomBitsOp.output  rW   r   )
r   r   r   rX   rY   r6   rZ   r[   rV   r]   r^   s   @r   r  r    rr  r   r  c                @    t          t          | ||                    S )NrV   r   r   )rb   r  r  s      r   prng_random_bitsr    s!    	%&6f#RT&U&U&U	V	VVr   c                   N     e Zd ZdZdZddd fd
Zej        d             Z xZ	S )PRNGSeed32Opztpu.prng_set_seed_32r   Nr   c                    g }g }i }d }|                     t          |                     t          |          }d }	t                                          |                     ||||	|||                     d S rg   r3   r   r,   r5   r6   r7   )r8   seedsr   r   r&   r:   r%   r(   r;   r<   r=   s             r   r6   zPRNGSeed32Op.__init__  s    HGJGOO-e44555/44LO	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S r   r   r   s     r   r  zPRNGSeed32Op.seeds  r   r   )
r   r   r   rX   rY   r6   rZ   r[   r  r]   r^   s   @r   r  r    s~        ).,#'D a a a a a a a E E E E E E Er   r  c                @    t          t          | ||                    S )Nr  r   r   )rb   r  r  s      r   prng_set_seed_32r    s    	%lCB&O&O&O	P	PPr   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	e	j
        d             Z	ej        d	             Z xZS )
PackSubelementsOpztpu.pack_subelementsr   Nr   c                   g }g }i }d }	|                     t          |                     t          |          }
t          |t          j                  st          j                            d          s|n(t	          j                            d          ||
          |d<   |	                    |           d }t                                          |                     |||||	||                     d S )NTPU_PackFormatEnumr   pack_formatrh   r   )r8   rV   r   r  r   r   r&   r:   r%   r(   r;   r<   r=   s               r   r6   zPackSubelementsOp.__init__  s   HGJGOO-g66777/44L{G-.."W$$%9::"W 233KVVV } NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S r   r   r   s     r   r   zPackSubelementsOp.sources  r   r   c                 &    | j         j        d         S )Nr  rF   rB   s    r   r  zPackSubelementsOp.pack_format  s    >$]33r   c                 F    |t          d          || j        j        d<   d S )NrJ   r  rK   rM   s     r   r  zPackSubelementsOp.pack_format
  s+    }MNNN/4DNm,,,r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zPackSubelementsOp.output  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r   r  r\   rV   r]   r^   s   @r   r  r    s        ).,:>4 a a a a a a a E E E 4 4 4 5 5 5
 % % % % % % %r   r  c          	      D    t          t          | ||||                    S )NrV   r   r  r   r   )rb   r  r  s        r   pack_subelementsr    s9    	%&7vwdoux}  'A  'A  'A  
B  
B  Br   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )RegionOpz
tpu.regionr#   TNr   c                    g }g }i }d }t          |          }|                    |           d }	t                                          |                     ||||	|||                     d S rg   )r,   r3   r5   r6   r7   r8   results_r   r   r&   r:   r%   r(   r;   r<   r=   s             r   r6   zRegionOp.__init__  s    HGJG/44LNN8O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S r   r   rA   r:   r   s     r   r  zRegionOp.results_'  :    !$T^%;!<!<q!@1!D>!!A(B$B"BCCr   c                     | j         d         S r?   r(   rB   s    r   regionzRegionOp.region,      <?r   )r   r   r   rX   rY   r6   rZ   r[   r  r$  r]   r^   s   @r   r  r    s        .,&*t a a a a a a a D D D       r   r  c                @    t          t          | ||                    S Nr  r   r   )rb   r  r(  s      r   r$  r$  0  s    	%hcb&Q&Q&Q	R	RRr   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )ReinterpretCastOpztpu.reinterpret_castr   Nr   c                   g }g }i }d }|                     t          |                     t          |          }	|                     |           d }
t                                          |                     ||||
|||                     d S rg   rv   rw   s              r   r6   zReinterpretCastOp.__init__9  rx   r   c                 &    | j         j        d         S r?   r@   rB   s    r   r9   zReinterpretCastOp.inputD  rC   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zReinterpretCastOp.resultH  rW   r   r{   r^   s   @r   r*  r*  3  s        ).,+/D 	a 	a 	a 	a 	a 	a 	a & & & % % % % % % %r   r*  c                B    t          t          | |||                    S r}   )rb   r*  r~   s       r   reinterpret_castr/  L  s$    	%&7vUX[`b&c&c&c	d	ddr   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	e	j
        d             Z	ej        d	             Zej
        d
             Zej        d             Z xZS )RepeatOpz
tpu.repeatr   Nr   c                   g }g }i }	d }
|                     t          |                     t          |          }t          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |	d<   t          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |	d<   |                     |           d }t                      
                    |                     |	||||
||                     d S )Nr   r   r   timesrh   r   )r8   rV   r   r   r3  r   r   r&   r:   r%   r(   r;   r<   r=   s                r   r6   zRepeatOp.__init__U  s}   HGJGOO+F33444/44Ly'+,, J$$Y// Jyy i((LIII {
 ug'((F$$Y//F55 i((EEE w NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   r   zRepeatOp.sourceh  rC   r   c                 &    | j         j        d         S r   rF   rB   s    r   r   zRepeatOp.dimensionl  r   r   c                 F    |t          d          || j        j        d<   d S r   rK   rM   s     r   r   zRepeatOp.dimensionp  r   r   c                 &    | j         j        d         S )Nr3  rF   rB   s    r   r3  zRepeatOp.timesv      >$W--r   c                 F    |t          d          || j        j        d<   d S )NrJ   r3  rK   rM   s     r   r3  zRepeatOp.timesz  +    }MNNN).DNg&&&r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zRepeatOp.output  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r   r   r\   r3  rV   r]   r^   s   @r   r1  r1  O  s       .,>Bt a a a a a a a& & & & 2 2 2 3 3 3
 . . . 	</ / </
 % % % % % % %r   r1  c          
      F    t          t          | |||||                    S )NrV   r   r   r3  r   r   )rb   r1  r=  s         r   repeatr>    s)    	%hfVW`hmsv{}&~&~&~		r   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )RollVectorsOpztpu.roll_vectorsr   Nr   c                   g }g }i }d }|                     t          |                     t          |          }	|                    |           d }
t	                                          |                     ||||
|||                     d S rg   r   r   s              r   r6   zRollVectorsOp.__init__  s    HGJGOO-e44555/44LNN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S r   r   r   s     r   r9   zRollVectorsOp.input  r   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zRollVectorsOp.output  rW   r   r   r^   s   @r   r@  r@    s        %.,+/D 	a 	a 	a 	a 	a 	a 	a E E E % % % % % % %r   r@  c                B    t          t          | |||                    S r   )rb   r@  r   s       r   roll_vectorsrE    r   r   c                       e Zd ZdZdZddddd fd
Zej        d             Zej        d             Z	e	j
        d             Z	ej        d	             Zej
        d
             Zej        d             Zej
        d             Zej        d             Zej        d             Zej
        d             Zej        d             Zej        d             Z xZS )RotateOpz
tpu.rotater   Nr  c          
      z   g }g }	i }
d }|                     t          |                     t          |          }t          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |
d<   t          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |
d<   |gt          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |
d<   |gt          |t          j                  st          j                            d          s|n(t	          j                            d          ||          |
d<   |		                    |d         j
        gdz             d }t                                          |                     |
|||||	                     d S )
Nr  r   r  r   r  r  r   r#   r$   r)   )r8   rN   r  r   r  r  r   r   r&   r:   r%   r(   r;   r<   r=   s                 r   r6   zRotateOp.__init__  s^   HGJGOO+E22333/44Lvw())H$$Z00HFF j))&,GGG x
 y'+,, K$$Z00 Kyy j)))\JJJ { 67,--4L((444L66 

!
!*
-
-fl
K
K
K &h/ ##W%677HV((44HVGWGW 

!
!*
-
-.>
U
U
U &00B%C NNHQK$%)***O	GGT'':]lv}  DG  LN'  O  O  P  P  P  P  Pr   c                 &    | j         j        d         S r?   r@   rB   s    r   rN   zRotateOp.value  rC   r   c                 &    | j         j        d         S )Nr  rF   rB   s    r   r  zRotateOp.amount  s    >$X..r   c                 F    |t          d          || j        j        d<   d S )NrJ   r  rK   rM   s     r   r  zRotateOp.amount  s+    }MNNN*/DNh'''r   c                 &    | j         j        d         S r   rF   rB   s    r   r   zRotateOp.dimension  r   r   c                 F    |t          d          || j        j        d<   d S r   rK   rM   s     r   r   zRotateOp.dimension  r   r   c                 F    d| j         j        vrd S | j         j        d         S r  rF   rB   s    r   r  zRotateOp.stride  r  r   c                 f    ||| j         j        d<   d S d| j         j        v r| j         j        d= d S d S r  rF   rM   s     r   r  zRotateOp.stride  r  r   c                      | j         j        d= d S r  rF   rB   s    r   r  zRotateOp.stride  r  r   c                 F    d| j         j        vrd S | j         j        d         S r!  rF   rB   s    r   r  zRotateOp.stride_dimension  r"  r   c                 f    ||| j         j        d<   d S d| j         j        v r| j         j        d= d S d S r!  rF   rM   s     r   r  zRotateOp.stride_dimension  r$  r   c                      | j         j        d= d S r!  rF   rB   s    r   r  zRotateOp.stride_dimension  r&  r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zRotateOp.result  rW   r   )r   r   r   rX   rY   r6   rZ   r[   rN   r  r\   r   r  r(  r  rk   r]   r^   s   @r   rG  rG    s       .,9=PTZ^cg P P P P P P P6 & & & / / / 
=0 0 =0
 2 2 2 3 3 3
 / / /
 
=. . =. 
>, , >, 9 9 9
 8 8 8 6 6 6 % % % % % % %r   rG  c                H    t          t          | ||||||                    S )NrN   r  r   r  r  r   r   )rb   rG  rV  s          r   rotaterW    sJ    	%hU6U^gm  AQ  WZ  _a  'b  'b  'b  
c  
c  cr   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )SemaphoreReadOpztpu.sem_readr   Nr   c          
          g }g }i }d }|                     t          |                     t          |          }d }	t                                          |                     |||	|||                     d S r   rv   rg  s             r   r6   zSemaphoreReadOp.__init__  s    HGJGOO+I66777/44LO	GGT'':]lv}  DG  LN'  O  O  P  P  P  P  Pr   c                 &    | j         j        d         S r?   r@   rB   s    r   rh  zSemaphoreReadOp.semaphore  rC   r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zSemaphoreReadOp.result  rW   r   )r   r   r   rX   rY   r6   rZ   r[   rh  rk   r]   r^   s   @r   rY  rY    s        !.,'+ P P P P P P P & & & % % % % % % %r   rY  c                @    t          t          | ||                    S rk  )rb   rY  rl  s      r   sem_readr^    s     	%o	sWY&Z&Z&Z	[	[[r   c                        e Zd ZdZg dZdZddddd fd
Zej        d             Z	ej        d             Z
ej        d	             Zej        d
             Z xZS )SemaphoreSignalOpztpu.sem_signal)r#   r#   r   r   r   Nr   r0  r   r   c                   g }g }i }	d }
|                     t          |                     |                     t          |                     |                     |t          |          nd            |                     |t          |          nd            t          |          }d }t                                          |                     |	||||
||                     d S rg   rv   )r8   rh  r  r   r0  r   r   r&   r:   r%   r(   r;   r<   r=   s                r   r6   zSemaphoreSignalOp.__init__)  s   HGJGOO+I66777OO+F33444OO):O+I666UYZZZOO8K+G444QUVVV/44LO	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 h    t          | j        j        | j        j        d         d          }|d         S r5  r7  r9  s     r   rh  zSemaphoreSignalOp.semaphore6  r;  r   c                 h    t          | j        j        | j        j        d         d          }|d         S r=  r7  r9  s     r   r  zSemaphoreSignalOp.amount=  r;  r   c                     t          | j        j        | j        j        d         d          }t	          |          dk    r|d         nd S rA  r>  r9  s     r   r   zSemaphoreSignalOp.device_idD  r?  r   c                     t          | j        j        | j        j        d         d          }t	          |          dk    r|d         nd S rC  r>  r9  s     r   r0  zSemaphoreSignalOp.core_idK  r?  r   )r   r   r   rX   rI  rY   r6   rZ   r[   rh  r  r   r0  r]   r^   s   @r   r`  r`  !  s        #.$**,594TVZ a a a a a a a       @ @ @ @ @ @ @ @ @ @r   r`  ra  c          
      F    t          t          | |||||                    S )Nrh  r  r   r0  r   r   )rb   r`  rh  s         r   
sem_signalri  R  sI    	%&7)TZfo  zA  GJ  OQ  'R  'R  'R  
S  
S  Sr   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )SemaphoreWaitOpztpu.sem_waitr   Nr   c                8   g }g }i }d }|                     t          |                     |                     t          |                     t          |          }	d }
t                                          |                     ||||
|||                     d S rg   rv   )r8   rh  r  r   r   r&   r:   r%   r(   r;   r<   r=   s              r   r6   zSemaphoreWaitOp.__init__[  s    HGJGOO+I66777OO+F33444/44LO	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   rh  zSemaphoreWaitOp.semaphoref  rC   r   c                 &    | j         j        d         S r  r@   rB   s    r   r  zSemaphoreWaitOp.amountj  rC   r   )r   r   r   rX   rY   r6   rZ   r[   rh  r  r]   r^   s   @r   rk  rk  U  s        !.,/3 	a 	a 	a 	a 	a 	a 	a & & & & & & & & & &r   rk  c                B    t          t          | |||                    S )Nrh  r  r   r   )rb   rk  rp  s       r   sem_waitrq  n  s$    	%o	RX^afh&i&i&i	j	jjr   c                   Z    e Zd ZdZg dZdZddddd fd
Zej        d             Z	ej        d             Z
ej        d	             Zej        d
             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Z xZS )StoreOpz	tpu.store)r#   r#   r  r   r   Nmaskr  r   r   c                h   g }	g }
i }d }|	                     t          |                     |	                     t          |                     |	                     t          |                     |	                     |t          |          nd            t          |          }t	          |t
          j                  st
          j                            d          s|n(t          j        	                    d          ||          |d<   |gt	          |t
          j                  st
          j                            d          s|n(t          j        	                    d          ||          |d<   d }t                                          |                     ||
|	||||                     d S r  )r*   r+   r   r,   r-   r.   r/   r0   r1   r2   r5   r6   r7   )r8   valueToStorer  r  r  ru  r  r   r   r&   r:   r%   r(   r;   r<   r=   s                  r   r6   zStoreOp.__init__y  s   HGJGOO+L99:::OO+D11222OO-g66777OOT5E+D1114PPP/44L|W.//#X$$%9::#X,, 233L,WWW ~ !>7#455DS((33DS>> 

!
!)
,
,^\
R
R
R $..>#? O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 h    t          | j        j        | j        j        d         d          }|d         S r5  r7  r9  s     r   rw  zStoreOp.valueToStore  r;  r   c                 h    t          | j        j        | j        j        d         d          }|d         S r=  r7  r9  s     r   r  zStoreOp.base  r;  r   c                 \    t          | j        j        | j        j        d         d          }|S r  r7  r9  s     r   r  zStoreOp.indices  r  r   c                     t          | j        j        | j        j        d         d          }t	          |          dk    r|d         nd S rC  r>  r9  s     r   ru  zStoreOp.mask  r?  r   c                 &    | j         j        d         S r  rF   rB   s    r   r  zStoreOp.sublane_mask  r   r   c                 F    |t          d          || j        j        d<   d S r  rK   rM   s     r   r  zStoreOp.sublane_mask  r   r   c                 F    d| j         j        vrd S | j         j        d         S r  rF   rB   s    r   r  zStoreOp.sublane_stride  r  r   c                 f    ||| j         j        d<   d S d| j         j        v r| j         j        d= d S d S r  rF   rM   s     r   r  zStoreOp.sublane_stride  r  r   c                      | j         j        d= d S r  rF   rB   s    r   r  zStoreOp.sublane_stride  r  r   )r   r   r   rX   rI  rY   r6   rZ   r[   rw  r  r  ru  r  r\   r  r(  r]   r^   s   @r   rs  rs  q  s       .%++,HL]agkpt a a a a a a a*          @ @ @ 5 5 5 6 6 6
 7 7 7
 6 6 6 4 4 4 4 4 4 4r   rs  rt  c                J    t          t          | |||||||                    S )N)rw  r  r  r  ru  r  r   r   )rb   rs  )value_to_storer  r  r  ru  r  r   r   s           r   storer    sV    	%g>PT^e  uA  HL  ]k  qt  y{  '|  '|  '|  
}  
}  }r   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	ej        d             Z
e
j        d	             Z
ej        d
             Z xZS )StridedLoadOpztpu.strided_loadr   Nr   c                0   g }g }i }	d }
|                     t          |                     |                    t          |                     t	          |          }t          |t          j                  st          j        	                    d          s|n(t          j        
                    d          ||          |	d<   |                     |           d }t                                          |                     |	||||
||                     d S NrY  r   stridesrh   r  )r8   rk   r  r  r  r   r   r&   r:   r%   r(   r;   r<   r=   s                r   r6   zStridedLoadOp.__init__  s7   HGJGOO+D11222OO-g66777/44Lw)**R$$%899RWW 1227LQQQ y NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   r  zStridedLoadOp.base  rC   r   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S r  r   r   s     r   r  zStridedLoadOp.indices  r   r   c                 &    | j         j        d         S Nr  rF   rB   s    r   r  zStridedLoadOp.strides  r\  r   c                 F    |t          d          || j        j        d<   d S NrJ   r  rK   rM   s     r   r  zStridedLoadOp.strides  r^  r   c                 &    | j         j        d         S r?   rU   rB   s    r   rk   zStridedLoadOp.result  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r  r  r  r\   rk   r]   r^   s   @r   r  r    s        %.,<@T a a a a a a a  & & & E E E 0 0 0 >1 1 >1
 % % % % % % %r   r  c          
      F    t          t          | |||||                    S )Nrk   r  r  r  r   r   )rb   r  r  s         r   strided_loadr    s2    	%m6V]gntw|~&&&  
A  
A  Ar   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	ej        d             Z
ej        d	             Zej        d
             Z xZS )StridedStoreOpztpu.strided_storer   Nr   c                J   g }g }i }	d }
|                     t          |                     |                     t          |                     |                    t          |                     t	          |          }t          |t          j                  st          j        	                    d          s|n(t          j        
                    d          ||          |	d<   d }t                                          |                     |	||||
||                     d S r  r  )r8   rw  r  r  r  r   r   r&   r:   r%   r(   r;   r<   r=   s                r   r6   zStridedStoreOp.__init__  s@   HGJGOO+L99:::OO+D11222OO-g66777/44Lw)**R$$%899RWW 1227LQQQ y O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   rw  zStridedStoreOp.valueToStore  rC   r   c                 &    | j         j        d         S r  r@   rB   s    r   r  zStridedStoreOp.base  rC   r   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S )NrD  r#   r   r   r   s     r   r  zStridedStoreOp.indices  r   r   c                 &    | j         j        d         S r  rF   rB   s    r   r  zStridedStoreOp.strides  r\  r   c                 F    |t          d          || j        j        d<   d S r  rK   rM   s     r   r  zStridedStoreOp.strides  r^  r   )r   r   r   rX   rY   r6   rZ   r[   rw  r  r  r  r\   r]   r^   s   @r   r  r    s        &.,BF4 a a a a a a a  & & & & & & E E E 0 0 0 >1 1 >1 1 1 1 1r   r  c          
      F    t          t          | |||||                    S )N)rw  r  r  r  r   r   )rb   r  )r  r  r  r  r   r   s         r   strided_storer  %  sD    	%n.W[elv}  DG  LN  'O  'O  'O  
P  
P  Pr   c                        e Zd ZdZdZddd fd
Zej        d             Zej	        d             Zej        d             Z
e
j	        d	             Z
ej        d
             Zej        d             Z xZS )TraceOpz	tpu.tracer  Nr   c                v   g }g }i }d }	t          |          }
t          |t          j                  st          j                            d          s|n(t          j                            d          ||
          |d<   t          |t          j                  st          j                            d          s|n(t          j                            d          ||
          |d<   |                    |           d }t                      	                    | 
                    |||||	||                     d S Nr  r   messager   levelrh   )r,   r-   r.   r/   r0   r1   r2   r3   r5   r6   r7   )r8   r  r  r  r   r   r&   r:   r%   r(   r;   r<   r=   s               r   r6   zTraceOp.__init__.  sb   HGJG/44Lw)**H$$Y//HWW i((,GGG y
 ug'((F$$Y//F55 i((EEE w NN8O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S Nr  rF   rB   s    r   r  zTraceOp.message@  r\  r   c                 F    |t          d          || j        j        d<   d S NrJ   r  rK   rM   s     r   r  zTraceOp.messageD  r^  r   c                 &    | j         j        d         S Nr  rF   rB   s    r   r  zTraceOp.levelJ  r8  r   c                 F    |t          d          || j        j        d<   d S NrJ   r  rK   rM   s     r   r  zTraceOp.levelN  r:  r   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S r   r   r   s     r   r  zTraceOp.results_T  r!  r   c                     | j         d         S r?   r#  rB   s    r   r$  zTraceOp.regionY  r%  r   )r   r   r   rX   rY   r6   rZ   r[   r  r\   r  r  r$  r]   r^   s   @r   r  r  (  s       .,6:t a a a a a a a$ 0 0 0 >1 1 >1
 . . . 	</ / </
 D D D       r   r  c          	      D    t          t          | ||||                    S )Nr  r  r  r   r   )rb   r  r  s        r   tracer  ]  s&    	%gxX]cfkm&n&n&n	o	oor   c                        e Zd ZdZdZddd fd
Zej        d             Zej	        d             Zej        d             Z
e
j	        d	             Z
 xZS )
TraceStartOpztpu.trace_startr   Nr   c                L   g }g }i }d }t          |          }	t          |t          j                  st          j                            d          s|n(t          j                            d          ||	          |d<   t          |t          j                  st          j                            d          s|n(t          j                            d          ||	          |d<   d }
t                                          | 	                    ||||
|||                     d S r  rx  )r8   r  r  r   r   r&   r:   r%   r(   r;   r<   r=   s              r   r6   zTraceStartOp.__init__f  sP   HGJG/44Lw)**H$$Y//HWW i((,GGG y
 ug'((F$$Y//F55 i((EEE w O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r  rF   rB   s    r   r  zTraceStartOp.messagew  r\  r   c                 F    |t          d          || j        j        d<   d S r  rK   rM   s     r   r  zTraceStartOp.message{  r^  r   c                 &    | j         j        d         S r  rF   rB   s    r   r  zTraceStartOp.level  r8  r   c                 F    |t          d          || j        j        d<   d S r  rK   rM   s     r   r  zTraceStartOp.level  r:  r   )r   r   r   rX   rY   r6   rZ   r[   r  r\   r  r]   r^   s   @r   r  r  `  s        $.,,0T a a a a a a a" 0 0 0 >1 1 >1
 . . . 	</ / </ / / / /r   r  c                B    t          t          | |||                    S )Nr  r  r   r   )rb   r  r  s       r   trace_startr    s#    	%l7%UX]_&`&`&`	a	aar   c                   .     e Zd ZdZdZddd fd
Z xZS )TraceStopOpztpu.trace_stopr   Nr   c                    g }g }i }d }t          |          }d }t                                          |                     |||||||                     d S rg   r   r   s
            r   r6   zTraceStopOp.__init__  s    HGJG/44LO	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   )r   r   r   rX   rY   r6   r]   r^   s   @r   r  r    s\        #., T a a a a a a a a a a ar   r  c                 >    t          t          | |                    S r   )rb   r  r   s     r   
trace_stopr    s    	%kcb&A&A&A	B	BBr   c                        e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	e	j
        d             Z	ej        d	             Z xZS )
UnpackSubelementsOpztpu.unpack_subelementsr   Nr   c                   g }g }i }d }	|                     t          |                     t          |          }
t          |t          j                  st          j                            d          s|n(t	          j                            d          ||
          |d<   |                     |           d }t                      
                    |                     |||||	||                     d S )Nr   r   indexrh   r   )r8   rV   r   r  r   r   r&   r:   r%   r(   r;   r<   r=   s               r   r6   zUnpackSubelementsOp.__init__  s   HGJGOO+F33444/44Lug'((F$$Y//F55 i((EEE w NN6O	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   r   zUnpackSubelementsOp.source  rC   r   c                 &    | j         j        d         S )Nr  rF   rB   s    r   r  zUnpackSubelementsOp.index  r8  r   c                 F    |t          d          || j        j        d<   d S )NrJ   r  rK   rM   s     r   r  zUnpackSubelementsOp.index  r:  r   c                 &    | j         j        d         S r?   rU   rB   s    r   rV   zUnpackSubelementsOp.output  rW   r   )r   r   r   rX   rY   r6   rZ   r[   r   r  r\   rV   r]   r^   s   @r   r  r    s        +.,37D a a a a a a a & & & . . . 	</ / </
 % % % % % % %r   r  c          	      D    t          t          | ||||                    S )NrV   r   r  r   r   )rb   r  r  s        r   unpack_subelementsr    s(    	%&9PV^cilqs&t&t&t	u	uur   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )UnrollVectorsOpztpu.unroll_vectorsr   Nr   c                   g }g }i }d }|                     t          |                     t          |          }	|                    |           d }
t	                                          |                     ||||
|||                     d S rg   )r*   r+   r,   r3   r5   r6   r7   r   s              r   r6   zUnrollVectorsOp.__init__  rx   r   c                 &    | j         j        d         S r?   r@   rB   s    r   r9   zUnrollVectorsOp.input  rC   r   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S r   r   r   s     r   rV   zUnrollVectorsOp.output  r!  r   r   r^   s   @r   r  r    s        '.,+/D 	a 	a 	a 	a 	a 	a 	a & & & D D D D D D Dr   r  c                B    t          t          | |||                    S r   )rb   r  r   s       r   unroll_vectorsr    r  r   c                   n     e Zd ZdZdZddd fd
Zej        d             Zej        d             Z	 xZ
S )	WaitDMAOpztpu.wait_dmar   Nr   c                8   g }g }i }d }|                     t          |                     |                     t          |                     t          |          }	d }
t                                          |                     ||||
|||                     d S rg   rv   )r8   rh  refr   r   r&   r:   r%   r(   r;   r<   r=   s              r   r6   zWaitDMAOp.__init__  s    HGJGOO+I66777OO+C00111/44LO	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 &    | j         j        d         S r?   r@   rB   s    r   rh  zWaitDMAOp.semaphore  rC   r   c                 &    | j         j        d         S r  r@   rB   s    r   r  zWaitDMAOp.ref  rC   r   )r   r   r   rX   rY   r6   rZ   r[   rh  r  r]   r^   s   @r   r  r    s        !.,,0T 	a 	a 	a 	a 	a 	a 	a & & & & & & & & & &r   r  c                B    t          t          | |||                    S )Nrh  r  r   r   )rb   r  r  s       r   wait_dmar     s#    	%i)RUZ\&]&]&]	^	^^r   c                   N     e Zd ZdZdZddd fd
Zej        d             Z xZ	S )YieldOpz	tpu.yieldr   Nr   c                    g }g }i }d }|                     t          |                     t          |          }d }	t                                          |                     ||||	|||                     d S rg   r  r  s             r   r6   zYieldOp.__init__	  s    HGJGOO-h77888/44LO	GGT'':wYan}  HO  UX  ]_'  `  `  a  a  a  a  ar   c                 n    t          | j        j                  dz
  dz   }| j        j        dd|z            S r   r   r   s     r   r  zYieldOp.results_  r   r   )
r   r   r   rX   rY   r6   rZ   r[   r  r]   r^   s   @r   r  r    s~        .,&*t a a a a a a a E E E E E E Er   r  c                @    t          t          | ||                    S r'  )rb   r  r(  s      r   yield_r    s    	%gxSR&P&P&P	Q	QQr   ) jaxlib.mlir.dialects._ods_commonr   	_ods_cextr   r   r   r,   r   rb   r   r+   r   r   r	   r8  irr.   rZ   typingr
   	_Sequencer   _Unionregister_dialectDialectr   register_operationOpViewr   Valuerc   re   rr   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	Operationr   r   r   r   r  r  r+  r-  rL  rN  rU  rW  rc  re  rm  ro  rt  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/  r1  r>  r@  rE  rG  rW  rY  r^  r`  ri  rk  rq  rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s@   @ ? ? ? ? ?                ,  9 9 9 9 9 9 9 9     w    h''2% 2% 2% 2% 2%'. 2% 2% ('2%h )- d d d'- d d d d h''% % % % % % % ('%& "d X X Xw} X X X X h''% % % % %W^ % % ('%0 )- b b b'- b b b b h''$% $% $% $% $%w~ $% $% ('$%L -1T h h hgm h h h h h''% % % % % % % ('%0 #'4 ] ] ]GM ] ] ] ] h''% % % % %GN % % ('%0 (, a a a a a a a h''$% $% $% $% $%GN $% $% ('$%L 8< v v v v v v v h''%% %% %% %% %%GN %% %% ('%%N 48D z z zW] z z z z h''% % % % %7> % % ('%> +/4 g g gGM g g g g h'';% ;% ;% ;% ;%W^ ;% ;% (';%z DHD L L LU\Ub L L L L h''& & & & &gn & & ('&&  L L L'*; L L L L h''% % % % % % % ('%$ d B B Bw} B B B B h'')% )% )% )% )%gn )% )% (')%V ?Ct K K KPWP] K K K K h''S% S% S% S% S%gn S% S% ('S%j @DVZ`dim y y yryr y y y y h''>@ >@ >@ >@ >@7> >@ >@ ('>@@ GKVZdhnrw{ N N N  AH  AR N N N N h''% % % % %GN % % ('%0 15 e e e'- e e e e h''2% 2% 2% 2% 2%w~ 2% 2% ('2%h 7;t D D D D D D D h''% % % % %GN % % ('%& #'4 b b bGM b b b b h''% % % % %7> % % ('%& %)T [ [ [gm [ [ [ [ h''% % % % %'. % % ('%@ !% T T T'- T T T T h''&% &% &% &% &%W^ &% &% ('&%P # b b b'- b b b b h''?% ?% ?% ?% ?%W^ ?% ?% ('?%B AE$SW c c c\c\i c c c c h''.3 .3 .3 .3 .3GN .3 .3 ('.3` #'DT j j jg>O j j j j h''% % % % % % % ('%0 %)T ^ ^ ^gm ^ ^ ^ ^ h''Q% Q% Q% Q% Q%w~ Q% Q% ('Q%f 48tW[aejn y y ysz  tA y y y y h''% % % % %gn % % ('%0 *.$ c c c7= c c c c h''+% +% +% +% +%GN +% +% ('+%Z CG4 U U UT[Ta U U U U h''% % % % %gn % % ('%0 *.$ c c c7= c c c c h''% % % % %w~ % % ('%& %)T W W Wgm W W W W h''E E E E E7> E E ('E( $(D Q Q QW5F Q Q Q Q h''%% %% %% %% %% %% %% ('%%N ;?4 B B BGM B B B B h''    w~   ('0 !T S S Sgm S S S S h''% % % % % % % ('%0 ,0D e e eW] e e e e h''2% 2% 2% 2% 2%w~ 2% 2% ('2%h 59T @ @ @gm @ @ @ @ h''% % % % %GN % % ('%2 (, a a a a a a a h''\% \% \% \% \%w~ \% \% ('\%| 04dPTY] c c cbibo c c c c h''% % % % %gn % % ('%.  $ \ \ \ \ \ \ \ h''.@ .@ .@ .@ .@ .@ .@ ('.@` 04TtPT S S SY`Yj S S S S h''& & & & &gn & & ('&0 (, k k k9J k k k k h''Q4 Q4 Q4 Q4 Q4gn Q4 Q4 ('Q4f @DTX^bgk } } }pw  qB } } } } h''*% *% *% *% *%GN *% *% ('*%X 9= A A A'- A A A A h''*1 *1 *1 *1 *1W^ *1 *1 ('*1X BF$ P P PSZSd P P P P h''2 2 2 2 2gn 2 2 ('2h ,0D p p pW] p p p p h''(/ (/ (/ (/ (/7> (/ (/ ('(/T (, b b b9J b b b b h''a a a a a'. a a ('a t C C C(9 C C C C h''$% $% $% $% $%'. $% $% ('$%L 6:d v v vw} v v v v h''D D D D Dgn D D ('D2 *.$ c c c7= c c c c h''& & & & & & & ('&0 %)T _ _ _g6G _ _ _ _ h''E E E E Egn E E ('E( !T R R Rg.? R R R R R Rr   