clifford.MultiVector¶
-
class
clifford.
MultiVector
(layout, value=None, string=None, *, dtype: numpy.dtype = <class 'numpy.float64'>)[source]¶ An element of the algebra
- Parameters
layout (instance of
clifford.Layout
) – The layout of the algebravalue (sequence of length
layout.gaDims
) – The coefficients of the base bladesdtype (numpy.dtype) –
The datatype to use for the multivector, if no value was passed.
New in version 1.1.0.
Notes
The following operators are overloaded:
A * B
: geometric productA ^ B
: outer productA | B
: inner productA << B
: left contraction~M
: reversionM(N)
: grade or subspace projectionM[N]
: blade projection
-
vee
(other) → clifford._multivector.MultiVector[source]¶ Vee product \(A \vee B\).
This is often defined as:
\[\begin{split}(A \vee B)^* &= A^* \wedge B^* \\ \implies A \vee B &= (A^* \wedge B^*)^{-*}\end{split}\]This is very similar to the
meet()
function, but always uses the dual in the full space .Internally, this is actually implemented using the complement functions instead, as these work in degenerate metrics like PGA too, and are equivalent but faster in other metrics.
-
__mul__
(other) → clifford._multivector.MultiVector[source]¶ self * other
, the geometric product \(MN\)
-
__xor__
(other) → clifford._multivector.MultiVector[source]¶ self ^ other
, the Outer product \(M \wedge N\)
-
__or__
(other) → clifford._multivector.MultiVector[source]¶ self | other
, the inner product \(M \cdot N\)
-
as_array
() → numpy.ndarray[source]¶
-
mag2
() → numbers.Number[source]¶ Magnitude (modulus) squared, \({|M|}^2\)
Note in mixed signature spaces this may be negative
-
adjoint
() → clifford._multivector.MultiVector[source]¶ Adjoint / reversion, \(\tilde M\)
Aliased as
~M
to reflect \(\tilde M\), one of several conflicting notations.Note that
~(N * M) == ~M * ~N
.
-
__invert__
() → clifford._multivector.MultiVector¶ Adjoint / reversion, \(\tilde M\)
Aliased as
~M
to reflect \(\tilde M\), one of several conflicting notations.Note that
~(N * M) == ~M * ~N
.
-
__getitem__
(key: Union[MultiVector, tuple, int]) → numbers.Number[source]¶ value = self[key]
.If key is a blade tuple (e.g.
(0, 1)
or(1, 3)
), or a blade, (e.g.e12
), then return the (real) value of that blade’s coefficient. Otherwise, treat key as an index into the list of coefficients.
-
__call__
(other, *others) → clifford._multivector.MultiVector[source]¶ Return a new multi-vector projected onto a grade or another MultiVector
M(g1, ... gn)
gives \(\left<M\right>_{g1} + \cdots + \left<M\right>_{gn}\)M(N)
callsproject()
asN.project(M)
.Examples
>>> from clifford.g2 import * >>> M = 1 + 2*e1 + 3*e12 >>> M(0) 1 >>> M(0, 2) 1 + (3^e12)
-
clean
(eps=None) → clifford._multivector.MultiVector[source]¶ Sets coefficients whose absolute value is < eps to exactly 0.
eps defaults to the current value of the global _settings._eps.
-
round
(eps=None) → clifford._multivector.MultiVector[source]¶ Rounds all coefficients according to Python’s rounding rules.
eps defaults to the current value of the global _settings._eps.
-
lc
(other) → clifford._multivector.MultiVector[source]¶ The left-contraction of two multivectors, \(M\rfloor N\)
-
property
pseudoScalar
¶ Returns a MultiVector that is the pseudoscalar of this space.
-
property
I
¶ Returns a MultiVector that is the pseudoscalar of this space.
-
invPS
() → clifford._multivector.MultiVector[source]¶ Returns the inverse of the pseudoscalar of the algebra.
-
isVersor
() → bool[source]¶ Returns true if multivector is a versor. From Leo Dorsts GA for computer science section 21.5, definition from 7.6.4
-
grades
(eps=None) → Set[int][source]¶ Return the grades contained in the multivector.
Changed in version 1.1.0: Now returns a set instead of a list
Changed in version 1.3.0: Accepts an eps argument
-
property
blades_list
¶ ordered list of blades present in this MV
-
normal
() → clifford._multivector.MultiVector[source]¶ Return the (mostly) normalized multivector.
The _mostly_ comes from the fact that some multivectors have a negative squared-magnitude. So, without introducing formally imaginary numbers, we can only fix the normalized multivector’s magnitude to +-1.
\(\frac{M}{|M|}\) up to a sign
-
leftLaInv
() → clifford._multivector.MultiVector[source]¶ Return left-inverse using a computational linear algebra method proposed by Christian Perwass.
-
normalInv
(check=True) → clifford._multivector.MultiVector[source]¶ The inverse of itself if \(M \tilde M = |M|^2\).
\[M^{-1} = \tilde M / (M \tilde M)\]- Parameters
check (bool) – When true, the default, validate that it is appropriate to use this method of inversion.
-
leftInv
() → clifford._multivector.MultiVector¶ Return left-inverse using a computational linear algebra method proposed by Christian Perwass.
-
rightInv
() → clifford._multivector.MultiVector¶ Return left-inverse using a computational linear algebra method proposed by Christian Perwass.
-
dual
(I=None) → clifford._multivector.MultiVector[source]¶ The dual of the multivector against the given subspace I, \(\tilde M = MI^{-1}\)
I defaults to the pseudoscalar.
-
commutator
(other) → clifford._multivector.MultiVector[source]¶ The commutator product of two multivectors.
\([M, N] = M \times N = (MN + NM)/2\)
-
x
(other) → clifford._multivector.MultiVector¶ The commutator product of two multivectors.
\([M, N] = M \times N = (MN + NM)/2\)
-
anticommutator
(other) → clifford._multivector.MultiVector[source]¶ The anti-commutator product of two multivectors, \((MN + NM)/2\)
-
gradeInvol
() → clifford._multivector.MultiVector[source]¶ The grade involution of the multivector.
\[M^* = \sum_{i=0}^{\text{dims}} {(-1)^i \left<M\right>_i}\]
-
property
even
¶ Even part of this multivector
defined as
M + M.gradInvol()
-
property
odd
¶ Odd part of this mulitvector
defined as
M +- M.gradInvol()
-
conjugate
() → clifford._multivector.MultiVector[source]¶ The Clifford conjugate (reversion and grade involution).
\(M^*\) =
(~M).gradeInvol()
-
project
(other) → clifford._multivector.MultiVector[source]¶ Projects the multivector onto the subspace represented by this blade.
\(P_A(M) = (M \rfloor A) A^{-1}\)
-
factorise
() → Tuple[List[clifford._multivector.MultiVector], numbers.Number][source]¶ Factorises a blade into basis vectors and an overall scale.
Uses Leo Dorsts algorithm from 21.6 of GA for Computer Science
-
join
(other) → clifford._multivector.MultiVector[source]¶ The join of two blades, \(J = A \cup B\)
Similar to the wedge, \(W = A \wedge B\), but without decaying to 0 for blades which share a vector.
-
meet
(other, subspace=None) → clifford._multivector.MultiVector[source]¶ The meet of two blades, \(A \cap B\).
Computation is done with respect to a subspace that defaults to the
join()
if none is given.Similar to the
vee()
, \(V = A \vee B\), but without decaying to 0 for blades lying in the same subspace.