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.

Dependencies

The basic requirements for this code are reasonably current versions of python and numpy. In particular, python versions 3.8 through 3.11 are routinely tested. Earlier python versions, including 2.7, will work with older versions of this package; they might still work with more recent versions of this package, but even numpy no longer supports python previous to 3.8, so your mileage may vary. Also, any numpy version greater than 1.13.0 should work, but the tests are run on the most recent release at the time of the test.

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

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.

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.2.tar.gz (66.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

numpy_quaternion-2024.0.2-cp312-cp312-win_amd64.whl (71.3 kB view details)

Uploaded CPython 3.12Windows x86-64

numpy_quaternion-2024.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (184.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

numpy_quaternion-2024.0.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (201.5 kB view details)

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

numpy_quaternion-2024.0.2-cp312-cp312-macosx_11_0_arm64.whl (56.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

numpy_quaternion-2024.0.2-cp312-cp312-macosx_10_13_x86_64.whl (62.2 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

numpy_quaternion-2024.0.2-cp312-cp312-macosx_10_13_universal2.whl (87.4 kB view details)

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

numpy_quaternion-2024.0.2-cp311-cp311-win_amd64.whl (71.3 kB view details)

Uploaded CPython 3.11Windows x86-64

numpy_quaternion-2024.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (182.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

numpy_quaternion-2024.0.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199.7 kB view details)

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

numpy_quaternion-2024.0.2-cp311-cp311-macosx_11_0_arm64.whl (56.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

numpy_quaternion-2024.0.2-cp311-cp311-macosx_10_9_x86_64.whl (62.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

numpy_quaternion-2024.0.2-cp311-cp311-macosx_10_9_universal2.whl (87.1 kB view details)

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

numpy_quaternion-2024.0.2-cp310-cp310-win_amd64.whl (71.3 kB view details)

Uploaded CPython 3.10Windows x86-64

numpy_quaternion-2024.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (181.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

numpy_quaternion-2024.0.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (198.5 kB view details)

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

numpy_quaternion-2024.0.2-cp310-cp310-macosx_11_0_arm64.whl (56.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

numpy_quaternion-2024.0.2-cp310-cp310-macosx_10_9_x86_64.whl (62.1 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

numpy_quaternion-2024.0.2-cp310-cp310-macosx_10_9_universal2.whl (87.1 kB view details)

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

File details

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

File metadata

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

File hashes

Hashes for numpy_quaternion-2024.0.2.tar.gz
Algorithm Hash digest
SHA256 4c7b04bc85cad91d433ee60b0407e9c4e2897a1ce09c3f07f0cd3d8a8fde8f9e
MD5 d499ee718c681664507861d89a0786d7
BLAKE2b-256 849ea0374b61a3f48ee63116f65981d9330298bc2a97dfa73d92a72650c78ae3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6a20245418b6eb2d7e4be31f92930ad42a9a01c2c58c73c7bdd506d09d31ea2e
MD5 17884fe9b400457743c2bfe834fb1928
BLAKE2b-256 e90aa352e9ced30417782ae2f20279ecea337a8bd937536522827a164a08beca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1230f6112286fad423305f76d6c7aab2509b3a81a35b2b6dd867017d6d0f5042
MD5 b19dbe2817ddc8c7c61ba601d5b94ee5
BLAKE2b-256 d3a1c02ce90dd3c851d0ee0334b283ec37339adce4ef933539fb14f739c0b246

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.2-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.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9e512181d24236ae54f46217ab918b7772ab3b0fa3a86898c6460a3d35bd820e
MD5 f6c15cf26b48f281fd51b96bc8b54005
BLAKE2b-256 930ccfd35a2e85963d54dd6067680210dead3f271a40ef82d9017329c7d55929

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d92cd49da0279edb0245a887324238dbf7f86f03d4e02539c3232f35aee603c7
MD5 d3ff6c19e76e0ed040599c3b35223272
BLAKE2b-256 430c2b128f46425c9372f10e21b9c4ec82be3cf7d24da206bde468d486e43bbc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 099748017f066a5b74b45464b6bc7838c10df66ce49f03f6e53302019d06836e
MD5 2a1cfc52d44a7046bae563e2721095a5
BLAKE2b-256 609e5fcc1074dbc2a59744a4eae670e26e112351c4ddb7b7992513cb409f493c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 be0a82420740cdc7caa9b8c886c91e2cbbee88cd90e6ffac6ac5424a4c02e442
MD5 03330816aead6c382ba110e2fc561d39
BLAKE2b-256 ce5868b2338d6d881551988490419e0659d8115cf0388edcaf07941da4d8feb5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fdf01aacdfe09ed2ddc6f98907d46f5e4dc4dafd809df7474fffbf6eff7ae9ec
MD5 98021593a0afb681b9c2841778f227f2
BLAKE2b-256 52971a5187c917a101162a35d64233955c77e45d680acf19a9e8e1c6eefa8f9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c865668556a51ceb11d2555d39641c3254030da1eaa7515a7339f2f2b680537d
MD5 e73ff79bf36f7d9645df741653260aa0
BLAKE2b-256 a8488f45885fa0cdf7334eb80e027780017e7ca9aa063ecc7734b26abd34d116

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.2-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.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 701865014a68ad597267a93f98877ab7bef56c49f72188edb15d17be72688fe8
MD5 a999c20590fe5c1569b0dcc15b537744
BLAKE2b-256 67f7c0a9633d7612464f66be2b43c55ccec858c6444f924dd523cc424e1f9b17

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 da89cf545c893538088835d6f509ed11512b8ac756231339038979832aa18b41
MD5 9077f901c874aca3fa868dcf49390889
BLAKE2b-256 7c3a939ddd15f8a495d3358d614169b99aad3d280dc73e23f6a363452d3821d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5c2977f37bb7735dd32255b1ce12cf312ce093f0afe11a9bb4e53eb3ce7f20ea
MD5 efd167e5d3232004abd773770e59c069
BLAKE2b-256 13e67b4cd0ece6f44e03fd7890da409da54121ba3e1dec0fdd645d092ad654ff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 796808235cd5d2d4d2a5cbb42cc22959f34c3db602393738e0eb26fe31f5141a
MD5 4c2b410f11ff1cffd40c03a55c9eefcc
BLAKE2b-256 dbb707379dfc75a3a06e8b67812b5806d63716fb5e079431cae87ac9761aa4e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5746c2c4c47870cd6f32302eccf22d7fc86a52ba3e667702691c05474c373324
MD5 041b5cf32c634c4f25b95fcc826a8096
BLAKE2b-256 521f23e7b2de9eb6804fbc7eb4c556ac06d95b7ea6070950d1c0f25d65e35622

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 00084d2188effbf14c05020b90f0628e957878b82bf63b156ee17656116d846f
MD5 d510da740146511219ef40de7cfc5dcc
BLAKE2b-256 a0f53493f95265d0ef896197311e070493ba570853cb4ff19f7c669ec8965a38

See more details on using hashes here.

File details

Details for the file numpy_quaternion-2024.0.2-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.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3225a68744b3601b81be4ae6ae54e9355a6f0c527136815b2e6d38928c04d559
MD5 765e8230a0c5b4499d5298ed03884b19
BLAKE2b-256 ba059c89afb60a8d65e440b618043bda641f3e98167cc17cd258019bca43fb07

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d5fbaeb0e0ffced905e47215ec06ed7d20bd0db20cc85f1bd7f9735d292ac2d0
MD5 8e537c14d03172bc48303ca46302d3b3
BLAKE2b-256 69952811e15ac9be4e055e0f86411cf529ea6919ef1c4a9aeb583827ca7b24e7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0b95a3203d139d4cfa102b0a31b09f00db8cca597ccaa511f981019189ee5e94
MD5 605972a55a52df7ff0ea666736952c83
BLAKE2b-256 0721be40d96daa8b43ac90c62e54dfc2330ae3cb8fef5bd490c5781b6f999973

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for numpy_quaternion-2024.0.2-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 efd9171f72e260ac169962e0e5b9c6e8d416f6230b3a6b1f149058c2ed2b054d
MD5 40e95d257a9c55e98c63af34141f15b1
BLAKE2b-256 dcecec4a7ba6784a0df962b4edca9e0a28c78f63d70f25312b216812158897ee

See more details on using hashes here.

Supported by

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