All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Package extensions for
LinearAlgebra
andStaticArraysCore
to add methods toLinearAlgebra.dot
,LinearAlgebra.normalize
,StaticArraysCore.similar_type
. - Package extension for Quaternions.jl to allow
for interoperability of the
Quaternion
type withAbstractCliffordNumber
.
- [BREAKING]
CliffordNumbers.normalize
is no longer exported to avoid a name conflict withLinearAlgebra.normalize
. - [BREAKING] Support for Julia 1.8 due to the use of package extensions.
0.1.10 - 2024-11-06
isinf
,isnan
,isreal
,isinteger
,iseven
, andisodd
did not have working methods forAbstractCliffordNumber
arguments.
0.1.9 - 2024-10-28
- A package extension for interoperability with Unitful.jl (only supported on julia 1.9 and up).
It provides support for wedge products for
Quantity
, includingQuantity{<:Real}
andQuantity{<:AbstractCliffordNumber}
(geometric products were already supported). nonzero_grades(::Complex)
is defined and returns0:0
, likenonzero_grades(::Real)
.print(::IO, ::AbstractCliffordNumber)
shows a prettier (but not parseable) representation.
- Indexing and equality checking of
BitIndices
is slightly more efficient.
0.1.8 - 2024-09-23
- Implementations of
flipsign
andcopysign
forBitIndex
. +(::BitIndex)
returns the input.- Faster multiplication methods for
Rational
coefficients.
- Geometric products of
BitIndex
objects are faster. scalar_product
is implemented with a generated function independent ofCliffordNumbers.mul
.normalize
returnsx
ifabs2(x)
is zero.- Indexing of Clifford numbers with
Rational
scalar types is significantly faster due to the use offlipsign
instead of multiplication. KVector
indexing is now faster.
scalar_product
had no method to handle mismatched scalar types.abs
now returns aReal
result: it is equal tosqrt(abs(abs2(x)))
.- Indexing
KVector
does not throw an error if the first entry is1//0
.
0.1.7 - 2024-09-11
Base.literal_pow
definitions forKVector{1}
that produceKVector
results.
- Natural exponential are only optimized for
KVector
types whoseBitIndices
uniformly square to the same value.
OddCliffordNumber
constructors now fail to operate on scalars unless there is exactly one odd element in the algebra.- Broken bullets in
AbstractCliffordNumber
docstring. StackOverflowError
inKVector{0}
exponentiation.- Incorrect natural exponentials in algebras with non-uniform sign signatures.
isequal(x::AbstractCliffordNumber, y::AbstractCliffordNumber)
gives the correct result, no longer equal tox == y
for signed zeros and NaNs.
0.1.6 - 2024-06-27
- Definition of
signature(::BitIndex{Q})
. - Unexported aliases
CliffordNumbers.CliffordScalar{Q,T} === KVector{0,Q,T,1}
,CliffordNumbers.CliffordVector{Q,T,L} === KVector{1,Q,T,L}
, andCliffordNumbers.CliffordBivector{Q,T,L} === KVector{2,Q,T,L}
. @basis_vars
macro that defines basis 1-blade variables for an algebra.
- Split up
src/math.jl
to separate files insrc/math/
.
0.1.5 - 2024-06-10
- Missing exports for
regressive
and∨
(#14 - thanks @ajahraus!) - Actually changed the implementations of
scalar_product
,abs2
, andabs
.
0.1.4 - 2024-06-06
- Linear extension of left and right complements to all Clifford numbers.
- Regressive product (
∨
) definition.
scalar_product
,abs2
, andabs
are much faster: they just extract the scalar portion of the result ofCliffordNumbers.mul(x, y, CliffordNumbers.GradeFilter{:*}())
- Incorrect products for elements of algebras with negative-squaring elements.
- Incorrect complements for elements of algebras with non-positive-definite signatures.
- Incorrect normalization of division of scalars by Clifford numbers.
0.1.3 - 2024-06-04
- Left complement (
left_complement()
) and right complement (right_complement()
) ofBitIndex
objects.
- Incorrect definition of
abs2
for non-positive-definite and degenerate metrics.
0.1.2 - 2024-05-31
Base.float
andBase.big
definitions forAbstractCliffordNumber
types and instances.Base.literal_pow
definitions forAbstractCliffordNumber
instances raised to constant powers, allowing the powers ofKVector
,EvenCliffordNumber
, orOddCliffordNumber
to be inferred as eitherEvenCliffordNumber
orOddCliffordNumber
depending on the exponent.
- Geometric products involving pseudoscalars (
KVector{K,Q}
whereK === dimension(Q)
) now promote to smaller types if possible. CliffordNumbers.mul
iterates through the indices of the smaller argument, which drastically reduces the performance discrepancy when the multiplication arguments are reversed if SIMD vectorization is utilized.
0.1.1 - 2024-05-28
@inline
annotations have been provided for all products.
0.1.0 - 2024-05-17
Initial release of CliffordNumbers.jl