+
    iv                       ^ RI Ht ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHtHt ^ RIHt ^ R	IHt ^ R
IHt ^RIHt ^RIHtHt ^RIHt ^RIHtHt ^RIHtH t  R1R./t!R t" ! R R]4      t#R t$ ! R R]#]4      t%]%;t&t'](3R lt)](3R lt*R2R lt+R t,R t-R t.R t/R t0R t1]! R3R 7      R! 4       t2R4R# lt3R$ t4R%R"R&R'/R( lt5R5R) lt6R6R* lt7R+ t8R, t9R- t:R7R. lt;R8R/ lt<R0 t=R# )9    )annotationsN)Basic)S)Symbol)sympify)cossin)doctest_depends_on)sympy_deprecation_warning)is_sequence)
ShapeError)	_cholesky_LDLdecomposition)
MatrixBase)MutableRepMatrix	RepMatrix)_lower_triangular_solve_upper_triangular_solvenumpyc                    V P                   # )zReturns True if x is zero.)is_zero)xs   &t/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/sympy/matrices/dense.py_iszeror      s    99    c                      ] tR t^t$ RtRtR]R&   Rt^t]	R 4       t
R tR tR	 tRR
 ltRR ltR tR t]P                  ]n        ]P                  ]n        ]P                  ]n        ]P                  ]n        RtR# )DenseMatrixzJMatrix implementation based on DomainMatrix as the internal representationFboolis_MatrixExprgQ$@c                	>    \        R RRR7       V P                  4       # )zy
            The private _mat attribute of Matrix is deprecated. Use the
            .flat() method instead.
            z1.9z$deprecated-private-matrix-attributes)deprecated_since_versionactive_deprecations_target)r   flatselfs   &r   _matDenseMatrix._mat*   s%    ! &+'M	
 yy{r   c                	    V P                  VP                  R R4      VP                  R\        4      VP                  RR4      R7      # )methodGE
iszerofunctry_block_diagF)r)   r+   r,   )invgetr   )r%   kwargss   &,r   _eval_inverseDenseMatrix._eval_inverse7   sD    xxvzz(D9#)::lG#D'-zz2BE'J  L 	Lr   c                `    ^RI Hp VP                  V P                  P	                  4       4      # )z4Returns an Immutable version of this Matrix
        )ImmutableDenseMatrix)	immutabler3   _fromrep_repcopy)r%   clss   & r   as_immutableDenseMatrix.as_immutable<   s!     	;||DIINN,--r   c                    \        V 4      # )zReturns a mutable version of this matrix

Examples
========

>>> from sympy import ImmutableMatrix
>>> X = ImmutableMatrix([[1, 2], [3, 4]])
>>> Y = X.as_mutable()
>>> Y[1, 1] = 5 # Can set values in Y
>>> Y
Matrix([
[1, 2],
[3, 5]])
)Matrixr$   s   &r   
as_mutableDenseMatrix.as_mutableB   s     d|r   c                	    \        WR 7      # )	hermitian)r   r%   rA   s   &&r   choleskyDenseMatrix.choleskyS   s    33r   c                	    \        WR 7      # r@   )r   rB   s   &&r   LDLdecompositionDenseMatrix.LDLdecompositionV   s     ;;r   c                	    \        W4      # N)r   r%   rhss   &&r   lower_triangular_solve"DenseMatrix.lower_triangular_solveY       &t11r   c                	    \        W4      # rI   )r   rJ   s   &&r   upper_triangular_solve"DenseMatrix.upper_triangular_solve\   rN   r    NT)__name__
__module____qualname____firstlineno____doc__r   __annotations___op_priority_class_prioritypropertyr&   r0   r9   r=   rC   rF   rL   rP   r   r   r   r   __static_attributes__rR   r   r   r   r      s    T  M4LO
 
