Active fork of blmath, a collection math-related utilities developed at Body Labs
Project description
This is an active fork of blmath, a collection math-related utilities developed at Body Labs.
The fork’s goals are moderate:
Keep the library working in current versions of Python and other tools.
Make bug fixes.
Provide API stability and backward compatibility with the upstream version.
Add additional functionality which relates well to what is here.
Respond to community contributions.
It’s used by related forks such as lace.
Installation
Install dependencies
On macOS:
brew install homebrew/science/suite-sparse brew install homebrew/science/opencv --without-numpy
On Linux:
sudo apt-get install python-opencv libsuitesparse-dev
Install the library
pip install metablmath
And import it just like the upstream library:
from blmath.numerics import vx
A collection of math related utilities used by many bits of BodyLabs’ code.
blmath.numerics
Functions for manipulating numeric arrays, numbers, and linear algebra.
The most commonly used of these are directly imported into blmath.numerics.
blmath.numerics.vx is a namespace of common linear algebra operations. These are easily expressed in numpy, but abstracted for readability purposes.
blmath.numerics.coercion contains a validation function as_numeric_array, which produces useful error messages up front on bad inputs, in place of cryptic messages like “cannot broadcast…” later on.
blmath.numerics.operations contains basic numerical operations such as zero_safe_divide.
blmath.numerics.predicates contains functions like isnumeric.
blmath.numerics.rounding contains functions including “round to nearest” and roundedlist.
blmath.numerics.numpy_ext contains numpy utility functions.
blmath.numerics.matlab contains some matlab shortcuts which have no numpy equivalent. At MPI the fitting code was originally written in Matlab before it was ported to Python.
blmath.numerics.linalg contains linear algebra operations.
blmath.numerics.linalg.sparse_cg contains a faster matrix solve optimized for sparse Jacobians.
blmath.numerics.linalg.lchol contains a Cythonized implementation of Cholesky factorization.
blmath.numerics.linalg.isomorphism computes the isomorphism between two bases.
blmath.numerics.linalg.gram_schmidt provides a function for orthonormalization.
blmath.geometry
Geometric operations, transforms, and primitives, in 2D and 3D.
The most commonly used of these are directly imported into blmath.geometry.
blmath.geometry.Box represents an axis-aligned cuboid.
blmath.geometry.Plane represents a 2-D plane in 3-space (not a hyperplane).
blmath.geometry.Polyline represents an unconstrained polygonal chain in 3-space.
blmath.geometry.transform includes code for 3D transforms.
blmath.geometry.transform.CompositeTransform represents a composite transform using homogeneous coordinates. (Thanks avd!)
blmath.geometry.transform.CoordinateManager provides a convenient interface for named reference frames within a stack of transforms and projecting points from one reference frame to another.
blmath.geometry.transform.find_rigid_transform finds a rotation and translation that closely transforms one set of points to another. Its cousin find_rigid_rotation does the same, but only allows rotation, not translation.
blmath.geometry.transform.rotation.rotation_from_up_and_look produces a rotation matrix that gets a mesh into the canonical reference frame from “up” and “look” vectors.
Other modules:
blmath.geometry.apex provides functions for finding the most extreme point.
blmath.geometry.barycentric provides a function for projecting a point to a triangle using barycentric coordinates.
blmath.geometry.convexify provides a function for producing a convex hull from a mostly-planar curve.
blmath.geometry.segment provides functions for working with line segments in n-space.
blmath.value
Class for wrapping and manipulating value/units pairs.
blmath.units
TODO write something here
blmath.console
blmath.console.input_float reads and returns a float from console.
blmath.console.input_value combines units with a float input from console and returns Value object.
Development
pip install -r requirements_dev.txt
pip install -e . # builds the native extension
rake unittest
rake lint
Contribute
Issue Tracker: https://github.com/metabolize/blmath/issues
Source Code: https://github.com/metabolize/blmath
Pull requests welcome!
Support
If you are having issues, please let us know.
Acknowledgements
This collection was developed at Body Labs and includes a combination of code developed at Body Labs, from legacy code and significant new portions by Eric Rachlin, Alex Weiss, and Paul Melnikow. It was extracted from the Body Labs codebase and open-sourced by Alex Weiss.
License
The project is licensed under the two-clause BSD license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.