
    vhA6                       d 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 ddlZedd       Zedd	       Zedd
       Zedd       ZddZddZddZddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 d dZd Zd Zd Zd Zd Zy)!zPallas utility functions.    )annotations)overloadN)lax)core)
split_listc                     y N abs     P/opt/face_recognition/venv/lib/python3.12/site-packages/jax/_src/pallas/utils.pycdivr              c                     y r	   r
   r   s     r   r   r       r   r   c                     y r	   r
   r   s     r   r   r   $   r   r   c                     y r	   r
   r   s     r   r   r   (   r   r   c                    t        | t              rt        |t              r| |z   dz
  |z  S t        j                  | |dz
  z   |      S )N   )
isinstanceintr   divr   s     r   r   r   ,   sA    3Jq#.EAI!	a!ea	  r   c                    t        j                  |       }g }| D ]!  }||z  }|j                  t        |             # t	        |      S r	   )npprodappendr   tuple)shapesizestridesss       r   strides_from_shaper#   2   sH    	$' a19DNN3t9 
wr   c                \    | dk  rt        d      | dk(  rdS d| dz
  j                         z  S )z;Returns the next power of two greater than or equal to `x`.r   z2`next_power_of_2` requires a non-negative integer.r      )
ValueError
bit_lengthxs    r   next_power_of_2r*   ;   s8    U
I
JJ1f3!A11333r   c                    t        j                  | t         j                        rt        j                  |       j                  S t        j                  |       j                  dz  S )N   )jnp
issubdtypeintegeriinfobitsr   dtypeitemsize)r2   s    r   dtype_bitwidthr4   A   sB    ^^E3;;'99U   	%	!	!A	%%r   c                   |dkD  r| j                   |   }| j                  d   }|j                  j                  s6|j                  j                  t
        j                  t
        j                  fvrt        d|j                   d|       |j                  j                  s6|j                  j                  t
        j                  t
        j                  fvrt        d|j                   d|       t        | j                        D ]  \  }}|j                  t        j                  k(  s$|j                   d   |k(  s7t        |j                   d   t        j                         s_|j                   d   j"                  dk(  s||j                  d   |k(  s|} n t        d      | j%                  | j                  d | | j                  |dz   d  z   | j                  dd        } d}| |fS d	}| |fS )
Nr   znot a fori_loop index in: z jaxpr=znot a fori_loop index out: r   z!Unable to match fori_loop pattern)eqnsoutvarsTF)invarsr7   avalr   r2   r-   int32int64NotImplementedError	enumerater6   	primitiver   add_pr   jax_coreLiteralvalreplace)	jaxpr
num_consts	num_carryin_index_varout_index_varieqn	eqn_indexhas_loop_indexs	            r   pattern_match_scan_to_fori_looprM   F   s    ] <<
+LMM!$M		399'==&|'8'8&95(
CE E    CII(>>'(:(:';8UH
EG G EJJ' 	E3	#))	#::a=L(

1x'7'78zz!}  A%Q=0		E   CDD MMZZ
#ejjQ&@@ab!  #E N
 
	 N		r   c                H   |ryt        | j                  j                  |g      \  }}|D cg c]  }|j                   }}t	        |      dk  ry|d d \  }}	|j
                  s,|j                  t        j                  t        j                  fvry|	j
                  s,|	j                  t        j                  t        j                  fvry|d d \  }
}| j                  j                  d   }|j                  j                  t        j                  k(  sJ t	        | j                  j                        dk7  ry| j                  j                  d   }|j                  t        j                  k7  ry|j                  |gk7  ry|j                  |
|gk7  ryt        |j                  j                  |g      \  }}|d d \  }
}|j                  j                  d d \  }}||ury	t!        |j                  j                        D ]  \  }}|j                  t        j"                  u s#|j                  d   |
u s5t%        |j                  d   t&        j(                        s]|j                  d   j*                  dk(  sz|j                  d   |k(  s|} n y
|j                  }g |j                  d | |j                  |   |j                  |dz   d  }t-        |j                  dd        }|j/                  |j                  d | |j                  |dz   d  z   ||      }|d fS c c}w )N)Nz'Conditional jaxpr can't contain consts.r%   )Nz+Conditional jaxpr have only two carry args.)Nz6First conditional jaxpr carry arg is not a scalar int.)Nz7Second conditional jaxpr carry arg is not a scalar int.r   r   )Nz-Non-trivial conditional jaxprs not supported.)Nz!Loop upper bound is not constant.)Nz#Loop index not incremented in body.)r6   r8   r7   )r   rD   r8   r9   lenr   r2   r-   r:   r;   r7   bool_r6   r>   r   lt_pr=   r?   r   r@   rA   rB   r   rC   )
cond_jaxprcond_nconsts
body_jaxprbody_nconsts_cond_invarsvcond_in_avalsa1a2v1v2outvarrJ   body_invarsvo1vo2rI   rK   rD   
new_invarsnew_outvarss                         r    pattern_match_while_to_fori_looprd   p   s    <j..55~F.![#./a166/-/!@!&"bXX#))SYY!77KXX#))SYY!77Lr?&"b##A&&			cii	''	'				1$Ba #]]chhB[[VHBZZB8Bj..55~F.![r?&"b%%bq)(#ss]6***//0 	9fa
}}		!	A"	cjjmX%5%56ZZ]!#{{1~$i	9 9


