jamtur01's picture
Upload folder using huggingface_hub
9c6594c verified
#sympy.vector.kind
from sympy.core.kind import Kind, _NumberKind, NumberKind
from sympy.core.mul import Mul
class VectorKind(Kind):
"""
Kind for all vector objects in SymPy.
Parameters
==========
element_kind : Kind
Kind of the element. Default is
:class:`sympy.core.kind.NumberKind`,
which means that the vector contains only numbers.
Examples
========
Any instance of Vector class has kind ``VectorKind``:
>>> from sympy.vector.coordsysrect import CoordSys3D
>>> Sys = CoordSys3D('Sys')
>>> Sys.i.kind
VectorKind(NumberKind)
Operations between instances of Vector keep also have the kind ``VectorKind``:
>>> from sympy.core.add import Add
>>> v1 = Sys.i * 2 + Sys.j * 3 + Sys.k * 4
>>> v2 = Sys.i * Sys.x + Sys.j * Sys.y + Sys.k * Sys.z
>>> v1.kind
VectorKind(NumberKind)
>>> v2.kind
VectorKind(NumberKind)
>>> Add(v1, v2).kind
VectorKind(NumberKind)
Subclasses of Vector also have the kind ``VectorKind``, such as
Cross, VectorAdd, VectorMul or VectorZero.
See Also
========
sympy.core.kind.Kind
sympy.matrices.kind.MatrixKind
"""
def __new__(cls, element_kind=NumberKind):
obj = super().__new__(cls, element_kind)
obj.element_kind = element_kind
return obj
def __repr__(self):
return "VectorKind(%s)" % self.element_kind
@Mul._kind_dispatcher.register(_NumberKind, VectorKind)
def num_vec_mul(k1, k2):
"""
The result of a multiplication between a number and a Vector should be of VectorKind.
The element kind is selected by recursive dispatching.
"""
if not isinstance(k2, VectorKind):
k1, k2 = k2, k1
elemk = Mul._kind_dispatcher(k1, k2.element_kind)
return VectorKind(elemk)