Skip to main content

Spatium: a fast spatial math library

Project description

🚀Spatium: a fast python spatial math library

PyPI Version Python Version
Language Python Implementation
Codegen Tests Release Benchmark Charts

⚙️Main features

  • Fast Pure Cython Implementation
    • ~16x faster than pure python(3.12) implementation
  • Spatial Math
    • Vector
      • Operators +, -, *, /, @(dot), ^(cross), |(distance) ...
      • Fast (compile-time) swizzling (e.g. Vec3(1, 2, 3).zxy)
      • Flexible constructor (e.g. Vec3(Vec2(1, 2), 3))
      • Iterating and unpacking (e.g. x, y, z = Vec3(1, 2, 3))
      • Works with other libraries (pygame, numpy, ...)
    • Transform
    • Double-precision floats
  • Pythonic & GLSL-like interface
  • Custom code generation
    • IDE-friendly stubs

Please refer to the wiki for more details

📈Benchmark

Benchmark Results

🔧Implementation details

  • Codegen!
    Custom code generation is used throughout this library.
    Every swizzle pattern and constructor are implemented as individual methods and properties (For performance reasons).
    As a result, code generation is required so that I don't have to maintain 50,000+ lines of code by hand...
    Besides, it also handles vector classes of every dimension and type (e.g. Vec2 Vec3 Vec2i Vec3i) are generated from the same template, so a lot of repetitive code is avoided.
    There's also a stub generator that generates stub files from the cython code generated by codegen.

Credits

  • This library is partially inspired by Godot's math library.

Notes

  • This library was originally named GdMath, as I originally used this to bridge Python and Godot and focus on gamedev.

As development went on, I realized that it has become a versatile spatial math library which is also one of the fastest, I also found it useful in many projects.
Thus, I've decided to rename it to Spatium (since Spatial was taken), before it (possibly) gets used by more people.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spatium-1.5.5.tar.gz (129.6 kB view hashes)

Uploaded Source

Built Distributions

spatium-1.5.5-pp310-pypy310_pp73-win_amd64.whl (513.4 kB view hashes)

Uploaded PyPy Windows x86-64

spatium-1.5.5-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (674.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

spatium-1.5.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (644.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

spatium-1.5.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl (1.4 MB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

spatium-1.5.5-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (528.5 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

spatium-1.5.5-pp39-pypy39_pp73-win_amd64.whl (513.3 kB view hashes)

Uploaded PyPy Windows x86-64

spatium-1.5.5-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (673.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

spatium-1.5.5-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (643.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

spatium-1.5.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl (1.4 MB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

spatium-1.5.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (528.2 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

spatium-1.5.5-cp312-cp312-win_amd64.whl (1.5 MB view hashes)

Uploaded CPython 3.12 Windows x86-64

spatium-1.5.5-cp312-cp312-win32.whl (440.2 kB view hashes)

Uploaded CPython 3.12 Windows x86

spatium-1.5.5-cp312-cp312-musllinux_1_1_x86_64.whl (5.3 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

spatium-1.5.5-cp312-cp312-musllinux_1_1_i686.whl (5.0 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

spatium-1.5.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

spatium-1.5.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (5.0 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

spatium-1.5.5-cp312-cp312-macosx_11_0_arm64.whl (1.6 MB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

spatium-1.5.5-cp312-cp312-macosx_10_9_x86_64.whl (731.3 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

spatium-1.5.5-cp311-cp311-win_amd64.whl (1.5 MB view hashes)

Uploaded CPython 3.11 Windows x86-64

spatium-1.5.5-cp311-cp311-win32.whl (436.1 kB view hashes)

Uploaded CPython 3.11 Windows x86

spatium-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl (5.7 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

spatium-1.5.5-cp311-cp311-musllinux_1_1_i686.whl (5.3 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

spatium-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.7 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

spatium-1.5.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (5.2 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

spatium-1.5.5-cp311-cp311-macosx_11_0_arm64.whl (1.6 MB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

spatium-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl (723.1 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

spatium-1.5.5-cp310-cp310-win_amd64.whl (1.5 MB view hashes)

Uploaded CPython 3.10 Windows x86-64

spatium-1.5.5-cp310-cp310-win32.whl (436.5 kB view hashes)

Uploaded CPython 3.10 Windows x86

spatium-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl (5.7 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

spatium-1.5.5-cp310-cp310-musllinux_1_1_i686.whl (5.2 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

spatium-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.6 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

spatium-1.5.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

spatium-1.5.5-cp310-cp310-macosx_11_0_arm64.whl (1.6 MB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

spatium-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl (722.8 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

spatium-1.5.5-cp39-cp39-win_amd64.whl (1.5 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

spatium-1.5.5-cp39-cp39-win32.whl (437.4 kB view hashes)

Uploaded CPython 3.9 Windows x86

spatium-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl (6.0 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

spatium-1.5.5-cp39-cp39-musllinux_1_1_i686.whl (5.5 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

spatium-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

spatium-1.5.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (5.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

spatium-1.5.5-cp39-cp39-macosx_11_0_arm64.whl (1.6 MB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

spatium-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl (723.0 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

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