Changelog¶
Changes in 1.3.x¶
Python 3.8 is officially supported. 1.2.0 was pinned to a bad numba version that was incompatible with 3.8.
A new
clifford.operator
module to contain the previously undocumentedgp()
,op()
, andip()
helpers.A new
clifford.transformations
module for linear transformations.Two new Predefined Algebras,
clifford.dpga
andclifford.dg3c
.Improvements throughout the documentation:
Better overall structure, visible in the docs sidebar.
New tutorials for Conformal Geometric Algebra on visualization and applications.
New tutorial on Working with custom algebras.
New tutorial on Linear transformations.
New
links at the top of each notebook tutorial, to run examples from the browser.
Faster algebra construction.
Cl(3)
is now 100× faster, andCl(6)
is 20× faster. This is achieved by deferring product JIT compilation until the product is used for the first time.Additional testing and assorted improvements for
clifford.tools.g3c
:
closest_point_on_circle_from_line()
has now been implemented roughly following the procedure described in Appendix A of Andreas Aristidou’s PhD thesis.
closest_point_on_line_from_circle()
has now also been added, projecting the result ofclosest_point_on_circle_from_line()
to the line.
clifford.ugly()
now results in less ugly output for Predefined Algebras.
Bugs fixed¶
MultiVector.meet()
no longer produces zero erroneously.
mv[e1 + e12]
now raisesValueError
, rather than being interpreted asmv[e1]
.
ip()
(the inner product) no longer performs the outer product.
Layout.parse_multivector()
now throwsSyntaxError
on invalid input, rather than silenltly producing nonsense.
Layout.parse_multivector()
supports basis vector names which do not start with e.
val_midpoint_between_lines()
now handles the case that the two lines are touching.
val_fit_circle()
now correctly selects the first and second eigenvalue regardless of order.
sphere_beyond_plane()
now tested and correct.
sphere_behind_plane()
now tested and correct.
val_unsign_sphere()
is now jitted, as it should have been from the start.
get_nearest_plane_point()
correctly returns the conformal point rather than the 3D point.
Compatibility notes¶
clifford.grades_present
is deprecated in favor ofMultiVector.grades()
, the latter of which now takes aneps
argument.
del mv[i]
is no longer legal, the equivalentmv[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 alist
ofstr
, rather than a numpy array ofbytes
. The result now matches the construction order, rather than being sorted alphabetically. The order ofLayout.metric()
has been adjusted for consistency.The
imt_prod_mask
,omt_prod_mask
, andlcmt_prod_mask
attributes ofLayout
objects have been removed, as these were an unnecessary intermediate computation that had no need to be public.Some functions in
clifford.tools.g3c
have been renamed:
closest_points_on_circles
has been renamed toiterative_closest_points_on_circles()
.
closest_points_circle_line
has been renamed toiterative_closest_points_circle_line()
.
furthest_points_on_circles
has been renamed toiterative_furthest_points_on_circles()
.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¶
layout.isconformal
,layout.einf
, andlayout.eo
, which were added in 1.0.4, have been removed. The first can now be speltisinstance(layout, clifford.ConformalLayout)
, and the other properties now exist only onConformalLayout
objects.
MultiVector.left_complement()
has been added for consistency withMultiVector.right_complement()
.A new
clifford.tools.classify
module has been added for classifying blades.
Layout
objects print slightly more cleanly in Jupyter notebooks.
Layout.scalar
is now integral rather than floating point
Bugs fixed¶
pow(mv, 0)
gives the right result
nan
is now printed correctly when it appears in multivectors. Previously it was hidden
MultiVector.right_complement()
no longer performs the left complement.
MultiVector.vee()
has been corrected to have the same sign asMultiVector.meet()
Compatibility notes¶
Layout.scalar
is now integral rather than floating point, to matchLayout.pseudoScalar
.
Changes in 1.1.x¶
Restores
layout.gmt
,Layout.omt
,Layout.imt
, andLayout.lcmt
. A few releases ago, these existed but were dense. For memory reasons, they were then removed entirely. They have now been reinstated assparse.COO
matrix objects, which behave much the same as the original dense arrays.
MultiVector
s 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 asnp.float32
.
setup.py
is now configured such thatpip2 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¶
Bugs fixed¶
mv[(i, j)]
would sometimes fail if the indices were not in canonical order.
mv == None
andlayout == None
would crash rather than returnFalse
.
blade.isVersor()
would returnFalse
.
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()
andmeet()
actually work now, but have numerical accuracy problemsadded
clean()
toMultiVector
added
leftInv()
andrightInv()
toMultiVector
moved
pseudoScalar()
andinvPS()
toMultiVector
(so we can derive new classes fromMultiVector
)changed all of the instances of creating a new MultiVector to create an instance of
self.__class__
for proper inheritancefixed bug in laInv()
fixed the massive confusion about how dot() works
added left-contraction
fixed embarrassing bug in gmt generation
added
normal()
andanticommutator()
methodsfixed dumb bug in
elements()
that limited it to 4 dimensions
Acknowledgements¶
Konrad Hinsen fixed a few bugs in the conversion to numpy and adding some unit tests.