| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #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)
|