
    Bpj2                         S r Sr/ SQrSSKrSSKJr  SSKJrJ	r	  SSK
JrJr  SS	KJr  SS
KJr   " S S\5      rS r " S S\\	5      r " S S\\5      rg)z&Compressed Sparse Column matrix formatzrestructuredtext en)	csc_array
csc_matrixisspmatrix_csc    N   )spmatrix)_spbasesparray)	csr_tocsc	expandptr)upcast)
_cs_matrixc                   Z   \ rS rSrSrSS jr\R
                  R                  \l        S rSS jr	\R                  R                  \	l        SS jr
\R                  R                  \
l        S r\R                  R                  \l        S	 rS
 rS rS rS rS rS rS r\S 5       rSrg)	_csc_base   cscNc                     Ub  US:w  a  [        S5      eU R                  u  p4U R                  U R                  U R                  U R
                  4XC4US9$ )N)r   r   zvSparse arrays/matrices do not support an 'axes' parameter because swapping dimensions is the only logical permutation.copy)
ValueErrorshape_csr_containerdataindicesindptr)selfaxesr   MNs        M/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/scipy/sparse/_csc.py	transpose_csc_base.transpose   si     L M M zz""DIIt||$(KK$134&t # E 	E    c              #   @   #    U R                  5        S h  vN   g  N7fN)tocsr)r   s    r   __iter___csc_base.__iter__!   s     ::<s   c                 4    U(       a  U R                  5       $ U $ r$   r   )r   r   s     r   tocsc_csc_base.tocsc$   s    99;Kr"   c           
      F   U R                   u  p#U R                  U R                  U R                  4[	        U R
                  U5      S9n[        R                  " US-   US9n[        R                  " U R
                  US9n[        R                  " U R
                  [        U R                  5      S9n[        X2U R                  R                  USS9U R                  R                  USS9U R                  UUU5        U R                  XvU4U R                   SS9nSUl        U$ )N)maxvalr   dtypeFr   )r   r   T)r   _get_index_dtyper   r   maxnnznpemptyr   r.   r
   astyper   r   has_sorted_indices)	r   r   r   r   	idx_dtyper   r   r   As	            r   r%   _csc_base.tocsr,   s   jj))4;;*E+.txx+; * =	!a%y1((48895xxtzz(:;!++$$YU$;,,%%ie%<))	 F#**5   
  $r"   c                 z   U R                  U R                  5      u  pU R                  n[        R                  " [        U5      U R                  R                  S9n[        XR                  U5        U R                  XC45      u  pVU R                  S:g  nXW   nXg   n[        R                  " USS9nXX   nXh   nXV4$ )Nr-   r   	mergesort)kind)_swapr   r   r2   r3   lenr.   r   r   r   argsort)	r   	major_dim	minor_dimminor_indicesmajor_indicesrowcolnz_maskinds	            r   nonzero_csc_base.nonzeroE   s    
  $zz$**5	]!34<<;M;MN)[[-8::}<= ))q.ll jj;/hhxr"   c                     U R                   u  p#[        U5      nUS:  a  X-  nUS:  d  X:  a  [        SU S35      eU R                  US9R	                  5       $ )zMReturns a copy of row i of the matrix, as a (1 x n)
CSR matrix (row vector).
r   index () out of rangeminor)r   int
IndexError_get_submatrixr%   r   ir   r   s       r   _getrow_csc_base._getrow^   sb     zzFq5FAq5AFwqc899"""+1133r"   c                     U R                   u  p#[        U5      nUS:  a  X-  nUS:  d  X:  a  [        SU S35      eU R                  USS9$ )zSReturns a copy of column i of the matrix, as a (m x 1)
CSC matrix (column vector).
r   rJ   rK   T)majorr   )r   rN   rO   rP   rQ   s       r   _getcol_csc_base._getcolj   s[     zzFq5FAq5AFwqc899"""66r"   c                 >    U R                  U5      R                  US9$ )NrL   )_major_index_fancyrP   r   rC   rD   s      r   _get_intXarray_csc_base._get_intXarrayv   s!    &&s+:::EEr"   c                 ~    UR                   S;   a  U R                  X!SS9$ U R                  U5      R                  US9$ )Nr   NTrV   rM   r   rL   )steprP   _major_slicer[   s      r   _get_intXslice_csc_base._get_intXslicey   sC    88y &&S$&GG  %4434??r"   c                 ~    UR                   S;   a  U R                  X!SS9$ U R                  US9R                  U5      $ )Nr_   Tr`   rV   )ra   rP   _minor_slicer[   s      r   _get_sliceXint_csc_base._get_sliceXint~   sC    88y &&S$&GG"""-::3??r"   c                 B    U R                  U5      R                  U5      $ r$   )rZ   rg   r[   s      r   _get_sliceXarray_csc_base._get_sliceXarray   s    &&s+88==r"   c                     U R                  US9R                  U5      nUR                  S:  a  UR                  UR                  5      $ U$ )Nrf   r   )rP   _minor_index_fancyndimreshaper   )r   rC   rD   ress       r   _get_arrayXint_csc_base._get_arrayXint   sC    !!!,??D88a<;;syy))
r"   c                 B    U R                  U5      R                  U5      $ r$   )rb   rn   r[   s      r   _get_arrayXslice_csc_base._get_arrayXslice   s      %88==r"   c                     U S   U S   4$ )zBswap the members of x if this is a column-oriented matrix
        r   r    xs    r   r<   _csc_base._swap   s     tQqTzr"   rx   )NF)F)__name__