%||M\"ll<  ||L1$&'*
 emmAB'(+
--::jy!EJJy1}$??  %
 
i 0s   Lc                   d}g d}g d}t        j                  | |  z         }|dk  }t        j                  ||dz
  t        j                  |      dz
        }t        j                  ||d   |d         }t	        d|      D ]'  }t        j                  |||   ||         }|||z  z   }) t        j                  t        j
                  |       d	k(  t         j                  | z  || z        S )
N	   )	gG,^>gf	>gjfj;goD XkҾg4JY`[,?gA4! Tg8Eqg")`?gܴ?)	gn<_>*g1gav?g@V?g]rng_Ow?gߺ8g0ֿT?g9a?gA@      @g      @g      @r   r         ?)r-   log1pwheresqrtrangeabsinf)	r)   k_degreew_lt_5_constantsw_gt_5_constantsww_lt_5prI   cs	            r   _erf_inv_32_lowering_helperrv      s    (
 yyaR!s7&	iiC!s!23!	ii(+-=a-@A!H a		&*1-/?/BCA	AE	A 
3771:$cggk1q5	99r   c                  	
 g dg d	g dt        j                  | |  z         }|dk  
|dk  	
fd}t        j                  dd      }t        j                  |      |z
  }t        j                  
|d	z
  |      } |d
      }t	        dd      D ]  } ||      ||z  z   } t	        dd      D ]%  }t        j                   ||      ||z  z   |      }' t	        dd      D ]%  }t        j                  
 ||      ||z  z   |      }' t        j                  t        j
                  |       dk(  t        j                  | z  || z        S )N)g'F5g'$3g|>7<gXri<gk
	6g2.x<g&<gf>&g@p6g ~"*=gYgaуͽg<kG>g`Mȍ1gF=m6_g]Ok>gJC趾g6{g$y(?gvEHg	1öxg(>ـ?g|^u?)g2ۇ#>g5R\x>gU9StwglLUͫS>g786>gP+оgR>g#ʠ)>ggЄ?g"T2>gD7g%Z<O?g8/$[g<Shd?gںngju?g9dm?gHZ8̫@)gSxνg'gE->g_/NF0gZ@>g_I.PgJ3 L_>g>"-rgT$>grԨg+=	>g~Ig ?gS]6/,g|ߥ."gܠ0*?gMf@g      @g      0@c                    |    }| dk  rt        j                  ||          }| dk  rt        j                  ||          }|S )N      )r-   rj   )rI   ru   w_gt_16_constantsw_lt_16w_lt_16_constantsw_lt_625w_lt_625_constantss     r   get_coefficientz4_erf_inv_64_lowering_helper.<locals>.get_coefficient   sP    1A2v
))Ha!21!5
6a2v
))GQ 1! 4
5aHr   g      
@rg   g      	@r   r   rz   ry      rh   )r-   ri   rj   rk   rl   rm   r   rn   )r)   rr   r   select2select2_resultrt   rI   r{   r|   r}   r~   r   s          @@@@@r   _erf_inv_64_lowering_helperr      sV   
 yyaR!X(H'  IIgtS)'88A;(.	ii!e)^4!a!B< #aQU"A#R= :a		'?1-A5q9A:R= ;a		(OA.Q6:A; 
3771:$bffqj!a%	88r   c                    | j                   t        j                  k(  rt        |       S | j                   t        j                  k(  rt        |       S t        d| j                          )Nz,erf_inv_lowering_helper not implemented for )r2   r-   float32rv   float64r   r<   r(   s    r   erf_inv_lowering_helperr     sO    WW&q))WW&q))J177)TUUr   c                   t        j                  | j                  t         j                        r| dk7  j	                  | j                        S t        j                  | j                  t         j
                        r=| dkD  j	                  | j                        | dk  j	                  | j                        z
  S t        j                  | j                  t         j                        ru| dkD  j	                  | j                        | dk  j	                  | j                        z
  }t        j                  t        j                  |       t         j                  |      S t        d| j                         )Nr   g        z)sign_lowering_helper not implemented for )r-   r.   r2   unsignedintegerastyper/   floatingrj   isnannanr<   )r)   outs     r   sign_lowering_helperr     s    ^^AGGS001F??177##^^AGGS[[)E>>!''"a!e^^AGG%<<<^^AGGS\\*r6//!''
