
    VpfBP                   c   U d dl mZ d dlZd dlmZmZ d dlZd dlZd dlmZ d dl	Z	d dl
Z
d dlZd dlmZmZmZmZmZmZmZ d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d d	lmZ d d
lm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dlm$Z$ d dlm%Z% d dlm&Z& d dlm'Z' d dlm(Z) d dlm*Z+ d dlm,Z, d dlm-Z- d dlm.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl9m;Z; d dl9m<Z< d dl9m=Z> d dl9m?Z? d dl9m@Z@ d dlAmBZB d d lCmDZD d d!lEmFZFmGZGmHZHmIZImJZJ d d"lmKZK d d#lLmMZM d d$lNmOZO d d%lPmQZQ d d&lPmRZR d d'lSmTZT d d(lUmVZVmWZWmXZXmYZYmZZZm[Z[ d d)l\m]Z]m^Z^m_Z_m`Z`maZambZb eKZceMZdeMje        ZfeMjg        Zheji        Zjejk        Zlejm        Zn ed*          Zoe_epcZpZqe^ercZrZsdd/Ztdd2Zudd5Zvdd9Zwedd;            Zxedd=            Zxd> Zx e]            dd?            Zyd@ ZzdA Z{dB Z|ddFZ}ddLZ~dM ZddNZddOZddRZddSZddTZ G dU dVej                  Zej        fddXZddYZddZZdd[Zdd\Zdd]Zdd^Zdd_Zdd`ZddaZddbZdddZddeZddfZddgZddhZddiZddjZddkZddlZddmZddnZddoZddpZddqZddrZddsZddtZdduZddvZddwZddxZddyZddzZidd{Zkdd|Zdd}Zdd~ZddZddZddZddZddZddZddZ	 	 	 dddZddZddZd dZi Zded<   er G d d          Zn G d dej                  Zej        ed<   ej        ed<   ej        ed<   ej        ed<   ej        ed<   ej        ed<   ej        ed<   ej        ed<   ej        ed<   eeeeeef         eeef         df         Z	 	 d!d"dZeeee         ee         f         eee         ee         f         f         Z	 	 d!d#dZ	 	 	 d$d%dZŐd&dZƐd'dZǐd(dZ	 d)d*dZɐd+dÄZʐd,dĄZːd-dȄZ̐d.d˄Z͐d/d΄Zΐd0dфZϐd0d҄ZАd1dׄZm e]            d؄             Z e]            dل             ZҐd2d߄ZӐd3dZԐd3dZՐd3dZ֐d3dZאd3dZؐd3dZِd4dZڐd4dZېd4dZܐd4dZݐd4dZސd4dZߐd4dZe	 	 d5d6d            Ze	 	 d5d7d            Z	 	 d5d8dZ	 	 d9d:dZd;d Zd<dZd)ddd=dZd>dZeej        e4<   d?d
Zeej        e-j        <   d@dZdAdZdBdZdCdZdBdZdDdZdEdZdFdZdFdZ	 	 d$dGdZ	 d)dHd Z	 d)dId!Zdd"Zdd#Zd$ Zdd%Zdd&Zdd'Zdd(Zdd)Zdd*Zdd+Zdd,Z dd-Z e$j        eƦ          e4_         e$j        eΦ          e4_         e$j        eɦ          e4_        d. Z ee          e4_         ee          e$j        _        dd/Zd0 Z e	j        e&j	        
                                e0e"j        g          D ]Zeej        e<   d1 Zd2 Zd3 Zd4 Zd5 Z eee|          Zd6 Zddd7d8Zd9 Z	 	 dJd:Z eeeF          Zd; Zd< ZdKdCZddDdLdGZej        hZej        hZ ej!        ej"        hZ#ej$        hZ%ej&        hZ'ej(        hZ)e%ez  e z  Z*e%ez  e z  e'z  Z+e%e'z  Z,e%ez  e'z  Z- ee*dH          Z. e:j/        e.dI             e<j0        e. eeeRj1                              ee*dJ          Z2 e:j3        e2           dK Z4 e<j0        e2e4            eeegdL          Z5 e<j0        e5 eeeQj6                              eedM          Z7 e:j3        e7            e<j0        e7 eeeRj                              eedN          Z8 e:j3        e8            e<j0        e8 eeeRj                              eedO          Z9 e:j3        e9           dP Z: e<j0        e9e:            e eej&                  edQ          Z; e:j3        e;            e<j0        e; eeeRj                              eee z  dR          Z< e:j=        e<dS             e<j0        e< eeeRj>                              eee z  dT          Z? e:j=        e?dU            dV Z@ e<j0        e?e@            eee z  dW          ZA e:jB        eAdX             e<j0        eA eeeRj                              eee z  dY          ZC e:j=        eCdZ             e<j0        eC eeeRjD                              eee z  d[          ZE e:jB        eEd\             e<j0        eE eeeRjF                              eee z  d]          ZG e:j=        eGd^             e<j0        eG eeeRj                              eee z  d_          ZH e:j=        eHd`            da ZI e<j0        eH e<jJ        eIdb                     dc ZKdd ZL eee z  de          ZM e:jB        eMdf             e<j0        eMeL           dg ZNdh ZO eee z  di          ZP e:jB        ePdj             e<j0        ePeO           edk             ZQ eee z  dl          ZR e:j=        eRdm             e<j0        eR eeeQj                             dn ZS eee z  do          ZT e:jB        eTdp             e<j0        eT eeeQj                             dq ZU eee z  dr          ZV e:jB        eVds             e<j0        eV e<jJ        eUdb                     dt ZW eee z  du          ZX e:jB        eXdv             e<j0        eX eeeQj                              eee z  ee z  gdw          ZY e:jB        eYdx dy             e<j0        eY eeeRj                              eee z  dz          ZZ e:jB        eZd{             e<j0        eZ eeeQj                              eee z  d|          Z[ e:jB        e[d}             e<j0        e[ eeeQj                              eee z  d~          Z\ e:jB        e\d             e<j0        e\ eeeQj                              eee z  d          Z] e:jB        e]d             e<j0        e] eeeQj                               eee z  d          Z^ e:jB        e^d             e<j0        e^ eeeQj                              eee d          Z_ e:j/        e_d             e<j0        e_ eeeRj                              eee d          Z` e:j/        e`d             e<j0        e` eeeRj                             d Zad Zb eebe#e#gd          Zc e:j/        ecea            e<j0        ec eeeRj                              eebe#e z  d          Zdd Ze e<j0        ed e<jJ        eedb                     d Zf ee:jg        ed          e:jh        ed<   efe:ji        ed<    eee)ez  e z  d          Zj e<j0        ej eeeRj                             d Zk e:j=        ejek           d Zld Zm eee z  d          Zn e:j=        end             e<j0        en eeeRj                              eee z  d          Zo e:j=        eod             e<j0        eo eeeRj                              eed          Zp e:j=        epd             e<j0        ep eeeRj                             d Zq eeqee z  e%ez  e z  gdd          Zrd Zsd Zt e:j=        ereset           d Zu e<j0        ereu           d Zvd Zw eJ edC          evd          Zx e;jy        ex            e:jB        exew            e>jz        ex           d Z{d Z| e<j0        exe|           d Z} ee,d          Z~ e:j3        e~            e<j0        e~ eeeRj                              ee,e,gd          Z e:j3        e            e<j0        e eeeRj                              ee,e,gd          Z e:j3        e            e<j0        e eeeRj                              ee,e,gd          Z e:j3        e            e<j0        e eeeRj                              ee%d          Z e<j0        e eeeRj                              ee%d          Z e<j0        e eeeRj                             d Zd Zd Z ee*e*gd          Zded<   ee:jh        e<   ee:ji        e<    e<j0        e eeeRj                             d Zd Z ee*e*gd          Zee:jh        e<   ee:ji        e<    e<j0        e eeeRj                             d Zd Z ee*e*gd          Z e:jB        ed d            ee:ji        e<    e<j0        e eeeRj                             d Z ee*e*gd          Z e:jB        ed d            ee:ji        e<    e<j0        e eeeRj                              ee%ez  e%ez  gd          Z e:jB        ed d             e<j0        e eeeRj                             d Z ee+e+gd          Zded<    e:j=        ed dÄ             e<j0        e eee<j                              ee+e+gd          Zded<    e:j=        edń dƄ             e<j0        e eee<j                              ee%e%gdǦ          Z e:j3        e            e<j0        e eeeRj                              ee%e%gdȦ          Z e:j3        e            e<j0        e eeeRj                              ee%e%gdɦ          Z e:j3        e            e<j0        e eeeRj                             dʄ Z eedeRj        eԦ          Z eedeRj        eզ          ZdMdτZdNdфZ e eej&                  e+e+gddӦ          Z e:j3        e            e<j0        e eedd                      e eej&                  e+e+gddӦ          Z e:j3        e            e<j0        e eedd                      e eej&                  e-e-gdզ          Z e:j3        e            e<j0        e eedd                      e eej&                  e-e-gdצ          Z e:j3        e            e<j0        e eedd                      e eej&                  e-e-gd٦          Z e:j3        e            e<j0        e eedd                      e eej&                  e-e-gdۦ          Z e:j3        e            e<j0        e eedd                      e eej&                  e+e+gdݦ          Z e:j3        e            e<j0        e eedd                      e eej&                  e-e-gdަ          Z e:j3        e            e<j0        e eedd                      e eej&                  e-e-gdߦ          Z e:j3        e            e<j0        e eedd                     d Zd Zd Zd Zd Zd Zd Zd Z e2d          Zd Ze                    e           e                     ee%j        e                     e                     eeHeeee                      e:jB        ee           ee:ji        e<    e;jy        e           ee>j        e<   ee>j        e<    e>jz        e           ee$j        e<   d ZĐd Z e<j0        eeŦ           d ZƐd Z eJeƐeǐde          Z e:j3        eȦ            e;jy        eȦ           d Z e<j0        eȐeɦ           d ZʐdOdZːd Z̐d Z͐dOdZΐd Zϐd ZdddOdZѐdOdZҐdOdZӐd ZԐd ZՐdPdZ eJeːeΐd           Z e:j        eאeѐeҦ           ee;j        e<   ee>j        e<   ee$j        e<   dQdZdddRdZ e<j0        eאeܦ           dD ](Z e<j0        e eeܐeݐ          eݐ           )dSdZސd	d gdd gfg g ffZded
<   dTdZd Zd Z eJeސed          Ze                     ee%j        e                     ee:jh        e<   ee:ji        e<   	 	 	 d$d%dZ e<j0        e e<jJ        edb                     d Zd Zd Zd Zd Zd Zd Zd Zd ZdUdZd Zd Z eJeeFd          Ze                    e           ee:jh        e<   ee:ji        e<   ee;j        e<   ee>j        e<   ee>j        e<   ee>j        e<   ee>j        e<   ee$j        e<    e<j0        ee           d Z eeeFe+e+e+gd          Zd  Z eJeed          Z e:jB        ed! d" d#            ee;j        e<    e<j0        e eeeRj                              e>jz        e           d$ Zd% Zd& Zd' Zd( Z eJeed)          Z e:j/        ee           ee:ji        e<   ee;j        e<   ee>j        e<   d* Z e<j0        ee           d+ Z d, Zd- Zd. Z eJee d/          Z e:j/        ee           ee;j        e<   d0 Z e<j0        ee           d1 Zd2 Zd3 Zd4 Z	d5 Z
 eJeed6          Z e:j/        ee	           e
e;j        e<    e>jz        e           d7 Z e<j0        ee           dVd9Zd: Zd; Zd< Zd= Zd> Zd? Zd@ Z eJeedA          Z e:j/        ee           ee;j        e<    e<j0        ee           ee$j        e<   ee>j        e<   dB ZdC Z eJeeFdD          Z e:j/        edE            ee;j        e<   dF Z e<j0        ee           dG ZdH ZdI Z eJeeFdJ          Z e:j/        edK            ee;j        e<    e<j0        ee            e>jz        e           dL ZdM ZdN Z dO Z!dP Z"dQ Z#dR Z$dS Z% eJeedTe           Z&e#e:jh        e&<   e!e:ji        e&<   e"e;j        e&<    e<j0        e&e%            e>jz        e&           dU Z'dV Z(dW Z)dX Z*dY Z+dZ Z, e$j2        d[          Z-de-_.        e-                     ee%j        e-                     e-                     eeIe-e'e(e)                     e*e;j        e-<   e,e:jh        e-<   d\ Z/ e<j0        e-e/           d] Z0d^ Z1d_ Z2d` Z3da Z4 eJe1 ee0db          db          Z5 e:j/        e5e2            e;j6        e5e֦            ee3ee֦          e>j        e5<   ddcddZ7de Z8 eJe7 ee0df          df          Z9e8e:jh        e9<    e;j6        e9eצ            ee3eeצ          e>j        e9<   dg Z:dh Z; eJe7eFdi          Z< e:j=        e<e;            e;j6        e<eئ            ee3eeئ          e>j        e<<    eJe7eFdj          Z= e:j=        e=e;            e;j6        e=e٦            ee3ee٦          e>j        e=<   dk Z>dl Z? G dm dn          Z@do ZA eJe>e?dpe          ZB e;j6        eBe٦            e:j3        eB            eJe>e?dqe          ZC e;j6        eCeئ            e:j3        eC            e<j0        eB e<jD         e<jJ         eeAee٦          db                                e<j0        eC e<jD         e<jJ         eeAeeئ          db                               dr ZE eJeEeFdse          ZF e;j6        eFeզ            eJeEeFdte          ZG e;j6        eGeԦ            eJeEeFdue          ZH e;j6        eHeզ           dv ZI e<j0        e5 eeIeRjJ        e֦                      e<j0        e9 eeIeRjK        eצ                      e<j0        eF eeIeRj        eզ                      e<j0        eG eeIeRj        eԦ                      e<j0        eH eeIeRjL        eզ                      e<j0        e= eeIe<j        e٦                      e<j0        e< eeIe<j        eئ                     dw ZM eJeM eee|edx          dxy          ZN e:jO        eNdz             e;jy        eN           d{ ZP e<j0        eNeP            ejQ        ejR                   ejQ        ejS                   ejQ        ejT                  d|ZU ejQ        ejV                   ejQ        ejW                   ejQ        ejX                  d|ZYd} ZZd~ Z[dddZ\dddZ]dddZ^d Z_d Z` e2d          Zadea_.        ea                     ee%j        ea                     ea                    eZ           e_e:jh        ea<   e`e;j        ea<   d Zb e<j0        eaeb           d Zcd Zdd Ze e2d          Zfdef_.        ef                     ee%j        ef                     ef                    ec           d Zg e<j0        efeg           ede:jh        ef<   eee;j        ef<   d Zhd Ziehe:jh        ejj        <   eie;j        ejj        <    e>jz        ejj                   d)dZk e2d          Zlel                     ee%j        el                     el                    d            d Zm e<j0        elem           d Znd Zo e2d          Zpep                     ee%j        ep                     ep                    eo           d Zq e<j0        epeq            G d de'jr                  Zs es            Zt es            Zud!dZvd Zw e2d          Zxdex_.        ex                     ee%j        ex                     exy                    ew           e<jz        {                    es           d Z| e<j0        exe|           d)dZ}d Z~ e2d          Ze                     ee%j        e                     ey                    e~           e<jz        {                    es           d Z e<j0        ee           d Zd Z e2d          Ze                     ee%j        e                     e                    e           d Z e<j0        ee           d Zd Zd Zefj        Zd e_        dWdZd Z e2d          Zde_.        e                     ee%j        e                     e                     eeIeeee                      e<j0        ee           dXdZdYdZd Zd Zd Z e$j2        d          Ze                     eee                     e                    d             e<j0        ed             e:jO        ed             e>jz        e            e;jy        e           d Zee?j        e<   ejS        ej        fdZd Z e2d          Ze                     ee%j        e                     e                    e           d Zee>j        e<   d Zee$j        e<   d Z e<j0        ee           d Zee;j        e<   d Zd Zee>j        e<   ej        ZdÄ ZdĄ Z G dń dej                  ZdǄ Zi ddȓdrdɓddʓdddod˓d~d̓dud͓dwdΓddϓdАdГdѐdѓdҐdғdӐdӓdddNdNd)d)didii d|d|ddԓdҐdՓdRdRdYdYdMdMd֐d֓dאdדdؐdؓdِdٓdWdWdڐdړdېdۓdܐdܓdݐdݓd[d[ddޓi ddߓdddԐddHddLdLdddOdOdddǐddɐddȐddJdJdededzdzdddddldld]d]iZdZdZd[dZd Z eed           Zded<    eedd           Zded<    eed          Zded<    eedd          Zded<    eed	          Zded<    eedd	          Zded<    ee&jQ        d          ZQded<    ee&jQ        d          Zded<   ddZd\dZd Zd Zd]dZd  Zd Zd Zd Z e$j2        d          Ze                    d            d Z e<j0        ee            e$j2        d          Ze                    d            e                    d	             e<j0        ed
            d e:jh        e<   d e:ji        e<    e>jz        e            e;jy        e            G d d          Zee$j        _        dS (^      )annotationsN)CallableSequence)partial)AnyClassVarTypeVarUnioncastoverloadTYPE_CHECKING)	tree_util)Shardingtree_map)ad_util)api)api_util)array)config)core)dispatch)dtypes)effects)linear_util)pretty_printer)source_info_util)state)util)array_types)	PrimitiveUnshapedArrayShapedArrayConcreteArrayraise_to_shapedabstract_tokencanonicalize_shape)ad)batching)mlir)partial_eval)pxla)xla)
RaggedAxis)slicing)_input_dtypedtype_to_stringstandard_abstract_eval#standard_multi_result_abstract_evalstandard_primitive)
xla_bridge)
xla_client)ir)chlo)hlo)PmapSharding)Array	ArrayLikeDimSizeDuckTypedArray	DTypeLikeShape)cachesafe_zipsafe_mapcanonicalize_axis
split_listNumpyComplexWarningTvalr=   returnintc                    t          j        |          }t          j        |j        t          j        | |j                            S N)npiinfor   max_dimminmin_dimmax)rH   dtypeinfos      P/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/_src/lax/lax.py_clip_int_to_valid_rangerV   W   s1    	%$	dhS$( ; ;	<	<<    shapesSequence[Shape]c                \    dd}| sJ t           j        j        rd S t          ||            d S )Nshaper@   c                    t          |           }t          d |D                       sd| d}t          |          d S )Nc              3  "   K   | ]
}|d k    V  dS r   N ).0idxs     rU   	<genexpr>z@_validate_shapes.<locals>._check_static_shape.<locals>.<genexpr>^   s&      ++Csax++++++rW   zUOnly non-negative indices are allowed when broadcasting static shapes, but got shape .)r'   all	TypeError)r[   checkedmsgs      rU   _check_static_shapez-_validate_shapes.<locals>._check_static_shape\   s]     ''G++7+++++ 8-28 8 8ccNN rW   )r[   r@   )r   dynamic_shapesvaluemap)rX   rh   s     rU   _validate_shapesrl   [   sK        
---  %
FV$$$$$rW   Sequence[tuple[int, ...]]tuple[int, ...] | Nonec                0   t          |           dk    r| d         S d | D             }t          |          dk    rd S |                                }|sdS g }t          |  D ]t          fddd          D                       r|                    d                    Ad D             s|                    d           et          fddd          D                       r|                    d                     d S t          |          S )N   r   c                ,    h | ]}t          |          S r_   lenr`   r[   s     rU   	<setcomp>z(_try_broadcast_shapes.<locals>.<setcomp>m   s    
*
*
*%3u::
*
*
*rW   r_   c              3  N   K   | ]}t          j        |d                    V   dS r^   r   same_referentr`   ddss     rU   rb   z(_try_broadcast_shapes.<locals>.<genexpr>s   4      
8
8A4aA''
8
8
8
8
8
8rW   c                <    g | ]}t          j        |d           |S rp   r   definitely_equalr`   rz   s     rU   
<listcomp>z)_try_broadcast_shapes.<locals>.<listcomp>x   *    AAAaT%:1a%@%@AAAArW   c              3  N   K   | ]}t          j        d          |          V   dS r^   r   r`   rz   non_1ss     rU   rb   z(_try_broadcast_shapes.<locals>.<genexpr>{   4      GGqt$VAY22GGGGGGrW   )rs   pop
unsafe_ziprd   appendtuple)rX   ranksrankresult_shaper{   r   s       @@rU   _try_broadcast_shapesr   j   sN   [[AfQi'
*
*6
*
*
*%ZZ!^^DD	$	bb,  b

8
8
8
8ABB
8
8
888 "Q%     BA2AAAf AGGGGF122JGGGGG F1I&&&&tt	|		rW   xr<   r;   c           	     B   t          | t                    r| S t          | t          j        t          j        t
          t          t          t          j	        f          r#t          | t          j        |                     S t          d|  dt          |            d          )z:Lightweight conversion of ArrayLike input to Array output.	weak_typez!asarray: expected ArrayLike, got z	 of type rc   )
isinstancer;   rM   ndarraygenericboolrJ   floatbuiltinscomplex_convert_element_typer   is_weakly_typedre   typer   s    rU   asarrayr      s    5 HBJ
D#uh>NOPP P f.DQ.G.GHHHH
NNNDGGNNN
O
OOrW   tuple[int, ...]c                     d S rL   r_   rX   s    rU   broadcast_shapesr      s    CF3rW   tuple[int | core.Tracer, ...]c                     d S rL   r_   r   s    rU   r   r      s    9<rW   c                 6    	 t          |  S #  t          |  cY S xY w)zCReturns the shape that results from NumPy broadcasting of `shapes`.)_broadcast_shapes_cached_broadcast_shapes_uncachedr   s    rU   r   r      s,    /#V,,/%v....s    c                     t          |  S rL   )r   r   s    rU   r   r      s    	#V	,,rW   c                 0   t          |            | ^}}|s|S t          t          ||          S # t          $ r Y nw xY wt	          d | D                       fd| D             }t          |          }|t          dt          |                      |S )Nc              3  4   K   | ]}t          |          V  d S rL   rr   rt   s     rU   rb   z-_broadcast_shapes_uncached.<locals>.<genexpr>   s(      --Uc%jj------rW   c                @    g | ]}d t          |          z
  z  |z   S )r~   rr   )r`   r[   ndims     rU   r   z._broadcast_shapes_uncached.<locals>.<listcomp>   s.    GGGus5zz)*U2GGGrW   z-Incompatible shapes for broadcasting: shapes=)rl   _reduce_broadcast_ranks
ValueError_maxr   list)rX   fstrst
shape_listr   r   s        @rU   r   r      s    6)#	Sj &S111	TT 
--f---	-	-$GGGGGGG*&z22,
ST&\\SS
T
TT	s   / 
<<c                   t          |           t          |          k    r|| }} t          |           t          |          k    sJ |t          |          t          |           z
  d          }t          j        ||           r|S t          rL   )rs   r   definitely_equal_shaper   )s1s2s1_s      rU   r   r      s    WWs2wwB	RCGG				
3r77SWW#	 b)) "9rW   c                    | S rL   r_   r   s    rU   	_identityr      s    (rW   r[   Sequence[int | core.Tracer]*tuple[list[core.Tracer], list[int | None]]c                ~    t           j        j        rd | D             }d | D             }||fS g t          |           fS )Nc                F    g | ]}t          |t          j                  |S r_   r   r   Tracerr   s     rU   r   z._extract_tracers_dyn_shape.<locals>.<listcomp>   s)    @@@qZ4;%?%?@@@@rW   c                J    g | ] }t          |t          j                  rd n|!S rL   r   r   s     rU   r   z._extract_tracers_dyn_shape.<locals>.<listcomp>   s-    MMM!Jq$+66=DDAMMMrW   )r   ri   rj   r   )r[   	dyn_shapestatic_shapes      rU   _extract_tracers_dyn_shaper      sV        A@E@@@IMMuMMMLl""tE{{?rW   r   Sequence[int | None]r   Sequence[Any]*tuple[int | mlir.Value | core.Tracer, ...]c                    t          |          t          fd| D                       }t          d           J |S )Nc              3  >   K   | ]}|t                    n|V  d S rL   next)r`   rz   dyn_shape_its     rU   rb   z#_merge_dyn_shape.<locals>.<genexpr>   s4      MM1ai\"""QMMMMMMrW   )iterr   r   )r   r   r[   r   s      @rU   _merge_dyn_shaper      sM    
 i,
MMMMMMM
M
M%	lD	!	!	)	)	)	,rW   c                    t          j                    }t          j         ||          }t          j         fd|D                                  |          g||t          j        |          } j        	                    |           |S )Nc                :    g | ]}                     |          S r_   )getvar)r`   r   traces     rU   r   z+_dyn_shape_staging_rule.<locals>.<listcomp>   s#    888a%,,q//888rW   )
r   currentpeDynamicJaxprTracernew_jaxpr_eqnmakevarr   
no_effectsframeadd_eqn)r   primout_avalargsparamssource_info
out_tracereqns   `       rU   _dyn_shape_staging_ruler      s     (**+$UHkBB*
88884888--
334vt	E 	E# +c	rW   c                6    t                               |           S )z!Elementwise negation: :math:`-x`.)neg_pbindr   s    rU   negr          	ArW   c                6    t                               |           S )a  Elementwise sign.

  For floating-point inputs, returns
  :math:`\mathrm{sign}(x) = \begin{cases}
  -1 & x < 0\\
  -0 & x = -0\\
  \mathit{NaN} & x = \mathit{NaN}\\
  +0 & x = +0\\
  1 & x > 0
  \end{cases}`

  For signed integer inputs, returns
  :math:`\mathrm{sign}(x) = \begin{cases}
  -1 & x < 0\\
  0 & x = 0\\
  1 & x > 0
  \end{cases}`

  For complex inputs, returns the complex phase, i.e.
  :math:`\mathrm{sign}(x) = \frac{x}{|x|}`.
  )sign_pr   r   s    rU   signr      s    , 
QrW   x1x2c                8    t                               | |          S )aT  Returns the next representable value after `x1` in the direction of `x2`.

  Note that in some environments flush-denormal-to-zero semantics is used.
  This means that, around zero, this function returns strictly non-zero
  values which appear as zero in any operations. Consider this example::

    >>> jnp.nextafter(0, 1)  # denormal numbers are representable
    Array(1.e-45, dtype=float32, weak_type=True)
    >>> jnp.nextafter(0, 1) * 1  # but are flushed to zero
    Array(0., dtype=float32, weak_type=True)

  For the smallest usable (i.e. normal) float, use ``tiny`` of ``jnp.finfo``.
  )nextafter_pr   r   r   s     rU   	nextafterr      s     
		"b	!	!!rW   c                6    t                               |           S )z8Elementwise floor: :math:`\left\lfloor x \right\rfloor`.)floor_pr   r   s    rU   floorr         	arW   c                6    t                               |           S )z8Elementwise ceiling: :math:`\left\lceil x \right\rceil`.)ceil_pr   r   s    rU   ceilr         	QrW   c                      e Zd ZdZdZdS )RoundingMethodr   rp   N)__name__
__module____qualname__AWAY_FROM_ZEROTO_NEAREST_EVENr_   rW   rU   r   r     s        .///rW   r   rounding_methodc                X    t          |          }t                              | |          S )aO  Elementwise round.

  Rounds values to the nearest integer.

  Args:
    x: an array or scalar value to round.
    rounding_method: the method to use when rounding halfway values
      (e.g., `0.5`). See ``lax.RoundingMethod`` for the list of possible
      values.

  Returns:
    An array containing the elementwise rounding of x.
  )r  )r   round_pr   )r   r  s     rU   roundr    s'      #?33/	a	9	99rW   c                6    t                               |           S )zElementwise :math:`\mathrm{isfinite}`.

  For each element x returns `True` if and only if x is not :math:`\pm\infty` or
  :math:`\mathit{NaN}`.
  )is_finite_pr   r   s    rU   	is_finiter  &  s     
		!		rW   c                6    t                               |           S )z%Elementwise exponential: :math:`e^x`.)exp_pr   r   s    rU   expr  .  r   rW   c                6    t                               |           S )z,Elementwise base-2 exponential: :math:`2^x`.)exp2_pr   r   s    rU   exp2r  2  r   rW   c                6    t                               |           S )zElementwise :math:`e^{x} - 1`.)expm1_pr   r   s    rU   expm1r  6  r   rW   c                6    t                               |           S )z7Elementwise natural logarithm: :math:`\mathrm{log}(x)`.)log_pr   r   s    rU   logr  :  r   rW   c                6    t                               |           S )z(Elementwise :math:`\mathrm{log}(1 + x)`.)log1p_pr   r   s    rU   log1pr  >  r   rW   c                6    t                               |           S )z9Elementwise hyperbolic tangent: :math:`\mathrm{tanh}(x)`.)tanh_pr   r   s    rU   tanhr  B  r   rW   c                6    t                               |           S )zFElementwise logistic (sigmoid) function: :math:`\frac{1}{1 + e^{-x}}`.)
logistic_pr   r   s    rU   logisticr  F  s    			rW   c                6    t                               |           S )z*Elementwise sine: :math:`\mathrm{sin}(x)`.)sin_pr   r   s    rU   sinr   J  r   rW   c                6    t                               |           S )z,Elementwise cosine: :math:`\mathrm{cos}(x)`.)cos_pr   r   s    rU   cosr#  N  r   rW   yc                8    t                               | |          S )zQElementwise arc tangent of two variables:
    :math:`\mathrm{atan}({x \over y})`.)atan2_pr   r   r$  s     rU   atan2r(  R  s     
a		rW   c                6    t                               |           S )zgElementwise extract real part: :math:`\mathrm{Re}(x)`.

  Returns the real part of a complex number.
  )real_pr   r   s    rU   realr+  W      
 
QrW   c                6    t                               |           S )zqElementwise extract imaginary part: :math:`\mathrm{Im}(x)`.

  Returns the imaginary part of a complex number.
  )imag_pr   r   s    rU   imagr/  ^  r,  rW   c                8    t                               | |          S )zmElementwise make complex number: :math:`x + jy`.

  Builds a complex number from real and imaginary parts.
  )	complex_pr   r'  s     rU   r   r   e  s    
 
1		rW   c                T    t                               | t          |                     S )z=Elementwise complex conjugate function: :math:`\overline{x}`.)input_dtype)conj_pr   _dtyper   s    rU   conjr6  l  s      
QF1II	.	..rW   c                6    t                               |           S )z(Elementwise absolute value: :math:`|x|`.)abs_pr   r   s    rU   absr9  q  r   rW   c                8    t                               | |          S )zElementwise power: :math:`x^y`.)pow_pr   r'  s     rU   powr<  u      	Aq		rW   c                :    t                               | |          S )zCElementwise power: :math:`x^y`, where :math:`y` is a fixed integer.r$  )integer_pow_pr   r'  s     rU   integer_powrA  y  s    			A		#	##rW   c                6    t                               |           S )z*Elementwise square root: :math:`\sqrt{x}`.)sqrt_pr   r   s    rU   sqrtrD  }  r   rW   c                6    t                               |           S )z>Elementwise reciprocal square root:  :math:`1 \over \sqrt{x}`.)rsqrt_pr   r   s    rU   rsqrtrG    r   rW   c                6    t                               |           S )z+Elementwise cube root: :math:`\sqrt[3]{x}`.)cbrt_pr   r   s    rU   cbrtrJ    r   rW   c                6    t                               |           S )z Elementwise NOT: :math:`\neg x`.)not_pr   r   s    rU   bitwise_notrM    r   rW   c                8    t                               | |          S )z$Elementwise AND: :math:`x \wedge y`.)and_pr   r'  s     rU   bitwise_andrP    r=  rW   c                8    t                               | |          S )z!Elementwise OR: :math:`x \vee y`.)or_pr   r'  s     rU   
bitwise_orrS        	1arW   c                8    t                               | |          S )z-Elementwise exclusive OR: :math:`x \oplus y`.)xor_pr   r'  s     rU   bitwise_xorrW    r=  rW   c                6    t                               |           S )zCElementwise popcount, count the number of set bits in each element.)population_count_pr   r   s    rU   population_countrZ    s    		 	 	#	##rW   c                6    t                               |           S )z Elementwise count-leading-zeros.)clz_pr   r   s    rU   clzr]    r   rW   c                8    t                               | |          S )z$Elementwise addition: :math:`x + y`.)add_pr   r'  s     rU   addr`    r=  rW   c                8    t                               | |          S )z'Elementwise subtraction: :math:`x - y`.)sub_pr   r'  s     rU   subrc    r=  rW   c                8    t                               | |          S )z/Elementwise multiplication: :math:`x \times y`.)mul_pr   r'  s     rU   mulrf    r=  rW   c                8    t                               | |          S )zElementwise division: :math:`x \over y`.

  Integer division overflow
  (division by zero or signed division of INT_SMIN with -1)
  produces an implementation defined value.
  )div_pr   r'  s     rU   divri    s     
Aq		rW   c                8    t                               | |          S )a=  Elementwise remainder: :math:`x \bmod y`.

  The sign of the result is taken from the dividend,
  and the absolute value of the result is always
  less than the divisor's absolute value.

  Integer division overflow
  (remainder by zero or remainder of INT_SMIN with -1)
  produces an implementation defined value.
  )rem_pr   r'  s     rU   remrl    s     
Aq		rW   c                8    t                               | |          S )zElementwise maximum: :math:`\mathrm{max}(x, y)`

  For complex numbers, uses a lexicographic comparison on the
  `(real, imaginary)` pairs.)max_pr   r'  s     rU   rR   rR         
 
Aq		rW   c                8    t                               | |          S )zElementwise minimum:  :math:`\mathrm{min}(x, y)`

  For complex numbers, uses a lexicographic comparison on the
  `(real, imaginary)` pairs.)min_pr   r'  s     rU   rP   rP     ro  rW   c                8    t                               | |          S )z(Elementwise left shift: :math:`x \ll y`.)shift_left_pr   r'  s     rU   
shift_leftrt    s    			1a	 	  rW   c                8    t                               | |          S )z4Elementwise arithmetic right shift: :math:`x \gg y`.)shift_right_arithmetic_pr   r'  s     rU   shift_right_arithmeticrw    s    	!	&	&q!	,	,,rW   c                8    t                               | |          S )z1Elementwise logical right shift: :math:`x \gg y`.)shift_right_logical_pr   r'  s     rU   shift_right_logicalrz    s    		#	#Aq	)	))rW   c                8    t                               | |          S )z"Elementwise equals: :math:`x = y`.)eq_pr   r'  s     rU   eqr}    rT  rW   c                8    t                               | |          S )z)Elementwise not-equals: :math:`x \neq y`.)ne_pr   r'  s     rU   ner    rT  rW   c                8    t                               | |          S )z5Elementwise greater-than-or-equals: :math:`x \geq y`.)ge_pr   r'  s     rU   ger    rT  rW   c                8    t                               | |          S )z(Elementwise greater-than: :math:`x > y`.)gt_pr   r'  s     rU   gtr    rT  rW   c                8    t                               | |          S )z2Elementwise less-than-or-equals: :math:`x \leq y`.)le_pr   r'  s     rU   ler    rT  rW   c                8    t                               | |          S )z%Elementwise less-than: :math:`x < y`.)lt_pr   r'  s     rU   ltr    rT  rW   operand	new_dtype DTypeLike | dtypes.ExtendedDTypec                &    t          | |d          S )a  Elementwise cast.

  Wraps XLA's `ConvertElementType
  <https://www.tensorflow.org/xla/operation_semantics#convertelementtype>`_
  operator, which performs an elementwise conversion from one type to another.
  Similar to a C++ `static_cast`.

  Args:
    operand: an array or scalar value to be cast.
    new_dtype: a NumPy dtype representing the target type.

  Returns:
    An array with the same shape as `operand`, cast elementwise to `new_dtype`.
  Fr   )r   r  r  s     rU   convert_element_typer    s      
