Skip to main content

License Build Status PyPI version Pyversions

fpq

About

This package provides modules for manipulating floating point numbers quantization using NumPy.

Feature

  • Supports multidimensional arrays.

  • Supports encoding and decoding between 64/32/16-bits floating point numbers and N-bits unsigned normalized integers.

  • Supports encoding and decoding between 64/32/16-bits floating point numbers and N-bits signed normalized integers.

  • Supports encoding and decoding between 3d-vectors and N-bits unsigned integers.

  • Supports encoding and decoding between Quaternions and N-bits unsigned integers.

Compatibility

fpq works with Python 3.4 or higher.

Dependencies

  • NumPy

  • Numba

Installation

pip install fpq

Usage

encoding and decoding between 32-bits floating point numbers and 5-bits unsigned normalized integers.

>>> import numpy as np
>>> from fpq.fp import *
>>> fp = np.array([0., 0.25, 1.], dtype=np.float32)
>>> enc = encode_fp_to_std_unorm(fp, dtype=np.uint8, nbits=5)
>>> enc
array([ 0,  8, 31], dtype=uint8)
>>> dec = decode_std_unorm_to_fp(enc, dtype=np.float32, nbits=5)
>>> dec
array([0.       , 0.2580645, 1.       ], dtype=float32)

encoding and decoding between 32-bits floating point numbers and 5-bits signed normalized integers.

>>> import numpy as np
>>> from fpq.fp import *
>>> fp = np.array([-1., -0.25, -0., 0., 0.25, 1.], dtype=np.float32)
>>> enc = encode_fp_to_std_snorm(fp, dtype=np.uint8, nbits=5)
>>> enc
array([31,  9,  1,  0,  8, 30], dtype=uint8)
>>> dec = decode_std_snorm_to_fp(enc, dtype=np.float32, nbits=5)
>>> dec
array([-1.        , -0.26666668, -0.        ,  0.        ,  0.26666668,
        1.        ], dtype=float32)
>>> enc = encode_fp_to_ogl_snorm(fp, dtype=np.uint8, nbits=5)
>>> enc
array([17, 28,  0,  0,  4, 15], dtype=uint8)
>>> dec = decode_ogl_snorm_to_fp(enc, dtype=np.float32, nbits=5)
>>> dec
array([-1.        , -0.26666668,  0.        ,  0.        ,  0.26666668,
        1.        ], dtype=float32)

encoding and decoding between 3d-vectors and 64-bits(2:20:20:22) unsigned integers.

>>> import math
>>> import random
>>> import numpy as np
>>> from fpq.vector import *
>>> v = np.array([vec_random(norm=100.) for _ in range(3)], dtype=np.float64)
>>> v
array([[-54.70386501, -22.45578546, -52.18237577],
       [-85.46791152,  -5.69032986,   1.21334561],
       [ 16.02886205,   1.94634654, -30.35219431]])
>>> enc = encode_vec_to_uint(v, dtype=np.uint64, nbits=20)
>>> enc
array([ 1313110064653969262,   306332797892602581, 11373476070061802081],
      dtype=uint64)
>>> dec = decode_uint_to_vec(enc, dtype=np.float64, nbits=20)
>>> dec
array([[-54.69957531, -22.45404536, -52.17828412],
       [-85.4662517 ,  -5.69027392,   1.21334561],
       [ 16.02845595,   1.94632843, -30.3514349 ]])

encoding and decoding between Quaternions and 64-bits(2:20:20:20) unsigned integers.

>>> import numpy as np
>>> from fpq.quaternion import *
>>> q = np.array([quat_random() for _ in range(3)], dtype=np.float64)
>>> q
array([[ 0.25679071, -0.15512517,  0.88804262,  0.34838917],
       [ 0.71399177,  0.05729705, -0.69728753, -0.02688697],
       [-0.66527338, -0.62596543, -0.40672262, -0.01246296]])
>>> enc = encode_quat_to_uint(q, dtype=np.uint64)
>>> enc
array([2724532880236077588,   93422189206870975, 1020620101889574962],
      dtype=uint64)
>>> dec = decode_uint_to_quat(enc, dtype=np.float64)
>>> dec
array([[ 0.25679011, -0.15512497,  0.88804308,  0.34838854],
       [ 0.71399243,  0.0572969 , -0.69728688, -0.02688637],
       [ 0.66527395,  0.62596484,  0.40672258,  0.01246335]])

Here are a few examples.

Documentation

For users, docs are now available at https://hasenpfote.github.io/fpq/.

License

This software is released under the MIT License, see LICENSE.

Metadata

Release files for fpq 0.12.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fpq 0.12.0
File Size Uploaded
fpq-0.12.0.tar.gz 280.7 kB Details

Release files / fpq-0.12.0.tar.gz

Download URL fpq-0.12.0.tar.gz
Size 280.7 kB
Tags Source
SHA-256 checksum
How to use checksums
fa8b83498e07221757cd9fd5120dd30ff2928b8a114454f9665db7ca160b0ca8
BLAKE2b-256 checksum
How to use checksums
d4a1991561d0ed3c6d0e920f96fc600d0703a2f9246e6fb294f1294c50da5ee0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.55.1 CPython/3.8.3

Release history Release notifications | RSS feed

This release

0.12.0 This release

1 release file

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page