
    Vpfh              	          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% 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.                  Z/ G d d          Z0 e0            Z1 ee0d d             G d d          Z2 e2            Z3 ee2d d             i Z4e5ej6        ed!ef         f         e7d"<   i Z8d# Z9d$ Z: e9e
j;                    e9e
j<                    e9e
j=                    e9e
j>                    e9e
j?                    e9e
j@                    e9e
jA                    e9e
jB                    e9e
jC                    e9e
jD                    e9e
jE                    e9e
jF                    e9e
jG                    e9e
jH                    e9ejI                    e9e
jJ                    e9e
jK                    e9e
jL                    e9e
jM                    e9e
jN                   d% ZOd& ZP eOe
jQ                    eOe
jR                    eOe
jS                    eOe
jT                    eOe
jU                    eOe
jV                    eOejW                    eOe
jX                    eOe
jY                    eOe
jZ                    eOe
j[                    eOe
j\                    eOe
j]                    eOe
j^                    eOe
j_                    eOe
j`                    eOe
ja                    eOe
jb                    eOe
jc                    eOe
jd                    eOeje                   d' Zfefe8e
jg        <   d( Zhehe8e
ji        <   d)ejd*ekd+efd,Zl eOe
jm                    eele
jn        -          e8e
jo        <    eele
jp        -          e8e
jq        <    eele
jr        -          e8e
js        <   d. Ztd/ Zu ete
jv        d0            d1 Zw ewe
jx        d2             ewe
jy        d3             ewe
jz        d4             ewe
j{        d5             ewe
j|        d6             ewe
j}        d7             ewe
j~        d8             ewe
j        d9             ewe
j        d:             ewe
j        d;            d< Zee8e
j        <   d= Zd> Zd? Zd@ Zee8e
j        <   dA Zee8e
j        <   dB ZdC Zee8e
j        <   dD Zee8e
j        <   dE Zee8e
j        <   dF Zee8e
j        <   dG Zee8e
j        <   dH Zee8e
j        <   dI ZdJ Z e eedKe
j        e
j        f          d          e8e
j        <    e eedKe
j        e
j        f          dL          e8e
j        <    e eedLe
j        e
j        f          d          e8e
j        <    e eedLe
j        e
j        f          dL          e8e
j        <   dM Z eee
j                  e8e
j        <    eee
j                  e8e
j        <    eee
j                  e8e
j        <   dN Zee8e
j        <   dO Z ee"j                  e8e
j        <    ee"j                  e8e
j        <   dP Zee8e
j        <   dQ Zee8e
j        <   dR Zee8e
j        <   dS Zee8e
j        <   dT Zee8e
j        <   e%dUej        dVejdWeej        ef         fdX            ZdY Zee8ej        <   dS )Za  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/google/jax/files/6717197/jet.pdf>`__.

  Note:
    Help improve :func:`jet` by contributing
    `outstanding primitive rules <https://github.com/google/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_cachec           	          	 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               7   8   K   | i fV }t          |          V  d S N)r   )argsanss     T/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/experimental/jet.pyflatten_fun_outputzjet.<locals>.flatten_fun_output   s-      b..C
s

    )setmaplen
ValueError	enumeratezipr	   r
   lutransformation_with_aux	wrap_initjet_funjet_subtracecall_wrappedr   )funprimalsseriesordermsgixtermstreedefjtr   f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              #       K   t          j        t                    5 } |_        |||fi fV \  }}~d d d            n# 1 swxY w Y    fdt	          ||          D             }||fV  d S )Nc                 \    g | ](\  }}|t           u rt          j        |          gz  n|)S  )zero_seriesjnp
zeros_like).0psr.   s      r   
<listcomp>zjet_fun.<locals>.<listcomp>   sN     8 8 81a /0;.>.>q!!"U**A 8 8 8r   )r   new_mainJetTracer.   r$   )r.   r,   r-   mainr8   r9   s   `     r   r(   r(      s      }X $DJ$('6#:B#>>>K              8 8 8 8{I668 8 8)Ys   >AAc              #     K   t          | t          j                              }t          t	          t
          |          ||          }|i fV }t          |j        |          }t          d |D                       \  }}||fV  d S )Nc              3   2   K   | ]}|j         |j        fV  d S r   primalr2   rA   r5   s     r   	<genexpr>zjet_subtrace.<locals>.<genexpr>   s+      !K!K!18QW"5!K!K!K!K!K!Kr   )rF   r   cur_sublevelr    r   	JetTracer
