Changes in 1.3.x

Bugs fixed

Compatibility notes

  • clifford.grades_present is deprecated in favor of MultiVector.grades(), the latter of which now takes an eps argument.

  • del mv[i] is no longer legal, the equivalent mv[i] = 0 should be used instead.

  • Layout.dict_to_multivector has been removed. It was accidentally broken in 1.0.5, so there is little point deprecating it.

  • Layout.basis_names() now returns a list of str, rather than a numpy array of bytes. The result now matches the construction order, rather than being sorted alphabetically. The order of Layout.metric() has been adjusted for consistency.

  • The imt_prod_mask, omt_prod_mask, and lcmt_prod_mask attributes of Layout objects have been removed, as these were an unnecessary intermediate computation that had no need to be public.

  • Some functions in have been renamed:

  • This will be the last release to support numba versions below 0.49.0.

  • While this release is compatible with numba version 0.49.0, it is recommended to use 0.48.0 which does not emit as many warnings. See the Installation instructions for how to follow this guidance.

Changes in 1.2.x

Bugs fixed

Compatibility notes

Changes in 1.1.x

  • Restores layout.gmt, Layout.omt, Layout.imt, and Layout.lcmt. A few releases ago, these existed but were dense. For memory reasons, they were then removed entirely. They have now been reinstated as sparse.COO matrix objects, which behave much the same as the original dense arrays.

  • MultiVectors preserve their data type in addition, subtraction, and products. This means that integers remain integers until combined with floats. Note that this means in principle integer overflow is possible, so working with floats is still recommended. This also adds support for floating point types of other precision, such as np.float32.

  • is now configured such that pip2 install clifford will not attempt to download this version, since it does not work at all on python 2.

  • Documentation now includes examples of pyganja visualizations.

Compatibility notes

  • Layout.blades() now includes the scalar 1, as do other similar functions.

  • MultiVector.grades() now returns a set not a list. This means code like mv.grades() == [0] will need to change to mv.grades() == {0}, or to work both before and after this change, set(mv.grades()) == {0}.

Bugs fixed

  • mv[(i, j)] would sometimes fail if the indices were not in canonical order.

  • mv == None and layout == None would crash rather than return False.

  • blade.isVersor() would return False.

  • layout.blades_of_grade(0) would not return the list it claimed to return.

Internal changes

  • Switch to pytest for testing.

  • Enable code coverage.

  • Split into smaller files.

  • Remove python 2 compatibility code, which already no longer worked.

Changes 0.6-0.7

  • Added a real license.

  • Convert to NumPy instead of Numeric.

Changes 0.5-0.6

  • join() and meet() actually work now, but have numerical accuracy problems

  • added clean() to MultiVector

  • added leftInv() and rightInv() to MultiVector

  • moved pseudoScalar() and invPS() to MultiVector (so we can derive new classes from MultiVector)

  • changed all of the instances of creating a new MultiVector to create an instance of self.__class__ for proper inheritance

  • fixed bug in laInv()

  • fixed the massive confusion about how dot() works

  • added left-contraction

  • fixed embarrassing bug in gmt generation

  • added normal() and anticommutator() methods

  • fixed dumb bug in elements() that limited it to 4 dimensions


Konrad Hinsen fixed a few bugs in the conversion to numpy and adding some unit tests.