"a"f__QWW%=
=C99SYYq\377C00GyQRRr   c                
   | j                   |j                   k7  r%t        d| j                    d|j                          | j                   t        j                  t        j                  fvrt        d| j                          | j                   t        j                  k(  rMt        j                  t        j
                  t        j                  t        j
                  t        j                  fnLt        j                  t        j                  t        j                  t        j                  t        j                  f\  }}}}}t        | j                         }| j                  |      }|j                  |      }	t        j                  |       t        j                  |      z  }
t        j                  | |t        j                        j                  |            } |d|dz
  z        }|}| }||z  }|	|z  }| |k(  }|	}t        j                  |      }||k(  }||k(  }|	}||z  }|	|z  }t        j                   |      }||z  }||k7  }||kD  }||z  }t        j                  | |d      j                  |            }t        j"                  |||      }||z   } t        j"                  |t        j"                  |||      |       } t        j"                  |||       } t        j"                  |
||       } | j                  |      S )Nz@The two inputs to `nextafter` must have the same dtype, but got z and z7`nextafter` only supports float32 and float64, but got r   )r2   r&   r-   r   r   uint32r   r:   uint64r;   r4   viewr   	full_liker   
zeros_like	ones_likerj   )!r)   y	jnp_floatjnp_uintnp_floatnp_uintnp_intbitwidthx_as_inty_as_int	nan_inputresult_for_nansign_bit	sign_masknegated_sign_maskx_absy_absx_and_y_are_equalresult_for_equalzero	x_is_zero	y_is_zeroresult_for_both_zerox_signy_signoneresult_for_x_zero_y_non_zerosigns_disagreex_magnitude_larger_than_yresult_has_smaller_magnitude	minus_onemagnitude_adjustmentresults!                                    r   nextafter_lowering_helperr   *  s   WW
	GG9E!''	$ 
 WWS[[#++..

A!''K  	ww#++ 
kk3::rzz299bhh4 
kk3::rzz299bhh$ 1)Xx& AGG$(VVH(VVH( iilSYYq\))==8BFF+;+@+@+IJ. aHqL)*()i
&
&%
&
&% 1f 
	!$tm)tm)!i&i& 	h#!'# V#.#em!:^!KmmHfRjoog&>?)#?CP**& 99	ii	/1MN& 99&(8&A& 99Y7& 
Y	r   )r   r   r   r   returnr   )r   r   r   	jax.Arrayr   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   int | jax.Arrayr   r   r   r   )r   tuple[int, ...]r   r   )r)   r   r   r   )r2   znp.dtype | jnp.dtyper   r   )rD   jax_core.JaxprrE   r   rF   r   r   ztuple[jax_core.Jaxpr, bool])
rR   r   rS   r   rT   r   rU   r   r   z(tuple[jax_core.Jaxpr | None, str | None])__doc__
__future__r   typingr   jaxr   jax._srcr   r@   jax._src.utilr   	jax.numpynumpyr-   r   r   r#   r*   r4   rM   rd   rv   r   r   r   r   r
   r   r   <module>r      s     "  
  % $   
 
 
 
 
 
 
 
!4&
'''*'7:' 'T@@@ @ 	@
 .@H:6A9HVST r   