full_raiser   )	rG   r,   r-   trace
in_tracersr   out_tracersr8   r9   s	            r   r)   r)      s      
4*,,
-
-%79e,,gv>>*"n#E$c**+!!K!K{!K!K!KKK+yYr   c              '   z   K   t          | |          \  }}||fi fV \  }}t          ||f          \  }}||fV  d S r   )r   r   )in_tree_defprimals_and_series
primals_in	series_inprimals_out
series_outout_flatout_tree_defs           r   	traceabler]      sc      (6HII*i#-y"92"===+z'j(ABB(L,r   c                   8    e Zd ZddgZd Zed             Zd ZdS )rO   rK   r2   c                 z    t          |          t          t          t          fv sJ || _        || _        || _        d S r   )type
ZeroSerieslisttuple_tracerK   r2   )selfrQ   rK   r2   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_avalrK   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_termrL   s     r   rM   z'JetTracer.full_lower.<locals>.<genexpr>   s&      'K'K1Y'K'K'K'K'K'Kr   )r2   r>   allr   
full_lowerrK   ri   s    r   rp   zJetTracer.full_lower   sD    z[  C'K'K
'K'K'K$K$K _T[)))kr   N)__name__
__module____qualname__	__slots__rf   propertyrj   rp   r=   r   r   rO   rO      sW        !)   & & 8&    r   rO   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
rF   c                 .    t          | |t                    S r   rO   r>   re   vals     r   purezJetTrace.pure       T3,,,r   c                 .    t          | |t                    S r   rx   ry   s     r   liftzJetTrace.lift   r|   r   c                 8    t          | |j        |j                  S r   )rO   rK   r2   ry   s     r   subliftzJetTrace.sublift   s    T3:sy111r   c                 B   	  j         j        	t          d |D                       \  }}	fd|D             }d t          ||          D             }t          |         } |||fi |\  }}|j        st           ||          S  fdt          ||          D             S )Nc              3   2   K   | ]}|j         |j        fV  d S r   rJ   rL   s     r   rM   z-JetTrace.process_primitive.<locals>.<genexpr>   +      "H"H1AHag#6"H"H"H"H"H"Hr   c                 <    g | ]}|t           u rt          gz  n|S r=   )r>   rn   )rA   rC   r.   s     r   rD   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   r?   zerosnpshaperesult_type)rA   r5   r1   s     r   rD   z9JetTrace.process_primitive.<locals>.<listcomp>.<listcomp>   sX     < < </0Q)^^ )BHQKKsq/A/ABBBB)*< < <r   r=   )rA   r-   r1   s     @r   rD   z.JetTrace.process_primitive.<locals>.<listcomp>   sN     > > >Q< < < <4:< < < > > >r   c                 8    g | ]\  }}t          ||          S r=   rO   rA   rB   tsre   s      r   rD   z.JetTrace.process_primitive.<locals>.<listcomp>   s)    MMMBia$$MMMr   )rG   r.   r   r$   	jet_rulesmultiple_resultsrO   )
re   	primitivetracersparamsrW   rX   rule
primal_out	terms_outr.   s
   `        @r   process_primitivezJetTrace.process_primitive   s    IOE""H"H"H"H"HHHJ	% % % %#% % %I> >"%j)"<"<> > >I YD DYAA&AAJ	% NtZ333MMMM#j)2L2LMMMMr   c                     t          d |D                       \  }}t          ||f          \  }}t          t          | j                  |          \  }	}
t
                              |          }|r ||t          |                    n|} |j        |	g|R i |}t           |
            |          \  }} fdt          ||          D             S )Nc              3   2   K   | ]}|j         |j        fV  d S r   rJ   rL   s     r   rM   z(JetTrace.process_call.<locals>.<genexpr>   r   r   c                 8    g | ]\  }}t          ||          S r=   r   r   s      r   rD   z)JetTrace.process_call.<locals>.<listcomp>   s)    MMMuq"IdAr""MMMr   )r   r   r]   r)   rG   call_param_updatersgetr!   bindr   r$   )re   call_primitiver6   r   r   rW   rX   rV   rU   f_jetr\   update_params
new_paramsresultrY   rZ   s   `               r   process_callzJetTrace.process_call   s    ""H"H"H"H"HHH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                    	 t          d |D                       \  }}t          ||f          \  }	~~| j        	fd}||fS )Nc              3   2   K   | ]}|j         |j        fV  d S r   rJ   rL   s     r   rM   z-JetTrace.post_process_call.<locals>.<genexpr>   s+      FFQah0FFFFFFr   c                     t          |           \  }}t          t          j                              }t	          t          t          |          ||          S r   )r   rF   r   rN   r    r   rO   )r1   r,   r-   rQ   rG   r3   s       r   todoz(JetTrace.post_process_call.<locals>.todo   sJ    &w22ogvtT.0011eE**GV<<<r   )r   r   rG   )
re   r   rS   r   r,   r-   outr   rG   r3   s
           @@r   post_process_callzJetTrace.post_process_call   sp    FF+FFFFFOGV& 122LC9D= = = = = = 9r   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)rq   rr   rs   r{   r~   r   r   r   r   r   r   r=   r   r   rF   rF      s        - - -- - -2 2 2N N N 	N 	N 	N	 	 	& & && & & & &r   rF   c                       e Zd ZdS )ZeroTermNrq   rr   rs   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   r>   )r   rW   rX   r   r   s        r   r   r     s#    ty*///*	[	  r   c                 @    t          t          |           t          | <   d S r   )r   linear_propr   r   s    r   	deflinearr   0  s    K..)D///r   c                 T       j         |i } fdt          | D             }||fS )Nc                 *    g | ]} j         |i S r=   )r   )rA   terms_inr   r   s     r   rD   zlinear_prop.<locals>.<listcomp>5  s*    OOO8		8.v..OOOr   )r   r$   )r   rW   rX   r   r   rZ   s   `  `  r   r   r   3  sE    ty*///*OOOOOsIOOO*	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   rA   r   r   start_indicess     r   rD   z+_dynamic_slice_jet_rule.<locals>.<listcomp>Q  sK     1 1 1 #(!O}OOOOO 1 1 1r   )r   r   r   r$   )rW   rX   r   operandr   rZ   r   s     `   @r   _dynamic_slice_jet_ruler   N  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   rD   z2_dynamic_update_slice_jet_rule.<locals>.<listcomp>Z  sS     1 1 1 */X"1"XXXXQWXX 1 1 1r   )r   r   r   r$   )rW   rX   r   r   updater   rZ   r   s     `    @r   _dynamic_update_slice_jet_ruler   W  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)rW   rX   r   r   r   s        r   _cumulative_jet_ruler   `  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   r  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rA   r4   ckus     r   rM   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   rW   rX   r1   r-   r   c0csvrZ   r   r   r   s              @@@r   r   r   y  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r1   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                     | 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r1   ys     r   r   r     s    Q1q5)9)9%9!9 r   c                 R    t          j        t          j        | |          |          S r   )r   minmax)ar1   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   rM   z _erf_inv_rule.<locals>.<genexpr>  r   r   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   _scale2rA   r4   r   r   s     r   rM   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   )rA   r4   r   tmp_exptmp_sqs     r   rM   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   rM   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   )rW   rX   r1   r-   r   deriv_yrZ   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   r4   s     r   r   r     s&    	tAE{{T!a%[[(	))r   c                 L    dt          | |z
            t          |          z  z  S r.  r3  r4  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   rA   r4   r   r   r   s     r   rM   z_exp_taylor.<locals>.<genexpr>  A      OOA6!Q<<!AaC&01Q47OOOOOOr   )r   r   r!   r   r   r   )	rW   rX   r1   r-   r   rZ   r   r   r   s	         @@@r   _exp_taylorr:    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   r8  s     r   rM   z_pow_taylor.<locals>.<genexpr>  r9  r   )r:   r!   r   r   r   )rW   rX   u_r_r1   r-   r   rZ   r   r   r   s           @@@r   _pow_taylorr@    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)r1   r1  s     r   rC  rC    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   rB  r  s    r   r   z%_integer_pow_taylor.<locals>.<lambda>  s    )!Q// r   )r:   r?   	ones_like)rW   rX   r  s     `r   _integer_pow_taylorrG    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   )rA   r4   er   r   s     r   rM   z#_logistic_taylor.<locals>.<genexpr>  r9  r   c              3   b   K   | ])}t          |          |         z  |z
           z  V  *d S r   r#  r%  s     r   rM   z#_logistic_taylor.<locals>.<genexpr>	  sA      ,b,bqWQ]]QqT-AAacF-J,b,b,b,b,b,br   )r   logisticr!   r   r   r   )
