a
    ˆù»j  ã                   @   sF   d Z ddgZddl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é   )Úissparse)Ú	csr_array)Úcsr_count_blocksçffffffæ?c           
      C   s`  t | ƒr| jdv st| ƒ} | jdkr(dS d|  k r<dk sFn 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�rJdS ||k�rXd	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
    )ÚcscÚcsré    )r   r   g      ð?z.efficiency must satisfy 0.0 < efficiency < 1.0g       @é   é   )r   r   g        é   é	   )r   r   é$   )é   r   é   )r   r   N)r   Úformatr   ÚnnzÚ
ValueErrorÚfloatÚshaper   )
ÚAZ
efficiencyZhigh_efficiencyr   ÚMÚNZe22Ze33Ze66Ze44© r   ú;E:\soccer\ml_env\Lib\site-packages\scipy/sparse/_spfuncs.pyr      s<    





c                 C   sz   |\}}|dk s|dk r t dƒ‚t| ƒrl| jdkrR| j\}}t||||| j| jƒS | jdkrlt| 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 positiver	   r   )
r   r   r   r   r   ZindptrÚindicesr   ÚTr   )r   Ú	blocksizeÚrÚcr   r   r   r   r   r   >   s    


N)r   )
Ú__doc__Ú__all__Z_baser   Z_csrr   Z_sparsetoolsr   r   r   r   r   r   r   Ú<module>   s   
3