w	U	C	C	CCrW   F'DTypeLike | dtypes.ExtendedDType | Noner   r   shardingSharding | Nonec                   t          | d          r|                                 } t          j        |t          j                  s.t          j        t          | dd           t          j                  r+t                              | |t          |          |          S t          t          d z  |          }t          j        | d          }t          j        |           }||}nt          j        |          }t          j        |d          }t          j        |t          j                  r=t          j        |t          j                  sd}t          j        |t"          d	           t%          |           t&          u r)t          j        |                               |          } d}||f||fk    rtt-          | t.                    r_t-          | t0          j                  r,t-          t1          j        |           t0          j                  s|t          | d
d           |k    r| S t                              | |t          |          |          S )N__jax_array__rS   r  r   r  FcanonicalizeTz:Casting complex values to real discards the imaginary part   )
stacklevelr  )hasattrr  r   
issubdtypeextendedgetattrconvert_element_type_pr   r   	type_castr?   rS   r   rM   complexfloatingwarningswarnrF   r   rJ   r   astyper   r;   r   r   get_avalr$   )r  r  r   r  	old_dtypeold_weak_typerg   s          rU   r   r     s(   
 Wo&& &##%%G	6?33 $77II!&&9Y '    	D()44) l7777)(11-II##Il94888)	2#566 :

Ir'9
:
::
FCM#*q9999 
']]cj!!((33GM- Y	$:::%   ;gt{++ ; dmG,,d.@AA ; 77J==IIN!&&9Y '   rW   r?   c                b    t          j        |          }t                              | |          S )a  Elementwise bitcast.

  Wraps XLA's `BitcastConvertType
  <https://www.tensorflow.org/xla/operation_semantics#bitcastconverttype>`_
  operator, which performs a bit cast from one type to another.

  The output shape depends on the size of the input and output dtypes with
  the following logic::

    if new_dtype.itemsize == operand.dtype.itemsize:
      output_shape = operand.shape
    if new_dtype.itemsize < operand.dtype.itemsize:
      output_shape = (*operand.shape, operand.dtype.itemsize // new_dtype.itemsize)
    if new_dtype.itemsize > operand.dtype.itemsize:
      assert operand.shape[-1] * operand.dtype.itemsize == new_dtype.itemsize
      output_shape = operand.shape[:-1]

  Args:
    operand: an array or scalar value to be cast
    new_dtype: the new type. Should be a NumPy type.

  Returns:
    An array of shape `output_shape` (see above) and type `new_dtype`,
    constructed from the same bits as operand.
  r  )r   canonicalize_dtypebitcast_convert_type_pr   r  s     rU   bitcast_convert_typer  :  s-    4 '	22)		$	$W		$	B	BBrW   rP   rR   c                :    t                               | ||          S )zElementwise clamp.

  Returns :math:`\mathrm{clamp}(x) = \begin{cases}
  \mathit{min} & \text{if } x < \mathit{min},\\
  \mathit{max} & \text{if } x > \mathit{max},\\
  x & \text{otherwise}
  \end{cases}`.
  )clamp_pr   )rP   r   rR   s      rU   clampr  W  s     
c1c	"	""rW   operandsArray | Sequence[ArrayLike]	dimensionc                    t          |           dk    rt          d          t          |           dk    r| \  }t          |t                    r|S t	          j        | d|iS )a  Concatenates a sequence of arrays along `dimension`.

  Wraps XLA's `Concatenate
  <https://www.tensorflow.org/xla/operation_semantics#concatenate>`_
  operator.

  Args:
    operands: a sequence of arrays to concatenate. The arrays must have equal
      shapes, except in the `dimension` axis.
    dimension: the dimension along which to concatenate the arrays.

  Returns:
    An array containing the concatenation.
  r   z4concatenate requires a non-empty sequences of arraysrp   r  )rs   r   r   r;   concatenate_pr   )r  r  ops      rU   concatenater  b  si     	]]a
K
L
LL]]a
CB"e i		X	;	;	;;rW   zdict[Any, Precision]_precision_stringsc                  f    e Zd ZU ded<   ded<   ded<   ddZedd
            Zedd            ZdS )	PrecisionzClassVar[Precision]DEFAULTHIGHHIGHESTrj   Precision | int | str | NonerI   c                    t           rL   NotImplementedErrorclsrj   s     rU   __new__zPrecision.__new__  s    rW   strc                    t           rL   r  selfs    rU   namezPrecision.name      rW   rJ   c                    t           rL   r  r  s    rU   rj   zPrecision.value  r  rW   N)rj   r  rI   r  rI   r  )rI   rJ   )r   r   r   __annotations__r  propertyr  rj   r_   rW   rU   r  r    s                               X        X     rW   r  c                  F    e Zd ZdZdZdZdZedd	            ZddZ	ddZ
dS )r  a  Precision enum for lax matrix multiply related functions.

    The device-dependent `precision` argument to JAX functions generally
    controls the tradeoff between speed and accuracy for array computations on
    accelerator backends, (i.e. TPU and GPU). Has no impact on CPU backends.
    This only has an effect on float32 computations, and does not affect the
    input/output datatypes. Members are:

    DEFAULT:
      Fastest mode, but least accurate. On TPU: performs float32 computations in
      bfloat16. On GPU: uses tensorfloat32 if available (e.g. on A100 and H100
      GPUs), otherwise standard float32 (e.g. on V100 GPUs). Aliases:
      ``'default'``, ``'fastest'``.
    HIGH:
      Slower but more accurate. On TPU: performs float32 computations in 3
      bfloat16 passes. On GPU: uses tensorfloat32 where available, otherwise
      float32. Aliases: ``'high'``..
    HIGHEST:
      Slowest but most accurate. On TPU: performs float32 computations in 6
      bfloat16. Aliases: ``'highest'``. On GPU: uses float32.
    r   rp   r  rj   objectrI   Precision | Nonec                6    t                               |          S rL   )r  getr  s     rU   	_missing_zPrecision._missing_  s    ##E***rW   r  c                .    | j         j         d| j         S )Nrc   )	__class__r   r  r  s    rU   __repr__zPrecision.__repr__  s    '55$)555rW   c                    | j         S rL   r  r  s    rU   __str__zPrecision.__str__  s
    YrW   N)rj   r  rI   r  r  )r   r   r   __doc__r  r  r  classmethodr  r  r  r_   rW   rU   r  r    su         , GDG+ + + [+6 6 6 6     rW   highestfloat32highbfloat16_3xtensorfloat32defaultbfloat16fastestlhsrhs	precisionPrecisionLikepreferred_element_typeDTypeLike | Nonec                H   d| j         cxk    rdk    rdn nad|j         cxk    rdk    rOn nLt          j        | j        d         |j        d                   r!t	          | || j         dz
  fdfdf||          S t          d                    | j        |j                            )	a  Vector/vector, matrix/vector, and matrix/matrix multiplication.

  Wraps XLA's `Dot
  <https://www.tensorflow.org/xla/operation_semantics#dot>`_
  operator.

  For more general contraction, see the `dot_general` operator.

  Args:
    lhs: an array of dimension 1 or 2.
    rhs: an array of dimension 1 or 2.
    precision: Optional. Either ``None``, which means the default precision for
      the backend, a :class:`~jax.lax.Precision` enum value (``Precision.DEFAULT``,
      ``Precision.HIGH`` or ``Precision.HIGHEST``) or a tuple of two
      :class:`~jax.lax.Precision` enums indicating precision of ``lhs``` and ``rhs``.
    preferred_element_type: Optional. Either ``None``, which means the default
      accumulation type for the input types, or a datatype, indicating to
      accumulate results to and return a result with that datatype.

  Returns:
    An array containing the product.
  rp   r  r   r   )r_   r_   r  r  z+Incompatible shapes for dot: got {} and {}.)r   r   r   r[   dot_generalre   format)r  r  r  r  s       rU   dotr    s    0 #(aA....Q.....43HSUX[XabcXd3e3e.sCCHqL?D"98!D!*.DF F F F AHH	39    rW   dimension_numbersDotDimensionNumbersc                h   |\  \  }}\  }}t          j        |          t          j        |          f}	t          j        |          t          j        |          f}
|dn%t          j        t	          j        |                    }t                              | ||	|
ft          |          |          S )ay  General dot product/contraction operator.

  Wraps XLA's `DotGeneral
  <https://www.tensorflow.org/xla/operation_semantics#dotgeneral>`_
  operator.

  The semantics of ``dot_general`` are complicated, but most users should not have to
  use it directly. Instead, you can use higher-level functions like :func:`jax.numpy.dot`,
  :func:`jax.numpy.matmul`, :func:`jax.numpy.tensordot`, :func:`jax.numpy.einsum`,
  and others which will construct appropriate calls to ``dot_general`` under the hood.
  If you really want to understand ``dot_general`` itself, we recommend reading XLA's
  `DotGeneral  <https://www.tensorflow.org/xla/operation_semantics#dotgeneral>`_
  operator documentation.

  Args:
    lhs: an array
    rhs: an array
    dimension_numbers: a tuple of tuples of sequences of ints of the form
      ``((lhs_contracting_dims, rhs_contracting_dims), (lhs_batch_dims, rhs_batch_dims))``
    precision: Optional. Either ``None``, which means the default precision for
      the backend, a :class:`~jax.lax.Precision` enum value (``Precision.DEFAULT``,
      ``Precision.HIGH`` or ``Precision.HIGHEST``) or a tuple of two
      :class:`~jax.lax.Precision` enums indicating precision of ``lhs``` and ``rhs``.
    preferred_element_type: Optional. Either ``None``, which means the default
      accumulation type for the input types, or a datatype, indicating to
      accumulate results to and return a result with that datatype.

  Returns:
    An array whose first dimensions are the (shared) batch dimensions, followed by
    the ``lhs`` non-contracting/non-batch dimensions, and finally the ``rhs``
    non-contracting/non-batch dimensions.
  Nr  r  r  )	r   _ensure_index_tupler   r  rM   rS   dot_general_pr   canonicalize_precision)r  r  r  r  r  lhs_contractrhs_contract	lhs_batch	rhs_batchcdimsbdimss              rU   r  r    s    F :K6< 6I'55'557%'	22'	224% %,dd)? @ @AA  
		C/4en&<Y&G&G3I 
 
K 
K KrW   group_sizesgroup_offsetArray | Nonec                \    t                               | ||t          |          ||          S )a  Ragged matrix multiplication.

  Args:
    lhs: (m, k) shaped array.
    rhs: (g, k, n) shaped array.
    group_sizes: (g,) shaped array with integer element type, where g denotes   number of groups. The ith element indicates the size of ith group.
    precision: Optional. Consistent with precision argument for :func:`jax.lax.dot`.
    preferred_element_type: Optional. Consistent with precision argument for :func:`jax.lax.dot`.
    group_offset: Optional. (1,) shaped array that indicates the group in group_sizes to start computing from. If not specified, defaults to [0].

  Results:
    (m, n) shaped array with preferred_element_type element type.
  )r  r  r  )ragged_dot_pr   r  )r  r  r   r  r  r  s         rU   
ragged_dotr     s;    * 
		3[&<Y&G&G3IXd 
 
f 
f frW   sizesSequence[int]c           	     D   t          |          dk    rt          |           S t          t          t          |          t          |          t	          j        |           z                       }t          | t          |          t	          j        |           z   |          S )a]  Broadcasts an array, adding new leading dimensions

  Args:
    operand: an array
    sizes: a sequence of integers, giving the sizes of new leading dimensions
      to add to the front of the array.

  Returns:
    An array containing the result.

  See Also:
    jax.lax.broadcast_in_dim : add new dimensions at any location in the array shape.
  r   )rs   r   r   rangerM   r   broadcast_in_dimr[   )r  r  dimss      rU   	broadcastr  :  sz     	ZZ1__7	uSZZUbgg.>.>!>??	@	@$	'5<<"(72C2C#CT	J	JJrW   r@   broadcast_dimensionsc                H   t          j        |           t          |          k    r&t          |          st          | t                    r| S t
          j        j        rt          |          \  }}ng |}}t          j
        | g|R t          |          t          |          dS )a  Wraps XLA's `BroadcastInDim
  <https://www.tensorflow.org/xla/operation_semantics#broadcastindim>`_
  operator.

  Args:
    operand: an array
    shape: the shape of the target array
    broadcast_dimensions: to which dimension in the target shape each dimension
      of the operand shape corresponds to.  That is, dimension i of the operand
      becomes dimension broadcast_dimensions[i] of the result.

  Returns:
    An array containing the result.

  See Also:
    jax.lax.broadcast : simpler interface to add new leading dimensions.
  r[   r  )rM   r   rs   r   r;   r   ri   rj   r   broadcast_in_dim_pr   r   )r  r[   r  r   r   s        rU   r
  r
  M  s    & WWU##C0D,E,E#*U\^cJdJd#N  ( 9??I|| %|I		 
8
8 
8!&|!4!4 !566
8 
8 
8 8rW   r   c                    t          j        |           }||k    rt          |           S t          | d||z
  z            S )z=Adds leading dimensions of ``1`` to give ``x`` rank ``rank``.r~   )rM   r   r   r  )r   r   r   s      rU   broadcast_to_rankr  l  s=    	$	T\\1::	1ddTk*	+	++rW   	new_sizes
dimensionsSequence[int] | Nonec                   t          |          }t          |          }t          j        t	          j        |           |          }|d}d}nSt          j        |          }t          |          t          t          t	          j	        |                               k    }t	          j        |           r|r|rt          | t                    r| S t          |          \  }}t          j        | g|R t          |          ||rdn|dS )ad  Wraps XLA's `Reshape
  <https://www.tensorflow.org/xla/operation_semantics#reshape>`_
  operator.

  For inserting/removing dimensions of size 1, prefer using ``lax.squeeze`` /
  ``lax.expand_dims``. These preserve information about axis identity that may
  be useful for advanced transformation rules.

  Args:
    operand: array to be reshaped.
    new_sizes: sequence of integers specifying the resulting shape. The size
      of the final array must match the size of the input.
    dimensions: optional sequence of integers specifying the permutation order of
      the input shape. If specified, the length must match ``operand.shape``.

  Returns:
    out: reshaped array.

  Examples:
    Simple reshaping from one to two dimensions:

    >>> x = jnp.arange(6)
    >>> y = reshape(x, (2, 3))
    >>> y
    Array([[0, 1, 2],
                 [3, 4, 5]], dtype=int32)

    Reshaping back to one dimension:

    >>> reshape(y, (6,))
    Array([0, 1, 2, 3, 4, 5], dtype=int32)

    Reshaping to one dimension with permutation of dimensions:

    >>> reshape(y, (6,), (1, 0))
    Array([0, 3, 1, 4, 2, 5], dtype=int32)
  NTr  r  )r'   r   r   r   rM   r[   r   r  r	  r   r   r;   r   	reshape_pr   )r  r  r  
same_shape	same_dimsr  r   static_new_sizess           rU   reshaper  s  s   N !++)I)*28G+<+<iHH*IDD'
33DduU277+;+;%<%<===IXg >: >) >
7E8R8R >N"<Y"G"GI>>> >%*+;%<%<> > > >rW   padding_valuepadding_configSequence[tuple[int, int, int]]c                V    t                               | |t          |                    S )as  Applies low, high, and/or interior padding to an array.

  Wraps XLA's `Pad
  <https://www.tensorflow.org/xla/operation_semantics#pad>`_
  operator.

  Args:
    operand: an array to be padded.
    padding_value: the value to be inserted as padding. Must have the same dtype
      as ``operand``.
    padding_config: a sequence of ``(low, high, interior)`` tuples of integers,
      giving the amount of low, high, and interior (dilation) padding to insert
      in each dimension.

  Returns:
    The ``operand`` array with padding value ``padding_value`` inserted in each
    dimension according to the ``padding_config``.
  )r  )pad_pr   r   )r  r  r  s      rU   padr"    s$    ( 
G]5;P;P	Q	QQrW   c                T    t                               | t          |                    S )zdWraps XLA's `Rev
  <https://www.tensorflow.org/xla/operation_semantics#rev_reverse>`_
  operator.
  r  )rev_pr   r   r  r  s     rU   revr'    s"    
 
Gj(9(9	:	::rW   predon_trueon_falsec                :    t                               | ||          S )aH  Selects between two branches based on a boolean predicate.

  Wraps XLA's `Select
  <https://www.tensorflow.org/xla/operation_semantics#select>`_
  operator.

  In general :func:`~jax.lax.select` leads to evaluation of both branches, although
  the compiler may elide computations if possible. For a similar function that
  usually evaluates only a single branch, see :func:`~jax.lax.cond`.

  Args:
    pred: boolean array
    on_true: array containing entries to return where ``pred`` is True. Must have
      the same shape as ``pred``, and the same shape and dtype as ``on_false``.
    on_false: array containing entries to return where ``pred`` is False. Must have
      the same shape as ``pred``, and the same shape and dtype as ``on_true``.

  Returns:
    result: array with same shape and dtype as ``on_true`` and ``on_false``.
  )
select_n_pr   )r(  r)  r*  s      rU   selectr-    s    . 
x	1	11rW   whichcasesc                j    t          |          dk    rt          d          t          j        | g|R  S )a{  Selects array values from multiple cases.

  Generalizes XLA's `Select
  <https://www.tensorflow.org/xla/operation_semantics#select>`_
  operator. Unlike XLA's version, the operator is variadic and can select
  from many cases using an integer `pred`.

  Args:
    which: determines which case should be returned. Must be an array containing
      either a boolean or integer values. May either be a scalar or have
      shape matching ``cases``. For each array element, the value of ``which``
      determines which of ``cases`` is taken. ``which`` must be in the range
      ``[0 .. len(cases))``; for values outside that range the behavior is
      implementation-defined.
    *cases: a non-empty list of array cases. All must have equal dtypes and
      equal shapes.
  Returns:
    An array with shape and dtype equal to the cases, whose values are chosen
    according to ``which``.
  r   z&select_n() must have at least one case)rs   r   r,  r   r.  r/  s     rU   select_nr2    s:    * 	ZZ1__
=
>
>>		'	'	'	''rW   permutationSequence[int] | np.ndarrayc                    t          d |D                       }|t          t          t          j        |                               k    rt	          | t
                    r| S t                              | |          S )zhWraps XLA's `Transpose
  <https://www.tensorflow.org/xla/operation_semantics#transpose>`_
  operator.
  c              3  >   K   | ]}t          j        |          V  d S rL   )operatorindexr   s     rU   rb   ztranspose.<locals>.<genexpr>  s,      ==AhnQ''======rW   )r3  )r   r	  rM   r   r   r;   transpose_pr   )r  r3  s     rU   	transposer:    sr     =======+E% 0 0112222z'57Q7Q2NG===rW   axisindex_dtypec                b    t                               | |ft          j        |                    S )z9Computes the index of the minimum element along ``axis``.axesr<  )argmin_pr   r   r  r  r;  r<  s      rU   argminrB    6     
wdW#)#<[#I#I 
 
K 
K KrW   c                b    t                               | |ft          j        |                    S )z9Computes the index of the maximum element along ``axis``.r>  )argmax_pr   r   r  rA  s      rU   argmaxrF    rC  rW   r   init_valuescomputationCallable[[Any, Any], Any]c                   t          j        |           \  }}t          j        |          \  }}||k    rt          d| d|           t          |          t          |          k    r/t          dt          |           dt          |                     t	          ||          }|r5t          j        | ot          j        | }	t           |g ||R  |	          S t          t          |          }
t          |t          |
          |          \  }}t          j        g ||R ||t          |          d}t          j        ||          S )a  Wraps XLA's `Reduce
  <https://www.tensorflow.org/xla/operation_semantics#reduce>`_
  operator.

  ``init_values`` and ``computation`` together must form a `monoid
  <https://en.wikipedia.org/wiki/Monoid>`_
  for correctness. That is ``init_values`` must be an identity of
  ``computation``, and ``computation`` must be associative. XLA may exploit both
  of these properties during code generation; if either is violated the result
  is undefined.
  z;Operands must have the same tree structure as init_values: z vs. z9Must have same total number of operands as init_values:  r   )rH  jaxprr  )r   tree_flattenr   rs   _get_monoid_reducerr   r   r   rC   _abstractify_variadic_reduction_jaxprr   reduce_pr   tree_unflatten)r  rG  rH  r  flat_operandsoperand_treeflat_init_valuesinit_value_treemonoid_reducerr   flat_init_avalsclosed_jaxprout_treeouts                 rU   reducer[    s    !* 6x @ @-&/&<[&I&I#O_$$
 >%> >,;> > ? ? ?3/0000
 J]++J J256F2G2GJ J K K K&{4DEE. 3&6d6;QSc;dI !K!K
!K!K!K+46 6 6 6 |-=>>O6U?++_> >L(
- J J)9 J J{*uZ7H7HJ J JC#Hc222rW   c                     t           j         fd            }t          j        |||f          \  }}}\   t	          d |D                       rt          d          |t          |          fS )Nc                     | |          }t          |t          j                  s6t          j        |          s"t	          dt          |           d|           |fS )Nz-Invalid return type from reduction function: zE
Reduction functions should only return an array.
Full return value: )r   r   r   valid_jaxtyper   r   )r   r$  resultrH  s      rU   compz_reduction_jaxpr.<locals>.comp;  sz    [AFvt{++ *t/A&/I/I *)$v,, ) ) &) )* * * 9rW   c              3  J   K   | ]}t          |t          j                  V  d S rL   r   r`   cs     rU   rb   z#_reduction_jaxpr.<locals>.<genexpr>E  .      44At{	#	#444444rW   gReduction computations can't close over Tracers. Please open an issue at https://github.com/google/jax.)lu	wrap_initr   trace_to_jaxpr_dynamicanyr  r   )rH  avalr`  rK  _constss   `     rU   _reduction_jaxprrm  9  s    <    < 24$FF%FB44V44444 -
	,- - - 
f	rW   c                   t          j        ||          }t          j        ||f          \  }}t          j        |           }t          j        ||          \  }}t          j        |t          |                    \  }	}
}\   t          d |D                       rt          d          t          j        |	|           |            fS )Nc              3  J   K   | ]}t          |t          j                  V  d S rL   r   rb  s     rU   rb   z,_variadic_reduction_jaxpr.<locals>.<genexpr>R  rd  rW   re  )r   rQ  rL  rf  rg  r   flatten_fun_nokwargsr   rh  r   ri  r  r   ClosedJaxpr)rH  
flat_avals	aval_treeavalsflat_in_avalsin_treer`  	flat_comprY  rK  rk  rl  s               rU   rO  rO  K  s    

"9j
9
9%$15%.AA-	k	"	"$ 5dGDD)X29eM>R>RSS%FB44V44444 -
	,- - - 
	%	(	(((**	44rW   	monoid_opr   xsSequence[Array]Callable | Nonec                   t          |          dk    rd S |\  }t          j        |          }t          |          }t	          |          t
          u r|j        dk    r|t          j        k    pt          j
        |t          j                  }| t          u r#t          j        |j        d          rt          nd S | t           u r#t          j        |j        d          rt"          nd S | t$          u r2|r0t          j        |j        t'          |                    rt(          nd S | t*          u r2|r0t          j        |j        t-          |                    rt.          nd S | t0          u r2|r0t          j        |j        t'          |                    rt2          nd S | t4          u r0t          j        |j        t7          |                    rt8          nd S | t:          u r0t          j        |j        t=          |                    rt>          nd S d S )Nrp   r_   r   ) rs   r   r  r5  r   r$   r[   rM   bool_r   r  integerr`  equalrH   _reduce_sumrf  _reduce_prodrS  _get_bitwise_or_identity
_reduce_orrP  _get_bitwise_and_identity_reduce_andrW  _reduce_xorrR   _get_max_identity_reduce_maxrP   _get_min_identity_reduce_min)rx  ry  r   rj  rS   _is_intlikes         rU   rM  rM  X  s   WW\\4	"!	q		$
))%
4jjM!!tzR'7'728#Kv'8
'K'KKCHTXq11;[[t;	c		Xdh22<\\<	j	 	 [	 8DH.Fu.M.MNNXZZTXX	k	!	!k	!HTX/H/O/OPPZ[[VZZ	k	!	!k	!HTX/G/N/NOOY[[UYY	c		HTX/@/G/GHHR[[dR	c		HTX/@/G/GHHR[[dR	rW   rS   
np.ndarrayc                P    t          j        d                              |           S Nr  )rM   r   r  rS   s    rU   r  r  r  s    	"		U	#	##rW   c                ,    t          j        d|           S Nr   rM   r   r  s    rU   r  r  u      	!U		rW   c                ,    t          j        d|           S r  r  r  s    rU   _get_sum_identityr  x  r  rW   c                ,    t          j        d|           S Nrp   r  r  s    rU   _get_prod_identityr  {  r  rW   c                   t          j        | t          j                  rNt          j        t          j        |           rt          j         nt          j        |           j        |           S t          j        | t          j	                  r,t          j        t          j
        |           j        |           S t          j        | t          j                  rt          j        dt          j                  S t          d|            )Nr  FzUnsupported dtype for max: )r   r  rM   inexactr   supports_infinffinforP   r~  rN   r}  r   r  s    rU   r  r  ~  s    ubj)) <8v2599VRVGGv|E?R?R?V! ! ! !
++ <8FL''+U333)) <8E28$$$
:5::
;
;;rW   c                   t          j        | t          j                  rMt          j        t          j        |           rt          j        nt          j        |           j        |           S t          j        | t          j	                  r,t          j        t          j
        |           j        |           S t          j        | t          j                  rt          j        dt          j                  S t          d|            )Nr  TzUnsupported dtype for min: )r   r  rM   r  r   r  r  r  rR   r~  rN   r}  r   r  s    rU   r  r    s    ubj)) <8f1%88UBFFfl5>Q>Q>U! ! ! !
++ <8FL''+U333)) <8D"(###
:5::
;
;;rW   r?  c                T    t                               | t          |                    S Nr?  )reduce_sum_pr   r   r  r?  s     rU   r  r    !    			7t		5	55rW   c                T    t                               | t          |                    S r  )reduce_prod_pr   r   r  s     rU   r  r    s!    			G%++		6	66rW   c                T    t                               | t          |                    S r  )reduce_max_pr   r   r  s     rU   r  r    r  rW   c                T    t                               | t          |                    S r  )reduce_min_pr   r   r  s     rU   r  r    r  rW   c                T    t                               | t          |                    S r  )reduce_or_pr   r   r  s     rU   r  r    s!    			'd		4	44rW   c                T    t                               | t          |                    S r  )reduce_and_pr   r   r  s     rU   r  r    r  rW   c                T    t                               | t          |                    S r  )reduce_xor_pr   r   r  s     rU   r  r    r  rW   r  Trp   	is_stablenum_keysc                    d S rL   r_   r  r  r  r  s       rU   sortr    s    >AcrW   tuple[Array, ...]c                    d S rL   r_   r  s       rU   r  r    s    JM#rW   Array | Sequence[Array]Array | tuple[Array, ...]c           	     :   t          | t                    rt          |           dk    rt          d          d|cxk    rt          |           k    s$n t	          d|dt          |                     t          |t          | d         j                            }t          t          j	        | |||d          S |dk    rt	          d|d          t          |t          | j                            }t          	                    | ||d          d         S )ay  Wraps XLA's `Sort
  <https://www.tensorflow.org/xla/operation_semantics#sort>`_ operator.

  For floating point inputs, -0.0 and 0.0 are treated as equivalent, and NaN values
  are sorted to the end of the array. For complex inputs, the sort order is
  lexicographic over the real and imaginary parts, with the real part primary.

  Args:
    operand : Array or sequence of arrays
    dimension : integer dimension along which to sort. Default: -1.
    is_stable : boolean specifying whether to use a stable sort. Default: True.
    num_keys : number of operands to treat as sort keys. Default: 1.
      For num_keys > 1, the sort order will be determined lexicographically using
      the first `num_keys` arrays, with the first key being primary.
      The remaining operands will be returned with the same permutation.

  Returns:
    operand : sorted version of the input or inputs.
  r   z"Sort requires at least one operandrp   z	num_keys=z$ must be between 1 and len(operand)=r  r  r  z# must equal 1 for a single operand.)
r   r   rs   re   r   rD   r[   r   sort_pr   r  s       rU   r  r    s-   * "" Y
7||q:;;;))))S\\))))K(KKCLLKKLLL!)S1A-B-BCCIg'0&.0 0 0 1 1 1 1}}H(HHHIII!)S-?-?@@I;;w)yST;UUVWXXrW   keysvaluestuple[Array, Array]c                    t          |t          | j                            }t                              | |||d          \  }}||fS )zRSorts ``keys`` along ``dimension`` and applies the same permutation to ``values``.rp   r  )rD   rs   r[   r  r   )r  r  r  r  kvs         rU   sort_key_valr    sD      	3tz??;;)	T6Y)VW	X	X$!Q	
A+rW   r  c                    t          j        |          rt          |          }|dk     rt          d|           t                              | |          S )a  Returns top ``k`` values and their indices along the last axis of ``operand``.

  Args:
    operand: N-dimensional array of non-complex type.
    k: integer specifying the number of top entries.

  Returns:
    A tuple ``(values, indices)`` where

    - ``values`` is an array containing the top k values along the last axis.
    - ``indices`` is an array containing the indices corresponding to values.

  See also:
    - :func:`jax.lax.approx_max_k`
    - :func:`jax.lax.approx_min_k`

  Examples:
    Find the largest three values, and their indices, within an array:

    >>> x = jnp.array([9., 3., 6., 4., 10.])
    >>> values, indices = jax.lax.top_k(x, 3)
    >>> values
    Array([10.,  9.,  6.], dtype=float32)
    >>> indices
    Array([4, 0, 2], dtype=int32)
  r   -k argument to top_k must be nonnegative, got r  )r   is_constant_dimrJ   r   top_k_pr   )r  r  s     rU   top_kr    sX    6 
! AAUU
HQHH
I
II	g	#	##rW   c                    |S )z,Deprecated. Ignores ``x`` and returns ``y``.r_   r'  s     rU   tie_inr    s    	
(rW   r  
fill_valuec                  t          |           } t          j        |          r6d}t          |                    t          j        |                              t          j        |t
          j                  r|j        	                    | ||          S |du ot          j
        |          }t          j        |pt          |                    }t          |||          }|mt          |t                    sXt          |t           j                  r>|                    |           }t'          ||          t!          j        | |fd          S t'          ||           S )a  Returns an array of `shape` filled with `fill_value`.

  Args:
    shape: sequence of integers, describing the shape of the output array.
    fill_value: the value to fill the new array with.
    dtype: the type of the output array, or `None`. If not `None`, `fill_value`
      will be cast to `dtype`.
    sharding: an optional sharding specification for the resulting array,
      note, sharding will currently be ignored in jitted mode, this might change
      in the future.
  zDfull must be called with scalar fill_value, got fill_value.shape {}.Nc                    S rL   r_   )rk  shards    rU   <lambda>zfull.<locals>.<lambda>  s    U rW   )r'   rM   r[   re   r  r   r  r  _rulesfullr   r  r5  r   r   r:   r   	ArrayImplshard_shaper  make_array_from_callback)r[   r  rS   r  rg   r   broadcast_shaper  s          @rU   r  r    s=    U