rW   rX   r1   r-   r   rZ   rJ  r   r   r   s
         @@@@r   _logistic_taylorrM    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=   rA   series_s     r   rD   z _tanh_taylor.<locals>.<listcomp>  s    111wq7{111r   c                     g | ]}d |z  S rP  r=   rQ  s     r   rD   z _tanh_taylor.<locals>.<listcomp>  s    666G666r   r   )rM  )rW   rX   r1   r-   r   r   rZ   s          r   _tanh_taylorrT    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   r8  s     r   rM   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   )
rW   rX   r1   r-   convr   rZ   r   r   r   s
          @@@r   _log_taylorrX    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  )r1   ones    r   r   z_atan2_taylor.<locals>.<lambda>-  s     a#*Q--&788 r   c              3   b   K   | ])}t          |          |z
           z  |         z  V  *d S r   r   r   s     r   rM   z _atan2_taylor.<locals>.<genexpr>2  r   r   )
r   atan2r:   r  r   r   r!   r   r   r   )rW   rX   r1   r  r   r-   r   r   r   rZ   r   r   r[  r   s             @@@@r   _atan2_taylorr^  '  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.  r3  r4  s     r   scalez_div_taylor_rule.<locals>.scale=  !    "QUd1gg 566r   r   c              3   Z   K   | ]%} |          |         z  |z
           z  V  &d S r   r=   )rA   r4   r   ra  r   ws     r   rM   z#_div_taylor_rule.<locals>.<genexpr>?  sC      @@quuQ{{QqT!AacF*@@@@@@r   )r!   r   r   r   )rW   rX   r1   r  x_termsy_termsr   rW  r   rZ   r   ra  r   rd  s             @@@@r   _div_taylor_rulerg  7  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   rM   z#_sinusoidal_rule.<locals>.<genexpr>M  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   )rA   r4   r   rC   r   s     r   rM   z#_sinusoidal_rule.<locals>.<genexpr>N  rj  r   r   )r!   r   r   r   )
