
    Wh              
       "   d Z ddlZddl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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)
NamedTuple)lax)	tree_util)vmap)core)flatten_axes)safe_zip)_dot_general_shape_ruleDotDimensionNumbers)Arrayc                       e Zd ZdS )SparseEfficiencyErrorN__name__
__module____qualname__     b/var/www/html/movieo_spanner_bot/venv/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_vmapr,   5   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>A   s,      ]]Qq}sy|}}}}]]r      c              3   H   K   | ]\  }}|d uo|j         |         dfvV  d S Nr7   r1   )r3   r4   r5   sizes      r   r6   z9broadcasting_vmap.<locals>.batched_fun.<locals>.<genexpr>C   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 r9   )r   r   squeezer2   s      r   r6   z9broadcasting_vmap.<locals>.batched_fun.<locals>.<genexpr>F   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$   r=   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$   r=   rJ   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)r7   )jnpcumsum
zeros_likeatadd)rM   rN   s     r   _csr_to_coorV   O   s>     
CN7++.v6::1==	>	>	BG	KKr   matc                 J    t          | |          \  }}t          |||          S )z8Extract values of dense matrix mat at given CSR indices.)rV   _coo_extract)rM   rN   rW   rowcols        r   _csr_extractr\   T   s'    &))(#s	c3	$	$$r   rZ   r[   c                     || |f         S )z8Extract values of dense matrix mat at given COO indices.r   )rZ   r[   rW   s      r   rY   rY   Y   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 )r7   Nr   )r3   r5   s     r   r6   z3_count_stored_elements_per_batch.<locals>.<genexpr>b   s(      ;;qAE(;;;;;;r   )rQ   asarrayr@   tupler'   sumndim)rW   r^   r_   masks       r    _count_stored_elements_per_batchrg   ]   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)rg   r?   )rW   r^   r_   s      r   _count_stored_elementsrj   f   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d          S )z0Validate the inputs and return the output shape.N)rm   	precisionpreferred_element_typeout_type)r   ShapedArraynpfloat32r
   )rk   rl   rm   lhsrhss        r   _dot_general_validated_shaperw   j   sV     	BJ//#BJ//#	  14$
@ 
@ 
@ @r   )r   r   ))__doc__rK   typingr   numpyrs   jaxr   r   r   jax._srcr   jax._src.api_utilr   	jax.numpyrQ   jax.utilr	   jax._src.lax.laxr
   r   jax._src.typingr   rA   r   UserWarningr   r   rc   intr    r   r,   r&   jitrV   r\   rY   rg   rj   rw   r   r   r   <module>r      sO                   



                         * * * * * *             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@S#X@+0c?@*@/4S#X@ @ @ @ @ @r   