#
#%Xj 6
PC
CJJrx
3344
5
55ufo.. 7<UJ666tmB 6z B B)

#E$?VJ-?-?
@
@%$Z	BB*
 :h#E#EU_-- **511Oj/22E)%????KKK	:u	%	%%rW   rj  r#   c                   t          | t                    sJ t          j        | j        t          j                  r%| j        j                            | j                  }nL| j        t          j        k    rt          j
        d| j                  }nt          d| j        | j                  }t          || j                  S )Nr_   r  r   )r   r#   r   r  rS   r  r  zerofloat0rM   zerosr   r   r  r[   )rj  scalar_zeros     rU   zeros_like_shaped_arrayr  #  s    	D+	&	&&&&tz6?33 G*#((44KKzV]""(2TZ000KK'4:t~FFK	;
	+	++rW   state.AbstractRefcore.MutableArrayc                \    t          j        | j                  }t          j        |          S rL   )r   zeros_like_aval
inner_avalr   mutable_array)rj  rH   s     rU   zeros_like_abstract_refr  /  s%    00#		C	 	  rW   sizec                &    t          | |fd          S )z^Wraps XLA's `Iota
  <https://www.tensorflow.org/xla/operation_semantics#iota>`_
  operator.
  r   )broadcasted_iota)rS   r  s     rU   iotar  5  s    
 
%$!	,	,,rW   c                    t          j        |           } t          |          }d |D             }d |D             }t          j        t
          |d          }t          j        || t          |          |dS )z$Convenience wrapper around ``iota``.c                F    g | ]}t          |t          j                  |S r_   r   r   s     rU   r   z$broadcasted_iota.<locals>.<listcomp>@  s)    BBBz!T['A'AB1BBBrW   c                J    g | ] }t          |t          j                  rd n|!S rL   r   r   s     rU   r   z$broadcasted_iota.<locals>.<listcomp>A  s-    KKK*Q44;$$!KKKrW   z*dimension argument of lax.broadcasted_iotarS   r[   r  )	r   r  r'   r   concrete_or_errorrJ   iota_pr   r   )rS   r[   r  dynamic_shaper   s        rU   r  r  <  s    

#E
*
*%
U
#
#%BBeBBB-KKUKKK,$	9BD D)	m5l8K8K(
* 
* 
* *rW   offsetc           	     ^   t          |t          j                  }t          j        |           } t          t          t          t          j        |d          t          j        |                    t          t          j        |d                    }t          	                    || dd          S )z:Like numpy.eye, create a 2D array with ones on a diagonal.r   rp   FNr  )
rV   rM   int32r   r  r}  r`  r  r  r   )rS   r[   r  bool_eyes       rU   _eyer  G  s    #FBH55&

#E
*
*%$RXua88"(6:J:JKK 5!446 6(		$	$X%.2 
% 
4 
4 4rW   c                   t          t          |          }t          j        |           } t	          t          j        ||                    fdt          t                              D             }d t          |dd         |dd                   D             }t                              t          t          j        |          | dd          }t          |||          S )zAThis utility function exists for creating Kronecker delta arrays.c                F    g | ]}t          t          j        |          S r_   )r  rM   uint32)r`   i
base_shapes     rU   r   z_delta.<locals>.<listcomp>U  s7     , , , BIz155 , , ,rW   c                4    g | ]\  }}t          ||          S r_   )r}  )r`   i1i2s      rU   r   z_delta.<locals>.<listcomp>W  s$    	>	>	>R"R**	>	>	>rW   Nr  rp   Fr  )rk   rJ   r   r  r   rM   taker	  rs   zipr  r   r   r7  and_r
  )rS   r[   r?  iotaseyesr_  r  s         @rU   _deltar  P  s    	S$$

#E
*
*%RWUD))***, , , ,#j//**, , ,%	>	>3uSbSz59#=#=	>	>	>$!&&hmT""eu '  & 
&%	.	..rW   c           
        t          |t          j                  }t          j        |           } t          t          t          t          j        |d          t          t          j
        |                                        t          j                            t          t          j        |d                    }t                              || dd          S )z=Like numpy.tri, create a 2D array with ones below a diagonal.r   rp   FNr  )rV   rM   r  r   r  r  r`  r  r   r   dimension_as_valuer  r  r   )rS   r[   r  bool_tris       rU   _trir  ]  s    #FBH55&

#E
*
*%$RXua88D3F;;<<CCBHMMO O 5!446 6( 
 	$	$X%.2 
% 
4 
4 4rW   c                (    d }t          ||           S )a  Stops gradient computation.

  Operationally ``stop_gradient`` is the identity function, that is, it returns
  argument `x` unchanged. However, ``stop_gradient`` prevents the flow of
  gradients during forward or reverse-mode automatic differentiation. If there
  are multiple nested gradient computations, ``stop_gradient`` stops gradients
  for all of them.

  For example:

  >>> jax.grad(lambda x: x**2)(3.)
  Array(6., dtype=float32, weak_type=True)
  >>> jax.grad(lambda x: jax.lax.stop_gradient(x)**2)(3.)
  Array(0., dtype=float32, weak_type=True)
  >>> jax.grad(jax.grad(lambda x: x**2))(3.)
  Array(2., dtype=float32, weak_type=True)
  >>> jax.grad(jax.grad(lambda x: jax.lax.stop_gradient(x)**2))(3.)
  Array(0., dtype=float32, weak_type=True)
  c                d   t          j        t          j        |           j        t           j                  r| S t          j        t          |           t          j                  s,t          j        t          |           t          j	                  rt          j                            |           S | S rL   )r   r  r   r  rS   r  r5  rM   floatingr  r   stop_gradient_pr   r   s    rU   stopzstop_gradient.<locals>.stop{  s    q))/AA h

F1IIr{
3
3 &))R%788$))!,,,hrW   r   )r   r  s     rU   stop_gradientr  g  s#    (   
$		rW   float | ArrayLikeexponent_bitsmantissa_bitsc                    t          j        t          j        |d          }t          j        t          j        |d          }t                              | ||          S )ztWraps XLA's `ReducePrecision
  <https://www.tensorflow.org/xla/operation_semantics#reduceprecision>`_
  operator.
  z.exponent_bits argument of lax.reduce_precisionz.mantissa_bits argument of lax.reduce_precision)r  r  )r   r  r7  r8  reduce_precision_pr   r  r  r  s      rU   reduce_precisionr    s\     (NM#SU U-(NM#SU U-		 	 Ub	 	c	ccrW   r   c                    t          j        |           t          t          fd|D                                 }|st	          | t
                    r| S t                              | |          S )z6Squeeze any number of size 1 dimensions from an array.c              3  8   K   | ]}t          |          V  d S rL   rD   )r`   r  r   s     rU   rb   zsqueeze.<locals>.<genexpr>  s.      KK1-a66KKKKKKrW   r$  )rM   r   r   sortedr   r;   	squeeze_pr   )r   r  r   s     @rU   squeezer    sn    	$VKKKK
KKKKKLL*	 
5%00 L	*	5	55rW   c                n   t          t          |                    t          |          k    rt          d|           t          j        |           t          |          z   fd|D             }t          t          |                    t          |          k    rt          d|           t          |          t          t          j        |                     }t                    D ]}|	                    |d           fdt                    D             }t          | ||          S )z5Insert any number of size 1 dimensions into an array.z"repeated axis in lax.expand_dims: c                0    g | ]}t          |          S r_   r  )r`   r  ndim_outs     rU   r   zexpand_dims.<locals>.<listcomp>  s$    	=	=	=Q
Ax
(
(	=	=	=rW   rp   c                    g | ]}|v|	S r_   r_   )r`   r  dims_sets     rU   r   zexpand_dims.<locals>.<listcomp>  s#    DDD!!82C2CA2C2C2CrW   )rs   setr   rM   r   	frozensetr   r[   r  insertr	  r
  )r   r  r  r   r  broadcast_dimsr  r  s         @@rU   expand_dimsr#    s    ZS__,,
F*FF
G
GGWU^^c*oo-(	=	=	=	=*	=	=	=$T^^s4yy  
@$@@
A
AAt__(bhuoo&&,(  a1DDDDuXDDD.	%~	>	>>rW   ArrayLike | DuckTypedArrayShape | Nonec                "   |t          j        |           nt          |          }|du ot          j        |           }|pt          |           }t          j        |t          j                  r|j        	                    |||          S |du oVt          | t          j                   o;t          | d          o+t          | dd          o| o|t          j        |           k    }|r| j        }t          |t!          |||          |          }|S )a  Create a full array like np.full based on the example array `x`.

  Args:
    x: example array-like, used for shape and dtype information.
    fill_value: a scalar value to fill the entries of the output array.
    dtype: optional, a dtype parameter for the output ndarray.
    shape: optional, a shape parameter for the output ndarray.
    sharding: an optional sharding specification for the resulting array.
      If not specified, the output will have the same sharding as the input,
      with a few exceptions/limitations in particular:
      1. Sharding is not available during tracing, thus this will rely on jit.
      2. If x is weakly typed or uncommitted, will use default sharding.
      3. Shape is not None and is different from x.shape, default will be used.

  Returns:
    An ndarray with the same shape as `x` with its entries set equal to
    `fill_value`, similar to the output of np.full.
  Nr  
_committedTr  )rM   r[   r'   r   r   r5  r  r  r  r  r   r   r   r  r  r  r   )	r   r  rS   r[   r  
fill_shaper   use_x_shardingrH   s	            rU   	full_liker*    s/   * $mrx{{{1CE1J1J*tm9 6q 9 9)

6!99%ufo.. <<ZU;;;
 $ $ DK((
(	$
 !Z
 
 $ !\4
(
($ -$ 
#   zHZ.z5)LL	  	  	 #	*rW   start_dimensionstop_dimension
int | Nonec           	     d   t          ||                              t          | j                            \  }}}||k     rt	          d| j         d| d| d          t          j        | j        ||                   }| j        d|         |fz   | j        |d         z   }t          | |          S )a  Collapses dimensions of an array into a single dimension.

  For example, if ``operand`` is an array with shape ``[2, 3, 4]``,
  ``collapse(operand, 0, 2).shape == [6, 4]``. The elements of the collapsed
  dimension are laid out major-to-minor, i.e., with the lowest-numbered
  dimension as the slowest varying dimension.

  Args:
    operand: an input array.
    start_dimension: the start of the dimensions to collapse (inclusive).
    stop_dimension: the end of the dimensions to collapse (exclusive). Pass None
      to collapse all the dimensions after start.

  Returns:
    An array where dimensions ``[start_dimension, stop_dimension)`` have been
    collapsed (raveled) into a single dimension.
  z,Invalid dimension range passed to collapse: [:]N)sliceindicesrs   r[   r   mathprodr  )r  r+  r,  lohirk  r  	new_shapes           rU   collapser9    s    & O^44<<S=O=OPP)"b!"WW
 =GM = =(= =+9= = = > > >	7=B'	(	($mCRC D7*W]233-??)	)	$	$$rW   c                   t          | j        |j                  dk     r-t          d                    | j        |j                            | j        |j        k    r-t          d                    | j        |j                            | j        dz
  f}|j        dz
  f}t	          t          | j        dz
                      }t          | |||f||ff|          S )zBatch matrix multiplication.r  z9Arguments to batch_matmul must be at least 2D, got {}, {}z9Arguments to batch_matmul must have same ndim, got {}, {}rp   )r  )_minr   r   r  r   r	  r  )r  r  r  r  r  batchs         rU   batch_matmulr=    s     
#(CH!!
PfSXsx002 2 2X
PfSXsx002 2 2(Q,,(Q,,
chl##
$
$%	S#| <uenM(
* 
* 
* *rW   c                "    t          | d          S )z Elementwise square: :math:`x^2`.r  rA  r   s    rU   squarer@    s    	Q		rW   c                "    t          | d          S )z*Elementwise reciprocal: :math:`1 \over x`.r  r?  r   s    rU   
reciprocalrB    s    	Q		rW   c                F     t          j                    fd            }|S )Nc                    t          |           }|t          j        k    s|t          j        k    r1t           t          | t          j                            |          S  |           S rL   )r5  rM   float16r   r  r  r  )r   rS   fs     rU   	f_wrappedz/_upcast_fp16_for_computation.<locals>.f_wrapped  sb    1IIE
ev66!	
q"*
-
-..7 7 71Q44KrW   )	functoolswraps)rF  rG  s   ` rU   _upcast_fp16_for_computationrJ    s9    ?1     
rW   c                6    t                               |           S )z-Elementwise tangent: :math:`\mathrm{tan}(x)`.)tan_pr   r   s    rU   tanrM    r   rW   c                6    t                               |           S )z/Elementwise arc sine: :math:`\mathrm{asin}(x)`.)asin_pr   r   s    rU   asinrP  #  r   rW   c                6    t                               |           S )z1Elementwise arc cosine: :math:`\mathrm{acos}(x)`.)acos_pr   r   s    rU   acosrS  '  r   rW   c                6    t                               |           S )z2Elementwise arc tangent: :math:`\mathrm{atan}(x)`.)atan_pr   r   s    rU   atanrV  +  r   rW   c                6    t                               |           S )z6Elementwise hyperbolic sine: :math:`\mathrm{sinh}(x)`.)sinh_pr   r   s    rU   sinhrY  /  r   rW   c                6    t                               |           S )z8Elementwise hyperbolic cosine: :math:`\mathrm{cosh}(x)`.)cosh_pr   r   s    rU   coshr\  3  r   rW   c                6    t                               |           S )z?Elementwise inverse hyperbolic sine: :math:`\mathrm{asinh}(x)`.)asinh_pr   r   s    rU   asinhr_  7  r   rW   c                6    t                               |           S )zAElementwise inverse hyperbolic cosine: :math:`\mathrm{acosh}(x)`.)acosh_pr   r   s    rU   acoshrb  ;  r   rW   c                6    t                               |           S )zBElementwise inverse hyperbolic tangent: :math:`\mathrm{atanh}(x)`.)atanh_pr   r   s    rU   atanhre  ?  r   rW   c                     j         dk    rt          d          t           j        d                   }t	          d  j        D                       r fdt          |          D             S  fdt          |          D             S )Nr   ziteration over a 0-d arrayc              3  J   K   | ]}t          |t          j                  V  d S rL   r   r   s     rU   rb   z_iter.<locals>.<genexpr>O  s.      
<
<!:a%%
<
<
<
<
<
<rW   c              3  F   K   | ]}t          j        |d           V  dS F)keepdimsN)r/   dynamic_index_in_dimr`   r  tracers     rU   rb   z_iter.<locals>.<genexpr>P  sI       ! ! *61uEEE ! ! ! ! ! !rW   c              3  F   K   | ]}t          j        |d           V  dS ri  )r/   index_in_dimrl  s     rU   rb   z_iter.<locals>.<genexpr>S  s5      PP!g"61u===PPPPPPrW   )r   re   rJ   r[   ri  r	  )rm  ns   ` rU   _iterrq  J  s    [A
0
1
11FLOA

<
<v|
<
<
<<< Q! ! ! !Qxx! ! ! ! QPPPuQxxPPPPrW   c                "    t          | d          S r  )r*  r   s    rU   zeros_like_arrayrs  W  s    	1arW   c                   t          t          j        |           x}t                    rJt	          j        |j        t          j                  r&t          j        	                    t          | |          S t          | |          S rL   )
r   r   r  r#   r   r  rS   r  r  r`  )r   r$  as      rU   _add_arraysrv  [  sd    dmA&&&44 )11)<E1a(((	QrW   c                      fdS )Nc                 ,    t          j                  S rL   )r   r  )r   kwargsrS   s     rU   r  z<lambda>.<locals>.<lambda>j  s    &*CE*J*J rW   r_   r  s   `rU   r  r  j  s    JJJJ rW   c                Z    t          j        t          j        d|                     j        S Nr_   )rM   r9  r  rS   r  s    rU   r  r  k  s    "&"e)<)<"="="C rW   c                     dS NFr_   )r   rk  s     rU   r  r  m  s    e rW   c           	     \   j         t          j        k    rt          d| d          t	          fd|D                       sYd}t          j                   }d |D             }t          |                    ||d                    |                               | j                   S )NCalled a   with a float0 array. float0s do not support any operations by design, because they are not compatible with non-trivial vector spaces. No implicit dtype conversion is done. You can use np.zeros_like(arr, dtype=np.float) to cast a float0 array to a regular zeros array. 
If you didn't expect to get a float0 you might have accidentally taken a gradient with respect to an integer argument.c              3  L   K   | ]}t          j        j        |          V  d S rL   r   r  rS   r`   trj  s     rU   rb   z"unop_dtype_rule.<locals>.<genexpr>z  s2      GG!Vtz1--GGGGGGrW   z@{} does not accept dtype {}. Accepted dtypes are subtypes of {}.c              3  $   K   | ]}|j         V  d S rL   r   r`   r  s     rU   rb   z"unop_dtype_rule.<locals>.<genexpr>}  s$      >>!*>>>>>>rW   , )rS   r   r  re   ri  r1   r  join)result_dtypeaccepted_dtypesr  rj  ry  rg   typenameaccepted_typenamess      `    rU   unop_dtype_ruler  p  s    	Z6=  
	@$ 	@ 	@ 	@A A A 
GGGGGGG	G	G O
LCtz**H>>o>>>
CJJtXtyy9K/L/LMM
N
NN	dj	!	!!rW   c                    t          t          | ||          }t          t          d          ||          }t	          j        |           t          j        |           |S Nr[   )r   r  r4   _attrgetterr)   defvectorizedr   def_trivial_padding)r  r  r  
dtype_ruler   s        rU   unopr    sU    otLL*	K00*d	C	C$
	+rW   c                      fdS )Nc                $    t          |           S rL   )r  )r   ry  r  s     rU   r  z<lambda>.<locals>.<lambda>  s    wq$/?/? rW   r_   r  s   `rU   r  r    s    ???? rW   )require_sameallow_extended_dtypec          
     F   ~t          |          t          |          k    sJ ||f            t          |          D ]\  }|r t          j        t          j                  r'||         }t          fd|D                       sj        t          j        k    rt          d| d| d          d}	t          j                  }
d
                    d |D                       }t          |	                    ||
|||                    |rt          |g|R    | | S )Nc              3  L   K   | ]}t          j        j        |          V  d S rL   r  r  s     rU   rb   z$naryop_dtype_rule.<locals>.<genexpr>  s2      ??Av Q//??????rW   r  z with a float0 at position ap  . float0s do not support any operations by design, because they are not compatible with non-trivial vector spaces. No implicit dtype conversion is done. You can use np.zeros_like(arr, dtype=np.float) to cast a float0 array to a regular zeros array. 
If you didn't expect to get a float0 you might have accidentally taken a gradient with respect to an integer argument.z^{} does not accept dtype {} at position {}. Accepted dtypes at position {} are subtypes of {}.r  c              3  $   K   | ]}|j         V  d S rL   r  r  s     rU   rb   z$naryop_dtype_rule.<locals>.<genexpr>  s$      88Qaj888888rW   )rs   	enumerater   rS   r   ExtendedDTyperi  r  re   r1   r  r  check_same_dtypes)r  r  r  r  r  rt  ry  r  typesrg   r  	typenamesrj  s               @rU   naryop_dtype_ruler    sv   	Us?++	+	+	+e_-E	+	+	+5!! E Ega 
4:v7K L L AE????????? E	v}	$	$Dd D Dq D D DE E 	ED"4:..II88%88888	

41aCCDDDE  2$T2E2222	u	rW   c                4   d |D             }|sdS t          d |D                       dk    r^d}t          |                    | d                    t	          t
          t	          t          |                                                  g }t          | D ]t          fddd          D                       r|	                    d                    Ad	 D             s|	                    d           et          fd
dd          D                       r|	                    d                    t          |  dd                    t	          t
          t	          t          |                               d          t          |          S )Nc                *    g | ]}|j         	|j         S r_   r[   r`   rj  s     rU   r   z+broadcasting_shape_rule.<locals>.<listcomp>  s!    7774DJ7DJ777rW   r_   c                ,    h | ]}t          |          S r_   rr   rt   s     rU   ru   z*broadcasting_shape_rule.<locals>.<setcomp>  s    	)	)	)#e**	)	)	)rW   rp   z7{}: arrays must have same number of dimensions, got {}.r  c              3  N   K   | ]}t          j        |d                    V   dS r^   rw   ry   s     rU   rb   z*broadcasting_shape_rule.<locals>.<genexpr>  r|   rW   r   c                <    g | ]}t          j        |d           |S r~   r   r   s     rU   r   z+broadcasting_shape_rule.<locals>.<listcomp>  r   rW   c              3  N   K   | ]}t          j        d          |          V   dS r^   r   r   s     rU   rb   z*broadcasting_shape_rule.<locals>.<genexpr>  r   rW   z+ got incompatible shapes for broadcasting: rc   )
rs   re   r  r  rk   r  r   r  rd   r   )r  rt  rX   rg   r   r{   r   s        @@rU   broadcasting_shape_ruler    s   775777&	 2	)	)&	)	)	)**a//
CC
CJJtTYYs3E68J8J/K/K%L%LMM
N
NN,L G Gb

8
8
8
8ABB
8
8
888 G"Q%     BA2AAAf GAGGGGF122JGGGGG GF1I&&&&4 F F99Sc%.@.@%A%ABBF F F G G 	G 
|		rW   c                    t          t          | ||||          }t          t          |          }t          |||          }t	          j        |           t          j        |           |S )N)r  r  )r   r  r  r4   r)   defbroadcastingr   r  )r  r  r  r  require_same_dtypesr  
shape_ruler   s           rU   naryopr    so    (,,@$79 9 9* .55*	J
D	9	9$
4   	+rW   c           
         t           t          j        t          f          st	          d          t          j        |          }t          j         j        |          r|S  j        r't          |          t           j                  k    sJ  j        s7t          |t          t          t          |                                        S d t          t          | j                            D             }t          j        j        rt#           fd|D                       sJ t%          t          ||           j                  S )Nz7transpose with implicit broadcasting of unshaped valuesc                H    g | ]\  }\  }}t          j        ||          | S r_   r   r`   r  ru  bs       rU   r   z _unbroadcast.<locals>.<listcomp>  s4    fff)!Va$J_`acdJeJefAfffrW   c              3  :   K   | ]}j         |         d k    V  dS rp   Nr  )r`   r  rj  s     rU   rb   z_unbroadcast.<locals>.<genexpr>  s.      -O-OQdjmq.@-O-O-O-O-O-OrW   )r   r   DShapedArrayr#   re   rM   r[   r   rs   r  r   r	  r  r  r   enable_checksrj   rd   r  )rj  r   x_shaper  s   `   rU   _unbroadcastr    s#   	D4,k:	;	; O
M
N
NNHQKK'	 W55 HZ:3w<<3tz??::::	 5q$uS\\2233444ffyWdj)A)ABBfffD!O#-O-O-O-O$-O-O-O*O*O#O#O#O;q$''444rW   c                (   t          j        |          t          j        |           r|S st	          || d          S d t          t          |                     D             }fd|D             }t	          t          ||          | |          S )Nr_   c                H    g | ]\  }\  }}t          j        ||          | S r_   r   r  s       rU   r   z$_maybe_broadcast.<locals>.<listcomp>  sA     , , ,)!Va$Q**,A , , ,rW   c                     g | ]
}|         S r_   r_   )r`   r  r  s     rU   r   z$_maybe_broadcast.<locals>.<listcomp>  s    ...AWQZ...rW   )rM   r[   r   r   r
  r  r  r  )target_shaper   r  squeeze_shaper  s       @rU   _maybe_broadcastr    s    HQKK'	 ,77 KH KA|R000, ,yWl)C)CDD , , ,D.......MGA}55|TJJJrW   aval_outcore.ShapedArrayrt  Sequence[core.ShapedArray]r   Sequence[ir.Value]c                   g }t          ||          D ]j\  }}|j        | j        k    r>t          |j                  t          | j                  k    sJ || f            t          j        t          t          t          | j                  t          |j                  z
  t          | j                                                }t          d | j        D                       rAt          j	        t          j
        |           |t          j        | j                  |          }nAt          j        t          j
        |                    | j                            ||          }|                    |           l|S )zLBroadcasts HLO values with broadcast-compatible shapes to the same shape.
  c              3  J   K   | ]}t          |t          j                  V  d S rL   )r   r7   Valuer   s     rU   rb   z broadcast_hlo.<locals>.<genexpr>  s.      ==Z28$$======rW   r  )r  r[   rs   r*   dense_int_arrayr   r	  ri  r9   dynamic_broadcast_in_dimaval_to_ir_typeshape_tensorr
  updater   )r  rt  r   rZ  rj  argr  s          rU   broadcast_hlor    sU   
 	#ud##  idCzX^##__HN 3 3333dH5E333!
uS((3tz??:C<O<OPP
Q
QS Sd	==hn===	=	= * **Chn--t5 5 " 8>!B!BCCS  JJsOOOO	*rW   )explicit_typer  ir.Valuec                   ~|j         |j        c}\  }t          j        ||||j                  }|r | t          j        |          g|R  gS  | | gS )zLowers an elementwise operator to its MLIR equivalent.

  Args:
    explicit_type: does the MLIR op require its output type to be provided?
  )avals_in	avals_outr*   multi_broadcast_in_dimr[   r  )r  ctxr  r   r   r  r  broadcasted_argss           rU   _nary_lower_hlor    sy     ,(KX0	48>+ +  #Bt#H--A0@AAABBB !""rW   r   c                "    t          |           gS rL   )r   )r  r  s     rU   r  r  "  s    Q rW   r   c           
     V   | j         \  }t          j        |j        t          j                  rht          j        t          j	        |t          j
        | d|          dd          t          j
        | d|          t          j
        | d|                    gS t          j        |          gS )Nr   EQUNSIGNEDrp   )r  r   r  rS   rM   unsignedintegerr9   r-  r*   compare_hlofull_like_avalr   )r  r   x_avals      rU   _sign_lower_hlor  (  s    L'&v|R%788 .JD/Q??#	% 	%CF++CF++	- - . .
 (1++rW   r   r   r   r  c                   |t           j        u rt          j        |          gS |t           j        u sJ t          j        |          gS rL   )r   r   r9   round_nearest_afzr  round_nearest_even)r  r   r  s      rU   _round_lowerr  B  sL    555!!$$%%n<<<<<"1%%&&rW   r  r  c                "    t          | |          S rL   rf  gansr   s      rU   r  r  O  s    C3KK rW   r  c                t    t          t          t          |d                    t          | |                    S )Nr  )rf  r  _constr  s      rU   r  r  S  s(    SVAq\\):):C3KK%H%H rW   c                   | j         \  }t          j        t          j        t          j        d          |j                            }t          j        | ||d          }t          j	        t          j
        ||                    gS )Nr  r_   r  )r  r*   ir_constantrM   r   r  rS   r
  r9   exponentialmultiply)r  r   r  log2s       rU   _exp2_lowerr  T  si    L'&		"(26!99fl;;	<	<$		sD&r	J	J	J$
/#,tQ//
0
0	11rW   r  c                "    t          | |          S rL   ri  r  r   s     rU   r  r  \  s    c!Qii rW   r  c           	     X    t          | t          |t          |                              S rL   )rf  r`  _oner  s      rU   r  r  `  s     c!Sd3ii-@-@&A&A rW   r  c           	     X    t          | t          |t          |                              S rL   )ri  r`  r  r  s     rU   r  r  e  s    As1d1gg 7 7 rW   r  c           	         t          t          | t          | |                    t          t          |          |                    S rL   )rf  r`  rc  r  r  s      rU   r  r  i  s7    SQAs)<)<),T!WWc):):&< &< rW   r  c                t    t          | t          |t          t          |          |                              S rL   )rf  rc  r  r  s      rU   r  r  n  s*    QCT#YY9L9L0M0M)N)N rW   c                    t          | d          }t          |t          |t          t	          |                                         S r  )r  ri  r`  r  r   )r   ones     rU   logistic_implr  r  s5    q!#	S#c3s1vv;;''	(	((rW   multiple_resultsc           	        t          |           t          |           }}t          |t          |d                    }t	          |          t          |          }}t          |          t          |           }}||z
  dz  ||z   dz   dz  }	}||	z  ||z  }}
t          |t          t          |d          |          t          |
|                    S Nr   r  	r+  r/  r}  r  r   r#  r  r-  r   r   ru  r  	a_is_zerosncse1me2msnhcshreims               rU   _sin_complexr  y  s     
a$q''Q!F1aLL!!)q663q66b"1XXuaRyys#Ci1_sSy1}1s#8R#Xb"		76!Q<<44gb"oo	F	FFrW   c                    t          j        | j        d         j        t          j                  r't          j        t          d          } || |          S t          t          j        | |          S Nr   Fr  )r   r  r  rS   rM   r  r*   	lower_funr  r  r9   sine)r  r   r  s      rU   _sin_loweringr    s[    s|A,b.@AA >,???D4Q<<	3	*	**rW   r   c                <    t          | t          |                    S rL   )rf  r#  r  s     rU   r  r    s    c!SVVnn rW   c           
        t          |           t          |           }}t          |t          |d                    }t	          |          t          |          }}t          |          t          |           }}||z
  dz  ||z   dz   dz  }	}||	z  | |z  }}
t          |t          |
t          |d                    t          |
|                    S r   r  r  s               rU   _cos_complexr    s     
a$q''Q!F1aLL!!)q663q66b"1XXuaRyys#Ci1_sSy1}1s#8bS3Yb"		72va||44gb"oo	F	FFrW   c                    t          j        | j        d         j        t          j                  r't          j        t          d          } || |          S t          t          j        | |          S r  )r   r  r  rS   rM   r  r*   r  r  r  r9   cosine)r  r   r  s      rU   _cos_loweringr    s[    s|A,b.@AA ^L5AAAF6#q>>	S!	,	,,rW   r#  c                V    t          t          | t          |                              S rL   )r   rf  r   r  s     rU   r  r    s    c#aQ..11 rW   c                V    t          t          |           t          |                     S rL   )ri  r   r#  r   s    rU   	_tan_implr    s    	SVVSVV		rW   rM  c                ^    t          | t          |d          t          |          z             S r  )rf  r  r@  r  s      rU   r  r    s#    C6!Q<<&+++E$F$F rW   c                   t          j        t          |           t          j                  rGt          t          | d          t          t          t          | d          |                               S t          t          | d          t          | t          t          | d          t          t          t          | d          t          |                                                             S )Ny                           ?r  rp   )r   r  r5  rM   r  rf  r  r_  r(  r`  rD  rc  r@  r   s    rU   	asin_implr    s    vayy""455 Pva~~uS2%:%:;;<<<va||QF1aLL$s6!Q<</K/K*L*LMMNNP P PrW   rP  c           	     x    t          | t          t          |d          t          |          z
                      S r  rf  rG  r  r@  r  s     rU   r  r    s+    s1eF1aLL6!99,D&E&EFF rW   c                   t          j        t          |           t          j                  rtt          t          | d          t          |                     }t          |          }t          t          |t          |d                    |t          |                    S t          t          | t          | d                    t          t          | d          t          t          t          t          | d          t!          |                               t#          t          | d          |                               t%          | t          j                            S )Nr  r   g      r  rp   )r   r  r5  rM   r  rf  r  rb  r+  r-  r  r   r  r(  rD  rc  r@  r`  r*  pi)r   r_  rparts      rU   	acos_implr$    s   vayy""455 2a))FLLEua  !!	&kk   
