U
    Åmœd  ã                   @   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   !



