Skip to main content

Add a quaternion dtype to NumPy

Project description

Test Status Documentation Status PyPI Version Conda Version MIT License DOI

Quaternions in numpy

This Python module adds a quaternion dtype to NumPy.

The code was originally based on code by Martin Ling (which he wrote with help from Mark Wiebe), but was rewritten with ideas from rational to work with newer python versions (and to fix a few bugs), and greatly expands the applications of quaternions.

See also the pure-python package quaternionic.

Quickstart

conda install -c conda-forge quaternion

or

python -m pip install --upgrade --force-reinstall numpy-quaternion

Optionally add --user after install in the second command if you're not using a python environment — though you should start.

Installation

Assuming you use conda to manage your python installation (which is currently the preferred choice for science and engineering with python), you can install this package simply as

conda install -c conda-forge quaternion

If you prefer to use pip, you can instead do

python -m pip install --upgrade --force-reinstall numpy-quaternion

(See here for a veteran python core contributor's explanation of why you should always use python -m pip instead of just pip or pip3.) The --upgrade --force-reinstall options are not always necessary, but will ensure that pip will update numpy if it has to.

If you refuse to use conda, you might want to install inside your home directory without root privileges. (Conda does this by default anyway.) This is done by adding --user to the above command:

python -m pip install --user --upgrade --force-reinstall numpy-quaternion

Note that pip will attempt to compile the code — which requires a working C compiler.

Finally, there's also the fully manual option of just downloading the code, changing to the code directory, and running

python -m pip install --upgrade --force-reinstall .

This should work regardless of the installation method, as long as you have a compiler hanging around.

Basic usage

The full documentation can be found on Read the Docs, and most functions have docstrings that should explain the relevant points. The following are mostly for the purposes of example.

>>> import numpy as np
>>> import quaternion
>>> np.quaternion(1,0,0,0)
quaternion(1, 0, 0, 0)
>>> q1 = np.quaternion(1,2,3,4)
>>> q2 = np.quaternion(5,6,7,8)
>>> q1 * q2
quaternion(-60, 12, 30, 24)
>>> a = np.array([q1, q2])
>>> a
array([quaternion(1, 2, 3, 4), quaternion(5, 6, 7, 8)], dtype=quaternion)
>>> np.exp(a)
array([quaternion(1.69392, -0.78956, -1.18434, -1.57912),
       quaternion(138.909, -25.6861, -29.9671, -34.2481)], dtype=quaternion)

Note that this package represents a quaternion as a scalar, followed by the x component of the vector part, followed by y, followed by z. These components can be accessed directly:

>>> q1.w, q1.x, q1.y, q1.z
(1.0, 2.0, 3.0, 4.0)

However, this only works on an individual quaternion; for arrays it is better to use "vectorized" operations like as_float_array.

The following ufuncs are implemented (which means they run fast on numpy arrays):

add, subtract, multiply, divide, log, exp, power, negative, conjugate,
copysign, equal, not_equal, less, less_equal, isnan, isinf, isfinite, absolute

Quaternion components are stored as double-precision floating point numbers — floats, in python language, or float64 in more precise numpy language. Numpy arrays with dtype=quaternion can be accessed as arrays of doubles without any (slow, memory-consuming) copying of data; rather, a view of the exact same memory space can be created within a microsecond, regardless of the shape or size of the quaternion array.

Comparison operations follow the same lexicographic ordering as tuples.

The unary tests isnan and isinf return true if they would return true for any individual component; isfinite returns true if it would return true for all components.

Real types may be cast to quaternions, giving quaternions with zero for all three imaginary components. Complex types may also be cast to quaternions, with their single imaginary component becoming the first imaginary component of the quaternion. Quaternions may not be cast to real or complex types.

Several array-conversion functions are also included. For example, to convert an Nx4 array of floats to an N-dimensional array of quaternions, use as_quat_array:

>>> import numpy as np
>>> import quaternion
>>> a = np.random.rand(7, 4)
>>> a
array([[ 0.93138726,  0.46972279,  0.18706385,  0.86605021],
       [ 0.70633523,  0.69982741,  0.93303559,  0.61440879],
       [ 0.79334456,  0.65912598,  0.0711557 ,  0.46622885],
       [ 0.88185987,  0.9391296 ,  0.73670503,  0.27115149],
       [ 0.49176628,  0.56688076,  0.13216632,  0.33309146],
       [ 0.11951624,  0.86804078,  0.77968826,  0.37229404],
       [ 0.33187593,  0.53391165,  0.8577846 ,  0.18336855]])
>>> qs = quaternion.as_quat_array(a)
>>> qs
array([ quaternion(0.931387262880247, 0.469722787598354, 0.187063852060487, 0.866050210100621),
       quaternion(0.706335233363319, 0.69982740767353, 0.933035590130247, 0.614408786768725),
       quaternion(0.793344561317281, 0.659125976566815, 0.0711557025000925, 0.466228847713644),
       quaternion(0.881859869074069, 0.939129602918467, 0.736705031709562, 0.271151494174001),
       quaternion(0.491766284854505, 0.566880763189927, 0.132166320200012, 0.333091463422536),
       quaternion(0.119516238634238, 0.86804077992676, 0.779688263524229, 0.372294043850009),
       quaternion(0.331875925159073, 0.533911652483908, 0.857784598617977, 0.183368547490701)], dtype=quaternion)

[Note that quaternions are printed with full precision, unlike floats, which is why you see extra digits above. But the actual data is identical in the two cases.] To convert an N-dimensional array of quaternions to an Nx4 array of floats, use as_float_array:

>>> b = quaternion.as_float_array(qs)
>>> b
array([[ 0.93138726,  0.46972279,  0.18706385,  0.86605021],
       [ 0.70633523,  0.69982741,  0.93303559,  0.61440879],
       [ 0.79334456,  0.65912598,  0.0711557 ,  0.46622885],
       [ 0.88185987,  0.9391296 ,  0.73670503,  0.27115149],
       [ 0.49176628,  0.56688076,  0.13216632,  0.33309146],
       [ 0.11951624,  0.86804078,  0.77968826,  0.37229404],
       [ 0.33187593,  0.53391165,  0.8577846 ,  0.18336855]])

It is also possible to convert a quaternion to or from a 3x3 array of floats representing a rotation matrix, or an array of N quaternions to or from an Nx3x3 array of floats representing N rotation matrices, using as_rotation_matrix and from_rotation_matrix. Similar conversions are possible for rotation vectors using as_rotation_vector and from_rotation_vector, and for spherical coordinates using as_spherical_coords and from_spherical_coords. Finally, it is possible to derive the Euler angles from a quaternion using as_euler_angles, or create a quaternion from Euler angles using from_euler_angles — though be aware that Euler angles are basically the worst things ever.1 Before you complain about those functions using something other than your favorite conventions, please read this page.

Dependencies

With the standard installation methods, hopefully you won't need to worry about dependencies directly. But in case you do, here's what you need to know.

The basic requirements for this code are reasonably current versions of python and numpy. In particular, python versions 3.10 through 3.12 are routinely tested. Because of its crucial dependence on numpy, this package can only support versions of python that are directly supported by numpy — which limits support to releases from the past few years. Old versions of python will work with older versions of this package, which are still available from PyPI and conda-forge. Some older versions of python may still work with newer versions of this package, but your mileage may vary.

However, certain advanced functions in this package (including squad, mean_rotor_in_intrinsic_metric, integrate_angular_velocity, and related functions) require scipy and can automatically use numba. Scipy is a standard python package for scientific computation, and implements interfaces to C and Fortran codes for optimization (among other things) need for finding mean and optimal rotors. Numba uses LLVM to compile python code to machine code, accelerating many numerical functions by factors of anywhere from 2 to 2000. It is possible to run all the code without numba, but these particular functions can be anywhere from 4 to 400 times slower without it.

Both scipy and numba can be installed with pip or conda. However, because conda is specifically geared toward scientific python, it is generally more robust for these more complicated packages. In fact, the main anaconda package comes with both numba and scipy. If you prefer the smaller download size of miniconda (which comes with minimal extras), you'll also have to run this command:

conda install numpy scipy numba

Bug reports and feature requests

Bug reports and feature requests are entirely welcome (with very few exceptions). The best way to do this is to open an issue on this code's github page. For bug reports, please try to include a minimal working example demonstrating the problem.

Pull requests are also entirely welcome, of course, if you have an idea where the code is going wrong, or have an idea for a new feature that you know how to implement.

This code is routinely tested on recent versions of both python (3.8 though 3.11) and numpy (>=1.13). But the test coverage is not necessarily as complete as it could be, so bugs may certainly be present, especially in the higher-level functions like mean_rotor_....

Acknowledgments

This code is, of course, hosted on github. Because it is an open-source project, the hosting is free, and all the wonderful features of github are available, including free wiki space and web page hosting, pull requests, a nice interface to the git logs, etc. Github user Hannes Ovrén (hovren) pointed out some errors in a previous version of this code and suggested some nice utility functions for rotation matrices, etc. Github user Stijn van Drongelen (rhymoid) contributed some code that makes compilation work with MSVC++. Github user Jon Long (longjon) has provided some elegant contributions to substantially improve several tricky parts of this code. Rebecca Turner (9999years) and Leo Stein (duetosymmetry) did all the work in getting the documentation onto Read the Docs.

Every change in this code is automatically tested on Github Actions. The code is downloaded and installed fresh each time, and then tested, on each of the different supported versions of python, on each of the supported platforms. This ensures that no change I make to the code breaks either installation or any of the features that I have written tests for. Github Actions also automatically builds the pip versions of the code hosted on pypi. Conda-forge also uses Github Actions to build the conda/mamba version hosted on anaconda.org. These are all free services for open-source projects like this one.

The work of creating this code was supported in part by the Sherman Fairchild Foundation and by NSF Grants No. PHY-1306125 and AST-1333129.



1 Euler angles are awful

Euler angles are pretty much the worst things ever and it makes me feel bad even supporting them. Quaternions are faster, more accurate, basically free of singularities, more intuitive, and generally easier to understand. You can work entirely without Euler angles (I certainly do). You absolutely never need them. But if you really can't give them up, they are mildly supported.

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.

Source Distribution

numpy_quaternion-2024.0.3.tar.gz (67.0 kB view details)

Uploaded Source

Built Distributions

numpy_quaternion-2024.0.3-cp312-cp312-win_amd64.whl (71.4 kB view details)

Uploaded CPython 3.12 Windows x86-64

numpy_quaternion-2024.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (184.7 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

numpy_quaternion-2024.0.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (201.6 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

numpy_quaternion-2024.0.3-cp312-cp312-macosx_11_0_arm64.whl (56.3 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

numpy_quaternion-2024.0.3-cp312-cp312-macosx_10_13_x86_64.whl (62.3 kB view details)

Uploaded CPython 3.12 macOS 10.13+ x86-64

numpy_quaternion-2024.0.3-cp312-cp312-macosx_10_13_universal2.whl (87.5 kB view details)

Uploaded CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64)

numpy_quaternion-2024.0.3-cp311-cp311-win_amd64.whl (71.4 kB view details)

Uploaded CPython 3.11 Windows x86-64

numpy_quaternion-2024.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (183.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

numpy_quaternion-2024.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199.8 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

numpy_quaternion-2024.0.3-cp311-cp311-macosx_11_0_arm64.whl (56.1 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

numpy_quaternion-2024.0.3-cp311-cp311-macosx_10_9_x86_64.whl (62.2 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

numpy_quaternion-2024.0.3-cp311-cp311-macosx_10_9_universal2.whl (87.2 kB view details)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

numpy_quaternion-2024.0.3-cp310-cp310-win_amd64.whl (71.4 kB view details)

Uploaded CPython 3.10 Windows x86-64

numpy_quaternion-2024.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (182.0 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

numpy_quaternion-2024.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (198.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

numpy_quaternion-2024.0.3-cp310-cp310-macosx_11_0_arm64.whl (56.1 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

numpy_quaternion-2024.0.3-cp310-cp310-macosx_10_9_x86_64.whl (62.2 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

numpy_quaternion-2024.0.3-cp310-cp310-macosx_10_9_universal2.whl (87.2 kB view details)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file numpy_quaternion-2024.0.3.tar.gz.

File metadata

  • Download URL: numpy_quaternion-2024.0.3.tar.gz
  • Upload date:
  • Size: 67.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.27.2

File hashes

Hashes for numpy_quaternion-2024.0.3.tar.gz
Algorithm Hash digest
SHA256 cf39a8a4506eeda297ca07a508c10c08b3487df851a0e34f070a7bf8fab9f290
MD5 7468f0bb740df561a2cac214a0663ffb
BLAKE2b-256 864c99e11a59dca7a36056e8efffcc22a63f0a578d06a958d3ec82b5e864da6d

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 597b13206ed662170790dab3b9307241dabaa77562969490672f22215e0dae52
MD5 24611f4dac68a3b1976a9a76685e1543
BLAKE2b-256 e6bd51d63ad0e0b28222dbfc00e66b22590e5512eabbec23386058218a5668ed

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 902afbd64560510be5ef563ba253374e2c51bce37245b4702f0017d019d82ba2
MD5 9f6691d4dbba2b49bc561ad5904205b2
BLAKE2b-256 99f8a61306b128edd719236edd652016a50f1402982eff31e3d3cace26067504

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12f39e147c610553ad41815a6cbc5705e29a91f27c2d4ab587e54e3a0e4d5cb7
MD5 c6108c2f1fb085914221d68eb380300c
BLAKE2b-256 b37dfb2e06cefad7260179021fde9103e9c5bbeca87cd92a72d45cb02c4eb300

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bfd64b08027d60a9861db80321fa474f9c20b5b181e61bfb9c60b40132b26257
MD5 12c1d7cd49bf911879bbe5cd4b772dbf
BLAKE2b-256 b6ba8284134240cfd37476eaddde6f58a21680e1ec98dd1636318c8e0ef09875

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f366953f33e4d86c2ec6d9024a8ac2bc924c29c8f1d5f1bc4329d408f9994fd5
MD5 36aee10f02362d83dbc42a2a0a4be275
BLAKE2b-256 deb835291839efff99514a5d7bea131b3ab3b395cd2dc77360eb7d36dc4e5b4c

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 214d1792456f3b5738355f09defa90d7130764e8d4abb4a7a5d0b7b3d59300fb
MD5 066a3d2f3ab3554cd6e5c68b4fce614e
BLAKE2b-256 02632a71727726d70f0decb5889d48bcaa24754745afad6a3b73610a129e47c0

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f476bd8b7c5a802d5aa17d7e68f134cc258dffb78518f457a9df4c5d58bd32e2
MD5 3a40187ff05f8e25adba87a52a79655d
BLAKE2b-256 1a648fee6c250f909cd0fe7e9beac7b1550e0c5df1eb81fc990a69ccfec66959

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0c8d7c2349a1e864955cbed29d12a74fba11c674ed35feb409c267068ffb1581
MD5 476a98c02c2df6fcfbcc1d5dac2e073a
BLAKE2b-256 527d081fbc31a903b0955183d3e02c6055b6ffa39198007956be21551d585f37

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8be77f4bb9f33529d12b87ab18dae9476cbba2f2178979c8be3e969f14823742
MD5 bf5f5123ea6fd8839f678938b2f1311f
BLAKE2b-256 7a9c5a801c2b94ae733f84ae8bcff2d4511935974658e78bb2090df611165cb4

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76a96dca06981e05586350b5771d7588239217c5e984c989a8b3737f6d25861f
MD5 785a9966be09eeb896e7e76d14aef81e
BLAKE2b-256 daa78ab0d8c6baa27092c90f3170e6d5d596a85ead8e81c834e7c48ce6bd1d01

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1d2c56009d6a42c0d466e7c297d1c3afcd620e1a39ecfa267d506b3e88ffc91c
MD5 31146a80a13e7e423ccbe6399ff2fd47
BLAKE2b-256 89d689ebd6764b0d4efd38c34b9f7b388ccb1cd5870872d5b827d3a5b60a6b65

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 beda722c8f0fe629c265ff7b1dd74f888a301bab2cab8aa8b25f4124779d7588
MD5 2ec0afa5e8bcef8a4c8fe8f740fc81d7
BLAKE2b-256 0525e1bc1ce1e6dcc01c51bc6288611fa52a4a093af7cc94af7615d24d2b1d59

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 85c7713f881807a94a7b14a551e7decb1ac0ad31437a9e2983fd00f35f557965
MD5 2140d4ba88777651781e9ef060dcbe58
BLAKE2b-256 aa1f8a9f620c6cfbbca6bcf4a24fd345d041a2f97b0b112c47b3069131f64c13

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 078efa14e302fc5b4a091ae8de2566002fb4af1f0509263a4c6d060c99f51415
MD5 b9d3d56b93fdd1b7215f9b8c3520e37a
BLAKE2b-256 4a165c07446f9b2012a6fb8b2359b32cad49ac3f3e384ce37d8543c1b041c192

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ce23a7555ec8ab1eab6d28487068038565799d4fa61e9bfdab04d919b49ddc74
MD5 c291ea4bf5da699d391bcdd7c0b20320
BLAKE2b-256 a2567bf6619eafac834c252a05cdf502421dc31131c09d894b1d5d8709044bf3

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2969d5ddad2bc33ecce551fae054efa75f3e7daa63c7a157fb6c30a8be01f215
MD5 500bc93929f3793e1bdcd0327c9e9b66
BLAKE2b-256 6e3b885c17cf386d25860557a9d296a3b6393e82dbe4401b80fe649b53198641

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6843c718fc99f89ba5cbc177fde731a03f8769561a9e4390f748cb86bd84a00d
MD5 ededa6a11171bed1eb33b4d12a5eae0e
BLAKE2b-256 6771ac58604e89a36d245a44b160535d207e3d36935566b9c6046b33505c54a6

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.3-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.3-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 5a050861be60f09d9587423de6ae7a43d74ab20e25a83c7bb95dc85bc803744d
MD5 9f92c85439a6d9a70145c3e193455b03
BLAKE2b-256 a982bff4a7c2068eea6822ab52f7713d501cd4d48a2646fde27e84933677db4f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page