__module____qualname____firstlineno___formatr    r   __doc__r&   r)   r%   rG   r   rS   rW   r\   rc   rh   rk   rr   ru   staticmethodr<   __static_attributes__rx   r"   r   r   r      s    G	E  ))11I  MM))EM. MM))EM. !((00GO
4
7F@
@
>>
  r"   r   c                 "    [        U [        5      $ )a0  Is `x` of csc_matrix type?

.. warning::

   SciPy sparse is shifting from a sparse matrix interface to a sparse
   array interface. In the next few releases we expect to deprecate the
   sparse matrix interface. For documentation of the matrix
   interface, see the :ref:`spmatrix interface docs <spmatrix_api>`.
   For guidance on converting existing code to sparse arrays, see
   :ref:`Migration from spmatrix to sparray <migration_to_sparray>`.

Parameters
----------
x
    object to check for being a csc matrix

Returns
-------
bool
    True if `x` is a csc matrix, False otherwise

Examples
--------
>>> from scipy.sparse import csc_array, csc_matrix, coo_matrix, isspmatrix_csc
>>> isspmatrix_csc(csc_matrix([[5]]))
True
>>> isspmatrix_csc(csc_array([[5]]))
False
>>> isspmatrix_csc(coo_matrix([[5]]))
False
)
isinstancer   ry   s    r   r   r      s    @ a$$r"   c                       \ rS rSrSrSrg)r      a  
Compressed Sparse Column array.

This can be instantiated in several ways:
    csc_array(D)
        where D is a 2-D ndarray

    csc_array(S)
        with another sparse array or matrix S (equivalent to S.tocsc())

    csc_array((M, N), [dtype])
        to construct an empty array with shape (M, N)
        dtype is optional, defaulting to dtype='d'.

    csc_array((data, (row_ind, col_ind)), [shape=(M, N)])
        where ``data``, ``row_ind`` and ``col_ind`` satisfy the
        relationship ``a[row_ind[k], col_ind[k]] = data[k]``.

    csc_array((data, indices, indptr), [shape=(M, N)])
        is the standard CSC representation where the row indices for
        column i are stored in ``indices[indptr[i]:indptr[i+1]]``
        and their corresponding values are stored in
        ``data[indptr[i]:indptr[i+1]]``.  If the shape parameter is
        not supplied, the array dimensions are inferred from
        the index arrays.

Attributes
----------
data : ndarray
    CSC format data array of the array
indices : ndarray
    CSC format index array of the array
indptr : ndarray
    CSC format index pointer array of the array
has_sorted_indices : bool
    Whether indices are sorted
has_canonical_format : bool
    Whether indices are sorted and no duplicate entries exist
dtype : dtype
    Data type of the array
shape : 2-tuple
    Shape of the array
ndim : int
    Number of dimensions (this is always 2)
format : str
    Three letter code for the format of the array storage, e.g. 'csc'
nnz : int
    Number of values stored in the array
size : int
    Number of values stored in the array
T : csc_array
    The transpose of the array
mT : csc_array
    The matrix transpose of the array

Notes
-----

Sparse arrays can be used in arithmetic operations: they support
addition, subtraction, multiplication, division, and matrix power.

Advantages of the CSC format
    - efficient arithmetic operations CSC + CSC, CSC * CSC, etc.
    - efficient column slicing
    - fast matrix vector products (CSR, BSR may be faster)

Disadvantages of the CSC format
  - slow row slicing operations (consider CSR)
  - changes to the sparsity structure are expensive (consider LIL or DOK)

Canonical format
  - Within each column, indices are sorted by row.
  - There are no duplicate entries.

