
    Whi              	          U d Z ddlmZ ddlmZ ddlmZ ddlZddl	m
Z
 ddlmZ ddlmZ ddlmZmZmZmZ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$m%Z%m&Z& d Z'ej(        d             Z)ej(        d             Z*ej+        d             Z, G d dej-                  Z. G d dej/                  Z0 G d d          Z1 e1            Z2 ee1d d             G d d          Z3 e3            Z4 ee3d d             i Z5e6ej7        ed!ef         f         e8d"<   i Z9d# Z:d$ Z; e:e
j<                    e:e
j=                    e:e
j>                    e:e
j?                    e:e
j@                    e:e
jA                    e:e
jB                    e:e
jC                    e:e
jD                    e:e
jE                    e:e
jF                    e:e
jG                    e:e
jH                    e:e
jI                    e:ejJ                    e:e
jK                    e:e
jL                    e:e
jM                    e:e
jN                    e:e
jO                   d% ZPd& ZQ ePe
jR                    ePe
jS                    ePe
jT                    ePe
jU                    ePe
jV                    ePe
jW                    ePejX                    ePe
jY                    ePe
jZ                    ePe
j[                    ePe
j\                    ePe
j]                    ePe
j^                    ePe
j_                    ePe
j`                    ePe
ja                    ePe
jb                    ePe
jc                    ePe
jd                    ePe
je                    ePe
jf                    ePe
jg                    ePejh                   d' Zieie9e
jj        <   d( Zkeke9e
jl        <   d)emd*end+efd,Zo ePe
jp                    eeoe
jq        -          e9e
jr        <    eeoe
js        -          e9e
jt        <    eeoe
ju        -          e9e
jv        <   d. Zwd/ Zx ewe
jy        d0            d1 Zz eze
j{        d2             eze
j|        d3             eze
j}        d4             eze
j~        d5             eze
j        d6             eze
j        d7             eze
j        d8             eze
j        d9             eze
j        d:             eze
j        d;             eze
j        d<            d= Zee9e
j        <   d> Zd? Zd@ ZdA Zee9e
j        <   dB Zee9e
j        <   dC ZdD Zee9e
j        <   dE Zee9e
j        <   dF Zee9e
j        <   dG Zee9e
j        <   dH Zee9e
j        <   dI Zee9e
j        <   dJ ZdK Z e eedLe
j        e
j        f          d          e9e
j        <    e eedLe
j        e
j        f          dM          e9e
j        <    e eedMe
j        e
j        f          d          e9e
j        <    e eedMe
j        e
j        f          dM          e9e
j        <   dN Z eee
j                  e9e
j        <    eee
j                  e9e
j        <    eee
j                  e9e
j        <   dO Zee9e
j        <   dP Z ee"j                  e9e
j        <    ee"j                  e9e
j        <   dQ Zee9e
j        <   dR Zee9e
j        <   dS Zee9e
j        <   dT Zee9e
j        <   dU Zee9e
j        <   e%dVej        dWemdXeej        ef         fdY            ZdZ Zee9ej        <   dS )[a  Jet is an experimental module for higher-order automatic differentiation
  that does not rely on repeated first-order automatic differentiation.

  How? Through the propagation of truncated Taylor polynomials.
  Consider a function :math:`f = g \circ h`, some point :math:`x`
  and some offset :math:`v`.
  First-order automatic differentiation (such as :func:`jax.jvp`)
  computes the pair :math:`(f(x), \partial f(x)[v])` from the pair
  :math:`(h(x), \partial h(x)[v])`.

  :func:`jet` implements the higher-order analogue:
  Given the tuple

  .. math::
    (h_0, ... h_K) :=
    (h(x), \partial h(x)[v], \partial^2 h(x)[v, v], ..., \partial^K h(x)[v,...,v]),

  which represents a :math:`K`-th order Taylor approximation
  of :math:`h` at :math:`x`, :func:`jet` returns a :math:`K`-th order
  Taylor approximation of :math:`f` at :math:`x`,

  .. math::
    (f_0, ..., f_K) :=
    (f(x), \partial f(x)[v], \partial^2 f(x)[v, v], ..., \partial^K f(x)[v,...,v]).

  More specifically, :func:`jet` computes

  .. math::
    f_0, (f_1, . . . , f_K) = \texttt{jet} (f, h_0, (h_1, . . . , h_K))

  and can thus be used for high-order
  automatic differentiation of :math:`f`.
  Details are explained in
  `these notes <https://github.com/jax-ml/jax/files/6717197/jet.pdf>`__.

  Note:
    Help improve :func:`jet` by contributing
    `outstanding primitive rules <https://github.com/jax-ml/jax/issues/2431>`__.
    )Callable)Any)partialN)lax)pjit)register_pytree_nodetree_structuretreedef_is_leaftree_flattentree_unflatten)ad_util)core)dispatch)linear_util)sharding_implsshaped_abstractify)partial_eval)unzip2weakref_lru_cachesafe_zipc           	          	 t          t          t          |                    \  }n # t          $ r d}t          |          dw xY wt	          t          ||                    D ]\  }\  }}t          |          }t          |          st          d| d          t	          |          D ]9\  }	}
