§
    OŠtj±  ã                   ó<   — d dl mZ d	d„Zdefd„Zd	d„Zdddœd„ZdS )
é   )Ú_iszeroFc                 óT   ‡ — ‰                       |d¬¦  «        \  }}ˆ fd„|D ¦   «         S )a±  Returns a list of vectors (Matrix objects) that span columnspace of ``M``

    Examples
    ========

    >>> from sympy import Matrix
    >>> M = Matrix(3, 3, [1, 3, 0, -2, -6, 0, 3, 9, 6])
    >>> M
    Matrix([
    [ 1,  3, 0],
    [-2, -6, 0],
    [ 3,  9, 6]])
    >>> M.columnspace()
    [Matrix([
    [ 1],
    [-2],
    [ 3]]), Matrix([
    [0],
    [0],
    [6]])]

    See Also
    ========

    nullspace
    rowspace
    T©ÚsimplifyÚwith_pivotsc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS © )Úcol)Ú.0ÚiÚMs     €úV/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/matrices/subspaces.pyú
<listcomp>z _columnspace.<locals>.<listcomp>#   s#   ø€ Ð%Ð%Ð%˜ˆA�EŠE�!‰HŒHÐ%Ð%Ð%ó    )Úechelon_form)r   r   ÚreducedÚpivotss   `   r   Ú_columnspacer      s8   ø€ ð: —n’n¨hÀD�nÑIÔI�O€GˆVà%Ð%Ð%Ð%˜fÐ%Ñ%Ô%Ð%r   c                 ó\  ‡ ‡
— ‰                       ||¬¦  «        \  }Š
ˆ
fd„t          ‰ j        ¦  «        D ¦   «         }g }|D ]^}‰ j        g‰ j        z  }‰ j        ||<   t          ‰
¦  «        D ]\  }}	||	xx         |||f         z  cc<   Œ|                     |¦  «         Œ_ˆ fd„|D ¦   «         S )a‡  Returns list of vectors (Matrix objects) that span nullspace of ``M``

    Examples
    ========

    >>> from sympy import Matrix
    >>> M = Matrix(3, 3, [1, 3, 0, -2, -6, 0, 3, 9, 6])
    >>> M
    Matrix([
    [ 1,  3, 0],
    [-2, -6, 0],
    [ 3,  9, 6]])
    >>> M.nullspace()
    [Matrix([
    [-3],
    [ 1],
    [ 0]])]

    See Also
    ========

    columnspace
    rowspace
    )Ú