L
."4<22 &/%6%6H%6%>%>%<%D%D"%<%D%D""r   r   c                    \        V RR4      '       d   V P                  4       # \        V \        4      '       d   V # \	        V R4      '       dA   V P                  4       p\        VP                  4      ^ 8X  d   \        V4      # \        V 4      # V # )z0Return a matrix as a Matrix, otherwise return x.	is_MatrixF	__array__)
getattrr=   
isinstancer   hasattrr`   lenshaper   r<   )r   as   & r   _force_mutablerg   e   sp    q+u%%||~	Au			K	 	 KKMqww<11:ayHr   c                      ] tR t^stR tRtR# )MutableDenseMatrixc                    ^ RI Hp V P                  4       P                  4        F  w  w  r4pV! V3/ VB WV3&   K  	  R# )zApplies simplify to the elements of a matrix in place.

This is a shortcut for M.applyfunc(lambda x: simplify(x, ratio, measure))

See Also
========

sympy.simplify.simplify.simplify
)simplifyN)sympy.simplify.simplifyrk   todokitems)r%   r/   	_simplifyijelements   &,    r   rk   MutableDenseMatrix.simplifyu   s<     	B#zz|113OFQG"75f5DAJ  4r   rR   N)rT   rU   rV   rW   rk   r]   rR   r   r   ri   ri   s   s    6r   ri   c                f    ^ RI Hp V! \        V 4      V4      p\        V 4       F	  w  rEWSV&   K  	  V# )z]Converts Python list of SymPy expressions to a NumPy array.

See Also
========

matrix2numpy
empty)r   rv   rd   	enumerate)ldtyperv   rf   rp   ss   &&    r   
list2numpyr{      s3     c!feA!! Hr   c                    ^ RI Hp V! V P                  V4      p\        V P                  4       F-  p\        V P
                  4       F  pWV3,          W4V3&   K  	  K/  	  V# )zIConverts SymPy's matrix to a NumPy array.

See Also
========

list2numpy
ru   )r   rv   re   rangerowscols)mry   rv   rf   rp   rq   s   &&    r   matrix2numpyr      sS     agguA166]qvvA1gAdG   Hr   c                   \        V\        4      '       d   V^8  d   \        RP                  V4      4      hW8X  d   \        RP                  W4      4      hW3 FO  p\        V\        4      '       d   V^ 8  g   WC^,
          8  g   K/  \        RP                  V^,
          W4      4      h	  \	        V4      p\        V4      p\        V4      p\        V4      pWWW 3&   WWW3&   WgW3&   V) WqV 3&   V# )a
  Returns a a Givens rotation matrix, a a rotation in the
plane spanned by two coordinates axes.

Explanation
===========

The Givens rotation corresponds to a generalization of rotation
matrices to any number of dimensions, given by:

.. math::
    G(i, j, \theta) =
        \begin{bmatrix}
            1   & \cdots &    0   & \cdots &    0   & \cdots &    0   \\
            \vdots & \ddots & \vdots &        & \vdots &        & \vdots \\
            0   & \cdots &    c   & \cdots &   -s   & \cdots &    0   \\
            \vdots &        & \vdots & \ddots & \vdots &        & \vdots \\
            0   & \cdots &    s   & \cdots &    c   & \cdots &    0   \\
            \vdots &        & \vdots &        & \vdots & \ddots & \vdots \\
            0   & \cdots &    0   & \cdots &    0   & \cdots &    1
        \end{bmatrix}

Where $c = \cos(\theta)$ and $s = \sin(\theta)$ appear at the intersections
``i``\th and ``j``\th rows and columns.

For fixed ``i > j``\, the non-zero elements of a Givens matrix are
given by:

- $g_{kk} = 1$ for $k \ne i,\,j$
- $g_{kk} = c$ for $k = i,\,j$
- $g_{ji} = -g_{ij} = -s$

Parameters
==========

i : int between ``0`` and ``dim - 1``
    Represents first axis
j : int between ``0`` and ``dim - 1``
    Represents second axis
dim : int bigger than 1
    Number of dimensions. Defaults to 3.

Examples
========

>>> from sympy import pi, rot_givens

A counterclockwise rotation of pi/3 (60 degrees) around
the third axis (z-axis):

>>> rot_givens(1, 0, pi/3)
Matrix([
[      1/2, -sqrt(3)/2, 0],
[sqrt(3)/2,        1/2, 0],
[        0,          0, 1]])

If we rotate by pi/2 (90 degrees):

>>> rot_givens(1, 0, pi/2)
Matrix([
[0, -1, 0],
[1,  0, 0],
[0,  0, 1]])

This can be generalized to any number
of dimensions:

>>> rot_givens(1, 0, pi/2, dim=4)
Matrix([
[0, -1, 0, 0],
[1,  0, 0, 0],
[0,  0, 1, 0],
[0,  0, 0, 1]])

References
==========

.. [1] https://en.wikipedia.org/wiki/Givens_rotation

See Also
========

rot_axis1: Returns a rotation matrix for a rotation of theta (in radians)
    about the 1-axis (clockwise around the x axis)
rot_axis2: Returns a rotation matrix for a rotation of theta (in radians)
    about the 2-axis (clockwise around the y axis)
rot_axis3: Returns a rotation matrix for a rotation of theta (in radians)
    about the 3-axis (clockwise around the z axis)
rot_ccw_axis1: Returns a rotation matrix for a rotation of theta (in radians)
    about the 1-axis (counterclockwise around the x axis)
rot_ccw_axis2: Returns a rotation matrix for a rotation of theta (in radians)
    about the 2-axis (counterclockwise around the y axis)
rot_ccw_axis3: Returns a rotation matrix for a rotation of theta (in radians)
    about the 3-axis (counterclockwise around the z axis)
z/dim must be an integer biggen than one, got {}.z'i and j must be different, got ({}, {})z=i and j must be integers between 0 and {}, got i={} and j={}.)rb   int
ValueErrorformatr   r   r	   eye)rp   rq   thetadimijcrz   Ms   &&&&    r   
rot_givensr      s    ~ c337 ##)6#;0 	0 	v ((.q6 	6 f"c""b1f1W 66<fSUA6IK K 
 ENEE
AE
ACAadGadGadGbAdGHr   c                     \        ^ ^V ^R7      # )a  Returns a rotation matrix for a rotation of theta (in radians)
about the 3-axis.

Explanation
===========

For a right-handed coordinate system, this corresponds to a
clockwise rotation around the `z`-axis, given by:

.. math::

    R  = \begin{bmatrix}
             \cos(\theta) & \sin(\theta) & 0 \\
            -\sin(\theta) & \cos(\theta) & 0 \\
                        0 &            0 & 1
        \end{bmatrix}

Examples
========

>>> from sympy import pi, rot_axis3

A rotation of pi/3 (60 degrees):

>>> theta = pi/3
>>> rot_axis3(theta)
Matrix([
[       1/2, sqrt(3)/2, 0],
[-sqrt(3)/2,       1/2, 0],
[         0,         0, 1]])

If we rotate by pi/2 (90 degrees):

>>> rot_axis3(pi/2)
Matrix([
[ 0, 1, 0],
[-1, 0, 0],
[ 0, 0, 1]])

See Also
========

rot_givens: Returns a Givens rotation matrix (generalized rotation for
    any number of dimensions)
rot_ccw_axis3: Returns a rotation matrix for a rotation of theta (in radians)
    about the 3-axis (counterclockwise around the z axis)
rot_axis1: Returns a rotation matrix for a rotation of theta (in radians)
    about the 1-axis (clockwise around the x axis)
rot_axis2: Returns a rotation matrix for a rotation of theta (in radians)
    about the 2-axis (clockwise around the y axis)
r   r   r   s   &r   	rot_axis3r   (      h aEq))r   c                     \        ^^ V ^R7      # )a  Returns a rotation matrix for a rotation of theta (in radians)
about the 2-axis.

Explanation
===========

For a right-handed coordinate system, this corresponds to a
clockwise rotation around the `y`-axis, given by:

.. math::

    R  = \begin{bmatrix}
            \cos(\theta) & 0 & -\sin(\theta) \\
                       0 & 1 &             0 \\
            \sin(\theta) & 0 &  \cos(\theta)
        \end{bmatrix}

Examples
========

>>> from sympy import pi, rot_axis2

A rotation of pi/3 (60 degrees):

>>> theta = pi/3
>>> rot_axis2(theta)
Matrix([
[      1/2, 0, -sqrt(3)/2],
[        0, 1,          0],
[sqrt(3)/2, 0,        1/2]])

If we rotate by pi/2 (90 degrees):

>>> rot_axis2(pi/2)
Matrix([
[0, 0, -1],
[0, 1,  0],
[1, 0,  0]])

See Also
========

rot_givens: Returns a Givens rotation matrix (generalized rotation for
    any number of dimensions)
rot_ccw_axis2: Returns a rotation matrix for a rotation of theta (in radians)
    about the 2-axis (clockwise around the y axis)
rot_axis1: Returns a rotation matrix for a rotation of theta (in radians)
    about the 1-axis (counterclockwise around the x axis)
rot_axis3: Returns a rotation matrix for a rotation of theta (in radians)
    about the 3-axis (counterclockwise around the z axis)
r   r   r   s   &r   	rot_axis2r   _  r   r   c                     \        ^^V ^R7      # )a  Returns a rotation matrix for a rotation of theta (in radians)
about the 1-axis.

Explanation
===========

For a right-handed coordinate system, this corresponds to a
clockwise rotation around the `x`-axis, given by:

.. math::

    R  = \begin{bmatrix}
            1 &             0 &            0 \\
            0 &  \cos(\theta) & \sin(\theta) \\
            0 & -\sin(\theta) & \cos(\theta)
        \end{bmatrix}

Examples
========

>>> from sympy import pi, rot_axis1

A rotation of pi/3 (60 degrees):

>>> theta = pi/3
>>> rot_axis1(theta)
Matrix([
[1,          0,         0],
[0,        1/2, sqrt(3)/2],
[0, -sqrt(3)/2,       1/2]])

If we rotate by pi/2 (90 degrees):

>>> rot_axis1(pi/2)
Matrix([
[1,  0, 0],
[0,  0, 1],
[0, -1, 0]])

See Also
========

rot_givens: Returns a Givens rotation matrix (generalized rotation for
    any number of dimensions)
rot_ccw_axis1: Returns a rotation matrix for a rotation of theta (in radians)
    about the 1-axis (counterclockwise around the x axis)
rot_axis2: Returns a rotation matrix for a rotation of theta (in radians)
    about the 2-axis (clockwise around the y axis)
rot_axis3: Returns a rotation matrix for a rotation of theta (in radians)
    about the 3-axis (clockwise around the z axis)
r   r   r   s   &r   	rot_axis1r     r   r   c                     \        ^^ V ^R7      # )a   Returns a rotation matrix for a rotation of theta (in radians)
about the 3-axis.

Explanation
===========

For a right-handed coordinate system, this corresponds to a
counterclockwise rotation around the `z`-axis, given by:

.. math::

    R  = \begin{bmatrix}
            \cos(\theta) & -\sin(\theta) & 0 \\
            \sin(\theta) &  \cos(\theta) & 0 \\
                       0 &             0 & 1
        \end{bmatrix}

Examples
========

>>> from sympy import pi, rot_ccw_axis3

A rotation of pi/3 (60 degrees):

>>> theta = pi/3
>>> rot_ccw_axis3(theta)
Matrix([
[      1/2, -sqrt(3)/2, 0],
[sqrt(3)/2,        1/2, 0],
[        0,          0, 1]])

If we rotate by pi/2 (90 degrees):

>>> rot_ccw_axis3(pi/2)
Matrix([
[0, -1, 0],
[1,  0, 0],
[0,  0, 1]])

See Also
========

rot_givens: Returns a Givens rotation matrix (generalized rotation for
    any number of dimensions)
rot_axis3: Returns a rotation matrix for a rotation of theta (in radians)
    about the 3-axis (clockwise around the z axis)
rot_ccw_axis1: Returns a rotation matrix for a rotation of theta (in radians)
    about the 1-axis (counterclockwise around the x axis)
rot_ccw_axis2: Returns a rotation matrix for a rotation of theta (in radians)
    about the 2-axis (counterclockwise around the y axis)
r   r   r   s   &r   rot_ccw_axis3r     r   r   c                     \        ^ ^V ^R7      # )a  Returns a rotation matrix for a rotation of theta (in radians)
about the 2-axis.

Explanation
===========

For a right-handed coordinate system, this corresponds to a
counterclockwise rotation around the `y`-axis, given by:

.. math::

    R  = \begin{bmatrix}
             \cos(\theta) & 0 & \sin(\theta) \\
                        0 & 1 &            0 \\
            -\sin(\theta) & 0 & \cos(\theta)
        \end{bmatrix}

Examples
========

>>> from sympy import pi, rot_ccw_axis2

A rotation of pi/3 (60 degrees):

>>> theta = pi/3
>>> rot_ccw_axis2(theta)
Matrix([
[       1/2, 0, sqrt(3)/2],
[         0, 1,         0],
[-sqrt(3)/2, 0,       1/2]])

If we rotate by pi/2 (90 degrees):

>>> rot_ccw_axis2(pi/2)
Matrix([
[ 0,  0,  1],
[ 0,  1,  0],
[-1,  0,  0]])

See Also
========

rot_givens: Returns a Givens rotation matrix (generalized rotation for
    any number of dimensions)
rot_axis2: Returns a rotation matrix for a rotation of theta (in radians)
    about the 2-axis (clockwise around the y axis)
rot_ccw_axis1: Returns a rotation matrix for a rotation of theta (in radians)
    about the 1-axis (counterclockwise around the x axis)
rot_ccw_axis3: Returns a rotation matrix for a rotation of theta (in radians)
    about the 3-axis (counterclockwise around the z axis)
r   r   r   s   &r   rot_ccw_axis2r     r   r   c                     \        ^^V ^R7      # )a   Returns a rotation matrix for a rotation of theta (in radians)
about the 1-axis.

Explanation
===========

For a right-handed coordinate system, this corresponds to a
counterclockwise rotation around the `x`-axis, given by:

.. math::

    R  = \begin{bmatrix}
            1 &            0 &             0 \\
            0 & \cos(\theta) & -\sin(\theta) \\
            0 & \sin(\theta) &  \cos(\theta)
        \end{bmatrix}

Examples
========

>>> from sympy import pi, rot_ccw_axis1

A rotation of pi/3 (60 degrees):

>>> theta = pi/3
>>> rot_ccw_axis1(theta)
Matrix([
[1,         0,          0],
[0,       1/2, -sqrt(3)/2],
[0, sqrt(3)/2,        1/2]])

If we rotate by pi/2 (90 degrees):

>>> rot_ccw_axis1(pi/2)
Matrix([
[1, 0,  0],
[0, 0, -1],
[0, 1,  0]])

See Also
========

rot_givens: Returns a Givens rotation matrix (generalized rotation for
    any number of dimensions)
rot_axis1: Returns a rotation matrix for a rotation of theta (in radians)
    about the 1-axis (clockwise around the x axis)
rot_ccw_axis2: Returns a rotation matrix for a rotation of theta (in radians)
    about the 2-axis (counterclockwise around the y axis)
rot_ccw_axis3: Returns a rotation matrix for a rotation of theta (in radians)
    about the 3-axis (counterclockwise around the z axis)
r   r   r   s   &r   rot_ccw_axis1r   ;  r   r   )modulesc                    ^ RI HpHp V! V\        R7      pV! V4       F5  p\	        V : RRP                  \        \        V4      4      : 23/ VB WV&   K7  	  V# )a  Create a numpy ndarray of symbols (as an object array).

The created symbols are named ``prefix_i1_i2_``...  You should thus provide a
non-empty prefix if you want your symbols to be unique for different output
arrays, as SymPy symbols with identical names are the same object.

Parameters
----------

prefix : string
  A prefix prepended to the name of every symbol.

shape : int or tuple
  Shape of the created array.  If an int, the array is one-dimensional; for
  more than one dimension the shape must be a tuple.

\*\*kwargs : dict
  keyword arguments passed on to Symbol

Examples
========
These doctests require numpy.

>>> from sympy import symarray
>>> symarray('', 3)
[_0 _1 _2]

If you want multiple symarrays to contain distinct symbols, you *must*
provide unique prefixes:

>>> a = symarray('', 3)
>>> b = symarray('', 3)
>>> a[0] == b[0]
True
>>> a = symarray('a', 3)
>>> b = symarray('b', 3)
>>> a[0] == b[0]
False

Creating symarrays with a prefix:

>>> symarray('a', 3)
[a_0 a_1 a_2]

For more than one dimension, the shape must be given as a tuple:

>>> symarray('a', (2, 3))
[[a_0_0 a_0_1 a_0_2]
 [a_1_0 a_1_1 a_1_2]]
>>> symarray('a', (2, 3, 2))
[[[a_0_0_0 a_0_0_1]
  [a_0_1_0 a_0_1_1]
  [a_0_2_0 a_0_2_1]]
<BLANKLINE>
 [[a_1_0_0 a_1_0_1]
  [a_1_1_0 a_1_1_1]
  [a_1_2_0 a_1_2_1]]]

For setting assumptions of the underlying Symbols:

>>> [s.is_real for s in symarray('a', 2, real=True)]
[True, True]
)rv   ndindex)ry   _)r   rv   r   objectr   joinmapstr)prefixre   r/   rv   r   arrindexs   &&,    r   symarrayr   r  sS    B %
V
$CvsxxC/HI &$&
   Jr   Tc                   a a \        \        \        S 4      4      o V'       g	   VV 3R lpMVV 3R lp\        S 4      p\	        WDV4      P                  4       # )a  Given linear difference operator L of order 'k' and homogeneous
equation Ly = 0 we want to compute kernel of L, which is a set
of 'k' sequences: a(n), b(n), ... z(n).

Solutions of L are linearly independent iff their Casoratian,
denoted as C(a, b, ..., z), do not vanish for n = 0.

Casoratian is defined by k x k determinant::

           +  a(n)     b(n)     . . . z(n)     +
           |  a(n+1)   b(n+1)   . . . z(n+1)   |
           |    .         .     .        .     |
           |    .         .       .      .     |
           |    .         .         .    .     |
           +  a(n+k-1) b(n+k-1) . . . z(n+k-1) +

It proves very useful in rsolve_hyper() where it is applied
to a generating set of a recurrence to factor out linearly
dependent solutions and return a basis:

>>> from sympy import Symbol, casoratian, factorial
>>> n = Symbol('n', integer=True)

Exponential and factorial are linearly independent:

>>> casoratian([2**n, factorial(n)], n) != 0
True

c                D   < SV,          P                  SSV ,           4      # rI   subsrp   rq   nseqss   &&r   <lambda>casoratian.<locals>.<lambda>  s    aaQ/r   c                6   < SV,          P                  SV 4      # rI   r   r   s   &&r   r   r     s    aa+r   )listr   r   rd   r<   det)r   r   zerofks   ff&  r   
casoratianr     sA    > GT"#D/+D	A!?  r   c                 .    \         P                  ! V / VB # )zHCreate square identity matrix n x n

See Also
========

diag
zeros
ones
)r<   r   argsr/   s   *,r   r   r     s     ::t&v&&r   strictunpackFc                6    \         P                  ! VRV RV/VB # )a  Returns a matrix with the provided values placed on the
diagonal. If non-square matrices are included, they will
produce a block-diagonal matrix.

Examples
========

This version of diag is a thin wrapper to Matrix.diag that differs
in that it treats all lists like matrices -- even when a single list
is given. If this is not desired, either put a `*` before the list or
set `unpack=True`.

>>> from sympy import diag

>>> diag([1, 2, 3], unpack=True)  # = diag(1,2,3) or diag(*[1,2,3])
Matrix([
[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])

>>> diag([1, 2, 3])  # a column vector
Matrix([
[1],
[2],
[3]])

See Also
========
.matrixbase.MatrixBase.eye
.matrixbase.MatrixBase.diagonal
.matrixbase.MatrixBase.diag
.expressions.blockmatrix.BlockMatrix
r   r   )r<   diag)r   r   valuesr/   s   $$*,r   r   r     s#    D ;;GvGfGGGr   c                2    \         P                  ! V RVRR/ # )a  Apply the Gram-Schmidt process to a set of vectors.

Parameters
==========

vlist : List of Matrix
    Vectors to be orthogonalized for.

orthonormal : Bool, optional
    If true, return an orthonormal basis.

Returns
=======

vlist : List of Matrix
    Orthogonalized vectors

Notes
=====

This routine is mostly duplicate from ``Matrix.orthogonalize``,
except for some difference that this always raises error when
linearly dependent vectors are found, and the keyword ``normalize``
has been named as ``orthonormal`` in this function.

See Also
========

.matrixbase.MatrixBase.orthogonalize

References
==========

.. [1] https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process
	normalize	rankcheckT)ri   orthogonalize)vlistorthonormals   &&r   GramSchmidtr     s+    H ++	%15 r   c                   \        V\        4      '       dQ   ^VP                  9  d   \        R4      hVP                  ^8X  d   VP
                  pVP                  4       ^ ,          p\        V4      '       d    \        V4      pV'       g   \        R4      hM\        R4      h\        V R4      '       g   \        RV ,          4      h\        V4      pWC,           p\        V4      p\        V4       F\  w  rx\        VR4      '       g   \        RV ,          4      h\        V4       F$  p	VP                  W,          4      WgW,           3&   K&  	  K^  	  \        V4       FR  p	\        W4       F@  p
V P                  W,          4      P                  W,          4      WiV,           W,           3&   KB  	  KT  	  \        V4       F+  p	\        V	^,           V4       F  p
WiV
3,          WjV	3&   K  	  K-  	  V# )a~  Compute Hessian matrix for a function f wrt parameters in varlist
which may be given as a sequence or a row/column vector. A list of
constraints may optionally be given.

Examples
========

>>> from sympy import Function, hessian, pprint
>>> from sympy.abc import x, y
>>> f = Function('f')(x, y)
>>> g1 = Function('g')(x, y)
>>> g2 = x**2 + 3*y
>>> pprint(hessian(f, (x, y), [g1, g2]))
[                   d               d            ]
[     0        0    --(g(x, y))     --(g(x, y))  ]
[                   dx              dy           ]
[                                                ]
[     0        0        2*x              3       ]
[                                                ]
[                     2               2          ]
[d                   d               d           ]
[--(g(x, y))  2*x   ---(f(x, y))   -----(f(x, y))]
[dx                   2            dy dx         ]
[                   dx                           ]
[                                                ]
[                     2               2          ]
[d                   d               d           ]
[--(g(x, y))   3   -----(f(x, y))   ---(f(x, y)) ]
[dy                dy dx              2          ]
[                                   dy           ]

References
==========

.. [1] https://en.wikipedia.org/wiki/Hessian_matrix

See Also
========

sympy.matrices.matrixbase.MatrixBase.jacobian
wronskian
z)`varlist` must be a column or row vector.z `len(varlist)` must not be zero.z*Improper variable list in hessian functiondiffz'Function `f` (%s) is not differentiable)rb   r   re   r   r   Ttolistr   rd   r   ra   zerosrw   r}   r   )r   varlistconstraintsr   r   Noutr   grp   rq   s   &&&        r   hessianr   F  s   X ':&&GMM!HII<<1iiG.."1%7L?@@  EFF1fBQFGGKA	A
(C+&q&!!FJKKqAFF7:.C15M 	 ' 1XqA !wz 2 7 7
 CCAqu   1Xq1uaAqD	C1I !  Jr   c                .    \         P                  WR7      # )z
Create a Jordan block:

Examples
========

>>> from sympy import jordan_cell
>>> from sympy.abc import x
>>> jordan_cell(x, 4)
Matrix([
[x, 1, 0, 0],
[0, x, 1, 0],
[0, 0, x, 1],
[0, 0, 0, x]])
)size
eigenvalue)r<   jordan_block)eigenvalr   s   &&r   jordan_cellr     s    " A;;r   c                $    V P                  V4      # )a]  Return the Hadamard product (elementwise product) of A and B

>>> from sympy import Matrix, matrix_multiply_elementwise
>>> A = Matrix([[0, 1, 2], [3, 4, 5]])
>>> B = Matrix([[1, 10, 100], [100, 10, 1]])
>>> matrix_multiply_elementwise(A, B)
Matrix([
[  0, 10, 200],
[300, 40,   5]])

See Also
========

sympy.matrices.matrixbase.MatrixBase.__mul__
)multiply_elementwise)ABs   &&r   matrix_multiply_elementwiser     s      !!!$$r   c                 d    RV9   d   VP                  R4      VR&   \        P                  ! V / VB # )zReturns a matrix of ones with ``rows`` rows and ``cols`` columns;
if ``cols`` is omitted a square matrix will be returned.

See Also
========

zeros
eye
diag
r   r   )popr<   onesr   s   *,r   r   r     s0     f}Cv;;'''r   c                   T;'       g    \         P                  ! V4      pVf   T pV'       d   W8w  d   \        RW3,          4      h\        W,          4      pV^d8w  d3   VP	                  V\        \        V4      V,          ^d,          4      4      p\        W4      p	V'       g.   V F%  p
\        W4      w  rVP                  W#4      WV3&   K'  	  V	# V F3  p
\        W4      w  rW8:  g   K  VP                  W#4      ;WV3&   WV3&   K5  	  V	# )a  Create random matrix with dimensions ``r`` x ``c``. If ``c`` is omitted
the matrix will be square. If ``symmetric`` is True the matrix must be
square. If ``percent`` is less than 100 then only approximately the given
percentage of elements will be non-zero.

The pseudo-random number generator used to generate matrix is chosen in the
following way.

* If ``prng`` is supplied, it will be used as random number generator.
  It should be an instance of ``random.Random``, or at least have
  ``randint`` and ``shuffle`` methods with same signatures.
* if ``prng`` is not supplied but ``seed`` is supplied, then new
  ``random.Random`` with given ``seed`` will be created;
* otherwise, a new ``random.Random`` with default seed will be used.

Examples
========

>>> from sympy import randMatrix
>>> randMatrix(3) # doctest:+SKIP
[25, 45, 27]
[44, 54,  9]
[23, 96, 46]
>>> randMatrix(3, 2) # doctest:+SKIP
[87, 29]
[23, 37]
[90, 26]
>>> randMatrix(3, 3, 0, 2) # doctest:+SKIP
[0, 2, 0]
[2, 0, 1]
[0, 0, 1]
>>> randMatrix(3, symmetric=True) # doctest:+SKIP
[85, 26, 29]
[26, 71, 43]
[29, 43, 57]
>>> A = randMatrix(3, seed=1)
>>> B = randMatrix(3, seed=2)
>>> A == B
False
>>> A == randMatrix(3, seed=1)
True
>>> randMatrix(3, symmetric=True, percent=50) # doctest:+SKIP
[77, 70,  0],
[70,  0,  0],
[ 0,  0, 88]
z4For symmetric matrices, r must equal c, but %i != %i)
randomRandomr   r}   sampler   rd   r   divmodrandint)rr   minmaxseed	symmetricpercentprngr   r   ijkrp   rq   s   &&&&&&&&     r   
randMatrixr     s    b &&6==&DyQVOSTRXXYY	quB#~[[SRC!789aAC#>DAll3,AdG  H C#>DAv$(LL$::Q$!qD' 
 Hr   c                   a a S  Uu. uF  p\        V4      NK  	  upo \        S 4      pV^ 8X  d   \        P                  # \	        WDV V3R l4      pVP                  V4      # u upi )a:  
Compute Wronskian for [] of functions

::

                     | f1       f2        ...   fn      |
                     | f1'      f2'       ...   fn'     |
                     |  .        .        .      .      |
    W(f1, ..., fn) = |  .        .         .     .      |
                     |  .        .          .    .      |
                     |  (n)      (n)            (n)     |
                     | D   (f1) D   (f2)  ...  D   (fn) |

see: https://en.wikipedia.org/wiki/Wronskian

See Also
========

sympy.matrices.matrixbase.MatrixBase.jacobian
hessian
c                6   < SV ,          P                  SV4      # rI   )r   )rp   rq   	functionsvars   &&r   r   wronskian.<locals>.<lambda>3  s    )A,"3"3C";r   )r   rd   r   Oner<   r   )r   r   r)   r   r   Ws   ff&   r   	wronskianr     sV    . &//YY/IIAAvuuq;<A55= 0s   A"c                 d    RV9   d   VP                  R4      VR&   \        P                  ! V / VB # )zReturns a matrix of zeros with ``rows`` rows and ``cols`` columns;
if ``cols`` is omitted a square matrix will be returned.

See Also
========

ones
eye
diag
r   r   )r   r<   r   r   s   *,r   r   r   7  s0     f}Cv<<(((r   )r   )   )r   rS   )F)rR   )Nr   c   NFd   N)bareiss)>
__future__r   r   sympy.core.basicr   sympy.core.singletonr   sympy.core.symbolr   sympy.core.sympifyr   (sympy.functions.elementary.trigonometricr   r	   sympy.utilities.decoratorr
   sympy.utilities.exceptionsr   sympy.utilities.iterablesr   
exceptionsr   decompositionsr   r   
matrixbaser   	repmatrixr   r   solversr   r   __doctest_requires__r   r   rg   ri   MutableMatrixr<   r   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rR   r   r   <module>r     s!   "  " " $ & = 8 @ 1 " 8 " 2 E &y1 
FE) FER6&6 6" , +   ! ,tn4*n4*n4*n4*n4*n4*n J'E (EX(!V'"H "He "HJ&RJZ<(%&($IX>)r   