U
    md                     @   s   d dl mZ d dlmZ d dlZd dlmZ d dlm	Z	 edej
dddZeej
dd	d
Zdd Zee	jddd
Zedd Zee	jddd
ZdS )    )singledispatch)IntegralN)njit)sparse)returnc                 C   s
   t  dS )a  
    Check whether values in array are constant.

    Params
    ------
    a
        Array to check
    axis
        Axis to reduce over.


    Returns
    -------
    Boolean array, True values were constant.

    Example
    -------

    >>> a = np.array([[0, 1], [0, 0]])
    >>> a
    array([[0, 1],
            [0, 0]])
    >>> is_constant(a)
    False
    >>> is_constant(a, axis=0)
    array([ False, True])
    >>> is_constant(a, axis=1)
    array([ True, False])
    N)NotImplementedErroraaxis r   Z/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scanpy/_utils/compute/is_constant.pyis_constant	   s    r   c                 C   s^   |d krt | | jd S t|ts,td|dks8t|dkrJt| jS |dkrZt| S d S Nr   axis must be integer or None.r      r   )	npZarray_equalZflat
isinstancer   	TypeErrorAssertionError_is_constant_rowsTr   r   r   r   _+   s    

r   c                 C   s8   t | d d df d d t jf | j}| |kjddS )Nr   r   )r
   )r   Zbroadcast_toZnewaxisshapeall)r	   br   r   r   r   9   s    (r   c                 C   s   |d kr6t | jtj| j kr(t| jS | jdk S t|tsHt	d|dksTt
|dkrrt| j| j| j| jS |dkr| j } t| j| j| j| jS d S r   )lendatar   multiplyr   r   r   r   r   r   r   _is_constant_csr_rowsindicesindptrr   Ztocsrr   r   r   r   r   >   s    


c                 C   s   t |d }tj|tjd}t|D ]^}|| }||d  }|| |d krV| | }	nd}	t||D ]}
| |
 |	krdd||<  q$qdq$|S )Nr   )Zdtyper   F)r   r   ZonesZbool_range)r   r    r!   r   Nresultistartstopvaljr   r   r   r   O   s    
r   c                 C   s   |d kr6t | jtj| j kr(t| jS | jdk S t|tsHt	d|dksTt
|dkr|t| j| j| j| jd d d S |dkr| j } t| j| j| j| jd d d S d S )Nr   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   Ztocscr   r   r   r   r   a   s    

 
)N)N)N)N)	functoolsr   numbersr   numpyr   Znumbar   Zscipyr   Zndarrayr   registerr   r   Z
csr_matrixr   Z
csc_matrixr   r   r   r   <module>   s   !



