
    tKg                     B    d Z ddgZddlmZ ddlmZ ddlmZ d
dZd Z	y	)z+ Functions that operate on sparse matrices
count_blocksestimate_blocksize   )issparse)	csr_array)csr_count_blocksc                 P   t        |       r| j                  dv st        |       } | j                  dk(  ryd|cxk  rdk  st	        d       t	        d      d|z   dz  }t        | j                        }| j                  \  }}|dz  dk(  r|dz  dk(  r|dt        | d	      z  z  }nd
}|dz  dk(  r|dz  dk(  r|dt        | d      z  z  }nd
}||kD  r||kD  r|dt        | d      z  z  }||kD  ryy|dz  dk(  r|dz  dk(  r|dt        | d      z  z  }	nd
}	|	|kD  ry||kD  ry||kD  ry	y)zAttempt 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   )r   formatr   nnz
ValueErrorfloatshaper   )
A
efficiencyhigh_efficiencyr   MNe22e33e66e44s
             Y/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/sparse/_spfuncs.pyr   r      sg    QKAHH6aLuuzzCIJJ  IJJZ'3.O
,C
''CAa1uza!eqjQa../1uza!eqjQa../
_!6R,q//0q5A:!a%1*l1U334CC::    c                 H   |\  }}|dk  s|dk  rt        d      t        |       ri| j                  dk(  r3| j                  \  }}t	        ||||| j
                  | j                        S | j                  dk(  rt        | 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   indptrindicesr   Tr   )r   	blocksizercr   r   s         r!   r   r   >   s     CAa1uA344{88u''CAa#Aa!AHHQYY??XXQqE**	!Y//r"   N)gffffff?)
__doc____all___baser   _csrr   _sparsetoolsr   r   r    r"   r!   <module>r0      s+    .
/   *0f0r"   