t          |
          }t          |          st          d|	 d| d          :t          j	        d             } |t          j
        |                     \  }}t          t          |          |                              ||          \  }}t           |            |          t           |            |          fS )u_  Taylor-mode higher-order automatic differentiation.

  Args:
    fun: Function to be differentiated. Its arguments should be arrays, scalars,
      or standard Python containers of arrays or scalars. It should return an
      array, scalar, or standard Python container of arrays or scalars.
    primals: The primal values at which the Taylor approximation of ``fun`` should be
      evaluated. Should be either a tuple or a list of arguments,
      and its length should be equal to the number of positional parameters of
      ``fun``.
    series: Higher order Taylor-series-coefficients.
      Together, `primals` and `series` make up a truncated Taylor polynomial.
      Should be either a tuple or a list of tuples or lists,
      and its length dictates the degree of the truncated Taylor polynomial.

  Returns:
    A ``(primals_out, series_out)`` pair, where ``primals_out`` is ``fun(*primals)``,
    and together, ``primals_out`` and ``series_out`` are a
    truncated Taylor polynomial of :math:`f(h(\cdot))`.
    The ``primals_out`` value has the same Python tree structure as ``primals``,
    and the ``series_out`` value the same Python tree structure as ``series``.

  For example:

  >>> import jax
  >>> import jax.numpy as np

  Consider the function :math:`h(z) = z^3`, :math:`x = 0.5`,
  and the first few Taylor coefficients
  :math:`h_0=x^3`, :math:`h_1=3x^2`, and :math:`h_2=6x`.
  Let :math:`f(y) = \sin(y)`.

  >>> h0, h1, h2 = 0.5**3., 3.*0.5**2., 6.*0.5
  >>> f, df, ddf = np.sin, np.cos, lambda *args: -np.sin(*args)

  :func:`jet` returns the Taylor coefficients of :math:`f(h(z)) = \sin(z^3)`
  according to Faà di Bruno's formula:

  >>> f0, (f1, f2) =  jet(f, (h0,), ((h1, h2),))
  >>> print(f0,  f(h0))
  0.12467473 0.12467473

  >>> print(f1, df(h0) * h1)
  0.7441479 0.74414825

  >>> print(f2, ddf(h0) * h1 ** 2 + df(h0) * h2)
  2.9064622 2.9064634
  z;jet terms have inconsistent lengths for different argumentsNzprimal value at position z is not an arrayzterm z for argument c                 ^     | | }t          |          \  }}|                    |           |S N)r   store)fr   argsanstrees        Z/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/jax/experimental/jet.pyflatten_fun_outputzjet.<locals>.flatten_fun_output   s5    
!T(CS!!IC	KKJ    )setmaplen
ValueError	enumeratezipr	   r
   lutransformation_with_aux2	wrap_initjet_funjet_subtracecall_wrappedr   )funprimalsseriesordermsgixtermstreedefjtr!   r   out_treeout_primals	out_termss                   r    jetr=   O   s   b$S&!!""FEE	 $ $ $
GC
S//t#$
 !Wf!5!566 G Gma!UQG7## HF1FFFGGG%   G G1q!!gW%% GEEE!EEEFFFGG
    #"2<#4#455+!X"<??E::GGQWXX+y	

K	0	0.Y2W2W	WWs	   $' Ac                     t          j                    } | |||          \  }}fdt          ||          D             }||fS )Nc                 \    g | ](\  }}|t           u rt          j        |          gz  n|)S  )zero_seriesjnp
zeros_like).0psr2   s      r    
<listcomp>zjet_fun.<locals>.<listcomp>   sN     8 8 81a /0;.>.>q!!"U**A 8 8 8r"   )r   TraceTagr(   )r   r2   r0   r1   tagr;   r<   s    `     r    r,   r,      se    #1S%&99+y8 8 8 8{I668 8 8)	i	r"   c                 z   t          j                    5 }t          |||          }t          t	          t
          |          ||          }t          j        |          5   | | }d d d            n# 1 swxY w Y   t          t          |j        |                    \  }	}
|	|
fcd d d            S # 1 swxY w Y   d S r   )	r   take_current_traceJetTracer$   r   	JetTracerset_current_tracer   to_primal_terms_pair)r   rI   r2   r0   r1   parent_tracetrace
in_tracersr   r;   r<   s              r    r-   r-      s8      "LS,..EWY..@@J			&	&  Q
^s               $C(BC$H$HIIK	!" " " " " " " " " " " " " " " " " "s6   A
B0A0$B00A4	4B07A4	8+B00B47B4c                     t          ||          \  }} | ||          \  }}t          ||f          \  }}	|                    |	           |S r   )r   r   r   )
r   r   in_tree_defprimals_and_series
primals_in	series_inprimals_out
series_outout_flatout_tree_defs
             r    	traceabler\      s[    (6HII*iAj)44+z'j(ABB(L++l	/r"   c                   8    e Zd ZddgZd Zed             Zd ZdS )rM   primalr6   c                 z    t          |          t          t          t          fv sJ || _        || _        || _        d S r   )type
ZeroSerieslisttuple_tracer^   r6   )selfrQ   r^   r6   s       r    __init__zJetTracer.__init__   s9    ;;:tU33333DKDKDJJJr"   c                 4    t          j        | j                  S r   )r   get_avalr^   re   s    r    avalzJetTracer.aval   s    =%%%r"   c                     | j         t          u st          d | j         D                       rt          j        | j                  S | S )Nc              3   (   K   | ]}|t           u V  d S r   	zero_termrD   r9   s     r    	<genexpr>z'JetTracer.full_lower.<locals>.<genexpr>   s&      'K'K1Y'K'K'K'K'K'Kr"   )r6   rA   allr   
full_lowerr^   ri   s    r    rr   zJetTracer.full_lower   sD    z[  C'K'K
'K'K'K$K$K _T[)))kr"   N)__name__
__module____qualname__	__slots__rf   propertyrj   rr   r@   r"   r    rM   rM      sW        !)   & & 8&    r"   rM   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )rL   c                 0    || _         || _        || _        d S r   )rI   rP   r2   )re   rI   rP   r2   s       r    rf   zJetTrace.__init__   s    DH$DDJJJr"   c                     t          |t                    r!|j        j        | j        u r|j        |j        fS |t          fS r   )
isinstancerM   rd   rI   r^   r6   rA   )re   vals     r    rO   zJetTrace.to_primal_terms_pair   s>    #y!! cjn&@&@Z""+r"   c                 l   	  j         	t          t           j        |                    \  }}t	          d |D                       rG|                     j        ||          }|j        r fd|D             S t           |t                    S 	fd|D             }t          j         j                  5  d t          ||          D             }t          |         } |||fi |\  }}d d d            n# 1 swxY w Y   |j        st           ||          S  fdt          ||          D             S )Nc              3   (   K   | ]}|t           u V  d S r   rA   ro   s     r    rp   z-JetTrace.process_primitive.<locals>.<genexpr>   s'      
/
/1
/
/
/
/
/
/r"   c                 <    g | ]}t          |t                    S r@   )rM   rA   )rD   rE   re   s     r    rG   z.JetTrace.process_primitive.<locals>.<listcomp>   s%    DDDA	$;//DDDr"   c                 <    g | ]}|t           u rt          gz  n|S r@   )rA   rn   )rD   rF   r2   s     r    rG   z.JetTrace.process_primitive.<locals>.<listcomp>   s?     % % % )*[(8(8)u$$a % % %r"   c                 2    g | ]\  }fd |D             S )c                     g | ]G}|t           u r:t          j        t          j                  t          j                             n|HS ))dtype)rn   rB   zerosnpshaperesult_type)rD   r9   r5   s     r    rG   z9JetTrace.process_primitive.<locals>.<listcomp>.<listcomp>   sX     > > >12qI~~ Ibhqkk1C1CDDDD+,> > >r"   r@   )rD   r1   r5   s     @r    rG   z.JetTrace.process_primitive.<locals>.<listcomp>   sT     @ @ @ q&> > > >6<> > > @ @ @r"   c                 8    g | ]\  }}t          ||          S r@   rM   rD   rE   tsre   s      r    rG   z.JetTrace.process_primitive.<locals>.<listcomp>   s)    MMMBia$$MMMr"   )r2   r   r$   rO   rq   bind_with_tracerP   multiple_resultsrM   rA   r   rN   r(   	jet_rules)
re   	primitivetracersparamsrV   rW   
primal_outrule	terms_outr2   s
   `        @r    process_primitivezJetTrace.process_primitive   s   JE"3t'@'#J#JKKJ	

