From 4386d893cd106dd260943f89a28d892292560b3d Mon Sep 17 00:00:00 2001 From: Michael Reed <18372368+chakravala@users.noreply.github.com> Date: Wed, 24 Apr 2024 13:37:57 -0400 Subject: [PATCH] exported alias, fixed quaternion ambiguity --- Project.toml | 2 +- src/algebra.jl | 5 +++-- src/multivectors.jl | 21 +++++++++++---------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Project.toml b/Project.toml index 0e4ffa4..eaa4218 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "Grassmann" uuid = "4df31cd9-4c27-5bea-88d0-e6a7146666d8" authors = ["Michael Reed"] -version = "0.8.17" +version = "0.8.18" [deps] AbstractTensors = "a8e43f4a-99b7-5565-8bf1-0165161caaea" diff --git a/src/algebra.jl b/src/algebra.jl index 84fc228..b13ad49 100644 --- a/src/algebra.jl +++ b/src/algebra.jl @@ -14,7 +14,8 @@ import Base: +, -, *, ^, /, //, inv, <, >, <<, >>, >>> import AbstractTensors: ∧, ∨, ⟑, ⊗, ⊛, ⊙, ⊠, ⨼, ⨽, ⋆, ∗, rem, div, TAG, SUB -import AbstractTensors: plus, minus, times, contraction, equal, wedgedot, veedot, antidot +import AbstractTensors: plus, minus, times, contraction, equal, wedgedot, veedot +import AbstractTensors: pseudosandwich, antisandwich, antidot import Leibniz: diffcheck, diffmode, hasinforigin, hasorigininf, symmetricsplit import Leibniz: loworder, isnull, Field, ExprField const Sym,SymField = :AbstractTensors,Any @@ -239,7 +240,7 @@ end ## sandwich product -export ⊘, sandwich, pseudosandwich +export ⊘, sandwich, pseudosandwich, antisandwich ⊘(x::TensorTerm{V},y::TensorTerm{V}) where V = reverse(y)*x*involute(y) ⊘(x::TensorAlgebra{V},y::TensorAlgebra{V}) where V = reverse(y)*x*involute(y) diff --git a/src/multivectors.jl b/src/multivectors.jl index 81c0a94..82c3050 100644 --- a/src/multivectors.jl +++ b/src/multivectors.jl @@ -1068,17 +1068,18 @@ function multispin(t::PseudoCouple{V,B}) where {V,B} end end -export quaternion, quatvalues -quaternion(sijk::NTuple{4}) = quaternion(Values(sijk)) -quaternion(s,ijk::NTuple{3}) = quaternion(s,ijk...) -quaternion(sijk::Values{4}) = quaternion(Submanifold(3),sijk) +export quaternion, quatvalue, quatvalues +quaternion(sijk::NTuple{4}) = quaternion(Submanifold(3),sijk...) +quaternion(s,ijk::NTuple{3}) = quaternion(Submanifold(3),s,ijk...) +quaternion(sijk::Values{4}) = quaternion(Submanifold(3),sijk...) quaternion(s,ijk::Values{3}) = quaternion(Submanifold(3),s,ijk...) -quaternion(s::T=0,i=zero(T),j=zero(T),k=zero(T)) where T = quaternion(Submanifold(3),Values(s,i,j,k)) -quaternion(V::Submanifold,s::T,i=zero(T),j=zero(T),k=zero(T)) where T = quaternion(V,Values(s,i,-j,k)) -quaternion(V,sijk::Values{4}) = Quaternion{V}(sijk) -quatvalues(q::TensorAlgebra) = quatvalues(Spinor(even(q))) -quatvalues(q::Quaternion{V,T}) where {V,T} = Values{4,T}(q.v[1],q.v[2],-q.v[3],q.v[4]) -quatvalues(q::AntiQuaternion{V,T}) where {V,T} = Values{4,T}(q.v[4],q.v[3],q.v[2],q.v[1]) +quaternion(s::T=0,i=zero(T),j=zero(T),k=zero(T)) where T = quaternion(Submanifold(3),s,i,j,k) +quaternion(V::Submanifold,s::T,i=zero(T),j=zero(T),k=zero(T)) where T = Spinor{V}(Values(s,i,-j,k)) +quaternion(V::Submanifold,sijk::Values{4}) = quaternion(V,sijk...) +quatvalue(q::TensorAlgebra) = quatvalues(Spinor(even(q))) +quatvalue(q::Quaternion{V,T}) where {V,T} = Values{4,T}(q.v[1],q.v[2],-q.v[3],q.v[4]) +quatvalue(q::AntiQuaternion{V,T}) where {V,T} = Values{4,T}(q.v[4],q.v[3],q.v[2],q.v[1]) +const quatvalues = quatvalue @inline value(m::Chain,T=valuetype(m)) = T∉(valuetype(m),Any) ? convert(T,m.v) : m.v @inline value(m::Multivector,T=valuetype(m)) = T∉(valuetype(m),Any) ? convert(T,m.v) : m.v