Changelog
0.4 - unreleased
New Features
Add type hints to code base
Muted warnings for invalid values in crossratio and other functions
NumPy 1.22+ required
Dropped support for Python 3.5, 3.6 and 3.7
0.3.4 - released (17.4.2022)
New Features
Point.normalized_array and PointCollection.normalized_array will return the original array if normalization is not required
Bug fixes
Avoid introducing numerical errors in join/meet by normalizing arrays only by a power of two (#55)
Simplify code in Segment.contains to avoid integer overflow when normalized_array is an integer array
0.3.3 - released (16.4.2022)
Bug fixes
Avoid division in Segment.contains for better numerical stability (#55)
0.3.2 - released (22.1.2022)
Bug fixes
Removed an f-string that caused an error in Python 3.5
0.3.1 - released (22.1.2022)
Bug fixes
Fixed numerical instability in is_multiple function (#54)
0.3 - released (8.1.2022)
New Features
Removed sympy as dependency
- Added the TensorCollection class and the following subclasses:
ProjectiveCollection
SubspaceCollection
PointCollection
LineCollection
PlaneCollection
TransformationCollection
SegmentCollection
PolygonCollection
QuadricCollection
Faster intersection of lines with polygons & polyhedra by using the new collections
All functions in the operators module support collections in addition to the existing types
Support for TensorCollection objects in tensor diagrams
Implemented intersection of quadrics with a collection of lines
Support for Tensor indexing
Added Tensor.is_zero()
Added construction of a perpendicular plane through a line on another plane
Reformatted source code with black
Added Transformation.from_points_and_conics to map two conics and pairs of three points
Added Triangle.circumcenter
Removed the class AlgebraicCurve and the module utils.polynomial
Added Point.isreal
Support numpy 1.20, 1.21 and numpy 1.22
Run tests on Python 3.9 and Python 3.10
Bug fixes
Fixed a bug in the calculation of points of intersection of two conics (issue #36)
0.2.3 - released (8.7.2020)
New Features
Added Tensor.dtype property
Added parameters to Tensor class to control ndarray creation (e.g. for setting the dtype)
Quadrics can now be normalized using their (pseudo-) determinant to reduce numerical errors
The underlying arrays of tensors are copied less often (controlled by copy parameter)
Implemented addition/subtraction of points to a quadric
Transformations can be applied to any object of type Tensor
More robust algorithm for calculating the intersection of conics
Added a determinant function that is faster for matrices in dimension 2 and 3
Updated dependencies (up to NumPy 1.19 and SymPy 1.6 now supported)
Bug fixes
Fixed error that was raised when integer arrays are normalized in the join/meet function
Fixed issues caused by an array not being converted to a Point object in Line.base_point and Line.directions
Correct handling of special cases in the calculation of the crossing number in Polygon.contains
Trying to raise an arbitrary tensor to power zero now correctly raises an NotImplementedError
Equality of polytopes is determined correctly even if the vertices are in a different order
0.2.2 - released (15.2.2020)
New Features
New adjugate function in utils.math
New algorithms for Segment.contains, Conic.intersect & Conic.from_crossratio
Bug fixes
Fixed an issue with numerical stability when intersecting transformed polytopes (issue #24)
Conic.components uses a better algorithm that should give correct results in all cases
Quadric.intersect no longer throws a ValueError when a 3D line has only a single point of intersection
Line.base_point will now try to always return finite points and Line.direction a point at infinity
Arrays with small component values are handled correctly by the is_multiple function
Fixed an issue with Polygon.contains that caused the direction used in the method to be close to zero (issue #25)
Transformation of line in 3D now works correctly
The functions null_space and orth now use the same threshold values as Matlab for truncating the singular values
0.2.1 - released (3.2.2020)
New Features
Added properties shape, rank and T to Tensor class
Tensor instances can be raised to an arbitrary positive power
Dynamic calculation of center and radius attributes of RegularPolygon instances
Added RegularPolygon.inradius property
Polytope is now a subclass of Tensor
Added functions for generating transforms that perform scaling and reflections
Added Polygon.centroid property
Updated numpy to version 1.18
Bug fixes
Transformations are now applied correctly to quadrics and conics
Fixed bug that made transformation of Cuboid & RegularPolygon fail (issue #23)
Raising transformations to a power (other than 1) is calculated correctly
Tolerance parameters are correctly used in Tensor.__eq__
Scalar multiplication with Points is calculated correctly using normalized_array
Fixed copy method Tensor subclasses
Return real angles instead of angles with complex type
Fixed init method of regular polygons that aren’t centered at the origin
Indices passed to Tensor constructor are validated and negative indices converted
Fixed init method of Cone & Cylinder classes
Deprecations
Deprecated AlgebraicCurve, Subspace.polygons, Plane.polygon, Quadric.polygon and the module utils.polynomial in preparation of removal of sympy as dependency
0.2 - released (15.9.2019)
New Features
New shapes module that implements line segments, polygons and general polytopes
New Sphere class (a subclass of Quadric) that works in any dimension
New classes representing a cone and a cylinder in 3D
Tensor has a new tensor_product method to calculate the tensor product with another tensor
Ellipse class that constructs a conic from center and radius
Added Conic.foci and Conic.polar
Construct a conic from its focal points, using a tangent line or a cross ratio
Faster and more general intersect method for quadrics
Refactored & documented the code for calculation of tensor diagrams
New KroneckerDelta tensor
TensorDiagram calculates results differently, using free indices from front to back
New method TensorDiagram.add_node to add tensors without edge to the diagram
Added Circle.intersection_angle to calculate the angle of intersection of two circles
is_perpendicular now works with two planes
New function is_multiple in utils module
Bug fixes
Plane.perpendicular now also works for points that lie on the plane
Addition/Subtraction of subspaces and points works in more cases
Adding a point at infinity to another point will give a finite point moved in that direction
Globally accessible tolerance parameters to avoid inaccurate calculations (issue #22)
Fixed Transformation.from_points
0.1.2 - released (24.2.2019)
New Features
Optimized performance of Conic, LeviCivitaTensor and TensorDiagram
More operations are now compatible with higher-dimensional objects
New Subspace class that can be used to represent subspaces of any dimension
New repr and copy methods of Tensor
scipy is no longer a dependency
Bug fixes
Rotation in 3D now returns the correct transformation if the axis is not a normalized vector
Line.perpendicular now also works for points tha lie on the line