/
/Y
/
/
/// 8,,T->
FSSj		# 8DDDDDDDDz;777% % % %#% % %I		 1	2	2 D D@ @$'
I$>$>@ @ @i y!d"d:yCCFCCj)D D D D D D D D D D D D D D D % NtZ333MMMM#j)2L2LMMMMs   65C77C;>C;c                     t          t           j        |                    \  }}t          ||f          \  }}t	          t          | j                  |          \  }	}
t                              |          }|r ||t          |                    n|} |j
        |	g|R i |}t           |
            |          \  }} fdt          ||          D             S )Nc                 8    g | ]\  }}t          ||          S r@   r   r   s      r    rG   z)JetTrace.process_call.<locals>.<listcomp>   s)    MMMuq"IdAr""MMMr"   )r   r$   rO   r   r\   r-   maincall_param_updatersgetr%   bindr   r(   )re   call_primitiver   r   r   rV   rW   rU   rT   f_jetr[   update_params
new_paramsresultrX   rY   s   `               r    process_callzJetTrace.process_call   s    "3t'@'#J#JKKJ	&2J	3J&K&K##LDI$>$>LLE<'++N;;M"/--,>(?(?@@@(.  ^ J);JJJzJJF,\\^^VDDKMMMMK0L0LMMMMr"   c                    ~~ |j         | S r   r.   )re   r   r/   jvpr   symbolic_zeross         r    process_custom_jvp_callz JetTrace.process_custom_jvp_call   s     	33W%%r"   c                     ~~~~ |j         | S r   r   )re   r   r/   fwdbwdr   	out_treess          r    process_custom_vjp_callz JetTrace.process_custom_vjp_call  s    3Y3W%%r"   N)	rs   rt   ru   rf   rO   r   r   r   r   r@   r"   r    rL   rL      st          
  N N N2	N 	N 	N& & && & & & &r"   rL   c                       e Zd ZdS )ZeroTermNrs   rt   ru   r@   r"   r    r   r               r"   r   c                     dS N)r@   Nr@   zs    r    <lambda>r     s     r"   c                     t           S r   rm   _xss     r    r   r     s    9 r"   c                       e Zd ZdS )ra   Nr   r@   r"   r    ra   ra   
  r   r"   ra   c                     dS r   r@   r   s    r    r   r     s    : r"   c                     t           S r   r   r   s     r    r   r     s    [ r"   .r   c                 @    t          t          |           t          | <   d S r   )r   	zero_propr   prims    r    defzeror     s    It,,)D///r"   c                 .     | j         |i |}|t          fS r   )r   rA   )r   rV   rW   r   r   s        r    r   r     s#    ty*///*	[	  r"   c                 @    t          t          |           t          | <   d S r   )r   linear_propr   r   s    r    	deflinearr   3  s    K..)D///r"   c                 t       j         |i } fdt          | D             } j        r	t          | }||fS )Nc                 *    g | ]} j         |i S r@   )r   )rD   terms_inr   r   s     r    rG   zlinear_prop.<locals>.<listcomp>8  s*    OOO8		8.v..OOOr"   )r   r(   r   r   )r   rV   rW   r   r   rY   s   `  `  r    r   r   6  sZ    ty*///*OOOOOsIOOO*	 ':&J	Z	r"   c                 v    | ^}t          j        j        |gR i }fdt          | D             }||fS )Nc                 P    g | ]"}t          j        j        |d          gR i #S )r   )r   dynamic_slice_pr   rD   r   r   start_indicess     r    rG   z+_dynamic_slice_jet_rule.<locals>.<listcomp>X  sK     1 1 1 #(!O}OOOOO 1 1 1r"   )r   r   r   r(   )rV   rW   r   operandr   rY   r   s     `   @r    _dynamic_slice_jet_ruler   U  sm    &'M"'J-JJJ6JJ*1 1 1 1 1 #Y1 1 1*	Z	r"   c                 t    | ^}}t          j        j        ||gR  }fdt          | D             }||fS )Nc                 V    g | ]%}t          j        j        g |d d         R i &S )N   )r   dynamic_update_slice_pr   r   s     r    rG   z2_dynamic_update_slice_jet_rule.<locals>.<listcomp>a  sS     1 1 1 */X"1"XXXXQWXX 1 1 1r"   )r   r   r   r(   )rV   rW   r   r   updater   rY   r   s     `    @r    _dynamic_update_slice_jet_ruler   ^  si    $.!'6M).wOOOO*1 1 1 1 1 #Y1 1 1*	Z	r"   axisreverse
combine_fnc                Z    t          t          t          j        |||          | |          S )N)r   r   )r=   r   r   associative_scan)rV   rW   r   r   r   s        r    _cumulative_jet_ruler   g  s8    
 
