ó
Ê½÷Xc           @` s{   d  Z  d d l m Z m Z m Z d Z d d d g Z d d l m Z d	 „  Z	 d d d
 „ Z d d d „ Z d „  Z d S(   s.   Functions to extract parts of sparse matrices
i    (   t   divisiont   print_functiont   absolute_imports   restructuredtext ent   findt   trilt   triui   (   t
   coo_matrixc         C` sM   t  |  d t ƒ}  |  j ƒ  |  j d k } |  j | |  j | |  j | f S(   sJ  Return the indices and values of the nonzero elements of a matrix

    Parameters
    ----------
    A : dense or sparse matrix
        Matrix whose nonzero elements are desired.

    Returns
    -------
    (I,J,V) : tuple of arrays
        I,J, and V contain the row indices, column indices, and values
        of the nonzero matrix entries.


    Examples
    --------
    >>> from scipy.sparse import csr_matrix, find
    >>> A = csr_matrix([[7.0, 8.0, 0],[0, 0, 9.0]])
    >>> find(A)
    (array([0, 0, 1], dtype=int32), array([0, 1, 2], dtype=int32), array([ 7.,  8.,  9.]))

    t   copyi    (   R   t   Truet   sum_duplicatest   datat   rowt   col(   t   At   nz_mask(    (    s3   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/extract.pyR      s    
c         C` s>   t  |  d t ƒ}  |  j | |  j k } t |  | ƒ j | ƒ S(   s  Return the lower triangular portion of a matrix in sparse format

    Returns the elements on or below the k-th diagonal of the matrix A.
        - k = 0 corresponds to the main diagonal
        - k > 0 is above the main diagonal
        - k < 0 is below the main diagonal

    Parameters
    ----------
    A : dense or sparse matrix
        Matrix whose lower trianglar portion is desired.
    k : integer : optional
        The top-most diagonal of the lower triangle.
    format : string
        Sparse format of the result, e.g. format="csr", etc.

    Returns
    -------
    L : sparse matrix
        Lower triangular portion of A in sparse format.

    See Also
    --------
    triu : upper triangle in sparse format

    Examples
    --------
    >>> from scipy.sparse import csr_matrix, tril
    >>> A = csr_matrix([[1, 2, 0, 0, 3], [4, 5, 0, 6, 7], [0, 0, 8, 9, 0]],
    ...                dtype='int32')
    >>> A.toarray()
    array([[1, 2, 0, 0, 3],
           [4, 5, 0, 6, 7],
           [0, 0, 8, 9, 0]])
    >>> tril(A).toarray()
    array([[1, 0, 0, 0, 0],
           [4, 5, 0, 0, 0],
           [0, 0, 8, 0, 0]])
    >>> tril(A).nnz
    4
    >>> tril(A, k=1).toarray()
    array([[1, 2, 0, 0, 0],
           [4, 5, 0, 0, 0],
           [0, 0, 8, 9, 0]])
    >>> tril(A, k=-1).toarray()
    array([[0, 0, 0, 0, 0],
           [4, 0, 0, 0, 0],
           [0, 0, 0, 0, 0]])
    >>> tril(A, format='csc')
    <3x5 sparse matrix of type '<type 'numpy.int32'>'
            with 4 stored elements in Compressed Sparse Column format>

    R   (   R   t   FalseR   R   t   _masked_coot   asformat(   R   t   kt   formatt   mask(    (    s3   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/extract.pyR   -   s    8c         C` s>   t  |  d t ƒ}  |  j | |  j k } t |  | ƒ j | ƒ S(   s  Return the upper triangular portion of a matrix in sparse format

    Returns the elements on or above the k-th diagonal of the matrix A.
        - k = 0 corresponds to the main diagonal
        - k > 0 is above the main diagonal
        - k < 0 is below the main diagonal

    Parameters
    ----------
    A : dense or sparse matrix
        Matrix whose upper trianglar portion is desired.
    k : integer : optional
        The bottom-most diagonal of the upper triangle.
    format : string
        Sparse format of the result, e.g. format="csr", etc.

    Returns
    -------
    L : sparse matrix
        Upper triangular portion of A in sparse format.

    See Also
    --------
    tril : lower triangle in sparse format

    Examples
    --------
    >>> from scipy.sparse import csr_matrix, triu
    >>> A = csr_matrix([[1, 2, 0, 0, 3], [4, 5, 0, 6, 7], [0, 0, 8, 9, 0]],
    ...                dtype='int32')
    >>> A.toarray()
    array([[1, 2, 0, 0, 3],
           [4, 5, 0, 6, 7],
           [0, 0, 8, 9, 0]])
    >>> triu(A).toarray()
    array([[1, 2, 0, 0, 3],
           [0, 5, 0, 6, 7],
           [0, 0, 8, 9, 0]])
    >>> triu(A).nnz
    8
    >>> triu(A, k=1).toarray()
    array([[0, 2, 0, 0, 3],
           [0, 0, 0, 6, 7],
           [0, 0, 0, 9, 0]])
    >>> triu(A, k=-1).toarray()
    array([[1, 2, 0, 0, 3],
           [4, 5, 0, 6, 7],
           [0, 0, 8, 9, 0]])
    >>> triu(A, format='csc')
    <3x5 sparse matrix of type '<type 'numpy.int32'>'
            with 8 stored elements in Compressed Sparse Column format>

    R   (   R   R   R   R   R   R   (   R   R   R   R   (    (    s3   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/extract.pyR   j   s    8c         C` sO   |  j  | } |  j | } |  j | } t | | | f f d |  j d |  j ƒS(   Nt   shapet   dtype(   R   R   R
   R   R   R   (   R   R   R   R   R
   (    (    s3   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/extract.pyR   §   s    N(   t   __doc__t
   __future__R    R   R   t   __docformat__t   __all__t   cooR   R   t   NoneR   R   R   (    (    (    s3   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/extract.pyt   <module>   s   	==