1fQooF1aLL$s6!Q<<3344c&A,,6J6JKK	M 	M!RU	  rW   rS  c           	     z    t          | t          t          |d          t          |          z
                       S r  r   r  s     rU   r  r    s.    s1uVAq\\F1II-E'F'F&FGG rW   c                >    t          | t          | d                    S r  )r(  r  r   s    rU   	atan_implr'    s    	q&A,,		rW   rV  c                ^    t          | t          |d          t          |          z             S r  )ri  r  r@  r  s     rU   r  r    s#    s1fQllVAYY&>?? rW   r(  c                L    | |t          |          t          |          z   z  z  S rL   r@  r  r   r$  s      rU   r  r    s!    !qF1IIq		$9:; rW   c                N    | | z  t          |          t          |          z   z  S rL   r*  r+  s      rU   r  r    s"    !qb&F1IIq		$9: rW   rY  c                <    t          | t          |                    S rL   )rf  r\  r  s     rU   r  r        s1d1gg rW   r\  c                <    t          | t          |                    S rL   )rf  rY  r  s     rU   r  r    r.  rW   r_  c           	     v    t          | t          t          |          t          |          z                       S rL   )rf  rG  r@  r  r  s     rU   r  r    s)    AuVAYYa-@'A'A B B rW   rb  c           
         t          | t          |t          |          z
  |t          |          z   z                      S rL   )rf  rG  r  r  s     rU   r  r    s1    s1eQa[Qa[$ABBCC rW   re  c           	         t          t          t          |          |z             t          | t          |          |z
                      S rL   )rf  rB  r  ri  r  s     rU   r  r    s6    s:d1ggk22CDGGaK4I4IJJ rW   r+  c           	     d    t          | t          j        dt          |                               gS r{  )r   rM   r  r5  r  rk  s     rU   r  r    s%    GArxF1II/F/F$G$G#H rW   r/  c                ~    t          t          j        dt          |                     t	          |                     gS r{  )r   rM   r  r5  r   r4  s     rU   r  r    s+    GBHR,C,CSVV$L$L#M rW   c           	        t          j        |          st          j        |          sJ t          j        |          rt          j        |          rt          |           t          j        u r2t          j        |j                  t          j        |j                  gS t          |j        t          |                     t          |j        t          t          |                               gS t          j        |          rZt          |           t          j        u rt          j        |j                  d gS t          |j        t          |                     d gS t          |           t          j        u rd t          j        |j                  gS d t          |j        t          t          |                               gS rL   )
r(   is_undefined_primalr   r   Zerorj  r  r+  r/  r   )r  r   r$  s      rU   _complex_transpose_ruler9    s`   			"	"?b&<Q&?&????A 82#9!#<#< 8Aww',l16""GL$8$89916477++\!&$s1vv,,-O-OPP	a   	8Aww',l16""D))16477++T22Aww',GL(())Lc!ff6677rW   c                v    t          j        d|           t          j        dt           j                  z   j        S r{  )rM   r  	complex64rS   )rS   r   s     rU   r  r    s(    rxE':':RXb",=W=W'W&^ rW   r   r6  c                    t          j        | j        t          j                  r+t          t          |           t          |                      S t          | t          |                     S rL   )	r   r  rS   rM   r  r   r+  r/  _zeros)r   kws     rU   
_conj_implr?    sP    qw 233 !477T!WWH%%%1fQii   rW   c                  t          j        |          sJ t          |           t          j        u rt          j        |j                  gS t          j        |t          j	                  rt          |           gS t          |           gS rL   )r(   r7  r   r   r8  rj  r   r  rM   r  r6  r+  )r  r   r3  s      rU   _conj_transpose_rulerA     su    			"	""""	!WWL  !!b&899 GG9GG9rW   r9  c                R   t          |          r`t          t          | t          t	          |          t          t          |t          |                                                            S t          t          |t          |                    | t          |                     S rL   )
_iscomplex_maybe_realrf  ri  _maybe_conj_replace_zeror  r5  r-  r  _zeror   r  s      rU   _abs_jvp_rulerH  /  s    ]] .s1c+a..-c6!99==>>@ @ A A B B B "Qa//1c!ff---rW   c                B    t          |           rt          |           n| S rL   )rC  r6  r   s    rU   r  r  6      :a==7Qa rW   c                B    t          |           rt          |           n| S rL   )rC  r+  r   s    rU   r  r  7  rJ  rW   rD  c           	     Z    t          | t          t          |d          |                    S )Ng      ?)rf  ri  r  r  s      rU   r  r  :  s"    SCq#,D,D%E%E rW   rG  c           
     v    t          | t          t          |d          t          ||                              S )Ng      )rf  r  ri  r  s      rU   r  r  ?  s.    q#fQoos3{{3344 rW   rJ  c           
     v    t          | t          t          |d          t          |d                              S )NgUUUUUU?)rf  r  rA  r  s      rU   r  r  E  s,    SCq#C8L8L$M$MNN rW   c                   t          j        | j        t          j                  r+t          j        |j        t          j                  r| j        S | j        |j        k    r| j        S t          d| j         d|j         d          )Nzthe first argument to pow must have an inexact dtype (float or complex), and the second argument must have an inexact or integer dtype, and two inexact dtypes must match, but got  and z respectively.)r   r  rS   rM   r  r~  re   r'  s     rU   _pow_dtype_rulerR  H  s    ,, ,,7NW7N ; W; ; $%7; ; ; 	< 	< <rW   r<  )r  c                   t          j        |          }t          j        j        j                            ||          \  }}t          j        |t          j	                  r|j
        |j
        k    r:t          |j
        |j
                  }t          ||          }t          ||          }t          t          |t          |d                    t!          |          t#          t%          |          t'          |t)          |t+          |                                                  }n9t#          |t'          |t)          |t+          |                                        }t#          | |          S r  )r   rS   jax_srcnumpyr   promote_dtypes_numericr  rM   r~  r[   r   r  r-  r}  r  r=  rf  rF  r<  rc  _ones)r  r  r   r$  y_dtyper[   jacs          rU   _pow_jvp_lhsr[  U  s   LOO'			3	3Aq	9	9$!Qw
++ +w!'qw00e
5!
$
$a
5!
$
$a
Ava||$$fQii]1%%s1c!U1XX.>.>'?'?@@B BCC aQAuQxx(())
*
*C	QrW   c                    t          j        |          }t          j        |t          j                  sJ t          t          | t          t          t          |                    |                    |          S rL   )	r   rS   r  rM   r  r  rf  r  rF  )r  r  r   r$  rY  s        rU   _pow_jvp_rhsr]  c  s^    LOO'		7BJ	/	////	c!S]1-=-=)>)>%D%DEEw	O	OOrW   c                   | j         \  }}| j        \  }t          j        t	          t
          |j                  d          }|                    |j                  }|                    |j                  } ||                     |g|g          |          \  }	 ||                     |g|g          |          \  }
|                     ||g          }t          t          j        ||	|
          S )Nr  Fr  r  r  )r  )r  r  r*   r  r   r  rS   r  replacer  r9   power)r  r   r$  r  y_avalr   convertx_aval_y_aval_x_y_ctx_s               rU   
_pow_lowerri  i  s    <.&&m)(N"hn===uF F'MMM//'MMM//'	vh7)DDa	H	H$2	vh7)DDa	H	H$2	w0	1	1$	D"b	1	11rW   c                   t          t          t          t          z  t          z  d|           }|dk     r5t          j        |t          j                  rt          d|  d| d          |S )NrA  r   z>Integers cannot be raised to negative powers, got integer_pow(r  ))
r  r   _int_float_complexr   r  rM   r~  re   )r   r$  rS   s      rU   _integer_pow_dtype_rulero  v  su    
)TF]X%=}a
P
P%UUv 
33U
 -#$- -()- - - . . .	,rW   c                   |dk    rt          |           n<t          | t          t          ||          t          ||dz
                                S Nr   rp   )r=  rf  r  rA  r+  s      rU   _integer_pow_jvprr  }  sD    1ff#aVAq\\;q!a%;P;P)Q)Q"R"RRrW   rA  c                  |dk    rt          | d          S |dk     }|r| }d }|dk    r:|dz  r|| nt          ||           }|dz  }|dk    rt          | |           } |dk    :|rt          t          |d          |          n|S rq  )r*  rf  ri  )r   r$  is_reciprocalaccs       rU   _integer_powrv    s    !VVQ??a%- 	
A#	A1u .AA#c1++c!GA1uu
a))a 	
A )6	>YsA	$	$	$3>rW   c                  |dk    rt          j        ||          fS |dk    r)t          j        t          j        ||          |          fS t          j        t          d          }t          j        |          } || ||          S )Nr     Fr  r?  )r9   r  r*   r  rv  cache_lowering)r  r   r$  lowerings       rU   _integer_pow_loweringr{    s     !VVLA  AvvLa++Q//11~lUCCCH
 "8,,H8Ca    rW   c           	     v    t          t          | t          | d                    t          |           |           S r  )r-  r}  r  rX  r   s    rU   r  r    s*    &Ava||!4!4eAhhBB rW   notandorxorrZ  r]  c                   | \  }}|\  }}t          ||          }t          |          t          |          cxu rt          j        u r$n n!|t          j                            |          fS t          |          t          j        u r|t          |j        |          fS t          |          t          j        u r|t          |j        |          fS |t          ||          fS rL   )r`  r   r   r8  
from_valuer  r[   primalstangentsr   r$  xdotydot
primal_outs          rU   _add_jvpr    s    	$!Q*$1ayy*	$ZZ4::---------w|..z::::	$ZZ7<'
(8$????DzzW\!!'
(8$????s4&&rW   c                p   t          j        |          r|j        nt          |          }t          j        |          r|j        nt          |          }t	          |           t
          j        u r(t          j        |          t          j        |          gS t          ||           t          ||           gS rL   )r(   r7  rj  rN  r   r   r8  r  r  r   r$  r  rb  s        rU   _add_transposer    s    
 +A..C166LOO&+A..C166LOO&	!WWL  ',v"6"677##\&!%<%<==rW   c                    | |z
  }| |z
  }||fS rL   r_   rr   r$  xryrs        rU   _add_inverser        1u"1u"	R-rW   r`  r!   r_  c                   | \  }}|\  }}t          ||          }t          |          t          |          cxu rt          j        u r$n n!|t          j                            |          fS t          |          t          j        u r$|t          |j        t          |                    fS t          |          t          j        u r|t          |j        |          fS |t          ||          fS rL   )rc  r   r   r8  r  r  r[   r   r  s          rU   _sub_jvpr    s    	$!Q*$1ayy*	$ZZ4::---------w|..z::::	$ZZ7<'
(8#d))DDDDDzzW\!!'
(8$????s4&&rW   c                   t          j        |          r|j        nt          |          }t          j        |          r|j        nt          |          }t	          |           t
          j        u r(t          j        |          t          j        |          gS t          ||           t          |t          |                     gS rL   )	r(   r7  rj  rN  r   r   r8  r  r   r  s        rU   _sub_transposer    s     +A..C166LOO&+A..C166LOO&	!WWL  ',v"6"677##\&#a&&%A%ABBrW   rc  c                   t          j        |          t          j        |          z  sJ t          j        |          r[t          |           t          j        u rt          j        |j                  d gS t          |j        t          | |                    d gS t          |           t          j        u rd t          j        |j                  gS d t          |j        t          ||                     gS rL   )r(   r7  r   r   r8  rj  r  rf  )ctr   r$  s      rU   _mul_transposer  	  s    			"	"R%;A%>%>	>>>>A 	6Bxx7<l16""D))163r1::..55Bxx7<GL(())LQ4455rW   c                    | |z  }| |z  }||fS rL   r_   r  s        rU   _mul_inverser  	  r  rW   rf  c                "    t          | |          S rL   r  )r  r   r$  s      rU   r  r  	  s    Sq\\ rW   c                "    t          ||           S rL   r  )r  r   r$  s      rU   r  r  	  s    SD\\ rW   c                   t          j        |          rt          j        |          rJ t          |           t          j        u rt          j        |j                  d gS t          |j        t          | |                    d gS rL   )r(   r7  r   r   r8  rj  r  ri  )	cotangentr   r$  s      rU   _div_transpose_ruler  	  st    			"	"D2+A!+D+DDDD	)__$$L  $''Y!2!233T::rW   ri  c                "    t          | |          S rL   r  r+  s      rU   r  r  %	  s    #a)) rW   c                t    t          t          t          |           |          t          |d                    S )NrO  )rf  r   rA  r+  s      rU   r  r  &	  s(    #c#a&&!nnk!R.@.@AA rW   rl  c                    t          t          t          j        |          t          j        |                    |           S rL   )r  r   rM   r[   r+  s      rU   r  r  -	  s-    $%5bhqkk28A;;%O%OQRSS rW   c                    t          t          |           t          t          t          ||                    t	          t          t          ||                                                  S rL   )rf  r   r   ri  r   r9  r+  s      rU   r  r  .	  sD    CADQOOU3s1ayy>>5J5J K KLL rW   c          	        t          t          j        |           t          j        |                    }t          ||           } t          ||          }t	          |           }t	          |          }t          t          ||           |t          |           t          |                     |||                    }t          || |          S rL   )r   rM   r[   r  r+  r-  r}  r/  )r   r$  lax_cmp_pick_xr   rxrypick_xs          rU   _minmax_complex_loweringr  1	  s    !"(1++rx{{;;,|Q''!|Q''!Aww"Aww""R**nnT!WWd1gg>> .R((* *&	1		rW   zcore.Primitivern  c                @    t          | t          |||                    S rL   rf  _balanced_eqr  r  r   r$  s       rU   r  r  =	      A|AsA'>'> ? ? rW   c                @    t          | t          |||                    S rL   r  r  s       rU   r  r  >	  r  rW   rq  c                @    t          | t          |||                    S rL   r  r  s       rU   r  r  C	  r  rW   c                @    t          | t          |||                    S rL   r  r  s       rU   r  r  D	  r  rW   rt  rw  rz  c           	        |\  }}	t          j        |          }
t          j        |	          }t          j        |
j        |j                  }t          t          |j        |j                            }t          j	        |t          t          | d          |||
|g|g          \  }t          j	        |t          t          |||          ||g|g          S )NFr_  r  )r   physical_avalr#   r[   rS   r   r	  r   r*   delegate_loweringr   _compare_lower_hlo_unary_reduce_lower)	directionreduction_opidentityr  r  r  r   r$  aval_xaval_ybase_aval_xbase_aval_ybase_aval_outreduce_axesress                  rU   _opaque_comparison_hlor  U	  s    .&&"6**+"6**+";#4hnEE-eHM=+=>>??+			7%y%88k;/M?
L 
L 
L$# 
		7&h#% % %	]Oz
; 
; 
; ;rW   r  NEr  r  c                    t          fd|D                       }| dk    rt          ||||          S | dk    rt          ||||          S t          d|  d|d         j                   )Nc              3  V   K   | ]#}t          j        j        |j                  V  $d S rL   )r   r#   r[   rS   )r`   rj  r  s     rU   rb   z,_compare_lower_hlo_opaque.<locals>.<genexpr>j	  sM       I I7;dx~tz22I I I I I IrW   r  r  zHLO comparison z for extended dtype r   )r   _opaque_eq_hlo_opaque_ne_hlor  rS   )r  r  r  r  r   r$  broadcast_avals_ins      `   rU   _compare_lower_hlo_opaquer  i	  s     I I I I?GI I I I I$#18QBBBD#18QBBB
L)LL!9JLLN N NrW   total_orderc                   |j         |j        c}\  }|d         j        }t          j        |||f||j                  \  }}t          j        |t          j                  r|rJ t          | |||||          S t          j        |t          j                  r|rdnd}n$t          j        |t          j                  rd}nd}t          j        ||| |          gS )Nr   
TOTALORDERFLOATSIGNEDr  )r  r  rS   r*   r  r[   r   r  r  r  rM   r  signedintegerr  )	r  r  r  r   r$  r  r  x_dtypecompare_types	            rU   r  r  u	  s    ,(KXQK'		$S1a&(HN	K	K$!Qw00 O$YXxANNNw
++ #.;<<GLL""233 LLL

1aL
9
9	::rW   r}  )r  r  r  GEr  GTr  LEr  LTeq_tole_tolt_toc                   | j         S rL   r  r  r  r   r  s       rU    _convert_element_type_shape_ruler  	  s
    	rW   c                  | j         |k    rt          j        | j         t          j                  r%| j         j                            | j         |          r?t          j        |t          j                  rT|j                            | j         |          s4t          dt          | j                    dt          |                     |S )Nz!Cannot convert_element_type from  to )	rS   r   r  r  r  convert_from
convert_tor   r1   r  s       rU    _convert_element_type_dtype_ruler  	  s    my  '-99 !M --gmYGG ! 	)V_55 ! ''yAA	 !
 	+OGM,J,J 	+ 	+i((	+ 	+, , , 
rW   c                   |S rL   r_   r  s       rU   $_convert_element_type_weak_type_ruler  	  s    	rW   c                  t          j        |          sJ |j        j        }t	          j        |          }t          |           t          j        u rt          j        |j                  gS t          j
        |          t          j        k    r9t          j        |j                            t          j        d                    gS t                              | |||          gS NF)rS   r   r  )r(   r7  rj  rS   r   r   r   r   r8  r   primal_dtype_to_tangent_dtyper  r  r  r   )r  r  r  r   r  r  r  s          rU   $_convert_element_type_transpose_ruler  	  s    			(	((((l )(11-	"XXL&&''))44EEL,,6=E,RRSSTT"''
i=8 ( M M N NrW   c               4   t          j        |          t          j        k    rYt          j        t          j        |                     }t          j        |                    t          j        d                    S t          
                    | |||          S r  )r   r  r   r  r%   r  r   r8  r  r  r   )tangentr  r  r   r  tangent_avals         rU   _convert_element_type_jvp_ruler  	  s    	'	22fmCC'g(>(>??L<++&-5+QQRRR!&&w)1:X ' O O OrW   c                   | \  }|j         \  }t          |          t          j        ht          j        v r)t          |j        t          j	                  r	t          j
        |          st	          j        |j        d         t          j                  st          j                    5  t          j        dt"          j                   t          j        |                              |j        d                   }d d d            n# 1 swxY w Y   |j        j        s|gd fS |                                }t          j        |          j        |j        j        u r|gd fS d g|fS )Nr  ignore)outvarsr   rM   r   r   python_scalar_dtypesr   rj  r   r"   r[   r  r   r  r  catch_warningssimplefilterr   rF   r   r  r   itemr  rS   )rl  r   rc  orZ  s        rU   _convert_elt_type_folding_ruler  	  sq    "!
{"!
1gg"*;v:;;;+,, <57Xa[[ <

CJ{3V_
E
E < 
	 	"	" 8 8Hd&>???HQKKsz+677c8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 UD[
((**C}S16<//UD[
s   (ADD
D
c                :   | j         \  }t          j        | j        d         t          j                  sdt          j        |j        j        t          j                  s;|j        j        | j        d         k    r |j        j        | j        d         k    r|gd fS d g| fS )Nr  r   )invarsr   r  r   r  rj  rS   r   )r   r  s     rU   _convert_elt_type_fwd_ruler  	  s    
z"!

CJ{3V_
E
E 

AFL&/
:
:flcj---f#*[1113963;rW   c                    t          | j                  }|d         |d= t          j        |                     |          ||          S )Nr  r   )dictr   r   _pp_eqnr`  )r   contextsettingsr   s       rU   _convert_elt_type_pp_ruler  	  sH     
&Jz	ckkk00'8	D	DDrW   r  c                   t           j                            t          | |||          } | t          j                            | |          } | S )Nr  )r   r!   r   r  rT  laxwith_sharding_constraintr  s       rU   _convert_element_type_bindr  	  sO    N 6*3y)1   3 3' g..wAAG	.rW   c                4    t          j        |           j        S rL   )rM   r  rS   r  s    rU   _real_dtyper  
  s    rx44rW   c               T   | j         \  }| j        \  }t          j        |j        t
          j                  r[t          j        |t
          j                  s<t          j        |          }|	                    t          |j                            }t          j        | |||          gS Nr  )r  r  r   r  rS   rM   r  r9   r+  r  r  r*   convert_hlo)r  r  r  r   r  aval_inr  s          rU   _convert_element_type_lowerr	  
  s    \('m)(r'9:: ?

Ir'9
:
:?hwGnn;w}#=#=n>>G

3(
;
;	<<rW   c                  t          j        | j                  }t          j        |          }|j        |j        k    r| j        S |j        |j        k    rg | j        |j        |j        z  R S | j        r| j        d         nd}||j        z  |j        k    r@t          d| j         d| d|j         d| d|j         d| d|j         d	|j                   | j        d d         S )
Nr  rp   z%Attempting to convert array of shape z from z	 of size r  z, but z * z != )r   r  rS   itemsizer[   r   )r  r  r  dim_sizes       rU    _bitcast_convert_type_shape_ruler  "
  sU   '66)'	22)9---=I...EW]EI.)2DDEEE$+M8w}R  qH)$$	(:::	I 	I 	I	I 	I$-$6	I 	I	I 	I"+"4	I 	I 	I 	I &.	I 	I 5>4F	I 	IJ J J
 ="rW   c                  t          j        | j                  }t          j        |          }t          j        |t          j                  s]t          j        |t          j                  s>t          j        |t          j                  st          j        |t          j                  r||k    rt          d| d|d          |S )Nzlax.bitcast_convert_type does not support bool or complex values unless the operand and destination types match. Got operand dtype=z, new_dtype=z/. Consider using the arr.view() method instead.)r   r  rS   r  rM   r}  r  re   )r  r  r  s      rU    _bitcast_convert_type_dtype_ruler  4
  s    '66)'	22)	28,, G	2#566G	28,,G 	2#566G I F+4F F8AF F F G G G 
rW   r  )weak_type_rulec               d    | j         \  }t          j        t          j        |          |          gS rL   )r  r9   bitcast_convertr*   r  )r  r  r  r  s       rU   _bitcast_convert_type_lowerr  H
  s,    m)(

d28<<g
F
F	GGrW   c                L    t          j         t          j                  r t          j        t          j                  rnt          j        t          j        t          j        f}t           fd|D                       rt          d          t          j         t          j                  r.t          j        t          j                  st          d          t          j	                   j
        }t          j	                  j
        }||k     rt          d          d S )Nc              3  n   K   | ]/}t          j        |          ot          j        |           V  0d S rL   r   r  )r`   r  r3  r  s     rU   rb   z3_validate_preferred_element_type.<locals>.<genexpr>W
  sg       P P<= [!,, 83Q7728 P P P P P PrW   zInput type is incompatible with `preferred_element_type`. The compatible combinations of (input_type, preferred_element_type) are (integral, integral), (integral, floating), (floating, floating), (complex, complex.zL`preferred_element_type` must have the same signedness as the original type.zE`preferred_element_type` must not be narrower than the original type.)r   r  rM   r~  r	  r  ri  re   r  rS   r  )r3  r  allowed_typesinput_bitwidthpreferred_bitwidths   ``   rU    _validate_preferred_element_typer  O
  sH   RZ00 /.<</ 	Zb.@AM
 P P P P PANP P P P P B A B B B
 	+r'788 /4b6FGG/ . / / /8K((1.x 677@.((
 % & & & )(rW   c               T    |\  \  }}\  }}t           fd||fD                       sd| d| d j         }	t          |	          t          fd||fD                       sd| d| dj         }	t          |	          t          |          t          |          k    r%d	}	t          |	                    ||                    t          |          t          |          }}
t          |          t          |          }}t          |          t          |          k    rd
| d}	t          |	          t          |          t          |          k    rd| d}	t          |	          t          |
          t          |          k    rd| d}	t          |	          t          |          t          |          k    rd| d}	t          |	          |
|z  r%d}	t          |	                    ||                    ||z  r%d}	t          |	                    ||                    t           fd|D                       }t          fd|D                       }t          j        ||          s%d}	t          |	                    ||                    t           fd|D                       }t          fd|D                       }t          j        ||          s%d}	t          |	                    ||                    t           j
        j
        |          S )Nc              3     K   | ]W}t          j        t          j        |d                     o+t          j        t          j        |j                            V  XdS r^   rM   rd   greater_equallessr   )r`   rz   r  s     rU   rb   z*_dot_general_shape_rule.<locals>.<genexpr>l
  k       4 4 VB$Q**++Lrwq#(7K7K0L0L 4 4 4 4 4 4rW   zdot_general requires lhs dimension numbers to be nonnegative and less than the number of axes of the lhs value, got lhs_batch of z and lhs_contracting of z for lhs of rank c              3     K   | ]W}t          j        t          j        |d                     o+t          j        t          j        |j                            V  XdS r^   r  )r`   rz   r  s     rU   rb   z*_dot_general_shape_rule.<locals>.<genexpr>s
  r   rW   zdot_general requires rhs dimension numbers to be nonnegative and less than the number of axes of the rhs value, got rhs_batch of z and rhs_contracting of z for rhs of rank zldot_general requires equal numbers of lhs_batch and rhs_batch dimensions, got lhs_batch {} and rhs_batch {}.zHdot_general requires lhs batch dimensions to be distinct, got lhs_batch rc   zHdot_general requires rhs batch dimensions to be distinct, got rhs_batch zTdot_general requires lhs contracting dimensions to be distinct, got lhs_contracting zTdot_general requires rhs contracting dimensions to be distinct, got rhs_contracting z~dot_general requires lhs batch dimensions to be disjoint from contracting dimensions, got lhs_batch {} and lhs_contracting {}.z~dot_general requires rhs batch dimensions to be disjoint from contracting dimensions, got rhs_batch {} and rhs_contracting {}.c              3  2   K   | ]}j         |         V  d S rL   r  r`   r  r  s     rU   rb   z*_dot_general_shape_rule.<locals>.<genexpr>
  )      ::1#)A,::::::rW   c              3  2   K   | ]}j         |         V  d S rL   r  r`   r  r  s     rU   rb   z*_dot_general_shape_rule.<locals>.<genexpr>
  r$  rW   zidot_general requires lhs batch dimensions and rhs batch dimensions to have the same shape, got {} and {}.c              3  2   K   | ]}j         |         V  d S rL   r  r#  s     rU   rb   z*_dot_general_shape_rule.<locals>.<genexpr>
  )      FF	!FFFFFFrW   c              3  2   K   | ]}j         |         V  d S rL   r  r&  s     rU   rb   z*_dot_general_shape_rule.<locals>.<genexpr>
  r(  rW   zRdot_general requires contracting dimensions to have the same shape, got {} and {}.)rd   r   re   rs   r  r  r   r   r   _dot_general_shape_computationr[   )r  r  r  r  r  lhs_contractingrhs_contractingr  r  rg   lhs_contracting_setlhs_batch_setrhs_contracting_setrhs_batch_setlhs_batch_shaperhs_batch_shapelhs_contracting_shaperhs_contracting_shapes   ``                rU   _dot_general_shape_ruler5  i
  s   ?P<$?O&<y)	 4 4 4 4&	24 4 4 
4 
4 )$) )>M) ) "h) )C C..	 4 4 4 4&	24 4 4 
4 
4 )$) )>M) ) "h) )C C..^^s9~~%%<C
CJJy)44
5
55'*?';';S^^}'*?';';S^^}3y>>))%!% % %C
C..3y>>))%!% % %C
C..	_!5!5555"15 5 5C
C..	_!5!5555"15 5 5C
C..=( <NC
CJJy/::
;
;;=( <NC
CJJy/::
;
;;::::	:::::/::::	:::::/		$_o	F	F B4C
CJJ@@
A
AAFFFFoFFFFFFFFFoFFFFF		$%:<Q	R	R N#C
CJJ46KLL
M
MM	'	39>O	P	PPrW   c                    |\  \  }}\  }}t           fd|D                       }t          t          t          |          t          |          z                       }t           |          }	t          t          t          |          t          |          z                       }
t          ||
          }||	z   |z   S )Nc              3  (   K   | ]}|         V  d S rL   r_   )r`   r  	lhs_shapes     rU   rb   z1_dot_general_shape_computation.<locals>.<genexpr>
  s'      66qil666666rW   )r   r  tuple_delete)r8  	rhs_shaper  r+  r,  r  r  batch_shapelhs_contract_or_batchlhs_tensored_shaperhs_contract_or_batchrhs_tensored_shapes   `           rU   r*  r*  
  s    ?P<$?O&<y)6666I66666+u_'='=i@P@P'P Q QRR#I/DEEu_'='=i@P@P'P Q QRR#I/DEE	)	),>	>>rW   c                     t          |          t           fdt          t                               D                       S )Nc              3  0   K   | ]}|v|         V  d S rL   r_   )r`   r  idx_tups     rU   rb   ztuple_delete.<locals>.<genexpr>
  s+      @@!!4--s1v----@@rW   )r  r   r	  rs   )rC  ra   rB  s   ` @rU   r9  r9  
  sA    	S$	@@@@@uSXX@@@	@	@@rW   c                  d } || j                    ||j                   }}||k    r| j         }nD||k    r|j         }n6| j         |j         k    rt          d| j          d|j                    | j         }t          ||          S )Nc                   t          j        | t          j                  rt	          |           n| }t          j        | t          j                  t          j        |t          j                  rt          j        |          j        ndt          j        |t          j                  rt          j        |          j        ndt          |          t          j        |t          j
                   fS r  )r   r  rM   r  r  r	  r  maxexpnmant
_bit_widthr  )dtrc  s     rU   type_propertiesz0_dot_general_dtype_rule.<locals>.type_properties
  s    !,R1CDDLB"Ab""455&,&72;&G&GOFLOO""R&,&72;&G&GOFLOO!!RqMM!!R%7888	: :rW   z%lax.dot_general argument type error: r  )rS   re   _maybe_upcast)	r  r  r  r  r  rJ  lhs_proprhs_propr  s	            rU   _dot_general_dtype_rulerN  
  s    
: : : 'sy11??393M3MH(9LL(9LL
yCI
J#)
J
Jsy
J
JL L L9L	|%;	<	<<rW   c                *   t          j        | t          j                  rt          j        |           j        S t          j        | t          j                  rt          j        |           j        S | t          j        d          k    rdS J |             )Nr   rp   )	r   r  rM   r  r  bitsr~  rN   rS   )rz   s    rU   rH  rH  
  st    q"*%% fl1oo.B'BBJ'' Q0D)DBHVQQarW   c                    || |k    r| S t          j        | t          j                  s6t	          |          t	          |           k     rt          d| d|  d          |S )Nzd`preferred_element_type` must not be narrower than the original type, got preferred_element_type of z for result type of rc   )r   r  rM   r	  rH  re   )r  r  s     rU   rK  rK  
  s    $,,,

L"+
6
6 ('((:l+C+CCC
 '-' ' $' ' ' ( ( ( 
 rW   )swap_ansc          	        |\  \  }}\  }	}
|j         j        }t          t          |          ||	          }t          t          t	          j        |                    ||
          }|rt          |	||          \  }}}nt          |	||          \  }}}||f||
ff}t          t	          j        |t	          j        |                              }t	          j        t          |	          |z   |z             }t          t          | ||||          t          |                    }|j        |j         j        k    r%t          ||j         j        |j         j                  }|S Nr  )rj  r   	remainingr	  rM   ranges_liker   r  argsortr:  r  r   rS   r   r   )r  r   r$  r  r  r  rR  
x_contract
y_contractx_batchy_batchx_ndimx_kepty_kept	ans_batchans_yrk  r  x_contract_sorted_by_yout_axesx_bars                        rU   _dot_general_transpose_lhsrd  
  sT    2C.:z.Wg6;&U6]]J88&U271::&&
G<<& ?%gvv>>Iuaa%gvv>>Iq%&/Iw/	0$
BJz4J4J K KLLZW.1GGHH(
K1di7MO O O(OO% %% [AFL  !%qv7GHHE	,rW   c          	         |\  \  }}\  }}	||f|	|ff}
t          | |||
||d          }|j        |j        j        k    r%t          ||j        j        |j        j                  }|S )NT)r  r  r  rR  )rd  rS   rj  r   r   )r  r   r$  r  r  r  rX  rY  rZ  r[  swapped_dimension_numbersy_bars               rU   _dot_general_transpose_rhsrh  
  s    1B.:z.Wg *J7'79KL
$q!8I1  % [AFL  !%qv7GHHE	,rW   c                  | \  }}|\  }}|\  \  }	}
\  }}t          |          t          u r|j        n|}t          |          t          u r|j        n|}t          t	          j        |          t	          j        |          f||f|          \  }}t          |          t          u r6t          j        |t          |          }t          j	        ||j
                  }nt	          j
        |          }t          |          t          u r6t          j        |t          |          }t          j	        ||j
                  }nt	          j
        |          }t          |||||          }t          j        |t          |||                    }||fS rT  )r   r.   stacked_axis_dot_general_batch_dim_numsrM   r   r)   mask_ragged_axesr  bdim_as_shaper[   r  shape_as_bdimr*  )batched_args
batch_dimsr  r  r  r  r  lbdrbdr  r  r  r  left_stack_dimright_stack_dimnew_dimension_numbersresult_stack_dimr8  r:  batched_outresult_batch_dims                        rU   _dot_general_batch_rulery    s    (#s(#s9J6< 6I'+CyyJ'>'>3##C.(,S		Z(?(?C$$S/,G	ws||RWS\\"^_$E- -)) 
#YY*

#C):C
@
@C&sCI66III	#YY*

#C):C
@
@C&sCI66IIIC&;&/3IK K K+ +$Y	;PQQS S 
&	&&rW   c           	     f   | \  }}|\  }}||J |\  \  \  d }t          |          t          |          cxu r	t          u r?n n<|f ||          z   |f ||          z    ||           ||          d}nt          |          t          u rv|tfdt          |          D             }	t                    t          t	          t          j        |	|                              z   } ||           ||          nt          |          t          u ry|wfdt          |          D             }
|t                    z
  t          t	          t          j        |
|                              z   } ||           ||          nJ fff}||fS )Nc           	     l    t          t          j        | t          j        | |                              S rL   )r   rM   r`  r  )r  r  s     rU   	bump_dimsz._dot_general_batch_dim_nums.<locals>.bump_dims7  s)    b.tQ7788999rW   r   c                $    g | ]}|v|v
|S r_   r_   )r`   rz   r  r  s     rU   r   z/_dot_general_batch_dim_nums.<locals>.<listcomp>E  :     C C Ci''A\,A,A ,A,A,ArW   c                $    g | ]}|v|v
|S r_   r_   )r`   rz   r  r  s     rU   r   z/_dot_general_batch_dim_nums.<locals>.<listcomp>M  r~  rW   )r   rJ   r	  rs   sumrM   r  )ndimsrp  r  lhs_ndimrhs_ndimrq  rr  r|  rx  
lhs_tensor
rhs_tensorru  r  r  r  r  s               @@@@rU   rk  rk  $  sL    (H (#s	COOO9J6< 6I: : : 
#YY$s))""""s""""" 9c222I9c222I9\3//L9\3//LS		SS[C C C C CU8__ C C CJ9~~C
C0H0H,I,I(J(JJ	)S))I9\3//LLS		SS[C C C C CU8__ C C CJ 3|#4#44C
C 8 899::;	)S))I9\3//LL L(,7)Y9OP	 0	00rW   c               ~   
 | \  
}|\  \  }}}
fd|D             }t          |d|          }	t          |	|fd|i|gS )Nc                    g | ];}t          j        |         t          j                  '|j        |         j        f<S r_   )r   r[   r   BoundedAxisSizerH   )r`   r  lhs_avals     rU   r   z-_dot_general_padding_rule.<locals>.<listcomp>^  sW     G G Gx~a0"2DEEG!X^A&*+ G G GrW   r   r  )_replace_masked_valuesr  )in_avals	out_avalsr  r  r  r   rk  r  padded_axeslhs_r  s             @rU   _dot_general_padding_ruler  Z  s{    +(A*<QG G G G\ G G G+	Q	4	4$
dC
O
O3D
O
O
O	PPrW   pp.Docc                F   d | j                                         D             }| j         d         \  \  }}\  }}t          |          t          |          ft          |          t          |          ff|d<   t          j        |                     |          ||          S )Nc                    i | ]
\  }}|||S rL   r_   )r`   r  r  s      rU   
<dictcomp>z(_dot_general_pp_rule.<locals>.<dictcomp>f  s    IIITQ1=Aq===rW   r  r  )r   itemsr   r   r  r`  )r   r  r  printed_paramslhs_contrhs_contr  r  s           rU   _dot_general_pp_ruler  c  s     JISZ%5%5%7%7III.14<O1P.8X.IH~~tH~~&i$y//(J)L.$%	ckkk88'8	L	LLrW   r  ir.ArrayAttrc                    | t           j        t           j        f}nt          | t                    s| | f}n| }t          j                            d |D                       S )Nc                f    g | ].}t           j                            t          |                    /S r_   )r9   PrecisionAttrr  r  r`   ps     rU   r   z"precision_attr.<locals>.<listcomp>|  s/    ===sSVV$$===rW   )r  r  r   r   r7   	ArrayAttrr  )r  full_precisions     rU   precision_attrr  t  sh    '):;NNi'' +NNN			==n===
? 
? ?rW   )platformnp.dtype | Noner  c          	        d }~| j         \  }}	|j        |	j        }}
| j        \  }|\  \  }}\  }}|
|k    r|dk    rd } ||
          r ||          sqt          j        | ||t          j        |j        |j                            }t          j        | ||	t          j        |	j        |j                            }|j        x}
}n} ||
|          sqt          j        | ||t          j        |j        |j                            }t          j        | ||	t          j        |	j        |j                            }|j        x}
}t          j	        
                    t          |          t          |          t          |          t          |                    }t          j        t          j        |          |||t          |                    gS )Nc                n    t           j        t           j        t           j        t           j        f}| |v o||v S rL   )r   float8_e4m3fnfloat8_e5m2float8_e5m2fnuzfloat8_e4m3fnuz)_lhs_dtypes_rhs_dtypes