WS):D$& & &
$ 
$ $r"   )r   c                 B    t          t          | |          t          | <   dS )zK
  Define the jet rule for a primitive in terms of its first derivative.
  N)r   
deriv_propr   )r   derivs     r    	def_derivr   y  s     Je44)D///r"   c           
         |\  }|\  }|                      |          }t          |||          \  }}|g|z   |g|z   |gd gt          |          z  z   }	t          dt          |	                    D ]Ft	          dz
            t          fdt          ddz             D                       z  |	<   G|	^}}
||
fS )N   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   _scalerD   r8   ckus     r    rp   zderiv_prop.<locals>.<genexpr>  A      QQA6!Q<<!AaC&01Q47QQQQQQr"   )r   r=   r%   rangefactsum)r   r   rV   rW   r5   r1   r   c0csvrY   r   r   r   s              @@@r    r   r     s    "!'&yy||*uj),,&"b	dRi!cFl!ldVc&kk))!CFF R Ra!99sQQQQQQq!a%QQQQQQAaDD*z	Z	r"   c           
          t          j        t          j        | dt	          j        t          j                  z            t          j        t          j        t          j	        |                                         S )N       @)
r   mullax_internal_constr   sqrtpiexpnegsquarer5   s    r    r   r     sP    CG!!R"'"%..%899gcgcjmm,,--/ / r"   c                 @    t          t          |          t          | <   dS )zZ
  Define the jet rule for a primitive in terms of a composition of simpler primitives.
  N)r   r=   r   )r   comps     r    def_compr     s     C&&)D///r"   c                 0    t          j        |           dz
  S Nr   )r   r   r   s    r    r   r     s    

Q r"   c                 0    t          j        d| z             S r   )r   logr   s    r    r   r     s    A r"   c                     | dz  S )N      ?r@   r   s    r    r   r     s
    qCx r"   c                     | | z  S r   r@   r   s    r    r   r     s
    Q r"   c                     | dz  S )Ng      r@   r   s    r    r   r     s
    T	 r"   c                 ~    t          j        | t          j        t          j        |           dz             z             S r   r   r  r   r   r   s    r    r   r     ,    CHSZ]]Q5F,G,G(G H H r"   c                 ~    t          j        | t          j        t          j        |           dz
            z             S r   r  r   s    r    r   r     r  r"   c                 b    dt          j        t          j        d| z   d| z
                      z  S )Nr  r   )r   r  divr   s    r    r   r     s)    cgcga!eQU.C.C&D&D D r"   c                 0    dt          j        |           z
  S r   )r   erfr   s    r    r   r     s    q371::~ r"   c                 <    | |t          j        | |z            z  z
  S r   )r   floorr5   ys     r    r   r     s    Q1q5)9)9%9!9 r"   c                 R    t          j        t          j        | |          |          S r   )r   minmax)ar5   bs      r    r   r     s    cgcgammQ&?&? r"   c           
      |  	
 | \  }|\  }|g|z   t          j        |          }|gd gt          |          z  z   t          j        t          j                  dz  fd} ||          gd gt          |          dz
  z  z   t          j        d                   gd gt          |          dz
  z  z   t          j        d                   gd gt          |          dz
  z  z   
t          dt          |                    D ]׊	t          	dz
            t          	fdt          d	dz             D                       z  	<   t          	          t          	fdt          	dz             D                       z  	<   t          	dz
            t          	
fdt          d	dz             D                       z  
	<   
	         z  	<   t          |          	t          	dz
            t          	fdt          d	dz             D                       z  	<   ^}}||fS )	Nr   c                 v    t          j        t          j        t          j        |                               S r   )r   r   r   r   )r  deriv_consts    r    r   z_erf_inv_rule.<locals>.<lambda>  s%    cgk373:a==+A+ABB r"   r   r   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   r   r   s     r    rp   z _erf_inv_rule.<locals>.<genexpr>  r   r"   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   _scale2rD   r8   r   r   s     r    rp   z _erf_inv_rule.<locals>.<genexpr>  sA      RRgamma!f4qt;RRRRRRr"   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   r   )rD   r8   r   tmp_exptmp_sqs     r    rp   z _erf_inv_rule.<locals>.<genexpr>  sA       b bQ1!!<vay!H b b b b b br"   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   r   r   s     r    rp   z _erf_inv_rule.<locals>.<genexpr>  sA      OO!1!A#.15OOOOOOr"   )r   erf_invr%   r   r   r   r   r   r   r   r   )rV   rW   r5   r1   r   deriv_yrY   r   r  r   r   r!  r   r   s          @@@@@@@r    _erf_inv_ruler%    se   "!'&cFl!{1~~*ldVc&kk))! #+BBBB' wztfFa88!Jqt#f++/ ::&WVAY D6S[[1_#=='CKK   $ $a !99sQQQQQQq!a%QQQQQQAaD
 Q#RRRRRU1q5\\RRRRRRF1I acS b b b b b bRWXY[\_`[`RaRa b b bbbbGAJ #AaDD 
