o
    ÒtBh½  ã                   @   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   sT  t | ƒst| ƒst| ƒ} | jdkrdS d|  k r dk s%tdƒ‚ tdƒ‚d| d }t| jƒ}| j\}}|d dkrK|d dkrK|dt| dƒ  }nd	}|d
 dkrc|d
 dkrc|dt| dƒ  }nd	}||kr~||kr~|dt| dƒ  }||kr|dS dS |d dkr”|d dkr”|dt| dƒ  }	nd	}	|	|krœdS ||kr¢dS ||kr¨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   )r   r   r   ÚnnzÚ
ValueErrorÚfloatÚshaper   )
ÚAÚ
efficiencyÚhigh_efficiencyr   ÚMÚNÚe22Úe33Úe66Úe44© r   úl/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/scipy/sparse/_spfuncs.pyr      s@   
ÿ

c                 C   sn   |\}}|dk s|dk rt dƒ‚t| ƒr$| j\}}t||||| j| jƒS t| ƒr0t| j||fƒS tt	| ƒ|ƒ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 positive)
r   r   r   r   ÚindptrÚindicesr   r   ÚTr   )r   Ú	blocksizeÚrÚcr   r   r   r   r   r   >   s   
N)r   )Ú__doc__Ú__all__Ú_csrr   r   Ú_cscr   Ú_sparsetoolsr   r   r   r   r   r   r   Ú<module>   s    
3