fp8_dtypess      rU   _is_fp8_mixed_precision_matmulz:_dot_general_lower.<locals>._is_fp8_mixed_precision_matmul  s5    &(:(&*@BJ*$B
)BBrW   tpuc                ~    t          j        | t          j                  pt          j        | t          j                  S rL   )r   r  rM   r	  r~  )rI  s    rU   r  z$_dot_general_lower.<locals>.<lambda>  s/    F-b"+>> >"-b"*== rW   )lhs_batching_dimensionsrhs_batching_dimensionslhs_contracting_dimensionsrhs_contracting_dimensions)precision_config)r  rS   r  r*   r  r   r#   r[   r9   r  r  r   r  r  r  )r  r  r  r  r  r  r  r  r  rhs_aval	lhs_dtype	rhs_dtyper  r+  r,  r  r  handled	dot_dnumss                      rU   _dot_general_lowerr    s   C C C |(H!Y)m)(?P<$?O&<y) )5? ?ggi   /WWY%7%7 /sC#/OOQ QsC#/OOQ Q (.	I ,+IyAA /sC".x~x~NNP PsC".x~x~NNP P (.	I %))"9oo"9oo!%o!6!6!%o!6!6	 * 8 8) 
o

x
(
(


))446 6 6
 rW   )cpur  c                    | j         \  }}|j         \  }}}||k    rt          d| d| d          |j         d         }	||	k    rt          d| d|	 d          ||fS )Nz;ragged_dot requires that lhs.shape[1] == rhs.shape[1]: got rQ  rc   r   zCragged_dot requires that rhs.shape[0] == group_sizes.shape[0]: got r[   re   )
r  r  r   rk  mr  group_countrkrp  
num_groupss
             rU   _ragged_dot_shape_ruler    s    	$!Qy+r1"WW
_RS__Z\___
`
`` #*J
yZeyylvyyy
z
zz
Q-rW   r  !_RAGGED_DOT_DOT_DIMENSION_NUMBERSnp.dtypec                    t          j        |j        t          j                  st          d          t          | |t          ||          S )NzDragged_dot requires that group_sizes.dtype is subtype of np.integer.r  )r   r  rS   rM   r~  re   rN  r  )r  r  r   r  r  rk  s         rU   _ragged_dot_dtype_ruler    sX    		;,bj	9	9 \
Z
[
[[	 c=^js  Mc  
d  
d  
d  drW   c                   |t          d          | \  }}}|\  }}	}
t          |||||          }t          |          t          j        urt          |||||          nt
          j                            |          }t          |	          t          j        urt          ||	|||          nt
          j                            |          }||z   }||fS )N#Unimplemented group_offset support.r  )r  r  r   r   r8  rT  rV  
zeros_like)r  r  r  r  r  r   r$  gsdxdyrk  r  dx_outdy_outtangent_outs                  rU   _ragged_dot_jvp_ruler    s   
 
C
D
DD(!Q)"b! 3  *" 
b	%	% 


!7    9
++ 	& 
b	%	% 


!7    9
++ 	 +	[	  rW   c                  |\  }}}|t          d          d }t          j        |          rd }	n3t          j                            |          }
t          | |
|||          }	t          j        |          rd }nH |||          } || |          }dgdgfdgdgff}t          j                            |||||          }|	|d fS )Nr  c                r   |j         d         }|| j         d         | j         d         f}t          j                            | |d          }t          j                            |j        |d          }t          j                            |          }t          t          j	        |d         g|j                  |d d         gd          }t          j                            ||d          }t          j                            ||d          }||k    ||k     z  }t          j
                            ||d          S )Nr   rp   )rp   r  r  r  r  )r[   rT  r   r
  r  rS   cumsumr  rM   r  rV  where)	r   r   r  r[   x_broadcastedr  
group_endsgroup_startsmasks	            rU   ragged_to_densez3_ragged_dot_transpose_rule.<locals>.ragged_to_dense  s   #A&K!'!*agaj1EG,,Qv>>M7##K$5ua@@D,,JM:a=/1BCCCssO	
 	
 L ))*eTBBJ7++L%FFLD TJ%67D9??4222rW   r  rp   r   )	r  r(   r7  rT  rV  matrix_transposer  r   r  )r  r  r  r  r  r   r$  r  r  grad_xy_tgrad_yx_densect_denser  s                  rU   _ragged_dot_transpose_ruler    s    (!Q
C
D
DD3 3 3$ A 
FF
)
$
$Q
'
'C

5  F A FFoa$$Gr2&&H#sqcA3Z0W  5 !  F 
	rW   r  c                B   |t          d          |j        d         | j        d         | j        d         f}t          | |ddg          } t          |j        |d          }t
          j                            |          }t          t          |          d d         |d d         gd          }	t          ||d          }t          |	|d          }	t          |	|k    ||k               }
t          |
| t          |                     } t          | |t          ||          S )	Nr  r   rp   r  r  r  r  r  )r  r[   r
  r  rS   rT  r   r  r  r=  rP  r-  r  r  )r  r  r   r  r  r  r[   r  r  r  r  s              rU   _ragged_dot_implr  ;  s$    
C
D
DD9Q<1sy|
4%eaV,,#	++UA	6	6$w~~k***k2A2
3B30A  ,  
E488*!,t<<,	\T)4*+<	=	=$tS&++&&#			93
 
 
 rW   c          	     $    t          dd           t          dd           t          j                   }|t                    k    r%d}t	          |                    |                    t                    |k     r2d}t	          |                    |t                                        t                                        t          t          t                                                  s&d}t	          |                    |                    t           fdt          |          D                       sBd}t	          |                    t          d	  j        D                                           t                    t          t                              k    s-t                    t          t                              k    r$d
}t	          |                                        S )Nr
  r[   r  z~broadcast_in_dim broadcast_dimensions must have length equal to operand ndim; got broadcast_dimensions {} for operand ndim {}.zbroadcast_in_dim target broadcast shape must have equal or higher rank to the operand shape; got operand ndim {} and target broadcast ndim {}.zubroadcast_in_dim broadcast_dimensions must be a subset of output dimensions, got {} for operand ndim {} and shape {}.c              3  t   K   | ]2}t          j        j        |         d |                  g          V  3dS r  )r   definitely_equal_one_of_dimr[   )r`   r  r  r  r[   s     rU   rb   z/_broadcast_in_dim_shape_rule.<locals>.<genexpr>l  sb       + + -gmA.>/0%8LQ8O2P.QS S + + + + + +rW   zbroadcast_in_dim operand dimension sizes must either be 1, or be equal to their corresponding dimensions in the target broadcast shape; got operand of shape {}, target broadcast shape {}, broadcast_dimensions {} c              3  >   K   | ]}t          j        |          V  d S rL   )r    replace_tracer_for_error_messager   s     rU   rb   z/_broadcast_in_dim_shape_rule.<locals>.<genexpr>u  s-      NN1d3A66NNNNNNrW   z^broadcast_in_dim broadcast_dimensions must be strictly increasing; got broadcast_dimensions {})_check_shapelikerM   r   rs   re   r  r  issubsetr	  rd   r   r[   r  )r  r[   r  operand_ndimrg   s   ```  rU   _broadcast_in_dim_shape_ruler  [  s    %w666%'=') ) )!!,S-....LC
CJJ3\BB
C
CCZZ,UC
CJJ|SZZ88
9
99	!	"	"	+	+Cc%jj0A0A,B,B	C	C KBC
CJJ3\5II
J
JJ	 + + + + + +L))+ + + 
+ 
+ 
&	# 
 CJJNNNNNNN#% % & & & 

3s+?'@'@#A#AAA !!U62F+G+G%H%HHH)C
CJJ344
5
55	,rW   c                  |s*t                               |j        ||          \  }}|g|fS t          ||          }d |D             }t	          j        t          |          |j        j        |j        j                  }|gt          j	        fS )Nr  c                V    g | ]&}t          |          t          j        u r|j        n|'S r_   r   r   LiteralrH   r`   r   s     rU   r   z4_broadcast_in_dim_typecheck_rule.<locals>.<listcomp>  0    LLLQ$q''T\11qLLLrW   )
r  abstract_evalrj  r   r   r  r   rS   r   r   )rk  r  r[   r  r   r   r   	out_shapes           rU    _broadcast_in_dim_typecheck_ruler    s    	 
'*88E8L 9 N NHg:w !	22ILL)LLLI y!1!17<3E!(!79 9H:t&&rW   c          	        t          |           t          j        u rt          j        |j                  gS d t	          |j        j                  D             }t          t          j        ||                    }t          t          j        t          t          |                    |                    }t          t          | |          |          gd gt          |          z  z   S )Nc                B    g | ]\  }}t          j        |d           |S r~   r   )r`   r  ss      rU   r   z4_broadcast_in_dim_transpose_rule.<locals>.<listcomp>  s=     / / /TQ'1--/q / / /rW   )r   r   r8  rj  r  r[   r   rM   deleter	  rs   r#  r  )r  r  r[   r  r   	unit_dimsr  r?  s           rU    _broadcast_in_dim_transpose_ruler    s    	"XXL&&''/ /Yw|'9:: / / /)
	.	::
;
;%	rys5zz**E22	3	3${2t,,i88
9&3y>>
!" #rW   c                |   | ^}}|^}}d }|t          |t                    r|j        }	n|}	t          j        ||	d          }
t          |t                    r|j        }n|j        |	         }dt          t          j	        d|                    z   }n$|}
t          t          j	        d|                    }g }g }t          ||          D ]\  }}|t          |t                    sJ |}nR|j        j        }|                    |           |t          |          }nd}t          |          |k    s
J |            |                    |           |ft!          ||          z   }t#          |
||          }d t%          |          D             }t          j        |j        dt          ||                    }||fS )Nr   r  rp   z3All segments lengths arrays must be the same lengthc                "    g | ]\  }}||dz   S r  r_   )r`   ra   r  s      rU   r   z0_broadcast_in_dim_batch_rule.<locals>.<listcomp>  s!    GGGvsAQYSUYYYrW   )r   r.   rj  r)   moveaxisr  r[   r   rM   r`  r  rJ   rS   boundr   rs   r   r
  r  make_batch_axisr   )ro  rp  r[   r  r  r   operand_bdimdyn_shape_bdimsstacked_sizerj  new_operandnew_broadcast_dimensions
dyn_limitsout_ragged_sizesr  bdimr  rg   r8  r_  out_ragged_axesout_bdims                         rU   _broadcast_in_dim_batch_ruler    s    %'I#- ,,,
++ "!.ll!l#G\1==K,
++ 1!&ll]<0l#eBF16J,K,K&L&LLK$RVA/C%D%DEE *O44  keT|s#####eekee$$$		5zzC5zz\)))3)))eo 0
 C CC)K4LMM&GG5)9)9GGG/%k1c/+;<<> >(		rW   c                    | j         ^}}|s/t          j        | j        d         |j        j                  r|gd fS d g| fS r  )r  r   r   r   rj  r[   )r   r  dyns      rU   _broadcast_in_dim_fwd_ruler    sL    J'!c	 ,SZ-@!&,OO 3963;rW   c                   t          ||          }|s|                     t          |f|          S t          j        t          ||          |j        |j                  }t          | t          ||g|R i |S Nr  )	r  default_process_primitiver  r   r  r   rS   r   r   )r   r   r[   r  r  r   rj  s          rU   _broadcast_in_dim_staging_ruler    s    e2FGGG&	 M**+=tVLLL		+E377!+	N	N$	 (:D! 
+c 
+ 
+ 
+#)
+ 
+ +rW   c                  ~ ~|\  }g }g }|j         D ]}	t          |	          t          j        u r|                    |	j                   8t          |	          t          u r|                    |	           dt          |	t          j	                  sJ |                    d            |                    |	           t          j        |g|R t          |          |dgS r  )r[   r   r   r  r   r  rJ   r   r   r   r  r   r   )
r  r  r   r[   r  r   r   r8  new_dyn_shaperz   s
             rU   _broadcast_in_dim_padding_ruler    s   	)()->  aAww"$$$qw	aCq4;'''''t1

!! Mm M M5;K;K7KM M M 
N NrW   c                   | ^}}|^}}t          j        |g|R ||d}t          |          t          j        u r t          j                            |          }	nt          j        |g|R ||d}	||	fS r  )r  r   r   r   r8  r  )
r  r  r[   r  r  r   operand_dotrk  r$  y_dots
             rU   _broadcast_in_dim_jvp_ruler    s    'I/+g I	 I I3GI I I!	+',&&L##A&&EE#K O) O O59MO O OE	
E/rW   c          	        |s/|                      t          |g|R t          ||                    S t          d |D                       sJ |                     |          }t          | j        |          }t          |          fd|D             }t          j        t          |          |j
        |j                  }t          j        | t          j                            |          d           }	t          j        |g||	gt          t          ||          t          j        t%          j                              }
|
|	_        |	S )Nr  c              3  H   K   | ]}|j                                         V  d S rL   )pvalis_knownr  s     rU   rb   z1_broadcast_in_dim_partial_eval.<locals>.<genexpr>  s.      221QV__222222rW   c                6    g | ]}|t                    n|S rL   r   )r`   rz   dyn_shape_tracers_s     rU   r   z2_broadcast_in_dim_partial_eval.<locals>.<listcomp>  s+    HHHQ	D#$$$qHHHrW   )r  r  r  rd   instantiate_constrk   r   r   r  r   rS   r   r   JaxprTracer
PartialValunknownnew_eqn_reciper   r   r   recipe)r   r  r[   r  r   operand_tracerdyn_shape_tracersshape_r   r   r   r  s              @rU   _broadcast_in_dim_partial_evalr)    sT   	 F**W1y115/CDDDF F F 
22	222	2	2222**733.%19==-..HHHH%HHH&uV}}gmW=NOO(~eR]%:%:8%D%DdKK*
*)*ZL:L
-ABBB
o'/11	3 	3# *	rW   c                   | j         \  }|r$|                    t          ||                    }t          j        | |||          gS )Nr  r  )r  r  r   r*   r
  )r  r   r[   r  r   r  s         rU   _broadcast_in_dim_lowerr+    sa    m)( I%5eY%G%GHHH 
Q5IK K K 
L LrW   c                    i }| j         d         r| j         d         |d<   |                     || j        d d                   }t          j        |||          S )Nr  rp   )r   r  )r   replpacer  r   r  )r   r  r  r  new_eqns        rU   _broadcast_in_dim_pp_ruler/    s`     .Z&' P-0Z8N-ON)*LLsz"1"~LFF'	gw	1	11rW   c                   |sKt          d |D                       s2t          | ||          }t          j        || j        | j                  S t          j        t          ||          | j        | j                  S )Nc              3     K   | ]P}t          |t          j                  o1t          t          j        |          j                  t          j        u V  Qd S rL   r   r   DArrayr   r  rS   bintr   s     rU   rb   z2_broadcast_in_dim_abstract_eval.<locals>.<genexpr>#  n       H H<= DK(( 84=##)**di7H H H H H HrW   r  )ri  r  r   r#   rS   r   r  r   )r   r[   r  r   s       rU   _broadcast_in_dim_abstract_evalr6  !  s    
 9
 H HAFH H H H H9 )	-AC C CEE17AK888 
	+E9==qw	T	TTrW   r
  c                    | j         r0| j         |j         k    r t          d| j          d|j         d          |j         r0|j         |j         k    r t          d|j          d|j         d          |j         S )NzLclamp requires min.shape == operand.shape or min.shape == (), got min.shape=z, operand.shape=rc   zLclamp requires max.shape == operand.shape or max.shape == (), got max.shape=r  )rP   r  rR   s      rU   _clamp_shape_ruler8  =  s    Y I39--
 H),H H6=mH H H I I IY I39--
 H),H H6=mH H H I I I	rW   r  c                   | \  }}}|\  }}}t          d t          | |          D                       }	||cxk    r|k    r;n n7t          j        |          t          j        |          cxk    rt          j        |          k    r!n nt                              |||          |fS t          j        |          t          j        |          cxk    rdk    r!n nt                              |||          |fS t          j        |          t          j        |          cxk    rdk    rOn nt          ||j        |g          }t          ||j        |g          }t                              |||          |fS nPt          j        |          dk    r8t          j        |          dk    r |t                              |||          |fS t          j        |          rt          j	        |||	          n|}t          j        |          rt          j	        |||	          n|}t          j        |          rt          j	        |||	          n|}t          j        |          dk    r-t          j        |          dk    rt          ||j                  }t          j        |          dk    r-t          j        |          dk    rt          ||j                  }dt          j        |          cxk     rt          j        |          k     rNn nKt          j        |          dk    sJ t          j        |                      t          ||j        dg          }dt          j        |          cxk     rt          j        |          k     rNn nKt          j        |          dk    sJ t          j        |                      t          ||j        dg          }t          j        |          t          j        |          k    rIt          j        |          dk    sJ t          j        |                      t          ||j                  }t                              |||          dfS )Nc              3  :   K   | ]\  }}||j         |         V  d S rL   r  r`   r   r  s      rU   rb   z$_clamp_batch_rule.<locals>.<genexpr>L  9          TQ gaj   rW   r   rp   )r   r  rM   r[   r  r   r   r
  r)   bdim_at_frontr  )
ro  rp  r   rP   r   rR   min_bdimx_bdimmax_bdimr  s
             rU   _clamp_batch_rulerA  I  s   +#q#)(FH	    Sz%B%B       
  
 $ ####8#####	x}}4444rx}}44444\\#q#&&..		*	*	*	*	*	*	*	*	*\\#q#&&..		*	*	*	*	*	*	*	*	*S!'H:66cS!'H:66c\\#q#&&.. 
+ 
ws||qRWS\\Q..63E<<Q$$f,,79x}}MsHd333##79x}}MsHd333##13!ChQ---!!WS\\Q271::>>
C
!
!CWS\\Q271::>>
C
!
!C""""

"""""73<<1bgcll
3!
-
-C""""

"""""73<<1bgcll
3!
-
-CWS\\BGAJJ71::???BGAJJ???!SYA	c1c	"	"A	%%rW   c           	         t          t          t          ||          t          ||                    | t	          |                    S rL   r-  rP  r  r  r=  r  rP   r  rR   s       rU   r  r  p  s=    
RW--r#s||<<F7OO% % rW   c           	         t          t          t          ||          t          ||                    | t	          |                    S rL   rC  rD  s       rU   r  r  s  s?    
R--r'3/?/?@@F7OO% % rW   c                Z    t          t          ||          | t          |                    S rL   )r-  r  r=  rD  s       rU   r  r  v  s&    
C!!1fWoo
6
6 rW   c                    |                     d          | sd}t          |          t          d | D                       sJd}t          d | D                       }t          |                    t          |                              t          d | D                       dk    rAd}t          |                    d	                    d
 | D                                           dcxk    r| d         j        k     sDn d}t          |                    d	                    d | D                                           fd| D             }|d d         |dd          k    sWd}d | D             }t          |                    d	                    t          t          |                                        t          fd| D                       }| d         j        }|d          |fz   |dz   d          z   S )Nr  z0concatenate expects at least one operand, got 0.c              3  @   K   | ]}t          |t                    V  d S rL   r   r"   r`   r  s     rU   rb   z*_concatenate_shape_rule.<locals>.<genexpr>  s,      HHGZ//HHHHHHrW   z2All objects to concatenate must be arrays, got {}.c              3  D   K   | ]}t          |t                    |V  d S rL   rI  r`   r  s     rU   rb   z*_concatenate_shape_rule.<locals>.<genexpr>  s1      IIR:b-+H+HIbIIIIIIrW   c                    h | ]	}|j         
S r_   r   rJ  s     rU   ru   z*_concatenate_shape_rule.<locals>.<setcomp>  s    	/	/	/7',	/	/	/rW   rp   zGCannot concatenate arrays with different numbers of dimensions: got {}.r  c              3  >   K   | ]}t          |j                  V  d S rL   r  r[   r`   r  s     rU   rb   z*_concatenate_shape_rule.<locals>.<genexpr>  s*      (H(H!QW(H(H(H(H(H(HrW   r   z@concatenate dimension out of bounds: dimension {} for shapes {}.c                6    g | ]}t          |j                  S r_   rP  rQ  s     rU   r   z+_concatenate_shape_rule.<locals>.<listcomp>  s     4T4T4TaS\\4T4T4TrW   c                T    g | ]$}|j         d          |j         dz   d          z   %S r  r  )r`   r  r  s     rU   r   z+_concatenate_shape_rule.<locals>.<listcomp>  sH     % % % M*9*%ikll(CC % % %rW   r  zCannot concatenate arrays with shapes that differ in dimensions other than the one being concatenated: concatenating along dimension {} for shapes {}.c                    g | ]	}|j         
S r_   r  rJ  s     rU   r   z+_concatenate_shape_rule.<locals>.<listcomp>  s    444gm444rW   c              3  2   K   | ]}|j                  V  d S rL   r  )r`   r  r  s     rU   rb   z*_concatenate_shape_rule.<locals>.<genexpr>  s*      991AGI&999999rW   )r   re   rd   r   r  r   rs   r  r   rk   r  r  r[   )r  ry  rg   r  rX   concat_sizeex_shaper  s          @rU   _concatenate_shape_rulerX  |  s2   jj%%)	 
<C
C..	HHxHHH	H	H *
>C	II8III	I	IB
CJJtBxx((
)
))	/	/h	/	/	/00A55
SC
CJJtyy(H(Hx(H(H(HHHII
J
JJ	
i	*	*	*	*(1+*	*	*	*	*
LC
CJJy$))4T4T84T4T4T*U*UVV
W
WW% % % %#% % %&	qrr
	"	")C 548444F
CJJy$))CV4D4D*E*EFF
G
GG999999999+a[(	*9*		.)A+,,1G	GGrW   c                 6    t          dg| R   | d         j        S )Nr  r   )r  rS   )r  ry  s     rU   _concatenate_dtype_rulerZ    s%    M-H----	!	rW   c                   d |D             }t                     t          j        u rd |D             S t          j        fd|D                                                       }t          j        t          |           j        ft                                                    }t          j
         j        t          |          df                                          }t          |dd                    D ]\  }}|d d         |         |<   t          |          D ]\  }}	||         |	<    fdt          |||          D             S )Nc                \    g | ])}t          j        |          r|j        j        n|j        *S r_   )r(   r7  rj  r[   rQ  s     rU   r   z/_concatenate_transpose_rule.<locals>.<listcomp>  sB     ' ' ' %'$:1$=$=JAFLL17 ' ' 'rW   c                l    g | ]1}t          j        |          rt          j        |j                  nd 2S rL   r(   r7  r   r8  rj  rQ  s     rU   r   z/_concatenate_transpose_rule.<locals>.<listcomp>  sI        %'$:1$=$=GGL   4   rW   c                     g | ]
}|         S r_   r_   )r`   r[   r  s     rU   r   z/_concatenate_transpose_rule.<locals>.<listcomp>  s    666ey	666rW   r  rp   r  c                p    g | ]2\  }}}t          j        |          rt          j        ||          nd 3S rL   )r(   r7  r/   r2  )r`   r  startlimitr  s       rU   r   z/_concatenate_transpose_rule.<locals>.<listcomp>  s[     L L L)!UE /1.DQ.G.G GM!UE***L L LrW   )r   r   r8  rM   r  tolistr  rs   r   rJ   tiler[   r  r  )
r  r  r  operand_shapeslimit_pointsstartslimitsr  r  ls
   ``        rU   _concatenate_transpose_rulerj    s   ' '%' ' '.	!WW     96666~6668 88> Xs8}}af-S999@@BBFWQWs8}}a01188::F&*%% * *1!#2#&q)a	ll&!! % %1!!_a	llL L L L-066-J-JL L L LrW   c                   t          d t          | |          D                       fdt          | |          D             }t          ||dz             dfS )Nc              3  :   K   | ]\  }}||j         |         V  d S rL   r  )r`   r  r  s      rU   rb   z*_concatenate_batch_rule.<locals>.<genexpr>  s=       # #T! htn!!!!# #rW   c                h    g | ].\  }}|t          j        ||d          nt          |f          /S r  )r)   r  r  )r`   r  r  r  s      rU   r   z+_concatenate_batch_rule.<locals>.<listcomp>  sS     = = ="d 150@hD!,,,R$))= = =rW   rp   r   )r   r  r  )ro  rp  r  r  r  s       @rU   _concatenate_batch_rulern    s    	 # #Sz-J-J # # # 
# 
#$= = = =!,
;;= = =( 
Xy1}	-	-q	00rW   c               j    t          fd| D                       rt          |          gS t          )Nc              3  p   K   | ]0}t          |j                 t          t          j        f          V  1d S rL   )r   r[   rJ   rM   r~  )r`   ru  r  s     rU   rb   z(_concatenate_pad_rule.<locals>.<genexpr>  sO       	 	 
AGI&bj(9	:	: 	 	 	 	 	 	rW   )rd   r  r  )r  r  r  r  s     ` rU   _concatenate_pad_rulerq    sT     	 	 	 		 	 	   ),,--
rW   r  c               R    t          j        |t          j        |                    gS rL   )r9   r  r*   i64_attr)r  r  ry  s      rU   _concatenate_lowerrt    s!    
/"dmI66
7
7	88rW   c                   | j         |j         k    r/d}t          |                    | j         |j                             t          | |          S )Nz@pad operand and padding_value must be same dtype: got {} and {}.)rS   re   r  r0   )r  r  r  rg   s       rU   _pad_dtype_rulerv    sH    ]m)))
LC
CJJw}m.ABB
C
CC	g}	-	--rW   c                  ~t          j        |           }t          |          t          j        |           k    st	          d| d|           t          d |D                       st	          d|           t          d t          ||          D                       }t          d |D                       sd| d| d	| }t	          |          |S )
NzVlength of padding_config must equal the number of axes of operand, got padding_config  for operand shape c              3  *   K   | ]\  }}}|d k    V  dS r^   r_   )r`   rk  r  s      rU   rb   z"_pad_shape_rule.<locals>.<genexpr>  s,      221aQ!V222222rW   zKinterior padding in padding_config must be nonnegative, got padding_config c              3  `   K   | ])\  \  }}}}||z   t          j        ||d z             z   V  *dS r  )r   
dilate_dim)r`   ri  hr  rz   s        rU   rb   z"_pad_shape_rule.<locals>.<genexpr>  sa       D D!YaA QAE222 D D D D D DrW   c              3  "   K   | ]
}|d k    V  dS r^   r_   r   s     rU   rb   z"_pad_shape_rule.<locals>.<genexpr>  s&      $$Q!V$$$$$$rW   zADimension size after padding is not at least 0, got result shape z, for padding_config z and operand shape )rM   r[   rs   r   r   rd   r   r  )r  r  r  op_shaper_  rg   s         rU   _pad_shape_ruler    sC   Xg(	^		 0 0	0	0
 57E5 5*25 5 6 6 6 
22>222	2	2 =
 <+9< < = = = D D%(%B%BD D D D D&	$$V$$$	$	$ ,%, ,<J, ,!), ,C S//	-rW   c                   	
 t                     t          j        u r_t          j        |          rt          j        |j                  nd }t          j        |          rt          j        |j                  nd }n}t          j        |          \  
	 fd}	
 fd}t          j        |          r
 |            nd }t          j        |          r"t           |            ||                    nd }||gS )Nc                b    t          | t          t          j                                      S rL   )r  r   r	  r   )r   r  s    rU   r  z _pad_transpose.<locals>.<lambda>  s!    k!T%--%8%899 rW   c            	     f   t          t          j                  t          j                  t          j                            } t	          t          j        dj                  |           }t          j        |t          j                  |j	        t          j
        d                    S )Ng        rp   )rB   rM   negativer  r"  r   rS   r/   r2  r[   r`  )unpad_configunpaddedr7  interiorr6  r  s     rU   t_opz_pad_transpose.<locals>.t_op  s    bk"oor{2 mH557 7lQQW--|<<h]8R]2%6%66(A..0 0 0rW   )	r   r   r8  r(   r7  rj  r   unzip3rc  )r  r  r  r  	t_operandt_padvtotalr  r7  r  r6  s   `       @@@rU   _pad_transposer    s   	!WW.0.DW.M.MWW\***SWI131G1V1V`W\-,---\`FF{>22BH9999E0 0 0 0 0 0 0 0 099CtI020F}0U0U_Sq55++,,,[_F
V	rW   c                  | \  }}|\  }}|d}t          ||j        |         f          }t          |          }|                    |d           |t	          |||          |fS |dk    s
J |            t	          |t          |          |          }t	          t          |dt          j                  d|          }t          ||j        |f          }	t          |||	          |fS )Nr   r   r   r   TF)r  r[   r   r!  r"  rG  r*  rM   r}  r
  r-  )
ro  rp  r  r  r  r  padding_value_bdimr   r  broadcasted_paddings
             rU   _pad_batch_ruler    s    ''=%/","L-"56H"I!KLLG''.i000w~66DD	q	 	 	 "4	 	 	 	'5>>>22!	Ywbh//	G	G$(*6: :	a,	-	-|	;;rW   r"  c          	     z    | j         \  }t          j        |          \  }}}t          j        | ||||||          gS rL   )r  r   r  r*   r"  )r  r   r  r  r  lowr  r  s           rU   
_pad_lowerr    s@    m)(N33#tX
(3!]Cx
H
H	IIrW   c                   | j         S rL   r  r&  s     rU   _squeeze_dtype_ruler  #  
    	rW   c               F    t          t          j        |           |          S rL   )_compute_squeeze_shaperM   r[   r&  s     rU   _squeeze_shape_ruler  &  s    	 1 1:	>	>>rW   c                    t          |          t                    t          |          k    rt          d|           t           fdD                       st          d|           t	           fd|D                       rt          d d|          t          fdt                     D                       S )Nzdimensions are not unique: c              3  R   K   | ]!}d |cxk    ot                    k     nc V  "dS r^   rr   r`   rz   r[   s     rU   rb   z)_compute_squeeze_shape.<locals>.<genexpr>-  sE      33QQ!    c%jj    333333rW   z$dimensions outside range [0, ndim): c              3  P   K   | ] }t          j        |         d            V  !dS r  r   r  s     rU   rb   z)_compute_squeeze_shape.<locals>.<genexpr>/  s7      DDAT"58Q//	/DDDDDDrW   zPcannot select an axis to squeeze out which has size not equal to one, got shape=z and dimensions=c              3  *   K   | ]\  }}|v	|V  d S rL   r_   )r`   r  r  r  s      rU   rb   z)_compute_squeeze_shape.<locals>.<genexpr>3  s1      CCTQ(1B1Bq1B1B1B1BCCrW   )r  rs   r   rd   ri  r   r  )r[   r  r  s   ` @rU   r  r  )  s    __(]]c*oo%%