&kk!	acSOOOOOOuQAOOOOO	O!A$*z	Z	r"   c                 T    t          j        t          j        | dz                       S N      ?)r   r   lgamma)ns    r    r   r     s     	AbD!!	"	""r"   c                 R    dt          | |z
            t          |dz
            z  z  S )Nr(  r   r   r   r8   s     r    r   r     s&    	tAE{{T!a%[[(	))r"   c                 L    dt          | |z
            t          |          z  z  S r'  r,  r-  s     r    r  r    s"    	tAE{{T!WW$	%%r"   c           
      N   | \  }|\  }|g|z   t          j        |          gd gt          |          z  z   t          dt                              D ]Ft	          dz
            t          fdt          ddz             D                       z  <   G^}}||fS )Nr   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   r   rD   r8   r   r   r   s     r    rp   z_exp_taylor.<locals>.<genexpr>  A      OOA6!Q<<!AaC&01Q47OOOOOOr"   )r   r   r%   r   r   r   )	rV   rW   r5   r1   r   rY   r   r   r   s	         @@@r    _exp_taylorr3    s    "!'&cFl!
wqzzldVc&kk))!3q66?? P Pa!99sOOOOOOq!A#OOOOOOAaDD*z	Z	r"   c           
      T  	
 | \  }}t          d | |          \  }}|g|z   	||z  gd gt          |          z  z   
t          dt          
                    D ]Ft          dz
            t	          	
