
    Vpf              
       B   d Z ddlZddlmZmZmZ ddlZddlZddlm	Z	 ddlm
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZ ddlmZ  G d de          Z G d de          Z G d de          Ze e!df         Z" G d de          Z#ddddZ$d,dZ%ej&        dedede eef         fd            Z'dedededefd Z(d!ed"ededefd#Z)d,ded$e!d%e!defd&Z*d,ded$e!d%e!defd'Z+d(e e!df         d)e e!df         d*ede e!df         fd+Z,dS )-zSparse utilities.    N)Any
NamedTupleUnion)lax)	tree_util)vmap)core)dtypes)stages)flatten_axes)safe_zip)_dot_general_shape_ruleDotDimensionNumbers)Arrayc                       e Zd ZdS )SparseEfficiencyErrorN__name__
__module____qualname__     \/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/experimental/sparse/util.pyr   r   "           $r   r   c                       e Zd ZdS )SparseEfficiencyWarningNr   r   r   r   r   r   %   r   r   r   c                       e Zd ZdS )CuSparseEfficiencyWarningNr   r   r   r   r   r   (   r   r   r   .c                   6    e Zd ZU eed<   dZeed<   dZeed<   dS )
SparseInfoshapeFindices_sortedunique_indicesN)r   r   r   Shape__annotations__r"   boolr#   r   r   r   r    r    -   s;         	,,,.$.$r   r    T)broadcastedin_axesc                d    |rt           nt          }t          |          D ]} || |          } | S )z9Convenience function to apply (broadcasted) vmap N times.)r(   )broadcasting_vmapr   range)funNr'   r(   _vmap_s         r   
nfold_vmapr0   7   sB    *
4

%88 & &a
%W
%
%
%CC	*r   c                 N     t          j                    fd            }|S )Nc                     t          j        |           \  }}t          d|d          }t          d t	          ||          D                       dk    r\t          fdt	          ||          D                       rt          d          t          d t          ||          D              \  }}t          j        ||          }t          j        ||          } t          |		          | S )
Nzvmap in_axesF)kwsc              3   :   K   | ]\  }}||j         |         V  d S )Nr!   .0argis      r   	<genexpr>z9broadcasting_vmap.<locals>.batched_fun.<locals>.<genexpr>C   s,      ]]Qq}sy|}}}}]]r      c              3   H   K   | ]\  }}|d uo|j         |         dfvV  d S Nr;   r5   )r7   r8   r9   sizes      r   r:   z9broadcasting_vmap.<locals>.batched_fun.<locals>.<genexpr>E   sS       > >a d]<sy|At9< > > > > > >r   z*broadcasting_vmap: mismatched input shapesc              3      K   | ]:\  }}||d fn,|j         |         dk    rt          j        ||f          d fn||fV  ;d S r=   )r!   r   squeezer6   s      r   r:   z9broadcasting_vmap.<locals>.batched_fun.<locals>.<genexpr>H   sw       & &c1 3++#)TU,Z[J[J[S1$)?)?(F(Fbeghai& & & & & &r   )r(   out_axes)
r   tree_flattenr   maxr   any
ValueErrorziptree_unflattenr   )
args	args_flatin_treein_axes_flatnew_argsnew_in_axesr>   r,   r(   rA   s
         @r   batched_funz&broadcasting_vmap.<locals>.batched_fun?   s'   #066IweLLLL]](9l*K*K]]]]]Daxx	 > > > >#I|<<> > > 
> 
> GEFFF # & &I|44& & & !	i ';;H*7LAAK<4[8<<<hGGr   )	functoolswraps)r,   r(   rA   rN   s   ``` r   r*   r*   >   sL    ?3H H H H H H H 
r   indicesindptrreturnc                     t          j        t          j        |           j        |                             d                    dz
  | fS )z1Given CSR (indices, indptr) return COO (row, col)r;   )jnpcumsum
zeros_likeatadd)rQ   rR   s     r   _csr_to_coorZ   Q   s>     
CN7++.v6::1==	>	>	BG	KKr   matc                 J    t          | |          \  }}t          |||          S )z8Extract values of dense matrix mat at given CSR indices.)rZ   _coo_extract)rQ   rR   r[   rowcols        r   _csr_extractr`   V   s'    &))(#s	c3	$	$$r   r^   r_   c                     || |f         S )z8Extract values of dense matrix mat at given COO indices.r   )r^   r_   r[   s      r   r]   r]   [   s    	S#Xr   n_batchn_densec                 "   t          j        |           } | dk    }|dk    r9|                    t          d t	          |          D                                 }|                    t          t	          ||j                                      }|S )zCReturn per-batch number of stored elements (nse) of a dense matrix.r   c              3   "   K   | ]
}|d z    V  dS )r;   Nr   )r7   r9   s     r   r:   z3_count_stored_elements_per_batch.<locals>.<genexpr>d   s(      ;;qAE(;;;;;;r   )rU   asarrayrD   tupler+   sumndim)r[   rb   rc   masks       r    _count_stored_elements_per_batchrk   _   s{    C#
($q[[88E;;E'NN;;;;;<<D	%gty1122	3	3$	+r   c                 L    t          | ||                              d          S )zEReturn the number of stored elements (nse) of the given dense matrix.r   )initial)rk   rC   )r[   rb   rc   s      r   _count_stored_elementsrn   h   s%    	)#w	@	@	D	DQ	D	O	OOr   	lhs_shape	rhs_shapedimension_numbersc                     t          j        | t          j                  }t          j        |t          j                  }t	          |||dd          S )z0Validate the inputs and return the output shape.N)rq   	precisionpreferred_element_type)r	   ShapedArraynpfloat32r   )ro   rp   rq   lhsrhss        r   _dot_general_validated_shaperz   l   sP     	BJ//#BJ//#	  14
1 
1 
1 1r   )r   r   )-__doc__rO   typingr   r   r   numpyrv   jaxr   r   r   jax._srcr	   r
   r   jax._src.api_utilr   	jax.numpyrU   jax.utilr   jax._src.lax.laxr   r   jax._src.typingr   rE   r   UserWarningr   r   rg   intr$   r    r0   r*   jitrZ   r`   r]   rk   rn   rz   r   r   r   <module>r      su         ) ) ) ) ) ) ) ) ) )     



                                     * * * * * *             I I I I I I I I ! ! ! ! ! !    J       k        7    	c3h        '+A        & L L L%u2E L L L 	L%% % %U %u % % % %
e % e      % # C X]    P P P P# Pe P P P P1S#X1+0c?1*1/4S#X1 1 1 1 1 1r   