?:??
@
@@	3333(333	3	3 J
HJHH
I
IIDDDDDDDDD 0
	/	/ 	/!+	/ 	/0 0 0 
CCCCYu--CCC	C	CCrW   c               P    t          j        |          sJ t          | |          gS rL   )r(   r7  r#  )r  r  r  s      rU   _squeeze_transpose_ruler  5  s,    			(	((((
a
$
$	%%rW   c          	     `   | \  }|\  }t          j        ||d          \  }}t          t          j        d|                    }t          |t                    r|j        n|}t          j        |t          t          j
        ||j                  |                    }t          ||          |fS )Nr   rp   r$  )r)   move_stacked_axisr   rM   r`  r   r.   rj  rn  r  rm  r[   r  )ro  rp  r  r  r  out_stack_dimbdim_outs          rU   _squeeze_batch_ruler  9  s    ('
%$,WdA>>-'4RVAz**++*'1$
'C'CM$##-#X3D'-HH*UUW W( 
Z	0	0	0(	::rW   r  c               H    ~t          j        | || j        d                   gS r  )r*   r  r  )r  r  r  s      rU   _squeeze_lowerr  J  s#    
,sGS]1%5
6
6	77rW   
core.Shapec                    t          |           dk    r-t          dt          j        dt          j                            S d | D             }t          |d          S )z?Converts a shape that may contain Poly values into a JAX value.r   r  c           	         g | ]<}t          t          t          j        |          t          j                  d           =S )r  )r#  r  r   r  rM   int64r   s     rU   r   z"shape_as_value.<locals>.<listcomp>U  sQ     
 
 
  &t'>q'A'A28LL 
 
 
rW   r  )rs   r  rM   r   r  r  )r[   r  s     rU   shape_as_valuer  Q  sd    ZZ1__bhq"(++,,,
 
 
 
 
$
 
TQ	'	'	''rW   c          	        t          d |D                       s$d}t          |                    |                    t          j        t          j        |                     }t          j        |          }t          j        j	        s6||k    s0d| d| dt          j        |            d| d	}t          |          |vt          |          t          t          t          j        |                               k    r7d}t          |                    |t          j        |                               t          |          S )Nc              3  "   K   | ]
}|d k    V  dS r^   r_   r   s     rU   rb   z&_reshape_shape_rule.<locals>.<genexpr>]  s&      ''Q!V''''''rW   z/reshape new_sizes must all be positive, got {}.z4reshape total size must be unchanged, got new_sizes z (of total size z) for shape z).z_reshape dimensions must be a permutation of operand dimensions, got dimensions {} for shape {}.)rd   re   r  r4  r5  rM   r[   r   ri   rj   r  r	  r   r   )r  r  r  rg   operand_sizenew_sizes         rU   _reshape_shape_ruler  \  sD   	''Y'''	'	' +
;C
CJJy))
*
**28G,,--,Yy!!(


% 
(
"
".) . .%. .358G3D3D. .). . .C C..
:#eBGG$4$4556666/ccjjRXg->->??@@@	y		rW   c                  |s*t                               |j        ||          \  }}|g|fS t          ||          }d |D             }t	          j        t          |          |j        j        |j        j                  }|gt          j	        fS )Nr  c                V    g | ]&}t          |          t          j        u r|j        n|'S r_   r  r  s     rU   r   z+_reshape_typecheck_rule.<locals>.<listcomp>x  r  rW   )
r  r  rj  r   r   r  r   rS   r   r   )rk  r  r  r  r   r   r   r  s           rU   _reshape_typecheck_ruler  p  s    	 
'!//	j 0 B BHg:w !I66ILL)LLLI y!1!17<3E!(!79 9H:t&&rW   c                   | j         S rL   r  )r  r  r  s      rU   _reshape_dtype_ruler  ~  r  rW   c          	        t          j        |          sJ |t          | |j        j                  gS t          t          | t          j        |j        j        |                    t          j        |                    gS rL   )	r(   r7  r  rj  r[   r:  rM   r  rW  )r  r  r  r  s       rU   _reshape_transpose_ruler    sx    			(	((((Aw|)**++ga);Z!H!HIIj,,. . / /rW   c                   | \  }|\  }t          j        ||d          }|%dt          t          j        d|                    z   }t          ||j        d d         |z   |          dfS )Nr   r  rp   )r)   r  r   rM   r`  r  r[   )ro  rp  r  r  r  r  s         rU   _reshape_batch_ruler    so    ('
%$gtQ//'bfQ
33444J	'-+i7	D	Da	GGrW   c                   | j         \  }|'t          j        |t          j        |                    }|r$|                    t          ||                    }t          j        | ||          gS )Nr  )r  r9   r:  r*   r  r  r   r  )r  r   r  r  r   r  s         rU   _reshape_lowerr    sk    m)(a-j99::A M%5i%K%KLLH
,sAx
(
(	))rW   c                   t          ||          }|s|                     t          |f|          S t          j        t          ||          |j        |j                  }t          | t          ||g|R i |S )Nr  )	r  r  r  r   r  r   rS   r   r   )r   r   r  r  r  r   avs          rU   _reshape_staging_ruler    s~    )
;;;&	 D**9qdFCCC))S9917AKPP"	 	2q	I3	I	I	I&	I	IIrW   r  c               \   t          dd|           t          t          |                    t          |          k    r$d}t          |                    |                    |rBt          |          | j        k     s*d}t          |                    || j                            | j        S )Nr'  r  z&rev dimensions must be unique, got {}.zYrev dimensions must all be less than operand ndim, got dimensions {} for operand ndim {}.)r  rs   r  re   r  r   r   r[   )r  r  rg   s      rU   _rev_shape_ruler    s    5,
333ZS__,,
2C
CJJz**
+
++ :Z((7<77%C
CJJz7<88
9
99	rW   c               T    | \  }|\  fd|D             }t          ||          fS )Nc                *    g | ]}|k    r|d z   n|S r~   r_   )r`   r  r  s     rU   r   z#_rev_batch_rule.<locals>.<listcomp>  s)    BBB!Q$YYAEEABBBrW   r'  )ro  rp  r  r  new_dimensionsr  s        @rU   _rev_batch_ruler    s?    ('
%$BBBBzBBB.	Wn	%	%t	++rW   r'  c                $    t          | |          gS rL   r  )r  rk  r  s      rU   r  r    s    s1j/A/A.B rW   c               R    t          j        |t          j        |                    gS rL   )r9   reverser*   r  )r  r   r  s      rU   
_rev_lowerr    s"    
+a-j99
:
:	;;rW   c                   t          |t          t          t          j        f          s1d}t          |                    t          |                              t          t          |                    t          t           j
                            k    r*d}t          |                    | j                            t           fd|D                       S )Nz;transpose permutation must be a tuple/list/ndarray, got {}.zitranspose permutation isn't a permutation of operand dimensions, got permutation {} for operand shape {}.c              3  2   K   | ]}j         |         V  d S rL   r  )r`   old_idxr  s     rU   rb   z(_transpose_shape_rule.<locals>.<genexpr>  s*      AA'w}W%AAAAAArW   )r   r   r   rM   r   re   r  r   r  r	  r   r[   )r  r3  rg   s   `  rU   _transpose_shape_ruler    s    	K%rz!:	;	; 3
GC
CJJtK0011
2
22
6+5w|)<)<#=#===6C
CJJ{GM::
;
;;	AAAA[AAA	A	AArW   c               2   | \  }|\  }t          |t                    r|j        n|ft          fd|D                       z   }t          |t                    r)t	          j        |                    d          |          }nd}t          ||          |fS )Nc              3  2   K   | ]}|k     r|n|d z   V  dS r  r_   )r`   r  	stack_dims     rU   rb   z(_transpose_batch_rule.<locals>.<genexpr>  s3      OOa1y==aaacOOOOOOrW   r   )r   r.   rj  r   r)   transpose_ragged_axesr  r:  )ro  rp  r3  r  r  permres_bdimr  s          @rU   _transpose_batch_ruler    s    ('
%$#-dJ#?#?IdT)
OOOO;OOOOO	O$j!! -d.D.DQ.G.GNNHHH	7D	!	!8	++rW   c               \   | j         \  t          j        j        t          j                  rWj        j                            j                  j        }fdt          t          |                    D             }g ||}t          j        |t          j        |                    gS )Nc                $    g | ]}j         |z   S r_   rN  )r`   r  r  s     rU   r   z$_transpose_lower.<locals>.<listcomp>  s     FFF1X]Q&FFFrW   )r  r   r  rS   r  r  physical_element_avalr[   r	  rs   r9   r:  r*   r  )r  r   r3  	elt_shapetrailing_dimsr  s        @rU   _transpose_lowerr    s    m)(x~v77 1%;;  FFFFc)nn0E0EFFFM0K0-0K
-4/<<
=
=	>>rW   r:  c                H    t          | t          j        |                    gS rL   )r:  rM   rW  )r  rk  r3  s      rU   r  r    s    1bj6M6M)N)N(O rW   c                   t                    dk    rt          d          t          fddd          D                       rAd}t          |                    d                    d D                                           | j        rK| j        d         j        k    r5d}t          |                    | j        d         j                            d         j        S )	Nr   z"select must have at least one casec              3  D   K   | ]}|j         d          j         k    V  dS r^   r  )r`   caser/  s     rU   rb   z%_select_shape_rule.<locals>.<genexpr>  s0      <<$uQx~	%<<<<<<rW   rp   z1select cases must have the same shapes, got [{}].r  c                6    g | ]}t          |j                  S r_   rP  rb  s     rU   r   z&_select_shape_rule.<locals>.<listcomp>  s     )F)F)F1#ag,,)F)F)FrW   zfselect `which` must be scalar or have the same shape as cases, got `which` shape {} but case shape {}.)rs   re   ri  r  r  r[   )r.  r/  rg   s    ` rU   _select_shape_ruler    s    ZZ1__
8
9
99<<<<%)<<<<< J
=C
CJJtyy)F)F)F)F)FGGHH
I
II
[ =U[E!HN225C
CJJu{E!HN;;
<
<<	qrW   c                   t          dg|R   t          j        | j        t          j                  s<t          j        | j        t          j                  st          d| j         d          t          j        | j        t          j                  r"t          |          dk    rt          d          |d         j        S )Nr-  z4select `which` must be boolean or integer type, got rc   r  z2select with boolean `which` cannot have > 2 cases.r   )	r  r   r  rS   rM   r}  r~  re   rs   r1  s     rU   _select_dtype_ruler    s    H%u%%%%

EK
2
2 '

EK
4
4'
 &{& & & ' ' 'u{BH-- J#e**q..
H
I
II	qrW   c                4    t          d |D                       S )Nc              3  $   K   | ]}|j         V  d S rL   r   rb  s     rU   rb   z)_select_weak_type_rule.<locals>.<genexpr>  s$      ((QQ[((((((rW   )rd   r1  s     rU   _select_weak_type_ruler    s    	((%(((	(	((rW   c                    t          j                  rJ t                     t          j        u rd gd |D             z   S t           d          t          j                  t          j        t          j	                  k    r_t          j        |d                   rt                     nd }t          j        |d                   rt                     nd }d ||fS d g fdt          |          D             z   S )Nc                l    g | ]1}t          j        |          rt          j        |j                  nd 2S rL   r^  rb  s     rU   r   z*_select_transpose_rule.<locals>.<listcomp>  sI     % % % .0-CA-F-FPW\!&)))D % % %rW   r   rp   c                    g | ]H\  }}t          j        |          r-t          t          t	          |                              nd IS rL   )r(   r7  r-  r}  r  )r`   r  r  r  r.  r  s      rU   r   z*_select_transpose_rule.<locals>.<listcomp>  sb       8?4R#D))4&E6%++,,a
7
7
7/3  rW   )r(   r7  r   r   r8  r*  r   rS   rM   r}  r-  r  )r  r.  r/  ct0ct1r  s   ``   @rU   _select_transpose_ruler    s2   #E*****	!WW6 % %#% % % % % aOOE|Ebhrx0000')'=eAh'G'GQF5%###Tc')'=eAh'G'GQF5!U###TcCV      CLUCSCS    rW   c                  	 | ^|^	t          d t          | |          D                       t          	fdD                       rt          j                  t          j        d                   k    rt          gR  	fS t          j                  dk    sJ t          d         j        	g          t          gR  	fS t          j                  dk    rt          d D                       rt          fddd          D                       rt          gR  d         fS t          fdD                       rJd         fdt          dd          dd                    D             }t          d         g|R  fS t          j                  rt          j	        	          nt          d	 D                       sfd
t                    D             t          fddd          D                       sJ dt          j                  cxk     rt          j        d                   k     r:n n7t          j                  dk    sJ t          d         j        dg          t          j                  t          j        d                   k    r.t          j        d                   dk    sJ fdD             t          gR  dfS )Nc              3  :   K   | ]\  }}||j         |         V  d S rL   r  r;  s      rU   rb   z%_select_batch_rule.<locals>.<genexpr>  r<  rW   c              3  $   K   | ]
}|k    V  d S rL   r_   )r`   r  
which_bdims     rU   rb   z%_select_batch_rule.<locals>.<genexpr>  s(      33t	333333rW   r   rp   c              3     K   | ]}|d uV  	d S rL   r_   )r`   r  s     rU   rb   z%_select_batch_rule.<locals>.<genexpr>%  s'      "K"K4t#3"K"K"K"K"K"KrW   c              3  0   K   | ]}d          |k    V  dS r^   r_   )r`   r  
case_bdimss     rU   rb   z%_select_batch_rule.<locals>.<genexpr>&  s,      
<
<T:a=D 
<
<
<
<
<
<rW   c              3  x   K   | ]4}t          j        d                    t          j        |          k    V  5dS r^   rM   r[   r`   rc  r/  s     rU   rb   z%_select_batch_rule.<locals>.<genexpr>(  s>      >>1RXeAh28A;;.>>>>>>rW   c                B    g | ]\  }}t          j        ||          S r_   )r)   r  )r`   rc  c_bdimr  s      rU   r   z&_select_batch_rule.<locals>.<listcomp>*  sB     F F F"F &q&$77 F F FrW   c              3  F   K   | ]}d t          j        |          k    V  dS r_   Nr  rb  s     rU   rb   z%_select_batch_rule.<locals>.<genexpr>0  s/      ..1R28A;;......rW   c                B    g | ]\  }}t          j        ||          S r_   r)   r=  )r`   rc  r  r  s      rU   r   z&_select_batch_rule.<locals>.<listcomp>1  s<     4 4 4D #AtT22 4 4 4rW   c              3  x   K   | ]4}t          j        d                    t          j        |          k    V  5dS r^   r  r  s     rU   rb   z%_select_batch_rule.<locals>.<genexpr>3  s>      BB1RXeAh28A;;.BBBBBBrW   c                :    g | ]}t          |j                  S r_   )r  r[   )r`   rc  r.  s     rU   r   z&_select_batch_rule.<locals>.<listcomp>:  s%    6661Yq%+&&666rW   )
r   r  rd   rM   r[   r2  r   r
  r)   r=  )
ro  rp  unused_kwargsother_casesr  r  r/  r  r.  r  s
       @@@@@@rU   _select_batch_ruler    s   -%%&*z	    Sz%B%B       
  
 $ 	3333
33333 ;	x"(58,,,,e$e$$$j00 WU^^q    ueAhnzlCCee$e$$$j00	wu~~s"K"K
"K"K"KKK

<
<
<
<Z^
<
<
<<< ;e$e$$$jm33	>>>>>>>	>	> ;]dF F F F&)%)Z^&D&DF F FkeU1X4444d::>@huoo 8!%T::: 	.....	.	. 44 4 4 4z224 4 4E	BBBBabb	BBB	B	BBBB++++"'%(+++++++75>>QUE!HNQC88EWU^^bgeAh''''758!!!!6666666E	%	 %	 	 	 !	##rW   c                6   | ^}}|dd          }t          |g|R  }t          d |D                       r t          j        |d         j                  }nAt          t          d |D                                 fd|D             }t          |g|R  }||fS )Nrp   c              3  L   K   | ]}t          |          t          j        u V   d S rL   r   r   r8  r  s     rU   rb   z_select_jvp.<locals>.<genexpr>A  s/      88QaGL	 888888rW   r   c              3  P   K   | ]!}t          |          t          j        u|V  "d S rL   r  r  s     rU   rb   z_select_jvp.<locals>.<genexpr>D  s4      LL!Qw|0K0KA0K0K0K0KLLrW   c                N    g | ]!}t          |          t          j        u rn|"S r_   r  )r`   r  zs     rU   r   z_select_jvp.<locals>.<listcomp>E  s/    PPPQ$q''W\11QQqPPPrW   )r2  rd   r   r8  rj  r=  r   )r  r  r.  case_primalscase_tangentsrZ  out_dotr  s          @rU   _select_jvpr  =  s     %,122,-&&&&#88-88888 .l=+011GGtLL}LLLLLMMAPPPP-PPPMu-}---G	grW   c                
   | j         }| j        \  t          fd|dd          D                       sJ t          }t	          j                  }|gt          |          dz
  z  }|d         }|                    |j                  }|j	        d |j
                 |j	        k    sJ t          t          |j
                            }	t          j        | |||	          }
t          j        | ||
g|R |g||gdd         S )Nc              3  $   K   | ]
}|k    V  d S rL   r_   )r`   	aval_caser  s     rU   rb   z._select_hlo_lowering_opaque.<locals>.<genexpr>L  s(      AAyY("AAAAAArW   rp   r   r  r  r_  )r  r  rd   _select_hlo_loweringr   r  rs   r  rS   r[   r   r   r	  r*   r
  r  )r  r.  r/  r  select_lowerphysical_aval_outphysical_avals_cases
aval_whichaval_which_bcast
bcast_dimswhich_bcastr  s              @rU   _select_hlo_lowering_opaquer  I  sF   \(m)(	AAAAHQRRLAAA	A	AAAA%,(22+,H0AB{*&--J4D-EE		 0 0	1Z5E	E	E	E	EE*/**++*%	5"E E E+ 
		<
%',
% 
% 8#78"#
% 
% 
% &'
( (rW   c                     j         d          j        \  }t          j        |j        t          j                  rt           g|R  gS j        t          j        t          j                  k    rMt          |          dk    sJ t          |          dk    r|S t          j        |d         |d                   gS t          j        j        t          j                  rdndd fd d|          gS )Nr   r  rp   r  r  r  c           
     ^   t          |          dk    sJ t          |          dk    r|d         S t          |          dz  }t          j        t          j        | |z   	                    }t	          j        | | |d |                    | |z   ||d                              S )Nr   rp   r  )rs   r*   r  r  r9   r-  )
r  r/  midr(  _selectr  r  r  r.  
which_avals
       rU   r  z%_select_hlo_lowering.<locals>._selectq  s    u::>>>>
5zzQ1Xo
e**/CE /Vc\:NN. .D :dGGFE$3$K88gfslE#$$K88: : :rW   )r  r  r   r  rS   r  r  rM   r}  rs   r9   r-  r  )r  r.  r/  r  r  r  r  r  s   ``  @@@@rU   r  r  _  s$   |A*m)(x~v77 ='U;U;;;<<"(++++u::????
5zzQuJueAha1122z')9:: LLL"	: 	: 	: 	: 	: 	: 	: 	: 	: 	: '!U

	rW   r2  c                    t          |t          |          dz  g          \  }}t          d |D                       rd |D             }t          d|           fd|D             S )Nr  c              3  ,   K   | ]}|j         d k    V  dS r  r  r`   r  s     rU   rb   z%_reduce_shape_rule.<locals>.<genexpr>  s(      33Sb333333rW   c                    g | ]	}|j         
S r_   r  r`   ru  s     rU   r   z&_reduce_shape_rule.<locals>.<listcomp>  s    7771qw777rW   z'reduce found non-scalar initial value: c                ^    g | ])}t          t          j        |j                            *S r_   r   rM   r  r[   )r`   r  r  s     rU   r   z&_reduce_shape_rule.<locals>.<listcomp>  s/    	I	I	IR%	"(J//
0
0	I	I	IrW   )rE   rs   ri  r   )rH  rK  r  rt  operand_avalsinit_val_avalsinit_val_shapess     `    rU   _reduce_shape_ruler(    s    ",USZZ1_4E"F"F-33N33333 R77777O
PPP
Q
QQ	I	I	I	I=	I	I	IIrW   c                    t          |t          |          dz  g          \  }}d |D             }d |D             }||k    rt          d| d|           |S )Nr  c                @    g | ]}t          j        |j                  S r_   r   r  rS   rL  s     rU   r   z&_reduce_dtype_rule.<locals>.<listcomp>  s%    PPPBF-bh77PPPrW   c                @    g | ]}t          j        |j                  S r_   r+  )r`   inits     rU   r   z&_reduce_dtype_rule.<locals>.<listcomp>  s%    VVVtV.tz::VVVrW   zTreduce operand dtypes should match corresponding initial value dtypes, got operands=z and initial_values=)rE   rs   re   )rH  rK  r  rt  r%  r&  operand_dtypesinit_val_dtypess           rU   _reduce_dtype_ruler0    s    ",USZZ1_4E"F"F-PP-PPP.VV~VVV/&&
	L%	L 	L;I	L 	LM M M 
rW   c                ~    t          |t          |          dz  g          \  }}d t          ||          D             S )Nr  c                0    g | ]\  }}|j         o|j         S r_   r   )r`   r  init_vals      rU   r   z*_reduce_weak_type_rule.<locals>.<listcomp>  s<     
G 
G 
Gb( ,
-8- 
G 
G 
GrW   )rE   rs   rB   )rH  rK  r  rt  r%  r&  s         rU   _reduce_weak_type_ruler4    sT    ",USZZ1_4E"F"F-
G 
G&}nEE
G 
G 
G GrW   c                  t          |           dz  }t          | |g          \  }}t          ||g          \  }}	t          d |	D                       rzt          d t	          | |          D                       fdt	          ||          D             }d |D             }
dg|z  }t          j        ||z   |t          |
          |d|fS t          )Nr  c              3  2   K   | ]}|t           j        u V  d S rL   )r)   
not_mapped)r`   init_value_bdims     rU   rb   z%_reduce_batch_rule.<locals>.<genexpr>  s>       	2 	2 
H/	/ 	2 	2 	2 	2 	2 	2rW   c              3  :   K   | ]\  }}||j         |         V  d S rL   r  )r`   r   axs      rU   rb   z%_reduce_batch_rule.<locals>.<genexpr>  s9       # #2> !>>># #rW   c                B    g | ]\  }}t          j        ||          S r_   r  )r`   r  r  r  s      rU   r   z&_reduce_batch_rule.<locals>.<listcomp>  s<     ? ? ?C &sD$77 ? ? ?rW   c                    g | ]}|d z   S r~   r_   r   s     rU   r   z&_reduce_batch_rule.<locals>.<listcomp>  s    000a!e000rW   r   )rH  r  rK  )	rs   rE   rd   r   r  rP  r   r   r  )ro  rp  rH  rK  r  num_operandsr  rG  operand_bdimsinit_value_bdimsr  new_operand_bdimsr  s               @rU   _reduce_batch_rulerA    s;    \""a',$\L>BB(K$.zL>$J$J!-! 	2 	2 0	2 	2 	2 2 2  # #\:)F)F # # # # #D? ? ? ?!$X}!=!=? ? ?H00Z000Nl*=8k1%0$).$9$9$& & & (99 9
 rW   c                   	
 t          j        |d         j        t                    t          j        t          |                             }t          j        t          j        t                              |          
|t          
          z   |ft          
                   z   	t          	fd|D                       }t          	fd|D                       }t          t          
          dz             D ]}t          j                    dd
 fd
}t          j        |||          S )Nr   r  c              3  :   K   | ]}t          |          V  d S rL   r  )r`   r   r8  r3  s     rU   rb   z_reduce_jvp.<locals>.<genexpr>  s/      FF'!Y44FFFFFFrW   c              3  :   K   | ]}t          |          V  d S rL   rD  )r`   r  r8  r3  s     rU   rb   z_reduce_jvp.<locals>.<genexpr>  s/      HH!71i55HHHHHHrW   rp   )r;  c                    |d         j                   dk    r|d         j                   }|dz   dz  |z
  }fd|D             }fd|D             }|k    r?dgt          |d         j                   z  d <   fdt          |          D             } ||z    }|d         j                   dk    |d         j                   dk    r	
fd	D             S t           fd
|D                       S )z9Reduce by repeatedly splitting the array and multiplying.r   rp   r  c                <    g | ]}t          j        |d           S r  r/   slice_in_dimr`   r   n1s     rU   r   z5_reduce_jvp.<locals>._reduce_tree.<locals>.<listcomp>  s(    888W!!Q++888rW   c                <    g | ]}t          j        |d           S rL   rH  rJ  s     rU   r   z5_reduce_jvp.<locals>._reduce_tree.<locals>.<listcomp>  s(    ;;;1W!!R..;;;rW   r  )r   rp   r   c                8    g | ]\  }}t          ||          S r_   )r"  )r`   r   r  paddingss      rU   r   z5_reduce_jvp.<locals>._reduce_tree.<locals>.<listcomp>  s)    GGGAs2q(##GGGrW   c                <    g | ]}t                   |          S r_   )r  )r`   r  input_shapenon_axess     rU   r   z5_reduce_jvp.<locals>._reduce_tree.<locals>.<listcomp>  s(    BBBd;x(!,,BBBrW   c              3  :   K   | ]}t          |f          V  d S rL   )r  )r`   r   r;  s     rU   rb   z4_reduce_jvp.<locals>._reduce_tree.<locals>.<genexpr>  s/      11TG$$111111rW   )r[   rs   r  r   )r;  ry  rp  n2xs1xs2rK  rN  rG  rP  rQ  reducers   `     @@rU   _reduce_treez!_reduce_jvp.<locals>._reduce_tree  sC   
Q%+d
a


Q%+d
aEa<br6b8888R888c;;;;;;;c	r;RU[!1!11"GGGGS+1F1FGGG7S3Y b Q%+d
a

 
!u{4ABBBBBkBBBB1111b111111rW   )rM   r   r[   rJ   r5  r   r  arangers   r   r	  r   vmapjvp)rV  rG  r  r  r?  rp  rz   rW  rP  r8  rQ  r3  s   ``      @@@@rU   _reduce_jvpr[    sS   )555+gk$t**%&&!Yry[!1!122D99( uX&+dU;x0111)FFFFFgFFFFF'HHHHHxHHHHH(X"##    ahwGG 2 2 2 2 2 2 2 2 2 2" 
w	1	11rW   c               0   t          | t          |           dz  g          \  }}t          |t          |          dz  g          \  }}t          d |D                       rt          d          t	          j        |          }	t          |	||||          S )Nr  c              3  L   K   | ]}t          |          t          j        uV   d S rL   r  r  s     rU   rb   z#_reduce_jvp_rule.<locals>.<genexpr>  s/      ;;a	$;;;;;;rW   zeGradient of general lax.reduce with non-zero tangents for initial values to reduction not implemented)rE   rs   ri  r  r   jaxpr_as_funr[  )
r  r  rH  rK  r  	primal_xsrG  
tangent_xstangent_initrV  s
             rU   _reduce_jvp_rulerb    s    %gG0A/BCC)['3x==A3E2FGG*l 	;;l;;;;; 5
45 5 5 e$$'	Wk9j*	M	MMrW   r[  c               >   t          d | j        D                       sJ | j                    t          j        |t	          |          dz  g          \  }}| j        t	          |          dz  d          }t          j        d | j        D             ||t          j	        |                    }d |D             }	 |j
        d         j        j        |	|	z    }
t          j        |
          5  t          j                    }|j        rt%          d          t          j        | j        |j        |t          j                    |j        g|
j        R d| j        i\  }}t          j        t          j        |                     d d d            n# 1 swxY w Y   |j        S )Nc              3  J   K   | ]}t          |t          j                  V  d S rL   r   r   r#   r  s     rU   rb   z _reduce_lower.<locals>.<genexpr>  /      CCZ4+,,CCCCCCrW   r  c                6    g | ]}t          j        |          S r_   r*   r  r  s     rU   r   z!_reduce_lower.<locals>.<listcomp>  #    JJJDT)$//JJJrW   c                6    g | ]}t          j        |          S r_   rh  r  s     rU   r   z!_reduce_lower.<locals>.<listcomp>  s#    FFFTd"4((FFFrW   r   z Cannot lower effectful `reduce`.dim_var_values)rd   r  r   rE   rs   r9   ReduceOpr  r*   r  regionsblocksr   r7   InsertionPointr   new_name_stackr   r  jaxpr_subcompmodule_contextrK  TokenSetrl  	argumentsrk  return_flatten_ir_valuesresults)r  rH  rK  r  r  r  rG  init_value_avalsr  ir_typesrV  
name_stack	out_nodesrk  s                 rU   _reduce_lowerr|    s   	CCclCCC	C	CQQS\QQQ/&3v;;!3C2DEE(K\#f++"2"3"34
|JJCMJJJk4+?
+K+KM M"FF5EFFF('BJqM '(X*=?'	!! 	3 	3!022J} D BCCC%c&8%+&0$-//&+lI (/'8I I I 695G	I ILIq
 K&y11222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 
s   +BFFFc                    t          j        |j        t          j                  s5t          d                    | t          |j                                      t          j        |j                  S )NzD{} does not accept dtype {}. Accepted dtypes are subtypes of number.)	r   r  rS   rM   numberre   r  r1   r  )r  r  r   r>  s       rU   _reduce_number_dtype_ruler     sb    		7=")	4	4 O
 !!'ogm.L.L!M!MO O O		"7=	1	11rW   c               $    t          | |          S r  )_reduce_op_shape_ruler  s     rU   _reduce_sum_shape_ruler    s    	wT	2	2	22rW   c          	     
   t          j        |          sJ |j        j        }t	          t          j        t          j        t          |                    |                    }t          | ||          }|j        |k    sJ |gS rL   )
r(   r7  rj  r[   r   rM   r  rX  rs   r
  )r  r  r?  rP  r  r_  s         rU   _reduce_sum_transpose_ruler  	  s{    			(	(((("+ry3{3C3C)D)DdKKLLI{4HII&		$	$	$	$
/rW   c                   ~|\  }d t          |j                  D             }t          | ||j                  |          } | ||          gS )Nc                Z    g | ](\  }}t          |t          j                  ||j        f)S r_   )r   r   r  rH   )r`   r  rz   s      rU   r   z$_reducer_padding.<locals>.<listcomp>  sC     7 7 71q""4557!QU 7 7 7rW   )r  r[   r  rS   )		traceableidentr  r  r  r?  rj  r  operand_s	            rU   _reducer_paddingr    se    
%$7 7	$*(=(= 7 7 7+#GUU4:->->LL(
)Hd
#
#	$$rW   c                     |s S t          j        t                     fd|D             }t          t	          t
          j        |           t           |                    S )Nc                J    g | ]\  }}t          j        |          |k      S r_   )r  r[   )r`   r  rz   rS   r   s      rU   r   z*_replace_masked_values.<locals>.<listcomp>  s1    