fdt          ddz             D                       z  
<   G
^}}||fS )Nc                 P    t          j        |t          j        |                     S r   )r   r   r  r  s     r    r   z_pow_taylor.<locals>.<lambda>  s    swq#'!**55 r"   r   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   r   r1  s     r    rp   z_pow_taylor.<locals>.<genexpr>  r2  r"   )r=   r%   r   r   r   )rV   rW   u_r_r5   r1   r   rY   r   r   r   s           @@@r    _pow_taylorr9    s    &"b55z9MM)!VcFl!	RxjD6CKK''!CFF P Pa!99sOOOOOOq!A#OOOOOOAaDD*z	Z	r"   c                     |dk     rt          d| z  |           S |dk    rdS |dz  dk    rt          | | z  |dz            S |dz  dk    r| t          | | z  |dz
  dz            z  S d S )Nr   r   r   _pow_by_squaring)r5   r*  s     r    r<  r<    s    UUAEA2&&&Avv11uzzAE1q5)))1uzzAA{3333 zr"   c                n    dk    rt          t          j        | |          S t          fd| |          S )Nr   c                 $    t          |           S r   r;  r  s    r    r   z%_integer_pow_taylor.<locals>.<lambda>  s    )!Q// r"   )r=   rB   	ones_like)rV   rW   r  s     `r    _integer_pow_taylorr@     s<    !VVs}j)444////YGGGr"   c                 L  	 | \  }|\  }|g|z   t          j        |          gd gt          |          z  z   		d         d	d         z
  z  gd gt          |          z  z   t          dt          	                    D ]t	          dz
            t          fdt          ddz             D                       z  	<   d	d         z
  	         z  t	                    t          	fdt          ddz             D                       z  z
  <   	^}}||fS )Nr   r   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   r   )rD   r8   er   r   s     r    rp   z#_logistic_taylor.<locals>.<genexpr>  r2  r"   c              3   b   K   | ])}t          |          |         z  |z
           z  V  *d S r   r  r  s     r    rp   z#_logistic_taylor.<locals>.<genexpr>  sA      ,b,bqWQ]]QqT-AAacF-J,b,b,b,b,b,br"   )r   logisticr%   r   r   r   )
rV   rW   r5   r1   r   rY   rC  r   r   r   s
         @@@@r    _logistic_taylorrF  	  sH   "!'&cFl!
|A4&3v;;..!tq1Q4xTFS[[00!CFF c ca!99sOOOOOOq!A#OOOOOOAaD!H!tAww,b,b,b,b,bTYZ[]^_`]`TaTa,b,b,b)b)bbbAaDD*z	Z	r"   c                     | \  }|\  }d|z  gd |D             z   }|^} }t          | f|f          \  }}d |D             }d|z  dz
  |fS )Nr   c                     g | ]}d |z  S r   r@   rD   series_s     r    rG   z _tanh_taylor.<locals>.<listcomp>  s    111wq7{111r"   c                     g | ]}d |z  S rI  r@   rJ  s     r    rG   z _tanh_taylor.<locals>.<listcomp>  s    666G666r"   r   )rF  )rV   rW   r5   r1   r   r   rY   s          r    _tanh_taylorrM    sx    "!'&se11&1111!*y+ZNYMJJ*j66:666*	
Z!	Z	''r"   c                 p  	 | \  }|\  }|g|z   t          j        |          gd gt          |          z  z   	t          dt          	                    D ]Wt	          	fdt          d          D                       }         t          dz
            |z  z
  d         z  	<   X	^}}||fS )Nr   c              3   b   K   | ])}t          |          |         z  |z
           z  V  *d S r   r   r1  s     r    rp   z_log_taylor.<locals>.<genexpr>)  sA      AAva||ad"QqsV+AAAAAAr"   r   )r   r  r%   r   r   r   )
rV   rW   r5   r1   convr   rY   r   r   r   s
          @@@r    _log_taylorrQ  #  s    "!'&cFl!
wqzzldVc&kk))!CFF . .aAAAAAAU1a[[AAAAADaD4A;;%%1-AaDD*z	Z	r"   c           
        
 | \  }}t          j        ||          }t          t           j        | |          \  }}t	          j        |d          t          fd|f|f          \  }}|g|z   
|g|z   |gd gt          |          z  z   }t          dt          |                    D ]Ft          dz
            t          
fdt          ddz             D                       z  |<   G|^}}	||	fS )Nr   c                 X    t          j        dt          j        |           z             S r   )r   r  r   )r5   ones    r    r   z_atan2_taylor.<locals>.<lambda>5  s     a#*Q--&788 r"   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   r   r   s     r    rp   z _atan2_taylor.<locals>.<genexpr>:  r   r"   )
r   atan2r=   r  r   r   r%   r   r   r   )rV   rW   r5   r  r   r1   r   r   r   rY   r   r   rT  r   s             @@@@r    _atan2_taylorrW  /  s   	$!QyA*#':y11)!VAq!!#88881%&LL&"b	dRi!cFl!ldVc&kk))!CFF R Ra!99sQQQQQQq!a%QQQQQQAaDD*z	Z	r"   c                 X  
 | \  }}|\  }}|g|z   }|g|z   d gt          |          z  d t          dt                              D ]U
t          
fdt          d
          D                       }|
         t          
          |z  z
  d         z  
<   V^}}	||	fS )Nc                 L    dt          | |z
            t          |          z  z  S r'  r,  r-  s     r    scalez_div_taylor_rule.<locals>.scaleE  !    "QUd1gg 566r"   r   c              3   Z   K   | ]%} |          |         z  |z
           z  V  &d S r   r@   )rD   r8   r   rZ  r   ws     r    rp   z#_div_taylor_rule.<locals>.<genexpr>G  sC      @@quuQ{{QqT!AacF*@@@@@@r"   )r%   r   r   r   )rV   rW   r5   r  x_termsy_termsr   rP  r   rY   r   rZ  r   r]  s             @@@@r    _div_taylor_ruler`  ?  s    	$!Q'7cGm!cGm!fs1vvo!666CFF * *a@@@@@@@E!QKK@@@@@DaD477T>!QqT)AaDD*z	Z	r"   c           
      N  	 |\  }|\  }|g|z   	|\   |          gd gt          |          z  z    |          gd gt          |          z  z   t          dt                              D ]t          dz
            t          	fdt          ddz             D                       z  <   t          dz
            t          	fdt          ddz             D                       z  | z  <   d         dd          fd         dd          ffS )Nr   c              3   b   K   | ])}t          |          |         z  |z
           z  V  *d S r   r   r   s     r    rp   z#_sinusoidal_rule.<locals>.<genexpr>U  A      QQA6!Q<<!A$.1Q37QQQQQQr"   c              3   b   K   | ])}t          |          |         z  |z
           z  V  *d S r   r   )rD   r8   r   rF   r   s     r    rp   z#_sinusoidal_rule.<locals>.<genexpr>V  rc  r"   r   )r%   r   r   r   )
signprimsrV   rW   r5   r1   r   r   rF   r   s
         @@@@r    _sinusoidal_rulerg  M  sL   "!'&cFl!	$!QqttfvF##!qttfvF##!CFF Y Ya!99sQQQQQQq!a%QQQQQQAaD!99sQQQQQQq!a%QQQQQQTXXAaDD
A$!""1qu	%%r"   c                       fdS )Nc                       |           S r   r@   )r   r   inds    r    r   z_get_ind.<locals>.<lambda>Z  s    qq$x} r"   r@   )r   rj  s   ``r    _get_indrk  Y  s    	$	$	$	$	$$r"   r   c           
      ^   |\  }}|\  }}|g|z   |g|z   d gt                    z  }t          | j        fi |d t          dt          |                    D ]Et	                    t          fdt          ddz             D                       z  |<   F|^}	}
|	|
fS )Nc                 L    dt          | |z
            t          |          z  z  S r'  r,  r-  s     r    rZ  z$_bilinear_taylor_rule.<locals>.scaleh  r[  r"   r   c              3   h   K   | ],} |           |         |z
                     z  V  -d S r   r@   )rD   r8   r   oprZ  r   r]  s     r    rp   z(_bilinear_taylor_rule.<locals>.<genexpr>j  sJ      OOAq!rr!A$!A#'7'77OOOOOOr"   r   )r%   r   r   r   r   r   )r   rV   rW   r   r5   r  r^  r_  r   r   rY   r   rp  rZ  r   r]  s              @@@@@r    _bilinear_taylor_rulerq  a  s    	$!Q'7cGm!cGm!fs1vvo!ty##F##"666CFF P Pa77SOOOOOOOOq!A#OOOOOOAaDD*z	Z	r"   c                 p    | \  }|\  }}t          j        j        |fi }fd|D             }||fS )Nc                 @    g | ]}t          j        j        |fi S r@   r   gather_pr   )rD   gr   r   s     r    rG   z'_gather_taylor_rule.<locals>.<listcomp>u  s0    JJJ!!!]==f==JJJr"   rt  )	rV   rW   r   r   gsr   r   rY   r   s	     `     @r    _gather_taylor_rulerx  q  sZ    %'=
%"a| -BB6BB*JJJJJrJJJ*	Z	r"   c                       fd}|S )Nc           	        	
 | \  }|\  } |fi |}|                     dd           