Examples
--------

>>> import numpy as np
>>> from scipy.sparse import csc_array
>>> csc_array((3, 4), dtype=np.int8).toarray()
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]], dtype=int8)

>>> row = np.array([0, 2, 2, 0, 1, 2])
>>> col = np.array([0, 0, 1, 2, 2, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> csc_array((data, (row, col)), shape=(3, 3)).toarray()
array([[1, 0, 4],
       [0, 0, 5],
       [2, 3, 6]])

>>> indptr = np.array([0, 2, 3, 6])
>>> indices = np.array([0, 2, 2, 0, 1, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> csc_array((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 4],
       [0, 0, 5],
       [2, 3, 6]])

rx   Nr|   r}   r~   r   r   r   rx   r"   r   r   r      s    dr"   r   c                       \ rS rSrSrSrg)r   i$  aL  
Compressed Sparse Column matrix.

.. warning::

   SciPy sparse is shifting from a sparse matrix interface to a sparse
   array interface. In the next few releases we expect to deprecate the
   sparse matrix interface. For documentation of the matrix
   interface, see the :ref:`spmatrix interface docs <spmatrix_api>`.
   For guidance on converting existing code to sparse arrays, see
   :ref:`Migration from spmatrix to sparray <migration_to_sparray>`.

This can be instantiated in several ways:
    csc_matrix(D)
        where D is a 2-D ndarray

    csc_matrix(S)
        with another sparse array or matrix S (equivalent to S.tocsc())

    csc_matrix((M, N), [dtype])
        to construct an empty matrix with shape (M, N)
        dtype is optional, defaulting to dtype='d'.

    csc_matrix((data, (row_ind, col_ind)), [shape=(M, N)])
        where ``data``, ``row_ind`` and ``col_ind`` satisfy the
        relationship ``a[row_ind[k], col_ind[k]] = data[k]``.

    csc_matrix((data, indices, indptr), [shape=(M, N)])
        is the standard CSC representation where the row indices for
        column i are stored in ``indices[indptr[i]:indptr[i+1]]``
        and their corresponding values are stored in
        ``data[indptr[i]:indptr[i+1]]``.  If the shape parameter is
        not supplied, the matrix dimensions are inferred from
        the index arrays.

Attributes
----------
data : ndarray
    CSC format data array of the matrix
indices : ndarray
    CSC format index array of the matrix
indptr : ndarray
    CSC format index pointer array of the matrix
has_sorted_indices : bool
    Whether indices are sorted
has_canonical_format : bool
    Whether indices are sorted and no duplicate entries exist
dtype : dtype
    Data type of the matrix
shape : 2-tuple
    Shape of the matrix
ndim : int
    Number of dimensions (this is always 2)
format : str
    Three letter code for the format of the matrix storage, e.g. 'csc'
nnz : int
    Number of values stored in the matrix
size : int
    Number of values stored in the matrix
T : csc_matrix
    The transpose of the matrix
mT : csc_matrix
    The matrix transpose

Notes
-----

Sparse matrices can be used in arithmetic operations: they support
addition, subtraction, multiplication, division, and matrix power.

Advantages of the CSC format
    - efficient arithmetic operations CSC + CSC, CSC * CSC, etc.
    - efficient column slicing
    - fast matrix vector products (CSR, BSR may be faster)

Disadvantages of the CSC format
  - slow row slicing operations (consider CSR)
  - changes to the sparsity structure are expensive (consider LIL or DOK)

Canonical format
  - Within each column, indices are sorted by row.
  - There are no duplicate entries.

Examples
--------

>>> import numpy as np
>>> from scipy.sparse import csc_matrix
>>> csc_matrix((3, 4), dtype=np.int8).toarray()
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]], dtype=int8)

>>> row = np.array([0, 2, 2, 0, 1, 2])
>>> col = np.array([0, 0, 1, 2, 2, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> csc_matrix((data, (row, col)), shape=(3, 3)).toarray()
array([[1, 0, 4],
       [0, 0, 5],
       [2, 3, 6]])

>>> indptr = np.array([0, 2, 3, 6])
>>> indices = np.array([0, 2, 2, 0, 1, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> csc_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 4],
       [0, 0, 5],
       [2, 3, 6]])

rx   Nr   rx   r"   r   r   r   $  s    mr"   r   )r   __docformat____all__numpyr2   _matrixr   _baser   r	   _sparsetoolsr
   r   _sputilsr   _compressedr   r   r   r   r   rx   r"   r   <module>r      s\    ,%
7   # .  #D
 DN %He	7 ePn9 nr"   