K
K
Ktq!E17A..2
K
K
KrW   )r   _scalar_type_to_dtyperJ   r-  r   r7  r  r*  )r   rH   r  masksrS   s   `   @rU   r  r    sb    	Qh

&s
+
+%
K
K
K
K
K{
K
K
K%	u--q)As2C2C	D	DDrW   
reduce_sum)rP  c               `    ~t                    t          t                              k    rt          d           t           fdD                       st          d d  d          t	                    t          fdt           j                  D                       S )Nz(duplicate value in 'axes' of reduction: c              3  B   K   | ]}d |cxk    o
j         k     nc V  dS r^   rN  )r`   ru  r  s     rU   rb   z(_reduce_op_shape_rule.<locals>.<genexpr>-  sA      11qQ!""""gl""""111111rW   zreduction axes z$ contains out-of-bounds indices for rc   c              3  *   K   | ]\  }}|v	|V  d S rL   r_   r`   r  rz   r?  s      rU   rb   z(_reduce_op_shape_rule.<locals>.<genexpr>0  s+      GGTQ$qGGrW   )rs   r  r   rd   r   r   r  r[   )r  r?  rP  s   `` rU   r  r  )  s    YY#c$ii..  
FFF
G
GG	1111D111	1	1 ]
[t[[QX[[[
\
\\	4$	GGGGYw}55GGG	G	GGrW   c               ~    d }t          |t          | d         d          g| ||          \  }}|d         |d         fS )Nc                $    t          | |          gS rL   r  r'  s     rU   r  z'_reduce_prod_jvp_rule.<locals>.<lambda>3  s    #a)) rW   r   rp   )r[  r  )r  r  r?  rV  primals_outtangents_outs         rU   _reduce_prod_jvp_ruler  2  sO    $$')'F71:q4I4I3J*18TC C+|	Qa	((rW   reduce_prodc               P    t          t          j        | j        |                    S rL   r$  r  s     rU   _reduce_chooser_shape_ruler  A  s    	ry--	.	..rW   c          	        fdt          |j                  D             }t          t          |t	          ||                    | j                  }t          |          }t          t          t          | |                    |          S )Nc                &    g | ]\  }}|v rd n|S r~   r_   r  s      rU   r   z,_reduce_chooser_jvp_rule.<locals>.<listcomp>H  s)    
F
F
FTQT		11q
F
F
FrW   )	r  r[   r  _eq_meetr  rS   r  ri  rf  )r  r  r  r?  r[   location_indicatorscountss      `   rU   _reduce_chooser_jvp_ruler  D  s     G
F
F
FYw}-E-E
F
F
F%,wU++,,ag7 7*D11&	[Q 344d;;V	D	DDrW   
reduce_max
reduce_minc               $   |\  }d|cxk    rt          | j                  k     sn t          d| d| j                   | j        |         dk     rt          d| j         d|          t          t	          j        | j        |                    S )Nr   zInvalid axis rx  rp   zEargmin and argmax require non-empty reduced dimension. operand.shape=z axis=)rs   r[   r   r   rM   r  )r  r?  r<  r;  s       rU   _argminmax_shape_ruler  _  s    
%$
t
(
(
(
(c'-((
(
(
(
(
MTMMgmMM
N
NN]41
 >&-m> >6:> > ? ? ?	ry--	.	..rW   c                   t          j        |t          j                  s/t	          d                    t          |                              |S )Nz/index_dtype must be an integer type, but got {})r   r  rM   r~  re   r  r1   )r  r?  r<  s      rU   _argminmax_dtype_ruler  h  sI    		;
	3	3 ;
EVOK8899; ; ;	rW   c                       e Zd Zd Zd Zd ZdS )_ArgMinMaxReducerc                    || _         d S rL   )_value_comparator)r  value_comparators     rU   __init__z_ArgMinMaxReducer.__init__p  s    -DrW   c                "    d| j         j         dS )Nz_ArgMinMaxReducer(rk  )r  r   r  s    rU   r  z_ArgMinMaxReducer.__repr__s  s     C 6 ?BBBBrW   c           
     2   |\  }}|\  }}t          |                     ||          t          ||                    }t          |t          t	          ||          t          ||                              }t          |||          t          |||          fS rL   )rS  r  r  rP  r}  r  r-  )	r  op_val_indexacc_val_indexop_valop_indexacc_val	acc_indexpick_op_valpick_op_indexs	            rU   __call__z_ArgMinMaxReducer.__call__y  s    #FH&GYT33FGDD//1 1K {*2fg+>+>+-h	+B+B D  DE EM ;00=(I668 8rW   N)r   r   r   r  r  r  r_   rW   rU   r  r  n  sD        . . .C C C8 8 8 8 8rW   r  c                   |\  }t          |t          j        |          |          }t          ||g ||j                  t          j        d|          gt          |           |          }|d         S rq  )r  rM   r[   r[  rS   r   r  )r  get_identityr  r<  r?  r;  r3  r  s           rU   _compute_argminmaxr    sv     %$["(7*;*;TBB'!W]++RXa-E-EF !122	 	# 
Q-rW   rB  rF  c                   | j         t          j        k    r<t          j        | j         t          j                  st          d| j          d          t          t          j        | j        |                    S )Nz:logical reduction requires operand dtype bool or int, got rc   )	rS   rM   r}  r  r~  re   r   r  r[   r  s     rU   _reduce_logical_shape_ruler    s`    ]bhr}W]BJ'O'O
aQXQ^aaa
b
bb	ry--	.	..rW   	reduce_or
reduce_and
reduce_xorc          	        |j         \  }|j        }t          j        t	          j        |          g|gt	          j         ||j                            gt	          j        |                    }t	          j        t          j	        d|                    }|j
        d         j                            ||          }	t          j        |	          5  t          j         | |	j         g           d d d            n# 1 swxY w Y   |j        S )Nr_   r   )r  rS   r9   rl  r*   r  r  r  r   r#   rm  rn  r   r7   ro  ru  rt  rw  )
rV  unit_factoryr  r   r?  r  rS   r  scalar_typereducer_regions
             rU   r  r    s*   m)(
.%
|T)(334qc%ll8>&B&BCCD(..0 0" $T%5b%%@%@AA+:a='..{KHH.	(( 6 6K.2345556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	s   C::C>C>c                   t          j        |          }t          j        |          }|dk     rt          d|           |dk     rt          d|           | j        S )Nrp   z6reduce_precision: exponent_bits must be positive; got r   z:reduce_precision: mantissa_bits must be non-negative; got )r7  r8  r   r[   r  s      rU   _reduce_precision_shape_ruler    sm    .//-.//-Q
]m]]
^
^^Q
aR_aa
b
bb	rW   r  r  c                (    t          j        | fi |gS rL   )r  r   )r  ry  s     rU   r  r    s    6H6Ma6Z6ZSY6Z6Z5[ rW   c                   | j         \  }t          j        |t          j        |          t          j        |                    gS rL   )r  r9   r  r*   i32_attr)r  r  r  r  r  s        rU   _reduce_precision_lowerr    s@    m)(

wm(D(D#}];;= = 
> >rW   )       @   c                      t          d  D                        t           fd dd          D                       r1d                    d  D                       }t          d|            S )Nc              3  4   K   | ]}t          |          V  d S rL   )r%   r   s     rU   rb   z&_sort_abstract_eval.<locals>.<genexpr>  s*      44s##444444rW   c              3  D   K   | ]}|j         d          j         k    V  dS r^   r  )r`   r  r   s     rU   rb   z&_sort_abstract_eval.<locals>.<genexpr>   s0      88d1gm	#888888rW   rp    c              3  >   K   | ]}t          |j                  V  d S rL   rP  r"  s     rU   rb   z&_sort_abstract_eval.<locals>.<genexpr>  s*      11qc!'ll111111rW   z/Arguments to sort must have equal shapes, got: )r   ri  r  re   )r   ry  rX   s   `  rU   _sort_abstract_evalr    s    	44t444	4	4$8888tABBx88888 PXX11D11111F
NfNN
O
OO	+rW   c                <   t          t          | t          |                     t          |           |           }t	          j        d          5  t          t          |           t          |t          j	                  |          }d d d            n# 1 swxY w Y   |S r}  )
r-  r}  rG  r=  rT  
debug_nans_isnanr*  rM   nan)r   r_  s     rU   _canonicalize_float_for_sortr    s     "Qa//6!99a00&
~e B BF1IIy88&AAFB B B B B B B B B B B B B B B 
-s   7BBB)r  c           
     R   t          |d| i\  }}d }t          |d d d         |d d d                   D ]r\  }}|Pt          t                              ||          t          t                              ||          |                    nt                              ||          }s|S Nr  r  )_operands_to_keysr  rS  lt_to_pr   rP  eq_to_pr  r  x_keysy_keysr  xkyks          rU   _sort_lt_comparatorr        $hBBB.&&
!F44R4L&2,// $ $fb"STS`GLLR((+gll2r6J6JA*N*N	O	O	Oll2r"" A	
(rW   c           
     R   t          |d| i\  }}d }t          |d d d         |d d d                   D ]r\  }}|Pt          t                              ||          t          t                              ||          |                    nt                              ||          }s|S r  )r  r  rS  r  r   rP  r  le_to_pr  s          rU   _sort_le_comparatorr  (  r  rW   c           	        t          |          dk    rt          |          dz  dk    s
J |            t          |          dz  | k    sJ || f            g g }}t          |d d| z  d         |dd| z  d                   D ]{\  }}|j        |j        k    sJ |j        |j        f            t          j        |j        t
          j                  r|                    t          t          |                    t          t          |                    g           |                    t          t          |                    t          t          |                    g           t          j        |j        t
          j                  rF|                    t          |                     |                    t          |                     Q|                    |           |                    |           }||fS )Nr  r   rp   )rs   r  rS   r   r  rM   r  extendr  r+  r/  r	  r   )r  r  r  r  r   r$  s         rU   r  r  0  s   	X!		H 1Q 6 6 6 6 6 6	X!	x	'	'	'(H)=	'	'	'r&&(=AhJq=)8AajN+CDD 
 
da7ag1""455 mm1$q''::<XY]^_Y`Y`<a<abcccmm1$q''::<XY]^_Y`Y`<a<abcccc		17BK	0	0 mm033444mm0334444mmAmmA	rW   c               (   
  d         j         }g t          |          D ]h\  }}|t          j        t          j                  j        k     rt          j        nt          j        }                    t          |||                     it          j
                  fz   ||d t           fdt          t          |                    D                       
t          
fd|D                       }	t           d d                   |	fS )Nr   r  c              3  D   K   | ]}|k    rd          n|         V  dS )r  Nr_   )r`   r  r  r   r  s     rU   rb   z_sort_jvp.<locals>.<genexpr>J  sK       * * )^^gbkkq * * * * * *rW   c              3  b   K   | ])}t          |          t          j        u r|n|         V  *d S rL   r  )r`   r  ra   s     rU   rb   z_sort_jvp.<locals>.<genexpr>L  s=      RRADGGw|33qq3RRRRRRrW   r  )r[   r  rM   rN   r  rR   r  r   r  r  r   r   r	  rs   )r  r  r  r  r  r[   dimr  rS   r  ra   r   s   ` `       @@rU   	_sort_jvpr  B  s3   
!*
%
%U## 6 6ic4rx11555BHH28E	LL!%445555K'U9%5$77I"+h@ @ @' * * * * * *SZZ((* * * 	* 	*#RRRRRRRRR,	wss|		l	**rW   c                  t          d t          | |          D                       \  }}g }t          | |          D ]\  }}	|	Vt          j        t          j        |j                  |          }
|                    t          ||j        |
                     ]|                    t          j
        ||	|                     |||k    z   }|ft          |          z  }t          j        ||||d|fS )Nc              3  (   K   | ]\  }}|||fV  d S rL   r_   )r`   ru  r  s      rU   rb   z#_sort_batch_rule.<locals>.<genexpr>P  s7       !G !Gq!QF!G !GrW   r  )r   r  rM   r  rX  r   r   r
  r[   r)   r  rs   r  r   )ro  rp  r  r  r  prototype_argnew_bdimnew_argsr  r  r  new_dimensionr  s                rU   _sort_batch_ruler  O  s     !G !G<44!G !G !G G G-(|Z00 > >ic4|Yry!344h??doo&sM,?FFGGGGooh'T8<<====x945-+H
%%
+x=IX`
a
a
a

 rW   r  c          
        t          d | j        D                       sJ | j                    t          j        d | j        D             t          j        |          t          j        |          t          j	        
                    |                    }d | j        D             }t          t
          j        |          } |j        j        j        t!          j        t%          ||                     }t          j        |          5  t          j        t+          t,                    d          }	|                     d t!          j        t%          ||                    t1          j        dt4          j                  g          }
 |	|
g|j        R d	|i}t          j        t          j        |                     d d d            n# 1 swxY w Y   |j        S )
Nc              3  J   K   | ]}t          |t          j                  V  d S rL   re  r  s     rU   rb   z_sort_lower.<locals>.<genexpr>h  rf  rW   c                6    g | ]}t          j        |          S r_   rh  r  s     rU   r   z_sort_lower.<locals>.<listcomp>i  ri  rW   )r  r  c                :    g | ]}|                     d           S )r_   r  )r  r  s     rU   r   z_sort_lower.<locals>.<listcomp>m  s&    AAAD$++B+''AAArW   Fr  r_   )	primitiver  r  r  )rd   r  r9   SortOpr  r*   rv  rs  r7   BoolAttrr  rC   r  
comparatorrn  r   r   flattenr  ro  r  r   r  r`  r   r#   rM   r}  rt  ru  rw  )r  r  r  r  r  r  scalar_avalsscalar_typesr  lower_comparatorsub_ctxrZ  s               rU   _sort_lowerr  g  s   	CCclCCC	C	CQQS\QQQ	JJCMJJJ*844"mI66 kooi88
: 
: 
:$ BACLAAA,$.==,,t%,|Cl33446*	$$ - -~g.A&B&B7<> > >kkD#'<L,0O0O#P#P%)%5b"(%C%C$D  F FG 
7
MZ%9
M
M
MH
M
MCK&s++,,,- - - - - - - - - - - - - - - 
s   	B6GGGc               T   t          j        | j        t          j                  rt          d          |dk     rt          d|           t          | j                  dk    r't          d	                    | j                            t          | j                  }|d         |k     r%d}t          |	                    ||                    ||d<   |                     || j        | j                  |                     |t          j        t          j                            fS )	Nz,top_k is not compatible with complex inputs.r   r  z.top_k operand must have >= 1 dimension, got {}r  zDk argument to top_k must be no larger than minor dimension; {} vs {}r[   rS   r   )r[   rS   )r   r  rS   rM   r  r   rs   r[   re   r  r   r  r   r  )r  r  r[   rg   s       rU   _top_k_abstract_evalr    s   w}b&899 E
C
D
DDUU
HQHH
I
II1
DVGM**, , ,
w}

%
2Y]]
PC
SZZ5))
*
**%)
..uGM#*#4  6 6
..uBHRX,>,>.
?
?
A ArW   c          	     0   | \  }|\  }t          ||          }t          |          t          j        u r't          j                            |d                   }n|\  }}|j        }	t          |	          }
|	dz   }g }t          |
dz
            D ]D}t          |j	        |	|                   }t          |||f          }|                    |           E|                    t          ||                     t          ||
          }d|
z  }t          j        dt!          t          |
                    t!          t          |
                              }t          j        ||||          }||t          j                            |d                   ffS )Nr   r~   rp   r  r_   )offset_dimscollapsed_slice_dimsstart_index_map)r  r   r   r8  r  r[   rs   r	  r  rS   r
  r   r  r  r/   GatherDimensionNumbersr   gather)r  r  r  r  r  r  r  rk  k_idxs	idx_shaper   gather_index_shapegather_indicesr  _iotaslice_sizesdnumss                    rU   
_top_k_jvpr    s   ('('gq!!+	']]gl"",))+a.99KKIAvIy>>D"T)N46]] # #6<1..eu&81$??eE""""'&*<==>>> 4@@@N+K* t--E$KK((* * *E ..%MMK	{GL$;$;KN$K$KL	LLrW   c               P   | \  }|\  }||j         dz
  k    r|t          j        |j                   }||         ||dz
           c||dz
  <   ||<   t          t	          ||          |          \  }}t	          ||          t	          ||          f||ffS t          ||          ||ffS )Nrp   r  )r   rM   rX  r  r:  )ro  rp  r  r  r  r  top_k_vtop_k_is           rU   _top_k_batch_ruler    s    ('
%$	W\!^9W\""D#Dz4Q<DaL$t*Yw55;;;GWgt$$gt$$&(,d|4 4 At,,rW   r  c                N   t          j        |          r,t          j        |t	          j        |                    j        S t	          j        | |f          \  }| j        \  }}t	          j	        dt	          j
        |          t	          j
        |          g||g          j        S )Nzstablehlo.dynamic_top_k)result_typesr  )r   r  r8   TopKOpr*   rs  rw  eval_dynamic_shape_as_valsr  custom_callr  )r  r  r  k_valueout_values_avalout_indices_avals         rU   _top_k_lowerr!    s    	! :;wa 0 01199,S1$77(''*}$/#		(99,--/!	
# 
# 
# $+	+rW   c                f    | \  }t          |          t          j                            |          fS rL   )r  r   r8  r  )r  r  r   s      rU   _stop_gradient_jvp_ruler#    s,    "!	q		7<22155	55rW   c                4    | \  }|\  }t          |          |fS rL   )r  )ro  rp  r   r  s       rU   _stop_gradient_batch_ruler%    s#    "!	$#	q		3	rW   c                4    t                                           S )zCreates an XLA token value with no preconditions for sequencing effects.

  Experimental.

  The argument is ignored. It exists for backward compatibility.
  )create_token_pr   rk  s    rU   create_tokenr)    s     
				rW   r)  c                     t           S rL   r&   r(  s    rU   r  r    s    N rW   c                <    | j         \  }t          j                    gS rL   )r  r9   r)  r  r  r  s      rU   _create_token_loweringr.    s    m)(



	rW   c                     t          j        |  S )zVMerges one or more XLA token values. Experimental.

  Wraps the XLA AfterAll operator.)after_all_pr   r  s    rU   	after_allr2    s     
	8	$$rW   c                 `    t          d | D                       rt          d          t          S )Nc              3  (   K   | ]}|t           uV  d S rL   r+  r  s     rU   rb   z+_after_all_abstract_eval.<locals>.<genexpr>  s'      33Q.	 333333rW   z%Arguments to after_all must be tokens)ri  re   r&   r1  s    rU   _after_all_abstract_evalr5    s6    33(33333 =
;
<
<<	rW   r2  c                >    | j         \  }t          j        |          gS rL   )r  r9   r2  r-  s      rU   _after_all_loweringr7    s    m)(
-
!
!	""rW   c                      e Zd ZdS )InOutFeedEffectN)r   r   r   r_   rW   rU   r9  r9    s        $rW   r9  c                   t          j        |          \  }}|D ]9}t          |t                    s"t	          d                    |                    :|/t          |          t          k    rt          d|           |dz   }t          
                    | t          |          |          }|                    |dd                   |d         fS )zConsumes an infeed value of `shape` from the host. Experimental.

  `token` is used to sequence infeed and outfeed effects.
  `partitions` may be specified inside a `sharded_jit` function.
  zGshape argument to infeed must be a pytree of ShapedArray values, got {}Nz7'partitions' argument to infeed should be a tuple, got rL   )rX   
partitionsr  )r   rL  r   r#   re   r  r   r   r   infeed_pr   	unflatten)tokenr[   r;  flat_shapestreedefxs_and_tokens         rU   infeedrB    s    #/66+w B Bee[)) B 3396%==B B BB  J5   +(+ + , , ,g%JuU;-?-?*4  6 6,


L"-
.
.R0@	AArW   c               Z    | t           urt          d          g |t           R t          hfS )Nz(First argument to infeed must be a token)r&   re   infeed_effect)r>  rX   r;  s      rU   _infeed_abstract_evalrE    s6    
.  
>
?
??	"6	">	"	"]O	33rW   rB  c               0   t          t          j        | j        d d                   }t          j        |          }t
          j                            d |D                       }t          j	        |t          j
                                        gz   |t
          j                            d          |          }|'t          j        |t          j        |                     |j        d         }|j        d d         }t          j        ||          |gz   S )Nr  c           
         g | ]O}t           j                            d  t          t	          |j                  dz
  dd          D                       PS )c                6    g | ]}t          j        |          S r_   )r*   rs  )r`   r  s     rU   r   z/_infeed_lowering.<locals>.<listcomp>.<listcomp>0  s2     8 8 8 = 8 8 8rW   rp   r  )r7   r  r  r	  rs   r[   r  s     rU   r   z$_infeed_lowering.<locals>.<listcomp>.  sq         	l8 8#dj//A-r2668 8 89 9  rW    )infeed_configlayout)rC   r*   r  r  flatten_ir_typesr7   r  r  r9   InfeedOp	TokenType
StringAttrset_shardingr-   sharding_to_protorw  unflatten_ir_values_like_types)	r  r>  rX   r;  output_typesflat_output_typeslayoutsrB  outss	            rU   _infeed_loweringrW  *  s   $.crc0BCC,+L99L   	    ' <3=,,..//M%%b))	  &
 fc3J??@@@
.
%		$		,T<	@	@D 
 rW   c                    |*t          |          t          k    rt          d|           t          j        |          \  }}t          j        | g|R d|iS )zOutfeeds value `xs` to the host. Experimental.

  `token` is used to sequence infeed and outfeed effects.
  `partitions` may be specified inside a `sharded_jit` or `pjit` function.
  Nz8'partitions' argument to outfeed should be a tuple, got r;  )r   r   r   r   rL  	outfeed_pr   )r>  ry  r;  flat_xsrk  s        rU   outfeedr[  D  su     J5   +(+ + , , ,%b))*'1		?	?	?	?J	?	??rW   c               P    | t           urt          d          t           t          hfS )Nz)First argument to outfeed must be a token)r&   re   outfeed_effect)r>  r;  ry  s      rU   _outfeed_abstract_evalr^  R  s*    
.  
?
@
@@	.)	))rW   r[  c                   t          j        t          j        |          |t          j                            d                    }|'t          j        |t          j	        |                     |j
        S )NrI  )outfeed_config)r9   	OutfeedOpr*   rv  r7   rO  r  rP  r-   rQ  rw  )r  r>  r;  ry  r[  s        rU   _outfeed_loweringrb  ]  sj    M
R  ]&&r**, , ,' gs4Z@@AAA	rW   c                V    t                               | |t          |                    S )a  Stateful PRNG generator. Experimental and its use is discouraged.

  Returns uniformly distributed random numbers in the range [a, b). If
  b <= a, then the result is undefined, and different implementations may
  return different results.

  You should use jax.random for most purposes; this function exists only for
  niche use cases with special performance requirements.

  This API may be removed at any time.
  r  )rng_uniform_pr   r   ru  r  r[   s      rU   rng_uniformrf  i  s%     
		Aqe		5	55rW   c               T   | j         |j         k    r-t          d                    | j         |j                             | j        dk    s|j        dk    r-t          d                    | j        |j                            |                     || j         | j        o|j                  S )NzCArguments to rng_uniform must have identical dtypes, got {} and {}.r_   z?Arguments to rng_uniform must be scalars; got shapes {} and {}.r  )rS   r   r  r[   r  r   re  s      rU   _rng_uniform_abstract_evalrh  w  s    W
qw((* * * W]]agmm
Gvagqw! ! ! 
QW[8Q[ 
 
; 
; ;rW   rf  c                   | j         \  }t          j        t          j        |j        t          j                            }t          j        |||t          j	        
                    d                    gS )NUNIFORM)r  r*   r  rM   r   r[   r  r9   rngRngDistributionAttrr  )r  ru  r  r[   r  s        rU   _rng_uniform_loweringrm    sU    m)(

28HNBH==
>
>%
'!Qs6::9EE
F
F	GGrW   c               2    ~~| j         t          |          fS rL   )r[   r   keyr[   rS   	algorithms       rU   _rng_bit_generator_shape_rulerr    s    Y
)U5\\	""rW   c                   ~~| j         |fS rL   r  ro  s       rU   _rng_bit_generator_dtype_rulert    s    Y
)U	rW   c                   ~~~| j         dfS r}  r   ro  s       rU   !_rng_bit_generator_weak_type_rulerv    s    UI
-	rW   c                    | j         S rL   r  rq  s    rU   r  r    s    IN rW   rq  RandomAlgorithmc                    | t           j        k    rt          j                            d          S | t           j        k    rt          j                            d          S | t           j        k    rt          j                            d          S J )N	THREE_FRYPHILOXr  )ry  RNG_THREE_FRYr9   RngAlgorithmAttrr  
RNG_PHILOXRNG_DEFAULTrx  s    rU   _rng_algorithmr    sv    ////##K000O...##H---O///##I...LrW   c          
        t          j        |j                  }|j        |j        }}t           j                            d          }t           j                            d          }	|dgk    r||k    s|dgk    r||	k    sJ ||f            t          j        |          }t          j
        |          }
|t          j        d          t          j        d          t          j        d          t          j        d          fv r|
}|}n|}t          j        }||k    rgt          j        t           j                            dg|	          t          j        t           j                            ddg|          |                    }t!          |          }| j        \  }}t%          d	 | j        D                       rt          j        t          j        | |j                            }t          j        d
|j        t          j        t/          j        ||                    g||gt3          |                    j        \  }}nBt          j        |j        t           j                            ||          ||          j        \  }}||k    rgt          j        t           j                            dg|          t          j        t           j                            ddg|          |                    }||
k    rOt          j        t           j                            t          j        |j                  j        |
          |          }||gS )Nr  r     r  uint8uint16r  uint64c              3  J   K   | ]}t          j        |j                   V  d S rL   )r   is_constant_shaper[   r"  s     rU   rb   z._rng_bit_generator_lowering.<locals>.<genexpr>  s2      DDT#AG,,	,DDDDDDrW   z#stablehlo.dynamic_rng_bit_generator)rng_algorithm)r  r  extra_attributes)r7   RankedTensorTyper   r[   element_typeIntegerTypeget_unsignedrM   rS   r*   dtype_to_ir_typer  r9   r  r  r  r  r  ri  r  eval_dynamic_shaper  r  r   r#   r  rw  RngBitGeneratorOprc  )r  rp  r[   rS   rq  key_type	key_shape	key_etypeu32_typeu64_typeetype	rbg_etype	rbg_dtypealgorithm_attrrk  out_vals_avaloutput_shapeout_keyout_valss                      rU   _rng_bit_generator_loweringr    s$    **(!)>Y) ^((,,(^((,,(	X 5 5	X 5 5 5)Y9O 5 5 5
(5//%


&
&%
rx  "(8"4"4bhx6H6Hx!!# # #IIII	I(


X..B'++QFH==sCCE EC "),,.]!]DDcmDDDDD %$
c=#6779 9L(-h*4+;E9+M+MNNP|$N;;;= = =
 >E GXX -
y11  % GX (k
X..##QFH55w	@ 	@A AG %{b1(-@@FNN H 8	rW   rng_bit_generatorarrc                6    t                               |           S rL   copy_pr   )r  s    rU   _array_copyr    s    	S		rW   r  r:   c                    d }t          | j        j                  D ]/\  }} t          | t          j        t          j        f          r|} n0|S rL   )r  sharding_specr  r   r,   	UnstackedChunked)r  sharded_dimr  s      rU   _which_dim_shardedr    sY    +011  da!dndl344 ke 
rW   c                    | S rL   r_   r   s    rU   _identity_fnr    s    AXrW   c                   t          j        t          d dd| |           \  }}}t          j        t          | | ||d d d ||
  
        }t	          j        |j        g|j        R d ||j        |j	        |j
        |j        |j        |j        j        |j        |j        d
}t!          j        |                                |          S )Nr_   )
backend	axis_name	axis_sizeglobal_axis_sizedevicesin_axesout_axes_thunkr  donated_invarsis_explicit_global_axis_size)r   _shared_code_pmapr  _prepare_pmapr,   xla_pmap_implflat_fun	flat_argslocal_axis_sizer  r  in_axes_flatr  r   r  r  r   rQ  rY  )r  r   ry  r  static_broadcasted_tupledonate_tupler  out_flats           rU   _copy_impl_pmap_shardingr    s    696K$B[7: 7:3)%|	K.FD$dF4 4!  j; (,	!A4Fi%AJ,?%#$#A  ( 
	!!**,,	9	99rW   c                   |\  }t          |t          j                  rUt          |j        t                    r;t          |j                  }|t          j        | g|R i |S t          |g|R i |S t          j        | g|R i |S rL   )	r   rT  r;   r  r:   r  r   apply_primitiver  )r   r   ry  ru  r  s        rU   
_copy_implr    s    "!39 B*QZ"F"F B$QZ00K%d<T<<<V<<<#KA$AAA&AAA		!$	8	8	8	8	8	88rW   copyc                    | S rL   r_   r   s    rU   r  r    s    1 rW   c                    |gS rL   r_   )r  r   s     rU   r  r    s    qc rW   c                8    t                               |           gS rL   r  )r  s    rU   r  r     s    A/ rW   c                    | S rL   r_   )in_mem_kinds    rU   _propagate_mem_kind_copyr  #  s    	rW   c                   t          j        |          }t          j        |          }t	          j        |          t	          j        d          t	          j        d          t	          j        d          t	          j        d          hvrt          d|           t          t          	                    | |||                    S )a  Stateless PRNG bit generator. Experimental and its use is discouraged.

  Returns uniformly distributed random bits with the specified shape and dtype
  (what is required to be an integer type) using the platform specific
  default algorithm or the one specified.

  It provides direct access to the RngBitGenerator primitive exposed by XLA
  (https://www.tensorflow.org/xla/operation_semantics#rngbitgenerator) for low
  level API access.

  Most users should use `jax.random` instead for a stable and more user
  friendly API.
  r  r  r  r  z%rng_bit_generator: unsupported dtype )r[   rS   rq  )
r   r'   r   r  rM   rS   re   r   rng_bit_generator_pr   ro  s       rU   r  r  '  s     
!%
(
(%

#E
*
*%Xe__RXg..0B0BXh//(1C1CE E E
CECC
D
DD	
U%9  > >
? 
? ?rW   c                    |st          dd|           t           fdt          D                       sXd}t                     }d t          D             }t	          |                    |d                    |                              d|cxk    rt          |          k     sn t          d|d	|          |s)t          d
 |D                       st          |           S t          j        t          ||           d          S )Nr  r[   c              3  B   K   | ]}t          j        |          V  d S rL   r  )r`   r  rS   s     rU   rb   z&_iota_abstract_eval.<locals>.<genexpr>D  s0      77QVua((777777rW   zBiota does not accept dtype {}. Accepted dtypes are subtypes of {}.c              3  $   K   | ]}|j         V  d S rL   r  r  s     rU   rb   z&_iota_abstract_eval.<locals>.<genexpr>G  s$      33!*333333rW   r  r   z?iota dimension must be between 0 and len(shape), got dimension=z for shape=c              3     K   | ]P}t          |t          j                  o1t          t          j        |          j                  t          j        u V  Qd S rL   r2  r   s     rU   rb   z&_iota_abstract_eval.<locals>.<genexpr>M  r5  rW   F)r  ri  _numr1   re   r  r  rs   r   r#   r   r  r   )rS   r[   r  r   rg   r  r  s   `      rU   _iota_abstract_evalr  @  sW   	 -VWe,,,	7777$777	7	7 I
NCu%%H33d333
CJJx3E)F)FGG
H
HH	
i	$	$	$	$#e**	$	$	$	$
 2!2 2).2 2 3 3 3
 %
 H HAFH H H H H% ue$$$		+E9==ue	L	LLrW   r  c                   t          |||          }|s|                     t          d|          S t          j        t          ||          |d          }t          | t          |g|R i |S )Nr  r_   F)r  r  r  r   r  r   r   )r   rS   r[   r  r   r   rj  s          rU   _iota_staging_ruler  W  sw    e5I>>>&	 ?**62v>>>		+E9==ue	L	L$	 	Ky	K	K	KF	K	KKrW   c                   |s%t                               |||          \  }}|g|fS t          ||          }d |D             }t          j        t          |          |d          }|gt          j        fS )Nr  c                V    g | ]&}t          |          t          j        u r|j        n|'S r_   r  r  s     rU   r   z(_iota_typecheck_rule.<locals>.<listcomp>f  r  rW   F)r  r  r   r   r  r   r   )rk  rS   r[   r  r   r   r   r  s           rU   _iota_typecheck_ruler  _  s    	 ',,5I - 7 7Hg:w 	22ILL)LLLI y!1!15%@@H:t&&rW   c                   ~| j         \  }|r$|                    t          ||                    }t          j        | ||          gS )Nr  r  )r  r  r   r*   r  )r  rS   r[   r  r   r  s         rU   _iota_lowerr  k  sO    m)( I%5eY%G%GHHH
)CY
7
7
7	88rW   c                  | |c\  }\  }|dk    sJ |j         j        }d t          |          D             \  }t          |          ft	          ||f          z   }t          |||dz             }	|	t          j        ||dz   |ff          fS )Nr   c              3  $   K   | ]\  }}||V  d S rL   r_   )r`   r  r  s      rU   rb   z&_iota_batching_rule.<locals>.<genexpr>w  s&      BB3ck!kkkkBBrW   rp   )rS   r  r  rs   r   r  r)   r.   )
in_valsin_dimsrS   r[   r  segment_lengthsr:  r  ragged_axisr  s
             rU   _iota_batching_ruler  s  s    %w?er	q


%%BB)E"2"2BBB,+
!$4UUH$E$E
E%	%	!	4	4$	x"2Q(H'JKK	KKrW   c                    i }t          | j        d                   dk    r| j        d         |d<   t          j        |                     |          ||          S )Nr[   rp   r  r  )rs   r   r   r  r`  )r   r  r  r  s       rU   _iota_pp_ruler  }  sT    .G	!!"%*["9N;	ckkk88'8	L	LLrW   c                  |\  }g }g }|j         D ]}	t          |	          t          j        u r|                    |	j                   8t          |	          t          u r|                    |	           dt          |	t          j	                  sJ |                    d            |                    |	           t          j        |t          |          ||dgS )N)r[   rS   r  )r[   r   r   r  r   r  rJ   r   r   r   r  r   r   )
r  r  rS   r[   r  r   r   r8  r  rz   s
             rU   _iota_padding_ruler    s    )()->  aAww"$$$qw	aCq4;'''''t1
+}E),<,<!Y8 8 8 
9 9rW   c                L   t          j        t          j        |d                    s$d}t          |                    |                    dt          |           t          |          z
  z  t          |          z   }t          t          t          j	        | |                    S )zCUtility function for computing the shape resulting from a dilation.r   z'All dilations must be positive, got {}.r~   )