|d         j        }
fdt          |j                  D             }t	          j        t          j        |t	          j        ||                    |          t          j	        
          
fd		fd|D             }||fS )Naxesr   c                 &    g | ]\  }}|v rd n|S )r   r@   )rD   r4   dr{  s      r    rG   zO_gen_reduce_choose_taylor_rule.<locals>.chooser_taylor_rule.<locals>.<listcomp>  s)    HHHtq!!t))QQHHHr"   c                 z    t          j        t          j        t          j        |                               S r   )r   r  r   _reduce_sumr   )rv  r{  countslocation_indicatorss    r    _reduce_chooser_taylor_rulez`_gen_reduce_choose_taylor_rule.<locals>.chooser_taylor_rule.<locals>._reduce_chooser_taylor_rule  s7    W

"371.A#B#BD
I
I
  r"   c                 &    g | ]} |          S r@   r@   )rD   rv  r  s     r    rG   zO_gen_reduce_choose_taylor_rule.<locals>.chooser_taylor_rule.<locals>.<listcomp>  s%    ===Q--a00===r"   )
popr   r'   r   r   convert_element_typer   _eq_meetreshaper  )rV   rW   r   r   rw  r   primal_dtyper   rY   r  r{  r  r  chooser_funs            @@@@r    chooser_taylor_rulez;_gen_reduce_choose_taylor_rule.<locals>.chooser_taylor_rulez  s    HG
CBW////J::fd##Da5;LHHHHy/G/GHHHE2gs{:u'E'EFF  %&94@@F       >==="===Jz!!r"   r@   )r  r  s   ` r    _gen_reduce_choose_taylor_ruler  y  s$    " " " " "" 
r"   c                 H   | \  } t          j        | dd          }t          j        j        | fi }t          j        t          j        | |          t          j        | d          t          j        | d                    fdfdt          | D             }||fS )Nr   r@   )r   rl  r(  c                     | z  S r   r@   )r  negss    r    r   z"_abs_taylor_rule.<locals>.<lambda>  s    tax r"   c                      g | ]
} |i S r@   r@   )rD   r   fix_signr   s     r    rG   z$_abs_taylor_rule.<locals>.<listcomp>  s(    NNN((-f--NNNr"   )r   	full_likeabs_pr   selectltr(   )r5   rW   r   zeror   rY   r  r  s     `   @@r    _abs_taylor_ruler    s    "!	q!2	&	&	&$y~a**6***	CF1dOOS]1b%9%93=C;P;P	Q	Q$(NNNNNc9oNNN*	Z	r"   c                 n    | ^}t          j        g|R  }fdfdt          | D             }||fS )Nc                 (    t          j        g|R  S r   )r   select_n)r   r   r  s     r    r   z'_select_n_taylor_rule.<locals>.<lambda>  s    s|A++++ r"   c                     g | ]} | S r@   r@   )rD   r   sels     r    rG   z)_select_n_taylor_rule.<locals>.<listcomp>  s    ???8X???r"   )r   r  r(   )	primal_inrW   r   casesr   rY   r  r  s         @@r    _select_n_taylor_ruler    sZ    )!e|A&&&&*++++#????sI???*	Z	r"   c                     t          j        |  \  }}||k    ||k    t          j        ||          }fdfdt	          | D             }||fS )Nc                 l    t          j        | |          }t          j        | |z   dz  |          }|S z'Select x where x>y or average when x==yr   r   r  )x_iy_imax_ixeyxgys      r    select_max_and_avg_eqz3_lax_max_taylor_rule.<locals>.select_max_and_avg_eq  6    
3S))
3sAu55r"   c                 2    g | ]} t          j        |  S r@   )rB   broadcast_arrays)rD   r   r  s     r    rG   z(_lax_max_taylor_rule.<locals>.<listcomp>  s*    jjjh'')=x)HIjjjr"   )rB   r  r   r  r(   )	r  rW   r5   r  r   rY   r  r  r  s	         @@@r    _lax_max_taylor_ruler    s    +DAq
a%C
q&CCA&&J      kjjjZ]_hZijjjJz!!r"   c                     | \  }}||k     ||k    t          j        ||          }fdfdt          | D             }||fS )Nc                 l    t          j        | |          }t          j        | |z   dz  |          }|S r  r  )r  r  min_ir  r  s      r    select_min_and_avg_eqz3_lax_min_taylor_rule.<locals>.select_min_and_avg_eq  r  r"   c                     g | ]} | S r@   r@   )rD   r   r  s     r    rG   z(_lax_min_taylor_rule.<locals>.<listcomp>  s"    SSSx''2SSSr"   )r   r  r(   )	r  rW   r5   r  r   rY   r  r  r  s	         @@@r    _lax_min_taylor_ruler    s|    DAq
a%C
q&CCA&&J      TSSS3	?SSSJz!!r"   c          	          t          t          j        j        ||||||          | \  }}	 ||	          }
fdt	          | D             }|
|fS )N)update_jaxprupdate_constsdimension_numbersindices_are_sortedunique_indicesmodec                 2    g | ]\  }}} ||          S r@   r@   )rD   d1r   d2r   scatter_indicess       r    rG   z%_scatter_add_rule.<locals>.<listcomp>  s-    OOO)"aR"--OOOr"   )r   r   scatter_add_pr   r(   )rV   rW   r  r  r  r  r  r  r   updatesr   rY   r   r  s               @@r    _scatter_add_ruler    s~     
"'l,@Q$6 .T
; 
; 
;$ '1#'?GtG_g66*OOOOOsIOOO*	Z	r"   jaxprr2   returnc                    t          j        t          j        |                     }t	          t          t          |          |          |          \  }}t          j        ||          \  }}}	\   t          j	        ||	          |fS r   )
r)   r+   r   jaxpr_as_funr\   r,   r-   petrace_to_jaxpr_dynamicClosedJaxpr)
r  r2   primals_and_series_avalsrT   r   r   r[   	jaxpr_jetr   constss
             r    
_jet_jaxprr    s{     	l4$U++,,!!',q//5"A"A;OO%6%' ')Q		)V	,	,l	::r"   c           	      *   t          | |f          \  }}t          |d                   }t          d |D                       }t          |d         |||          \  }}t          |           |z  }	t          |d                   |z  }
i |||d         t          j        f|	z  z   |d         t          j        f|
z  z   |d         d|	z  z   |d         d|
z  z   |d	         d
|	z  z   d}t          j        j        |i |}t           |            |          S )Nr   c              3   4   K   | ]}t          |          V  d S r   r   )rD   r5   s     r    rp   z!_pjit_jet_rule.<locals>.<genexpr>  s+      "U"UQ#5a#8#8"U"U"U"U"U"Ur"   r  out_shardingsin_shardings
in_layoutsr   out_layoutsdonated_invars)F)r  r  r  r  r  r  )
r   r%   rc   r  r   UNSPECIFIEDr   pjit_pr   r   )rV   rW   r   rU   rT   r2   r  r  r[   num_series_innum_series_outr   r   s                r    _pjit_jet_ruler    sR   $0*i1H$I$I!k
il

%""U"UBT"U"U"UUU&vg'?N N)\j//E)-vo.//%7.

 N$>#@=#P
P 
!')N:; <(7]+BBM*W~-EE/08m3KK  * ;/>:>>&		/	//r"   )__doc__collections.abcr   typingr   	functoolsr   numpyr   jaxr   	jax.numpyrB   jax.experimentalr   jax.tree_utilr   r	   r
   r   r   jax._srcr   r   r   r   r)   r   jax._src.api_utilr   jax._src.interpretersr   r  jax._src.laxr   jax._src.utilr   r   r   r=   transformation2r,   r-   r*   r\   TracerrM   TracerL   r   rn   ra   rA   r   dict	Primitive__annotations__r   r   r   le_plt_pgt_pge_peq_pne_pnot_pand_por_pxor_pfloor_pceil_pround_psign_pstop_gradient_pis_finite_pshift_left_pshift_right_arithmetic_pshift_right_logical_pbitcast_convert_type_pr   r   neg_preal_p	complex_pconj_pimag_padd_padd_jaxvals_psub_pconvert_element_type_pbroadcast_in_dim_pconcatenate_psplit_ppad_p	reshape_p	squeeze_prev_ptranspose_pslice_preduce_sum_preduce_window_sum_pfft_pcopy_pdevice_put_pr   r   r   r   intboolr   cumsum_pr   	cumprod_pr  cummax_pr  cummin_pr   r   erf_pr   expm1_plog1p_psqrt_psquare_prsqrt_pasinh_pacosh_patanh_perfc_prem_pclamp_pr%  	erf_inv_pr   r   r  r3  exp_pr9  pow_pr<  r@  integer_pow_prF  
