U
    »mœd½  ã                   @   sJ   d Z ddgZddlmZmZ ddlmZ ddlmZ ddd„Z	d	d„ Z
d
S )z+ Functions that operate on sparse matrices
Úcount_blocksÚestimate_blocksizeé   )Úisspmatrix_csrÚ
csr_matrix)Úisspmatrix_csc)Úcsr_count_blocksçffffffæ?c           
      C   s^  t | ƒst| ƒst| ƒ} | jdkr&dS d|  k r:dk sDn tdƒ‚d| d }t| jƒ}| j\}}|d dkr�|d dkr�|dt| dƒ  }nd	}|d
 dkrÀ|d
 dkrÀ|dt| dƒ  }nd	}||krø||krø|dt| dƒ  }||kròdS dS nb|d dk�r(|d dk�r(|dt| dƒ  }	nd	}	|	|k�r:dS ||k�rHdS ||k�rVdS dS dS )z—Attempt to determine the blocksize of a sparse matrix

    Returns a blocksize=(r,c) such that
        - A.nnz / A.tobsr( (r,c) ).nnz > efficiency
    é    )r   r   g      ð?z.efficiency must satisfy 0.0 < efficiency < 1.0g       @é   é   )r
   r
   g        é   é	   )r   r   é$   )é   r   é   )r   r   N)r   r   r   ÚnnzÚ
ValueErrorÚfloatÚshaper   )
ÚAZ
efficiencyZhigh_efficiencyr   ÚMÚNZe22Ze33Ze66Ze44© r   úN/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/sparse/_spfuncs.pyr      s<    





c                 C   sr   |\}}|dk s|dk r t dƒ‚t| ƒrH| j\}}t||||| j| jƒS t| ƒr`t| j||fƒS tt	| ƒ|ƒS dS )z]For a given blocksize=(r,c) count the number of occupied
    blocks in a sparse matrix A
    r   zr and c must be positiveN)
r   r   r   r   ZindptrÚindicesr   r   ÚTr   )r   Ú	blocksizeÚrÚcr   r   r   r   r   r   >   s    
N)r   )Ú__doc__Ú__all__Z_csrr   r   Z_cscr   Z_sparsetoolsr   r   r   r   r   r   r   Ú<module>   s   
3