rM   rd   greaterre   r  rs   r   rk   r   r{  )r[   dilationrg   s      rU   _dilate_shaper    s    	
8Q''	(	( *
3C
CJJx((
)
))SZZ#h--/05??B(	s4?E844	5	55rW   c                R    t          j        t          j        |           |           S rL   )rM   floor_divider  r   s     rU   _ceil_divider    s    
/"+b//2
.
.	..rW   c                      e Zd ZdZdZdZdS )PaddingTyperp   r  rx  N)r   r   r   VALIDSAME
SAME_LOWERr_   rW   rU   r  r    s        
%	
$***rW   r  c                   t          |t                    rwt          j        t          j        t          j        d}	 ||                                         }n7# t          $ r*}d}t          |	                    |                    |d}~ww xY w|t          j        k    s|t          j        k    rPt          | |          }d |dz
  |z  |z   | z
  D             }|t          j        k    rd |D             S d |D             S |t          j        k    rdgt          |           z  S d	}t          |	                    |                    )
z6Convert padding string to list of pairs of pad values.)r  r  r  z>Unrecognized padding type: expected 'VALID' or 'SAME', got {}.Nc              3  @   K   | ]}t          j        |d           V  dS r^   )r   rO   r   s     rU   rb   z"padtype_to_pads.<locals>.<genexpr>  sB       3 3 a## 3 3 3 3 3 3rW   rp   c                (    g | ]}|d z  ||d z  z
  fS r  r_   r`   pad_sizes     rU   r   z#padtype_to_pads.<locals>.<listcomp>  s7       8@8q=(X]2
3  rW   c                (    g | ]}||d z  z
  |d z  fS r  r_   r  s     rU   r   z#padtype_to_pads.<locals>.<listcomp>  s7       8@8h!m#X]
3  rW   )r   r   zUnknown padding type: {}.)r   r  r  r  r  r  upperKeyErrorRuntimeErrorr  r  rs   re   )	in_shapewindow_shapewindow_stridespaddingmappingerrrg   r  	pad_sizess	            rU   padtype_to_padsr	    s     
7" !, G
7(gg 7 7 7LcG,,--367    G{/E$E$EX~66I3 3$q=N:&')123 3 3I +""" DM    DM    +###8c(mm##
%C
CJJw''
(
((s   A 
B
 %BB
fabsarccosarccosharcsinarcsinharctanarctan2arctanhrP  rM  rS  rW  divider  r  r  r  
less_equallogical_andlogical_not
logical_orlogical_xormaximumminimumr  	not_equalr  float_powerr-  r  
left_shiftright_shiftsubtractr  core.UnshapedArrayNonec           	        t          d |D                       rdS t          |          dk     rdS t          j        |d         j                  t          fd|dd         D                       rad}| t
          v rt
          |          }|d| d	z  }t          |                    | d
                    d |D                                           dS )z;Check that dtypes agree, possibly ignoring float precision.c              3  ^   K   | ](}t          j        |j        t           j                  V  )d S rL   )r   r  rS   r  r  s     rU   rb   z$check_same_dtypes.<locals>.<genexpr>  s3      JJD	4:v	7	7JJJJJJrW   Nr  r   c              3  R   K   | ]!}t          j        |j                  k    V  "d S rL   r+  )r`   rj  rS   s     rU   rb   z$check_same_dtypes.<locals>.<genexpr>  s5      NND	"4:	.	.%	7NNNNNNrW   rp   z:lax.{} requires arguments to have the same dtypes, got {}.z (Tip: jnp.zE is a similar function that does automatic type promotion on inputs).r  c              3  >   K   | ]}t          |j                  V  d S rL   )r  rS   r"  s     rU   rb   z$check_same_dtypes.<locals>.<genexpr>  s*      .K.Ks17||.K.K.K.K.K.KrW   )	ri  rs   r   r  rS   _JNP_FUNCTION_EQUIVALENTSre   r  r  )r  rt  rg   equivrS   s       @rU   r  r    s     	JJEJJJJJ 
FZZ!^^
F

#E!HN
3
3%NNNNE!""INNNNN N
FC((('-e	g5ggggc
CJJtTYY.K.KU.K.K.K%K%KLL
M
MMN NrW   c                h   t          |t          t          t          j        f          s3d}t          |                    | |t          |                              t          |          sdS t          j
        j        r7t          |t          t          f          rt          d |D                       rdS t          j        |          }|j        dk    r)d}t          |                    |j                            	 t          |           nY# t
          $ rL}d}t          |                    | |t          t!          t          |                                        |d}~ww xY w|rdnd\  }t#          fd	|D                       s'd
}t          |                    | |||                    dS )zHCheck that `obj` is a shape-like value (e.g. tuple of nonnegative ints).z1{} {} must be of type tuple/list/ndarray, got {}.Nc              3  b   K   | ]*}t          |t          j        t          j        f          V  +d S rL   )r   r   r   r3  r   s     rU   rb   z#_check_shapelike.<locals>.<genexpr>#  s5      	A	A*Qdk2
3
3	A	A	A	A	A	ArW   rp   z${} {} must be 1-dimensional, got {}.z9{} {} must have every element be an integer type, got {}.)rp   zstrictly positive)r   nonnegativec              3  $   K   | ]
}|k    V  d S rL   r_   )r`   rz   lower_bounds     rU   rb   z#_check_shapelike.<locals>.<genexpr>0  s(      //!Q+//////rW   z,{} {} must have every element be {}, got {}.)r   r   r   rM   r   re   r  r   rs   r   ri   rj   ri  r   r   r'   rk   rd   )	fun_namearg_nameobjnon_zero_shaperg   obj_arrr	  bound_errorr&	  s	           @rU   r  r    s   	C%rz2	3	3 ?
=C
CJJx499==
>
>>	S 
F! judm&D&D 		A	AS	A	A	AAA
FHSMM'\Q
0C
CJJw|,,
-
--Tw	 T T T
EC
CJJx5T33H3HII
J
JPSST #1H6H +{	////w///	/	/ F
8C
CJJx;DD
E
EEF Fs   >D 
E$AEE$c                    t          |           }t          j        |           rG t          j        |           |          }|t          |          k    r|nt	          j        ||          S t	          j        ||          S rL   )r5  r   is_python_scalarscalar_type_ofrM   r   )examplerH   rS   s      rU   r  r  5  ss    
//%W%% A
(&

(
(
-
-C6#;;&&33BHS%,@,@@	#u		rW   )r  r=  r_   )r[   r  rG  rX  r  _twos_twor  r5  c                "    t          | |           S rL   )r  r   s    rU   r  r  F  s    	Aq/rW   c                Z    t          j        t          |           t          j                  S rL   )r   r  r5  rM   r  r   s    rU   rC  rC  I  s    		6!99b&8	9	99rW   c               '  j   K   d}| D ]+}t          |          }t          |||z             V  ||z  },d S r  )rs   r	  )ry  ra  r   x_lens       rU   rV  rV  M  sT      
%  aFFE
uu}
%
%%%%	UNEE rW   c                V    t          t          j        |           fd| D             S )Nc                    g | ]}|v|	S r_   r_   )r`   r  removeds     rU   r   zremaining.<locals>.<listcomp>W  s#    	2	2	2'!1!1!!1!1!1rW   )r  	itertoolschain)originalremoved_listsr9	  s     @rU   rU  rU  U  s1    	/00'	2	2	2	2X	2	2	22rW   "tuple[Precision, Precision] | Nonec                   | t           j        j        dS 	 t          t           j        j                  t          t           j        j                  fS # t          $ r8 t          dt          t                     dt           j        j                   dw xY wt          | t                    r'| t          v rt          |           t          |           fS t          | t                    r| | fS t          | t          t          f          rSt          |           dk    r@t          d | D                       r't          t          t          t          f         |           S t          | t          t          f          rt          |           dk    rt          d | D                       r}| \  }}t          t          t          t          f         t          |                    d         }t          t          t          t          f         t          |                    d         }||fS t          dt          t                     d	|  d
          )zTurns an API precision specification into a pair of enumeration values.

  The API can take the precision as a string, or int, and either as a single
  value to apply to both operands, or as a sequence of two values.
  NzDjax_default_matmul_precision flag must be set to None or a value in z
, but got r  c              3  @   K   | ]}t          |t                    V  d S rL   )r   r  r  s     rU   rb   z)canonicalize_precision.<locals>.<genexpr>r  s,      88Jq)$$888888rW   c              3  @   K   | ]}t          |t                    V  d S rL   )r   r  )r`   r  s     rU   rb   z)canonicalize_precision.<locals>.<genexpr>u  s,      221Jq#222222rW   r   z-Precision argument must be None, a string in zO, a lax.Precision value or a tuple of two lax.Precision values or strings; got rc   )r   default_matmul_precisionrj   r  re   r   r   r  r   r  r   rs   rd   r  r  )r  r   r   p1p2s        rU   r  r  Z  sN    &,4T	
F39
:
:
F39
:
:     Y$%%Y Y171P1VY Y  
 )S!! &i3E&E&EY9!5!555)Y'' &i9tUm,, &Y11D1D88i88888 2EU9i/0)<<<9tUm,, 
&Y11D1D22	22222 2EFB	5I-.0Fr0J0J	K	KA	NB	5I-.0Fr0J0J	K	KA	NB8O
	%=O8P8P 	% 	%!	% 	% 	%& & &s   ;A ABc           
         t          t          t          | |          t          |          t	          |                    t          t          ||          t          |          t          |                              S rL   )ri  r-  r  rX  r=  r1	  )r   r  r$  s      rU   r  r    sY    	VHQNNE!HHfQii88HQNNE!HHeAhh77
9 
9 9rW   c                    t          |           t          |          }}||k    r<t          j        ||          }||k    rt          | |          } nt          ||          }t	          | |          S rL   )r5  r   promote_typesr  r}  )ru  r  a_dtypeb_dtypehigher_dtypes        rU   r  r    sl    AYYq		7''99Lw
q'
*
*aa
q'
*
*a	Aq/rW   c                D    t          t          j        |                     S rL   )r%   r   r  r   s    rU   rN  rN    s    	q))	*	**rW   c                8    t                               |           S r  )empty_pr   r  s    rU   emptyrN	    s    	E	"	""rW   rN	  c                ,    t          j        d|           S r{  )r   r#   r  s    rU   r  r    s    4+;B+F+F rW   c                  t          j        |t           j                  r|nt          j        |          }t          j        t          j        d|                    }t          j	        t          j
        |j        |j                            fS r{  )r   r  r  rM   rS   r   r  r#   r*   r  r  r[   )r  rS   	phys_avals      rU   _empty_lowerrR	    sh    $UFO<<
Q%%"(5//% !1"e!<!<==)		"(9?IODD	E	E	FFrW   tiec                    |S rL   r_   r'  s     rU   r  r    s    A rW   c                    |S rL   r_   r'  s     rU   r  r    s    Q rW   c                    |gS rL   r_   )r  r   r$  s      rU   r  r    s     rW   c                .    t          j        |  |d         fS r  )tie_pr   )r  r  s     rU   r  r    s    uz73Xb\B rW   c                
    d | gS rL   r_   )r  r   rk  s      rU   r  r    s
    4* rW   c                      e Zd Zed
d            Zed             Zed             Zedd            Zedd            Zd	S )	BIntRulesrI   r  c                P    t          j        dt          j        d                    S )Nr_   r  )r   r#   rM   rS   r  s    rU   r  zBIntRules.physical_element_aval  s    B 1 1222rW   c                    fd}|S )Nc                v    t          j        |j        |j                  |_        t          j        |          S rL   )r   r#   r[   rS   rj  r3  )rk  bufrj  s     rU   handlerz)BIntRules.result_handler.<locals>.handler  s-    !#)SY77ch[s###rW   r_   )sticky_devicerj  r`	  s    ` rU   result_handlerzBIntRules.result_handler  s#    $ $ $ $ $ NrW   c                     t          j                   }t          j        t           j                 }t          j        |          st          |} ||||           fd}|S )Nc                @    t          j         |                     S rL   )r   r3  )bufsrj  phys_handlers    rU   r`	  z8BIntRules.global_sharded_result_handler.<locals>.handler  s    [||D11222rW   )r   r  r,   global_result_handlersr#   r   is_single_device_shardingr  )rj  out_sharding	committedrQ	  phys_handler_makerphys_shardingr`	  rf	  s   `      @rU   global_sharded_result_handlerz'BIntRules.global_sharded_result_handler  sz    "4((I4T5EF-l;; #"m%%i	JJL3 3 3 3 3 3NrW   r   c                V    |t          j        d          t          j        d          fv S Nr  r  rM   rS   )
bint_dtypeother_dtypes     rU   r  zBIntRules.convert_from  &    28G,,bhw.?.?@@@rW   c                V    | t          j        d          t          j        d          fv S ro	  rp	  )rr	  rq	  s     rU   r  zBIntRules.convert_to  rs	  rW   N)rI   r  rI   r   )	r   r   r   staticmethodr  rb	  rm	  r  r  r_   rW   rU   r[	  r[	    s        3 3 3 <3   <   < A A A <A A A A <A A ArW   r[	  )rH   r=   rI   rJ   )rX   rY   )rX   rm   rI   rn   )r   r<   rI   r;   )rX   r   rI   r   )rX   r   rI   r   )r[   r   rI   r   )r   r   r   r   rI   r   )r   r<   r   r<   rI   r;   )r   r<   r  r   rI   r;   )r   r<   r$  r<   rI   r;   )r   r<   r$  rJ   rI   r;   )r  r<   r  r  rI   r;   )NFN)r  r<   r  r  r   r   r  r  )r  r<   r  r?   rI   r;   )rP   r<   r   r<   rR   r<   rI   r;   )r  r  r  rJ   rI   r;   )NN)
r  r;   r  r;   r  r  r  r  rI   r;   )r  r<   r  r<   r  r  r  r  r  r  rI   r;   )NNN)r  r;   r  r;   r   r;   r  r  r  r  r  r  rI   r;   )r  r<   r  r  rI   r;   )r  r<   r[   r@   r  r  rI   r;   )r   r<   r   rJ   rI   r;   rL   )r  r<   r  r@   r  r  rI   r;   )r  r<   r  r<   r  r  rI   r;   )r  r<   r  r  rI   r;   )r(  r<   r)  r<   r*  r<   rI   r;   )r.  r<   r/  r<   rI   r;   )r  r<   r3  r4  rI   r;   )r  r<   r;  rJ   r<  r?   rI   r;   )
r  r   rG  r   rH  rI  r  r  rI   r   )rx  r   ry  rz  rI   r{  )rS   r?   rI   r  )r  r<   r?  r  rI   r;   )r  Trp   )
r  r;   r  rJ   r  r   r  rJ   rI   r;   )
r  rz  r  rJ   r  r   r  rJ   rI   r  )
r  r  r  rJ   r  r   r  rJ   rI   r  )r  T)
r  r;   r  r<   r  rJ   r  r   rI   r  )r  r<   r  rJ   rI   r  )r   r   r$  rG   rI   rG   )
r[   r@   r  r<   rS   r  r  r  rI   r;   )rj  r#   rI   r;   )rj  r  rI   r  )rS   r?   r  rJ   rI   r;   )rS   r?   r[   r@   r  rJ   rI   r;   )rS   r?   r[   r@   r  r=   rI   r;   )rS   r?   r[   r@   r?  r  rI   r;   )r   rG   rI   rG   )r  r  r  rJ   r  rJ   rI   r;   )r   r<   r  r  rI   r;   )r   r$  r  r<   rS   r  r[   r%  r  r  rI   r;   )r  r;   r+  rJ   r,  r-  rI   r;   )r  r;   r  r;   r  r  rI   r;   )FF)r  r  rt  r  r   r  rI   r  )r  r   r   r  rI   r  )r  r  )r  r  r  r   )r  r  )rI   r  )r  r  rI   r  )r  r  r  r  )r  r;   r  r;   r   r;   rI   r@   )
r  r;   r  r;   r   r;   r  r  rI   r  )rI   r  )r[   r  )rq  ry  )r  r<   rI   r;   )r  r:   rI   r-  )r  r  rt  r	  rI   r	  )Fru	  )r  r  rI   r>	  (  
__future__r   r   collections.abcr   r   enumrH  r   r:	  r4  r7  typingr   r   r	   r
   r   r  r   r   r  rV  rM   rT  r   jax.shardingr   jax.tree_utilr   jax._srcr   r   r   r   r   r   r   r   r   r   rf  r   ppr   r   r   jax._src.abstract_arraysr    jax._src.corer!   r"   r#   r$   r%   r&   r'   jax._src.interpretersr(   r)   r*   r+   r   r,   r-   jax._src.interpreters.batchingr.   jax._src.laxr/   jax._src.lax.utilsr0   r1   r2   r3   r4   r5   jax._src.libr6   jax._src.lib.mlirr7   jax._src.lib.mlir.dialectsr8   r9   jax._src.sharding_implsr:   jax._src.typingr;   r<   r=   r>   r?   r@   jax._src.utilrA   rB   rC   rD   rE   rF   xbxcopsxops_xlaxerR   r   rP   r;  r[  r   rG   rk   
unsafe_mapr  r   rV   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   IntEnumr   r   r  r  r  r  r  r  r  r  r  r   r#  r(  r+  r/  r   r6  r9  r<  rA  rD  rG  rJ  rM  rP  rS  rW  rZ  r]  r`  rc  rf  ri  rl  rt  rw  rz  r}  r  r  r  r  r  r  r   r  r  r  r  r  r  Enumr  r  r  r  r   r  r  rJ   r  r  r  r  r
  r  r  r"  r'  r-  r2  r:  rB  rF  rm  rO  rM  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  aval_zeros_likersr  AbstractRefr  r  r  r  r  r  r  r  r#  r*  r9  r=  r@  rB  rJ  rM  rP  rS  rV  rY  r\  r_  rb  re  aval_methodrq  rv	  r  rs  rv  r;	  r  r  r  r  raw_jaxval_adders_fixed_dtype_complex_basetype_strip_weak_typer  r  standard_unopr  r  r  r  standard_naryopr  r  r  r  r	  rm  r  rn  r  float64_complex_elem_typesr~  rl  r}  _boolr  
_signedintr  _any_bool_or_int_orderedr   
deflinear2register_loweringnegater   defjvp_zeror  r   
next_afterr   r   r  r  r  r
  defjvp2r  r  r  r  defjvpr  exponential_minus_oner  log_plus_oner  r  r  r  r  r  r  r  r  r"  r  rL  r  rO  r$  rR  r'  rU  r&  rX  r[  r^  ra  rd  r*  r.  r9  _complex_dtyper1  r4  r?  rA  
linear_jvpprimitive_jvpsprimitive_transposesr8  rH  rE  rD  rC  rF  rI  rR  r;  r[  r]  ri  ro  rr  r@  r  r  rv  r{  rF  rL  not_rO  r  rR  or_rV  r  rY  popcntr\  count_leading_zerosr  r  r  r_  r  r  rb  r	  r  r  re  r  r  rh  r	  rk  	remainderr  rn  max_hlorq  min_hlors  rv  ry  r  AndOpr  OrOpr  r  r  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  def_custom_binddef_implr  def_abstract_evalconst_fold_rulesforwarding_rulespp_eqn_rulesr  r	  r  r  r  r  r  r5  r*  r9  rN  rH  rK  rd  rh  ry  rk  r  r  r  defbilinearprimitive_batcherspadding_rulesr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r+  r/  r6  r  custom_partial_eval_rulescustom_staging_rulescustom_typechecksr8  _clamp_dtype_rulerA  r  rX  rZ  rj  rn  rq  r  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  r  r9  r  r  r  r  r  r  r  r  r,  r(  r0  r4  rA  r[  rb  rP  r  r|  r  r  r  r  r  r  
defreducerr  r  r  r  r  r  r  r  r  r  r  r@  rE  ry  r  r  r  r  r  AddOpMulOpXorOpr  r  	deflinearr  rS   r  r  r  _UINT_DTYPESint16r  r  _INT_DTYPESr  r  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r%  r
  r)  r'  r.  r2  r5  r0  r7  Effectr9  rD  r]  rB  rE  r<  def_effectful_abstract_evallowerable_effectsadd_typerW  r[  r^  rY  rb  rf  rh  rd  rm  rr  rt  rv  ry  r  r  r  r  r  r  r  r  r  r  r  memory_kind_propagate_ruler  r  r  r  r  r  r  r  r  r  r   _ndimr  r  r  r	  r 	  r  r  r  r=  rG  rX  r  r1	  r2	  r5  r  rC  rV  rU  r  r  r  rN  rN	  rM	  rR	  rX	  r[	  r4  r  r_   rW   rU   <module>r	     sO   # " " " " " "  . . . . . . . .                  \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \      



       ! ! ! ! ! ! " " " " " "                                                       & & & & & & ) ) ) ) ) ) % % % % % %             0 0 0 0 0 0P P P P P P P P P P P P P P P P P P $ $ $ $ $ $ * * * * * * & & & & & & 4 4 4 4 4 4 & & & & & & % % % % % % 5 5 5 5 5 5            ; ; ; ; ; ; ; ; ; ; ; ; ; ;        # # # # # #             + + + + + + * * * * * * 0 0 0 0 0 0 W W W W W W W W W W W W W W W W< < < < < < < < < < < < < < < < ~_||

GCLLCZCZ= = = =% % % %   .P P P P 
 F F F 
 F	= = = 
=/ / / - - - 	-  "                   0" " " "           T\   
 -;,I: : : : :&                                 
         / / / /
      $ $ $ $                     $ $ $ $                        ! ! ! !- - - -* * * *                  D D D D( :> $	1 1 1 1 1fC C C C:	# 	# 	# 	#< < < <0 ,.  - - - -  7                 $# # # # #$) # # #L !* 1 9  ) 1 9 &^ 6 $-N = !&/n ? # ) 1 9 !*!2 :  ) 1 9 $, 4  	#s(O	)Y
	
 <@37    B E(3-#">?!(3-#">?@ A  ,0;?.K .K .K .K .Kj  $/3!%f f f f f4K K K K&8 8 8 8>, , , , 047> 7> 7> 7> 7>rR R R R,; ; ; ;2 2 2 22( ( ( (4
> 
> 
> 
>K K K KK K K K#3 #3 #3 #3J   	" 
5 
5 	
5   4$ $ $ $         	< 	< 	< 	<	< 	< 	< 	<6 6 6 67 7 7 76 6 6 66 6 6 65 5 5 56 6 6 66 6 6 6 
*,12B B B B 
B 
4612N N N N 
N =?12"Y "Y "Y "Y "YH CE#'    $ $ $ $B    &%) &  &  &  &  &  &D, , , , *A + &! ! ! ! 0G %+ ,- - - -	* 	* 	* 	*4 4 4 4/ / / /4 4 4 4   >d d d d6 6 6 6? ? ? ?& @DFJ- - - - -b +/% % % % %: -1* * * * *&      	 	 	                            )(33 ((33 &d&w// 	Q 	Q 	Q !L'' &,u--        

$$&&eo5F
H 
H - -A!,'A KJ CC ++ " " "$   i((?? $(e    8  6 FK$	 	 	 	 '&,//
5 5 5
K 
K 
K   0 #(# # # # # #& +z2:. 

|	

f}xf}x%'e|&=5 dE"" e00 1 1 1  uggoszBB C C C	tV	$	$ v       v / / /ovv.<<  {GGOT_$M$M N N N
-
(
( w     w C C D D D	vv	&	& v     vwwAA B B B
-
(
( w   ' ' '  w - - -d<<))6;?? {     {GGOS]$K$K L L Lfx'// 

5// 0 0 0  uggosGG H H H	v(&	1	1 

6HH I I I2 2 2
  v{ + + +fx'// 		%'' ( ( (  uggosw?? @ @ @
-)7
3
3 

7AA B B B  ww0IJJL L L -)7
3
3 		'77 8 8 8  w9I J J K K K	v(&	1	1 

6 < < = = =  vwwAA B B B]6H,j99
 

:NN O O O) ) )  z%t~meLLLN N NG G G+ + + 	fx'// 		%,, - - -  um , , ,	G 	G 	G- - - 	fx'// 		%11 2 2 2  um , , ,   	fx'// 

5FF G G G  uggotx@@ A A AP P P 
v(&	1	1 		&FF G G G  vww	BB C C C  " 
v(&	1	1 		&GG H H H  v%t~i%HHHJ J J      
v(&	1	1 		&?? @ @ @  vww	BB C C C
/6H,fx.?@'
J
J 		'
;
;
:
:< < <  w C C D D D	v(&	1	1 		&.. / / /  vww	BB C C C	v(&	1	1 		&.. / / /  vww	BB C C C
-)7
3
3 		'BB C C C  w D D E E E
-)7
3
3 		'
C
CE E E  w D D E E E
-)7
3
3 		'
J
JL L L  w D D E E E	6	2	2 fHH I I I  vwwAA B B B	6	2	2 fMM N N N  vwwAA B B B8 8 8$ _^F>$79L#M 	 i0 1 1 1  y''/3;"G"G H H H	n1H<f	E	E! ! !  v%t~j5IIIK K K   $GBM6:: & "6  
V 3h >FF  uggosw?? @ @ @. . . 
5-      7777	v(&	1	1 

6EE F F F  vwwAA B B B
-)7
3
3 

75 56 6 6  w C C D D D	vv	&	& 

6NNP P P  vwwAA B B B	< 	< 	< 	(!2D6MH4L M%	1 	1 	1  P P P 
5, - - -
2 
2 
2  uj ) ) )  S S S #"+g/@ @  } % % % 		-) * * *  } % % %? ? ?$! ! !   }&; < < <BBlE** u     uggosx@@ A A A|4e<< u     uggosx@@ A A Al3T:: t     tWW_cg>> ? ? ?|4e<< u     uggosw?? @ @ @"]4);<<   )77?CJ+O+O P P PdE""  uggos7NOO P P P' ' '
> 
> 
>   #?D$<77 7 7 7 7# % !/    uggosw?? @ @ @' ' '	C 	C 	C 	te,,# % !/    uggos|DD E E E6 6 6  
 	te,, 		%
)
)
)
)+ + + "0    uggos|DD E E E; ; ; 	te,, 		%
#
#
A
AC C C "5    uggoszBB C C Cv6>> 			SSLLN N N  uggos}EE F F F   (te<< < < < < 

5????A A A  uggot|DD E E E'te<< < < < < 

5????A A A  uggot|DD E E Ed|\:: |     |WW_cn%M%M N N N*?D$<9QRR  ' ( ( (  /w0JKKM M M (t6KLL  $ % % %  ,w0GHHJ J J; ; ; D#)-FH HD#(,DF F	N 	N 	N 	N; ; ; ; vll28$$tTlDtTTT t     tWW%7uEE F F Fvll28$$tTlDtTTT t     tWW%7uEE F F Fvll28$$x&:DAA t     tWW%7uEE F F Fvll28$$x&:DAA t     tWW%7uEE F F Fvll28$$x&:DAA t     tWW%7uEE F F Fvll28$$x&:DAA t     tWW%7uEE F F F
&bh''$w
?
? w     w(:D$ G G H H H
&bh''(H)=w
G
G w     w(:D$ G G H H H
&bh''(H)=w
G
G w     w(:D$ G G H H H  
 
 
  N N NO O O  0  E E E ##9::     & &'A B B B   (@BX Y Y Z Z Z  ( (G"$:,.N02 23 3 3 
	
 "@ A A A2V . /  - . . ..L * +.H * +  - . . .,E ( ) 4 4 4= = =  -/J K K K  $   ,+$&F+;= = =  % & & &  - . . .H H H  -/J K K K& & &4<Q <Q <Q <Q|? ? ?A A A
= = = =2        ).     *
 
 
 
 '  '  '  'D41 41 41lQ Q QM M M M #"#:#:MK K })+EG G G-D M *";  #7 -  ? ? ? ? (12 2 2 2 2 2h  }&8 9 9 9 , ,H$ !3hGGG"*, , , , ,
    =>q6Aq6:JRQSH9U ! U U U Ud d d d,! ,! ,!^3 3 3l "!"8"8,H H   ggh6EE F F F"6 , (B  %  $/3!%    :  |^T^4DW\%]%]%] ^ ^ ^" " "H' ' '	# 	# 	#3 3 3j  + + +N N N$
 
 
  (L L L L2 2 2
U 
U 
U (' ,0BD D   $ $%D E E E(B $ %.N * +2N . /*D & '3Q / 0.L * +'E # $-M ) *  )+B C C C
   G-|dD$=O#% % #& #& #&J 
.0A7
K
K 		'% %% %7 78 8 8 (9 G $  w C C D D D  w   H H H8  L L L(1 1 1   #"4mE E m8 9 9 9)D  &-D M *"7  9 9 9  }&8 9 9 9. . .  &  &< < <( 	?OUCC e^ $ $ $%4 E "J J J
  uj ) ) )  ? ? ?
D 
D 
D& & &	; 	; 	; 24G(* *	 i0 1 1 1)< I &  y ! ! !8 8 8  y. 1 1 1	( 	( 	( 	(  (' ' '  / / /H H H* * *J J J 24G(* *	 i0 1 1 1)< I &  y. 1 1 1$; y !%: 	 "	 	 	, , , 	?L%@@ eBB C C C%4 E "< < <  uj ) ) )B B B	, 	, 	,? ? ? ! !6!,. . kOOQ Q Q+@ K (  {$4 5 5 5  { # # #
 
 
  ) ) )  "%$ %$ %$N
 
 
( ( (,  >  *J)+ + +
 !, * &< 
 #*< J '  z#7 8 8 8  z " " "J J J  G G G
  *2 2 2B
N 
N 
N 4>(##     ''(2H== > > >   G/;M 68 89 9 9 ); H %. (   (  x / / /2 2 23 3 3  % % %E E E "!''";\JJ  l6 7 7 7  L"3 4 4 4!()9;):"< "<   9= H H H H H) ) ) #"!:MJJ  $9 -    M#5 6 6 6")'*:L*<#> #>  / / /E E E "!"7".0 0 

<1 2 2 2  L"3 4 4 4!()9;):"< "<   "!"7".0 0 

<1 2 2 2  L"3 4 4 4!()9;):"< "<  / / /  8 8 8 8 8 8 8 80
 
 
 35J&7GI I I  H/ 0 0 0 x   35J&7GI I I  H/ 0 0 0 x     x!4!4^T^	'
b"3446 6 6 " "     x!4!4^T^	'
b"3446 6 6 " "   
/ / /
 ! k#% % %  K!9 : : : "!l#% % %  L"; < < < "!l#% % %  L": ; ; ;
 
 
  |WW-@#)->&@ &@ A A A  }gg.A39.@'B 'B C C C  {GG,?,D%F %F G G G  |WW-@#)-F&H &H I I I  |WW-@#)-E&G &G H H H  |WW-@$,->&@ &@ A A A  |WW-@$,->&@ &@ A A A   (' GOY0BCC	    ![![ \ \ \  ) * * *> > >
  )+B C C C bhrybhrybhry  bhrxbhrxbhrx     0 -.      -.      +,     $+ + +    
6		  0&99 : : :   , - - -% & &6 F #  *  v{ + + +A A A"M M M4
- 
- 
- )G

    17;; < < <   . / / /	+ 	+ 	+  w - - -' ' '8 G $6 6 6
  
 .E ') *7P G3 4  w. / / /    >**    8.II J J J     !:!: ; ; ;    ~'= > > >% % %   i$$   WWX5{CC D D D   6 7 7 7# # #  {$7 8 8 8    gn   !! ""B B B B,4 4 4 9X     ''(2H== > > >  $ $%: ; ; ;     0 0 0  .  x!1 2 2 2@ @ @ @* * *
 Ii  	 	  7783Y?? @ @ @ 	 % %&< = = =     0 0 0    y"3 4 4 46 6 6
; 
; 
; 	-((   wwx7GG H H H    : ; ; ;H H H
  }&; < < <# # #        &::    6 6 6r  i 344 '+  $   GH$&9::< < <  % %G/1D)+H-/ /0 0 0  *24 4 4         : : :&9 9 9 
		 
F++ , , ,    % % %  v11 2 2 2 V// 0 0 0  v     v     *B  '(*	 / ;? ? ? ?2M M M& 
6		 0&99 : : :   , - - -L L L #5  	' 	' 	' "6 v 9 9 9  v{ + + +L L L ': F #M M M9 9 9 .  
 	6 6 6/ / /    $)    )  )  )H55(5 
95 	5
 	(5 
95 	(5 
95 
95 5 5 5 5 	&5 	&5  !5" #5 5$ 	&%5& '5( )5* +5, 
7-5. 
7/50 Y152 ?354 	&556 758 95: ;5< =5> ?5@ A5B 
7C5D E5 5 5F G5H I5J K5L M5N {O5P Q5R 
7S5T GU5V W5X Y5Z M[5\ 	&]5^ _5` 	&a5b 	&c5d e5f g5 5h 	&i5 5 nN N N N$F F F F6   79333 3 3 3 3')2!<<< < < < <')222 2 2 2 2";;; ; ; ; ;')222 2 2 2 2";;; ; ; ; ;'&,T::: : : : :76<d;;; ; ; ; ;   : : : :  3 3 3
$& $& $& $&L9 9 9
  + + +# # #
$.
!
!   FF G G GG G G  w - - - 	u ~~       ' ' '  u33 4 4 4BB  % !<!<    u     u   !A !A !A !A !A !A !A !AH 	   rW   