iszerofuncr   c                 ó   •— g | ]}|‰v¯|‘Œ	S r	   r	   )r   r   r   s     €r   r   z_nullspace.<locals>.<listcomp>B   s   ø€ Ð=Ð=Ð=�q¨Q°f¨_¨_�¨_¨_¨_r   c                 óH   •— g | ]}‰                      ‰j        d |¦  «        ‘ŒS )r   )Ú_newÚcols)r   Úbr   s     €r   r   z_nullspace.<locals>.<listcomp>P   s+   ø€ Ð0Ð0Ð0 QˆA�FŠF�1”6˜1˜aÑ Ô Ð0Ð0Ð0r   )ÚrrefÚranger   ÚzeroÚoneÚ	enumerateÚappend)r   r   r   r   Ú	free_varsÚbasisÚfree_varÚvecÚpiv_rowÚpiv_colr   s   `         @r   Ú
_nullspacer(   &   sÞ   øø€ ð4 —f’f¨
¸X�fÑFÔF�O€GˆVà=Ð=Ð=Ð=�E !¤&™MœMÐ=Ñ=Ô=€IØ€Eàð 	ð 	ˆð œ˜ 1¤6Ñ)ˆØœˆˆH‰å )¨&Ñ 1Ô 1ð 	7ð 	7ÑˆG�WØ�ˆLˆLŒL˜G G¨XÐ$5Ô6Ñ6ˆLˆL‰LˆLà�Š�SÑÔÐÐà0Ð0Ð0Ð0¨%Ð0Ñ0Ô0Ð0r   c                 óˆ   ‡— |                       |d¬¦  «        \  Š}ˆfd„t          t          |¦  «        ¦  «        D ¦   «         S )aD  Returns a list of vectors that span the row space of ``M``.

    Examples
    ========

    >>> from sympy import Matrix
    >>> M = Matrix(3, 3, [1, 3, 0, -2, -6, 0, 3, 9, 6])
    >>> M
    Matrix([
    [ 1,  3, 0],
    [-2, -6, 0],
    [ 3,  9, 6]])
    >>> M.rowspace()
    [Matrix([[1, 3, 0]]), Matrix([[0, 0, 6]])]
    Tr   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r	   )Úrow)r   r   r   s     €r   r   z_rowspace.<locals>.<listcomp>f   s#   ø€ Ð7Ð7Ð7˜qˆG�KŠK˜‰NŒNÐ7Ð7Ð7r   )r   r   Úlen)r   r   r   r   s      @r   Ú	_rowspacer-   S   sF   ø€ ð" —n’n¨hÀD�nÑIÔI�O€GˆVà7Ð7Ð7Ð7¥E­#¨f©+¬+Ñ$6Ô$6Ð7Ñ7Ô7Ð7r   )Ú	normalizeÚ	rankcheckc                óš  — ddl m} |sg S |d         j        dk    }d„ |D ¦   «         } | j        |Ž } |||¬¦  «        \  }}|r'|j        t          |¦  «        k     rt          d¦  «        ‚g }	t          |j        ¦  «        D ]I}
|r | |dd…|
f         j        ¦  «        }n | |dd…|
f         ¦  «        }|	 	                    |¦  «         ŒJ|	S )a´  Apply the Gram-Schmidt orthogonalization procedure
    to vectors supplied in ``vecs``.

    Parameters
    ==========

    vecs
        vectors to be made orthogonal

    normalize : bool
        If ``True``, return an orthonormal basis.

    rankcheck : bool
        If ``True``, the computation does not stop when encountering
        linearly dependent vectors.

        If ``False``, it will raise ``ValueError`` when any zero
        or linearly dependent vectors are found.

    Returns
    =======

    list
        List of orthogonal (or orthonormal) basis vectors.

    Examples
    ========

    >>> from sympy import I, Matrix
    >>> v = [Matrix([1, I]), Matrix([1, -I])]
    >>> Matrix.orthogonalize(*v)
    [Matrix([
    [1],
    [I]]), Matrix([
    [ 1],
    [-I]])]

    See Also
    ========

    MatrixBase.QRdecomposition

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process
    r   )Ú_QRdecomposition_optionalé    c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r	   )r%   )r   Úxs     r   r   z"_orthogonalize.<locals>.<listcomp>    s    € Ð"Ð"Ð"˜ˆA�EŠE‰GŒGÐ"Ð"Ð"r   )r.   z0GramSchmidt: vector set not linearly independentN)
Údecompositionsr1   ÚrowsÚhstackr   r,   Ú
ValueErrorr   ÚTr!   )Úclsr.   r/   Úvecsr1   Úall_row_vecsr   ÚQÚRÚretr   r
   s               r   Ú_orthogonalizer@   i   s  € ð` :Ð9Ð9Ð9Ð9Ð9àð Øˆ	à˜”G”L AÒ%€Là"Ð"˜TÐ"Ñ"Ô"€DØˆŒ
�DÐ€AØ$Ð$ Q°)Ð<Ñ<Ô<�D€A€qàð M�Q”V�c $™iœiÒ'Ð'ÝÐKÑLÔLÐLà
€CÝ�1”6‰]Œ]ð ð ˆØð 	Ø�#�a˜˜˜˜1˜”g”i‘.”.ˆCˆCà�#�a˜˜˜˜1˜”g‘,”,ˆCØ�
Š
�3‰ŒˆˆØ€Jr   N)F)Ú	utilitiesr   r   r(   r-   r@   r	   r   r   ú<module>rB      s�   ðØ Ð Ð Ð Ð Ð ð&ð &ð &ð &ðD !¨Wð *1ð *1ð *1ð *1ðZ8ð 8ð 8ð 8ð, */¸%ð Eð Eð Eð Eð Eð Eð Er   