signprimsrW   rX   r1   r-   r   r   rC   r   s
         @@@@r   _sinusoidal_rulern  E  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   r6   inds    r   r   z_get_ind.<locals>.<lambda>R  s    qq$x} r   r=   )r6   rq  s   ``r   _get_indrr  Q  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.  r3  r4  s     r   ra  z$_bilinear_taylor_rule.<locals>.scale`  rb  r   r   c              3   h   K   | ],} |           |         |z
                     z  V  -d S r   r=   )rA   r4   r   opra  r   rd  s     r   rM   z(_bilinear_taylor_rule.<locals>.<genexpr>b  sJ      OOAq!rr!A$!A#'7'77OOOOOOr   r   )r!   r   r   r   r   r   )r   rW   rX   r   r1   r  re  rf  r   r   rZ   r   rw  ra  r   rd  s              @@@@@r   _bilinear_taylor_rulerx  Y  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   )rA   gr   r   s     r   rD   z'_gather_taylor_rule.<locals>.<listcomp>m  s0    JJJ!!!]==f==JJJr   r{  )	rW   rX   r   r   gsr   r   rZ   r   s	     `     @r   _gather_taylor_ruler  i  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=   )rA   r0   dr  s      r   rD   zO_gen_reduce_choose_taylor_rule.<locals>.chooser_taylor_rule.<locals>.<listcomp>x  s)    HHHtq!!t))QQHHHr   c                 z    t          j        t          j        t          j        |                               S r   )r   r  r   _reduce_sumr   )r}  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=   )rA   r}  r  s     r   rD   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  )rW   rX   r   r   r~  r   primal_dtyper   rZ   r  r  r  r  chooser_funs            @@@@r   chooser_taylor_rulez;_gen_reduce_choose_taylor_rule.<locals>.chooser_taylor_ruler  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  q  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   rs  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=   )rA   r   fix_signr   s     r   rD   z$_abs_taylor_rule.<locals>.<listcomp>  s(    NNN((-f--NNNr   )r   	full_likeabs_pr   selectltr$   )r1   rX   r   zeror   rZ   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=   )rA   r   sels     r   rD   z)_select_n_taylor_rule.<locals>.<listcomp>  s    ???8X???r   )r   r  r$   )	primal_inrX   r   casesr   rZ   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=   )r?   broadcast_arrays)rA   r   r  s     r   rD   z(_lax_max_taylor_rule.<locals>.<listcomp>  s*    jjjh'')=x)HIjjjr   )r?   r  r   r  r$   )	r  rX   r1   r  r   rZ   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=   )rA   r   r  s     r   rD   z(_lax_min_taylor_rule.<locals>.<listcomp>  s"    SSSx''2SSSr   )r   r  r$   )	r  rX   r1   r  r   rZ   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=   )rA   d1r   d2r   scatter_indicess       r   rD   z%_scatter_add_rule.<locals>.<listcomp>  s-    OOO)"aR"--OOOr   )r   r   scatter_add_pr   r$   )rW   rX   r  r  r  r  r  r  r   updatesr   rZ   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   jaxprr.   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  r.   primals_and_series_avalsrU   r6   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   )rA   r1   s     r   rM   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   )rW   rX   r   rV   rU   r.   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.numpyr?   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:   transformationr(   r)   r&   r]   TracerrO   TracerF   r   rn   ra   r>   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pad_p	reshape_p	squeeze_prev_ptranspose_pslice_preduce_sum_preduce_window_sum_pfft_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rsqrt_pasinh_pacosh_patanh_perfc_prem_pclamp_pr,  	erf_inv_pr   r   r$  r:  exp_pr@  pow_prC  rG  integer_pow_prM  
logistic_prT  tanh_prX  log_pr^  atan2_prg  div_prn  rr  sincossin_pcos_psinhcoshsinh_pcosh_prx  dot_general_pmul_pconv_general_dilated_pr  r|  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>rH     sl  & & &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 , , , , , , 3 3 3 3 3 3 3 3HX HX HXT                &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   