logistic_prM  tanh_prQ  log_prW  atan2_pr`  div_prg  rk  sincossin_pcos_psinhcoshsinh_pcosh_prq  dot_general_pmul_pconv_general_dilated_prx  ru  r  _reduce_maxreduce_max_p_reduce_minreduce_min_pr  r  r  
select_n_pr  max_pr  min_pr  r  r  rc   r  r  r  r@   r"   r    <module>rD     s  & & &P % $ $ $ $ $                             ! ! ! ! ! !K K K K K K K K K K K K K K                   & & & & & & # # # # # # 0 0 0 0 0 0 4 4 4 4 4 4 , , , , , , = = = = = = = = = =JX JX JXX       " " "          &9& 9& 9& 9& 9&tz 9& 9& 9&x        HJJ	  X335L5L M M M        jll  Z!5!57P7P Q Q Q AC T$.(38*<<= B B B
 	- - -! ! !                         	    	        	        
        
                   $ % % % ! " " " " # # #/ / /      
	#)    		#*    		#-    		#*    		#*    		#)    		'
       		#)    		#
$ % % % 		#
  ! ! ! 		#
    		#+    		#)    		#-    		#-    		#)    		#/    		#+    		#
    		#
! " " " 		#)    		#*    		(
            "9	#
       )G	#
$ %$ $t $%-$ $ $ $ 
	#,   "7#7;>7D D D	#- !'"6:='C C C	#, !'"6:='C C C	#, 5 5 5      
	#)/ /0 0 0' ' ' 	.. / / / .. / / / '' ( ( (  ' ' ' )) * * * HH I I I HH I I I DD E E E -- . . . 99 : : : ?? @ @ @'  '  ' P )	#- # # #* * *& & &      #	#)       #	#) 4 4 4H H H  3	#
       -	#. ( ( ( %	#* 	  	  	  #	#)       '	#+       (	#) 
& 
& 
&% % %  x(8"sw>P Q QSTUU	#) x(8"sw>P Q QSTUU	#)  )91sx>R!S!SUVWW	#*  )91sx>R!S!SUVWW	#*        'w'<c>OPP	#
 w4ci@@	#) (/0EsGa(b(b	#
$ %      .	#,   & =< 	#
 << 	#
       (	#)       2	#. " " " ,	#) " " " ,	#) 
  
  
   1	#
  ;;$';
4S !; ; ; ;0 0 02 (	$+   r"   