A python library written entirely in C for Geometric Algebras to deal with sparse multivector arrays
Project description
A python library to do computations on compiled C code using sparse representation of multivector arrays.
Installation
Building and installing from source
cd gasparse pip install .
For usage of this package go to examples
To understand about compatibility between geometric algebras see compatibility
An overview of the overloaded operators for geometric algebras is presented in Table of Operators
Why this package?
gasparse is a Geometric Algebra (GA) library which combines low level code evaluation with the python C API to deploy very efficient operations on multivector arrays, operations such that are easily expressed using the python syntax.
This package implements Geometric Algebras. Implements operations between multivector arrays. The fundamental principle behind this package is the use of overloaded operators that call optimized C functions on multivector arrays. The entire algebras are generated by computing the signs and bitmaps maps (the cayley table) for the binary operations. On calling gasparse.GA(p,q,r) the specified algebra \(\mathcal{G}_{p,q,r}\) is generated.
There are three alternatives for dealing with Geometric Algebra kingdon, Clifford and numba they are implemented fully in python. Unlike this package they can implement symbolic computations. Because they are lazy or something, they use numba or JIT compilers and symbolic computations to do the heavy lifting for them.
- List of some of the disadvantages of the packages kingdon, Clifford and numba:
Overhead. Because generating code is expensive. Because JIT compiling is also expensive.
Code cannot be optimized further (limited by the JIT compilers, JIT compiling only gets you so far…)
Compare my approach with theirs… (show when my approach is better/worse, benchmarking)
Our approach however is able to compute the entire cayley table for big algebras very efficiently, reducing the single overhead that usually condemns code generation. Our approach leverages the relationship between subalgebras to very efficiently compute signs for the cayley table. Having this option makes the use of bigger geometric algebras more appealing. For this purpose we wrote specialized software that computes operations for this type of multivectors. See Large Algebras to take real advantage of the different available computation modes.
- The key features of this package are
Do not need to optimize code symbolically since operations are implemented in a low level language.
Leverage sparseness of the multivectors.
Do not need to use numba or other JIT compilers to speed-up numerical computations.
Numerical computations on multivector arrays are computed in compiled C code.
Multiple multivector types for which operations can be dispatched the most efficiently way possible.
There is compatibility between geometric algebras (can do computations between multivectors of different algebras)
Very fast computation of cayley tables.
Can efficiently deal with big geometric algebras without big overhead.
Can easily scale for other types of data structures (multivector type).
In futures iterations improve performance by leveraging knowlegde of the C language. (vector calls, assembly)
Another cool feature of this package is that for someone who is already familiar with programming with kingdon Clifford and numba is going to easily adapt to this package’s “syntax”, since most of the python operators are similar.
Examples
A simple example
Operations between multivector arrays are dispatched to compiled C code
>>> import gasparse
>>> vga = gasparse.GA(3) # Intialize a 3D vanilla geometric algebra
>>> x = vga.mvarray([1,2,3],grades=1)
>>> y = vga.mvarray([4,5,6],grades=1)
>>> print(x*y) # The product is executed in low level C code
32 + -3*e12 + -6*e13 + -3*e23
Creating geometric algebras:
import gasparse
vga = gasparse.GA(3)
cga = gasparse.GA(4,1)
cga = gasparse.GA(metric=[-1,1,1,1,1])
ga = gasparse.GA(q=3,r=4)
Creating multivector arrays:
import gasparse
vga = gasparse.GA(3)
locals().update(vga.basis()) # Update the global variables e, e1, e2, e3, e12, e13, e23, e123.
values = [[0.1,1,2,3],[0.4,4,5,6]]
x = vga.mvarray(values,grades=[0,1])
x = vga.mvarray(values,basis=['e1','e3','e123','e12'])
x = vga.mvarray([1,2,3,4,5,6,7,8]) # Consider all basis elements
x = vga.mvarray(values,basis=[1, e2, e123, e23]) # Use the variables to create the multivector
Note that for the last line the basis can be any list of gasparse.mvarray with the restriction that the multivector array must be 0-dimensional.
Using numpy to generate random multivector arrays
We can convert between numpy arrays to multivector arrays and vice versa by using lists as intermidiate data structures. To show an example where we convert a numpy array to a multivector array we generate a random numpy array and then convert it back to a multivector array. The user has to make sure that the innermost dimension has size compatible with the specified grade in ga.mvarray. To get the sizes of the grades the user can use ga.size(grades), as is exemplified in the script bellow. The following script generates 5 random multivectors of grade zero and two of the three dimensional vanilla geometric algebra.
>>> import gasparse
>>> import numpy as np
>>> ga = gasparse.GA(3)
>>> arr = np.random.rand(5,ga.size(1,2)) # innermost dimension must be the the size of grades 1 and 2
>>> print(arr)
[[0.90962674 0.84695676 0.62962863 0.69754318 0.32404308 0.66473111]
[0.66384851 0.74067395 0.62313971 0.40263883 0.85645313 0.06053186]
[0.62515404 0.33892925 0.92988035 0.26066636 0.51058016 0.52560483]
[0.71055042 0.68262854 0.40054357 0.62849844 0.56987662 0.60513613]
[0.5360391 0.88132078 0.55923661 0.45492674 0.67648109 0.52545563]]
>>> x = ga.mvarray(arr.tolist(),grades=[1,2]) # only accepts lists as input
>>> print(x)
[[0.90962674*e1 + 0.84695676*e2 + 0.62962863*e12 + 0.69754318*e3 + 0.32404308*e13 + 0.66473111*e23],
[0.66384851*e1 + 0.74067395*e2 + 0.62313971*e12 + 0.40263883*e3 + 0.85645313*e13 + 0.060531857*e23],
[0.62515404*e1 + 0.33892925*e2 + 0.92988035*e12 + 0.26066636*e3 + 0.51058016*e13 + 0.52560483*e23],
[0.71055042*e1 + 0.68262854*e2 + 0.40054357*e12 + 0.62849844*e3 + 0.56987662*e13 + 0.60513613*e23],
[0.5360391*e1 + 0.88132078*e2 + 0.55923661*e12 + 0.45492674*e3 + 0.67648109*e13 + 0.52545563*e23]]
Note that in the above example the basis elements of the multivectors are ordered by bitmaps. In the context of generating random multivectors this is irrelevant. But in other situations it may not be helpfull to have this mapping between lists/numpy arrays and multivector arrays as such we advise to either separate the lists into values of grade one and values of grade two.
import gasparse
import numpy as np
ga = gasparse.GA(3)
arr1 = np.random.rand(5,ga.size(1))
arr2 = np.random.rand(5,ga.size(2))
x = ga.mvarray(arr1.tolist(),grades=1) + ga.mvarray(arr1.tolist(),grades=2)
or using ga.basis()
import gasparse
import numpy as np
ga = gasparse.GA(3)
arr = np.random.rand(5,ga.size(1,2))
basis1 = list(ga.basis(grades=1).values())
basis2 = list(ga.basis(grades=2).values())
x = ga.mvarray(arr.tolist(),basis=basis1+basis2)
Converting gasparse.mvarray to lists
To get a list with the values of the multivectors use the function x.tolist(grades) where grades can be an integer or a list of integers <=p+q+r. If no arguments are given then all grades are considered. Attention: If multivectors have values in grades that are ommited in the arguments then information will be lost. Example of getting lists
>>> import gasparse
>>> ga = gasparse.GA(3)
>>> x = ga.mvarray([[1,1,2,3],[1,4,5,6]],grades=[0,2])
>>> print(x)
[[1 + 1*e12 + 2*e13 + 3*e23],
[1 + 4*e12 + 5*e13 + 6*e23]]
>>> values,basis = x.tolist(0,2) # returns only grades zero and two
>>> values,basis = x.tolist([0,2]) # returns only grades zero and two
>>> print(values,basis,sep='\n')
[[1.0, 1.0, 2.0, 3.0], [1.0, 4.0, 5.0, 6.0]]
[1, 1*e12, 1*e13, 1*e23]
>>> values,basis = x.tolist() # returns a list for all grades
>>> print(values,basis,sep='\n')
[[1.0, 1.0, 2.0, 3.0], [1.0, 4.0, 5.0, 6.0]]
[1, 1*e12, 1*e13, 1*e23]
Grade projections to the scalar grade
When multivectors are grade projected to the scalar grade (grade zero) the resulting multivector is going to be of type 'scalar'. This enables us to dispatch operations that are way more efficient e.g.
>>> import gasparse
>>> from gasparse import mvarray as mv
>>> ga = gasparse.GA(3)
>>> x = ga.mvarray([[1,1,2,3],[1,4,5,6]],grades=[0,1])
>>> y = x/mv.sqrt(abs((x*~x)(0))) # normalize the mvarray
>>> y = ~x/(x*~x)(0) # Take the inverse of the mvarray
>>> norm_sq = (x*~x)(0) # Compute the norm square of the mvarray
>>> print(norm_sq.type())
GA(3).mvarray.scalar
>>> print(norm_sq.tolist(0)[0]) # print the values as a list
[[15.0], [78.0]]
Generating Large Geometric Algebras
For large geometric algebras we recomend the user to chose the computation mode 'large'. This computation mode disable the computation of bitmaps (this is done online) and only generate the cayley table for the geometric product, the other products use bitmap comparison to discard certain products. Another reason to use the 'large' computation mode is that computing cayley tables for big algebras while using the default computation mode ('generic') will result in the process to be killed.
>>> import gasparse
>>> import timeit
>>> timeit.timeit(lambda: gasparse.GA(10,compute_mode='large'), number=5)/5
0.001923231399996439
>>> timeit.timeit(lambda: gasparse.GA(10), number=5)/5
0.03866826760004187
>>> timeit.timeit(lambda: gasparse.GA(12,compute_mode='large'), number=5)/5
0.03538742340006138
>>> timeit.timeit(lambda: gasparse.GA(12), number=5)/5
0.47024899120006014
>>> timeit.timeit(lambda: gasparse.GA(15,compute_mode='large'), number=5)/5
2.3766122478000398
>>> timeit.timeit(lambda: gasparse.GA(15), number=5)/5
Killed
NOTE: For algebras with n>=10 the subscripts that correspond to the basis vectors of index 10 and above are represented by symbols rather than numbers. This happens because bitmaps get converted to characters via (char)value + '1'. Thus for indices bigger than 9 the corresponding symbols are the ones followed by 9 in the ASCII table. Concretely 10, 11, 12, 13, 14 and 15 are represented by the symbols ':', ';', '<', '=', '>' and '?' respectively. In a subsquent revision we might consider printing multivectors differently. Also note that the representation in this form makes it impossible to define elements via their basis since e=> or e2: is not valid sintax for variables. However we can use ga.mvarray([1],basis='e=>') and ga.mvarray([1],basis='e2:') to create valid variables for the basis bivectors \(e_{12}\wedge e_{13}\) and \(e_2\wedge e_{10}\) respectively.
Computing with big geometric algebras using compute_mode='large' gives us huge performance benefits with respect to the 'generic' mode concretely we show the difference in performance
>>> import gasparse
>>> import timeit
>>> import numpy as np
>>> gal = gasparse.GA(12,compute_mode='large')
>>> ga = gasparse.GA(12,compute_mode='generic')
>>> arr1 = np.random.rand(10,ga.size(1)).tolist()
>>> arr2 = np.random.rand(10,ga.size(1)).tolist()
>>> xl1 = gal.mvarray(arr1,grades=1,dtype='sparse')
>>> x1 = ga.mvarray(arr1,grades=1,dtype='sparse')
>>> xl2 = gal.mvarray(arr2,grades=1,dtype='sparse')
>>> x2 = ga.mvarray(arr2,grades=1,dtype='sparse')
>>> time_generic = timeit.timeit(lambda: x1*x2, number=5)/5
>>> time_large = timeit.timeit(lambda: xl1*xl2, number=5)/5
>>> print("generic is ", time_generic/time_large, " times slower then large",sep='')
generic is 5.6724215181259625 times slower then large
>>> time_generic = timeit.timeit(lambda: x1+x2, number=5)/5
>>> time_large = timeit.timeit(lambda: xl1+xl2, number=5)/5
>>> print("generic is ", time_generic/time_large, " times slower then large",sep='')
generic is 23.555375285590276 times slower then large
>>> time_generic = timeit.timeit(lambda: x1.prod(), number=5)/5
>>> time_large = timeit.timeit(lambda: xl1.prod(), number=5)/5
>>> print("generic is ", time_generic/time_large, " times slower then large",sep='')
generic is 2.2492217006908293 times slower then large
>>> time_generic = timeit.timeit(lambda: x1.sum(), number=5)/5
>>> time_large = timeit.timeit(lambda: xl1.sum(), number=5)/5
>>> print("generic is ", time_generic/time_large, " times slower then large",sep='')
generic is 12.2753188093821 times slower then large
Note that however mixed algebras operations are still using old technology similar to what is done with 'generic', so don’t expect any performance benefits for mixed algebras operations.
Here are how computation time increases when we construct bigger geometric algebras:
>>> import gasparse
>>> import timeit
>>> arr = [0]*15
>>> for i in range(1,16):
>>> arr[i-1] = timeit.timeit(lambda: gasparse.GA(i,compute_mode='large'), number=5)/5
>>> print(arr)
[2.722999852267094e-06,
1.558800067869015e-06,
1.9256000086897985e-06,
2.8394002583809198e-06,
7.089399878168478e-06,
1.9103799786535092e-05,
6.513800035463646e-05,
0.00023918759980006142,
0.0009205148002365604,
0.0036732804001076147,
0.01586245879989292,
0.06812388460020884,
0.22016883979995328,
0.8322477006000554,
3.5297154857998976]
Compatibility between Geometric Algebras
The user has to be carefull when computing operations between multivectors of different algebras. Two algebras of \(n\) and \(m\) dimension \(n<m\) are compatible if the first \(n\) elements of the metric array/tensor are equal. Similarly we can say that two geometric algebras are compatible if the metric tensors of both geometric algebras fully overlap with one another. To illustrate a context where two algebras are imcompatible consider generating a 3D geometric algebra and an algebra of 4 dimensions where the first basis vector is negative and the other positives. The following scripts shows the error obtained after attempting an operation between multivectors of incompatible algebras
>>> import gasparse
>>> ga1 = gasparse.GA(metric=[1,1,1])
>>> ga2 = gasparse.GA(metric=[-1,1,1,1])
>>> x = ga1.mvarray([1,3,4],grades=1)
>>> y = ga2.mvarray([2,4,7,6],grades=1)
>>> x+y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Probably Incompatible Algebras!
Overloaded Operators
Operation |
Expression |
Python |
---|---|---|
Geometric product |
\(ab\) |
|
Inner product |
\(a \cdot b\) |
|
Outer product |
\(a \wedge b\) |
|
Regressive product |
\(a \vee b\) |
|
Divide |
\(a/b\) |
|
Sum |
\(a+b\) |
|
Subtract |
\(a-b\) |
|
Reverse of |
\(a^\dagger\) |
|
Grade projections |
\(\langle a\rangle_{1,3}\) |
|
Dual of |
\(a^* = aI\) |
|
Undual of |
\(a^{-*} = aI^{-1}\) |
|
Division is only available when the second argument is either a ‘scalar’ type multivector array, ‘float’ or ‘int’. The scalar product can be computed using the inner or gemetric product and projection to scalars \(a*b=\langle ab\rangle=\langle a\cdot b \rangle\rightarrow\) (a|b)(0)
or (a*b)(0)
.
We can also use lists to project to specified grades a([1,3])
.
Note that dualization when the pseudoscalar is null, that is \(I^2=0\), is defined via the relationship between the basis vectors as \(e_J^\dagger e_J^* = I\)
where \(e_J\) are basis multivectors that span all the geometric algebra. The undual operation is defined as the operation that gives back the initial multivector \((a^*)^{-*} = a\).
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
Built Distributions
File details
Details for the file gasparse-0.0.6a0.tar.gz
.
File metadata
- Download URL: gasparse-0.0.6a0.tar.gz
- Upload date:
- Size: 147.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | db2ab4751011b1984692e1f658984cc5cec02021e82d82ee3546cd528c7cd8be |
|
MD5 | 8fe020f06ba22017d99759bcdfe2bc34 |
|
BLAKE2b-256 | 2da520031bf6b2d7fd5f8b961779f7e60cbe10840a33debcd537ac96bd766036 |
File details
Details for the file gasparse-0.0.6a0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 154.3 kB
- Tags: PyPy, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3aa2fa2c18b1c98b71a0b72d3d2cbe477940601da02876b172edce1e9af5d726 |
|
MD5 | e64eefde6e5237fa52feab145f3492cd |
|
BLAKE2b-256 | b34fabdd233dd6adc52db0e53308f0e7ffa58923e187f435ed850d3885f31d29 |
File details
Details for the file gasparse-0.0.6a0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 139.6 kB
- Tags: PyPy, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 60683c19696a4c692e61cf6cc9a3e9460e9bb233a7b39df9359dd4970ab29eb1 |
|
MD5 | 87b4304efcfa12e43a34c68c8a725237 |
|
BLAKE2b-256 | 15bd0b1539a51cda3fccd020e5c64cf5f9757e184b959ee63ce5187c19f7ab42 |
File details
Details for the file gasparse-0.0.6a0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 154.2 kB
- Tags: PyPy, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e09c8c0df3ed7c03b4b176dae6ccfe7e7cb0acca17a9f768eab5c935f765110e |
|
MD5 | ba9ffdcd93fbb7a55cdf36b480950690 |
|
BLAKE2b-256 | 39733c11a0037ca03c94eec3ac8bbdf995f872a46515a6c20d350f46da282a30 |
File details
Details for the file gasparse-0.0.6a0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 139.7 kB
- Tags: PyPy, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8db955973aba54f1eace8ae4b7d992f467a688e0c445c688c2ed90e50ed85ec8 |
|
MD5 | f13d63cd372f461b5f67c45763ed7eac |
|
BLAKE2b-256 | 35a7c48bd43d06a07ec893870e4cc80522b664e4f27409518325b0af08c81d82 |
File details
Details for the file gasparse-0.0.6a0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 154.6 kB
- Tags: PyPy, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1eff664407742d08414a0100ce2ab5fc7ea1f8937ead5e1dbde8af35d45b3673 |
|
MD5 | 7f18f18e9c7372464855df3487748cee |
|
BLAKE2b-256 | 89b2de87a600508de951966230e79f1848b960fdf91de770870b2e4d828e8543 |
File details
Details for the file gasparse-0.0.6a0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 140.1 kB
- Tags: PyPy, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 565cd7da4d17ac5c118167b0bc41cc5887a08451971d4a469be76b2730e9e1d4 |
|
MD5 | e72e373e1e4dc45bb34b22c27c6f8677 |
|
BLAKE2b-256 | 832b8d890072aafec304cccfa4a20da9214ca2600a4915d9792b722882ceb18d |
File details
Details for the file gasparse-0.0.6a0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 154.8 kB
- Tags: PyPy, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e7f94a85700de93d9c971339c6aefe6b05f321b3579186841ffd55475338b92 |
|
MD5 | 347fff16f4a12f8f1cf7d8b68403378c |
|
BLAKE2b-256 | 6cb9ead35f5577a06b56ed7b8c8e2530f13729320ddd5853dabfbae7abc5761d |
File details
Details for the file gasparse-0.0.6a0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 140.4 kB
- Tags: PyPy, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0d0e31fcf3b2d47f5f186fe51556bfb499600a9b0e2124b739d6cc3a9ad6046f |
|
MD5 | fbd5cc4cab1d588daaebe7caecb95333 |
|
BLAKE2b-256 | 871a41e03105b9eb09d70319af3c2d46a0328b46300070897ac7541763746c9e |
File details
Details for the file gasparse-0.0.6a0-cp312-cp312-musllinux_1_2_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 422.4 kB
- Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a8675013355ed0d424851ce73061140b8845e99ded8078961cbc4f0d419a6531 |
|
MD5 | 77761cd9a881f036f87c594d87601319 |
|
BLAKE2b-256 | a2daac0bc9e061c31fa3837578148fb6751162d6fcaf13da18ff415384a4f951 |
File details
Details for the file gasparse-0.0.6a0-cp312-cp312-musllinux_1_2_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp312-cp312-musllinux_1_2_i686.whl
- Upload date:
- Size: 403.5 kB
- Tags: CPython 3.12, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9e5358b651c11b449fc2fc77d0b9d498953dc91701aae91eadfec2e1c470ba6 |
|
MD5 | 8f91fbafca3c5df93496845e4412a773 |
|
BLAKE2b-256 | 0d45014f6d258f19d76a9766dedfeac7bee26abe99c83822a6e581daee2e6bfc |
File details
Details for the file gasparse-0.0.6a0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 415.2 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a0a073c9852d393b68f61a090de38e811a5a96994dc8be085536df3b9b1159ad |
|
MD5 | c6a4c8e350317a1e9ae4a9ce74905dff |
|
BLAKE2b-256 | a28cd63c03f6dd5d0a5d0b2a00ae5c27f6f145f95a513575f799abd299e05d7b |
File details
Details for the file gasparse-0.0.6a0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 366.1 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 40d252d69ea61157f0e4fcd10d585b4a65062ed2433a3051b677627d21321280 |
|
MD5 | 69adcaa79d40464ee75f658065d8f0bb |
|
BLAKE2b-256 | fb28fec8720da0a61e52a81828b2d85cdb270fa1b92815174ef9baf0de5e8e9d |
File details
Details for the file gasparse-0.0.6a0-cp311-cp311-musllinux_1_2_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 421.0 kB
- Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 779c65dd7e6e1d5440f859c5b5bc58990da5cec2546f36511fbd16bcab467bd9 |
|
MD5 | 45ad2b1f375aa3321f6d9767571a05e1 |
|
BLAKE2b-256 | cc636986b691596ee7c75dc6f54e30e57cbf8ff1f8997c623fdfa672cc63bc43 |
File details
Details for the file gasparse-0.0.6a0-cp311-cp311-musllinux_1_2_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp311-cp311-musllinux_1_2_i686.whl
- Upload date:
- Size: 402.5 kB
- Tags: CPython 3.11, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 95935675dc007dbb31c551cb9f5673ca8fdeb6ab4cd993e41af9c2b85806f22e |
|
MD5 | 696851b47efb23394590a109a41ec7a0 |
|
BLAKE2b-256 | 14983ea45ac2c6199b6816bb5104e6e40f782574d73488e88662f5899148c598 |
File details
Details for the file gasparse-0.0.6a0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 413.9 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d03d0a5ef0c4baa5bbeaf624cc04ca5ce2c2f39d81b51f9a803269643c51b87 |
|
MD5 | 8406b843bd643185340d88276177883a |
|
BLAKE2b-256 | bd8a4a384adccc1b5b4a1de48e28f173a396bfba9f232fdfb4821f348bc56b64 |
File details
Details for the file gasparse-0.0.6a0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 364.9 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ee3845d72661d42e49017e74bf80c119ec58b372041d2b8d44b936a11a5b976 |
|
MD5 | e92194bafea10e8ef031f1f8a7d6fa6d |
|
BLAKE2b-256 | 03ac39df8412a436e021c6cb8fe4de27e1204f25d271ba6e38aa7f8a40ac106d |
File details
Details for the file gasparse-0.0.6a0-cp310-cp310-musllinux_1_2_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 418.1 kB
- Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b638f545c173d0de339c1f74db1fe678f61927a7e23fb209b5417892002609f |
|
MD5 | 80de9b45e8a200616bb5778feca51751 |
|
BLAKE2b-256 | 5357ca8bf26e76cc0013e25c83026aa3c5e7e9052f4a4b7b39a250350037afb1 |
File details
Details for the file gasparse-0.0.6a0-cp310-cp310-musllinux_1_2_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp310-cp310-musllinux_1_2_i686.whl
- Upload date:
- Size: 401.0 kB
- Tags: CPython 3.10, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7ad30b1d2eab7c87d7145931af84209320b3fb8261b86596f0f2d20189e1c06 |
|
MD5 | ca99c0ea8503a742d5e051d71ee3abe0 |
|
BLAKE2b-256 | e943a226034eb76998c208fe3a013a849f313c20a624dd0aab8222c949fe2a0a |
File details
Details for the file gasparse-0.0.6a0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 410.9 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 120b6daa7979495ae69b2708b4c36f07809dd06f5fc2c47b5ad6a770da17afcd |
|
MD5 | 7a34abed4037cae5ec1fa17b457013ab |
|
BLAKE2b-256 | 1b0348b18c71e755fe9a4271245389bc394d9be96af7c06bbe0e1ce9704e5180 |
File details
Details for the file gasparse-0.0.6a0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 362.5 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 31068b1ada45b3f8b0835ab73539f490ce965a47824d87424b9344e5f9d1f4b7 |
|
MD5 | 4b86fa65e2951e244ec1ed77940cedcc |
|
BLAKE2b-256 | 3a82d70f60cd7a01b349402eb58c19d2c4ff01a1c110668a1309fb02d20239be |
File details
Details for the file gasparse-0.0.6a0-cp39-cp39-musllinux_1_2_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp39-cp39-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 416.2 kB
- Tags: CPython 3.9, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 78f2ac56c42cb05c5f2bc744897e7996ecc9b3421c7de48a0dfb9a0acca91d86 |
|
MD5 | ab20e88ec6b97cbfacabc7b5189c2130 |
|
BLAKE2b-256 | cc3448c2de025640d8c9a83b36c83c8bf39bad0144023be07b44b5fa4d351e1c |
File details
Details for the file gasparse-0.0.6a0-cp39-cp39-musllinux_1_2_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp39-cp39-musllinux_1_2_i686.whl
- Upload date:
- Size: 399.0 kB
- Tags: CPython 3.9, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7e8de8c6cf1008133d23b0ec09ae213341d933ff4da9ddf85a4753c4d9be42b6 |
|
MD5 | af2228b73337d2a36803e16204c8b608 |
|
BLAKE2b-256 | dfae0bb9bbb26db22f0145ece93c646cb6e0b9f73d0eb4cd94b8270cba30caae |
File details
Details for the file gasparse-0.0.6a0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 411.5 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 552973fcb930dac212d40dd9fd55c9b20d431e9525378c8091f89eacea159f0c |
|
MD5 | 44aa942bbac338c86e9e339efa9b250b |
|
BLAKE2b-256 | df20157bce25fb35570ce3eb298f7cfcc7d4d0cc052e5a49095d3412e1cf8aac |
File details
Details for the file gasparse-0.0.6a0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 364.0 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6779b3b2a38c1102d049ad922184b160e1ebd85e9790c4eae8bb2cfcc6e74481 |
|
MD5 | fabf433f7158649f06e6fa1823955cd2 |
|
BLAKE2b-256 | 0265b1e3b358511fb1fb4f337e96d1269ada51a2d78fa72b4bf1c0d744e3546e |
File details
Details for the file gasparse-0.0.6a0-cp38-cp38-musllinux_1_2_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp38-cp38-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 412.1 kB
- Tags: CPython 3.8, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 665a8cf5f2abf7a3413e9707b223f509054a70b32eb7b21969606481a81b5a18 |
|
MD5 | c4649267745da899066f84dd53ca4fac |
|
BLAKE2b-256 | 5ac5de8abf9d04bc8bc6be9feda71cefeed5f53c677f69aa3b99291854521058 |
File details
Details for the file gasparse-0.0.6a0-cp38-cp38-musllinux_1_2_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp38-cp38-musllinux_1_2_i686.whl
- Upload date:
- Size: 395.3 kB
- Tags: CPython 3.8, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c238ac7fe4dd943d5e9eb133c6ac23d44491549e42d5e01ff69bc30d54305d9f |
|
MD5 | c30270dbb628e11ce1c1553302420cdb |
|
BLAKE2b-256 | 434ddca1d735efede4093d4fd1e0bf1883e352513a7c74551d1745af303304b3 |
File details
Details for the file gasparse-0.0.6a0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 410.0 kB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5215eed25c228398866ecb0340426b3b88e3568cbf1158f826e1247caf87fa14 |
|
MD5 | 23542c4570589bef4a59d15140f85d8d |
|
BLAKE2b-256 | 650049a2625f78a2801a2eb01b1826925d54509d5d754f044d248fe03b286c4d |
File details
Details for the file gasparse-0.0.6a0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 361.6 kB
- Tags: CPython 3.8, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b99e873479c8ade32dc67adcfe67810de9f2229ecf4d8faf643e9cdb55fb031c |
|
MD5 | ad5483d96458598c48b34aa1482334ef |
|
BLAKE2b-256 | 0606922df92572122974a78988a66acbd7036810b61a77dbf300ff4bd35b256e |
File details
Details for the file gasparse-0.0.6a0-cp37-cp37m-musllinux_1_2_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp37-cp37m-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 411.4 kB
- Tags: CPython 3.7m, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f1388c0e63a5fb04b41b653250714746dcf245d12199ce0576a3ff1d33acde7 |
|
MD5 | f8aca16cabf21ad4388b3acb306b6c5d |
|
BLAKE2b-256 | e0a29e1ef728638464a2853467d3ec5d9f16de9c3c590f9c4e9c2c489e3cd159 |
File details
Details for the file gasparse-0.0.6a0-cp37-cp37m-musllinux_1_2_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp37-cp37m-musllinux_1_2_i686.whl
- Upload date:
- Size: 394.0 kB
- Tags: CPython 3.7m, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad7e34e0b1f1c460eb0e88162a55694c3b50de203b2d5dd8bf3a239e1b4f9fa6 |
|
MD5 | afbf69eae467754c43972040ba801511 |
|
BLAKE2b-256 | 01bba04707747d144cf6130b9ab665a913867113af1f0cd25931f755c8b836fd |
File details
Details for the file gasparse-0.0.6a0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 407.5 kB
- Tags: CPython 3.7m, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7914e1e8d734b4e1058f7608ddcc7756eac57bc108819d3b2dabd6c8a871d1fa |
|
MD5 | 6538068a132f9e5aef083a6c1ab7a88b |
|
BLAKE2b-256 | 4016ec31c649f32c8a79263c6aa91d3501fd47e258e610d39f0bb1538cf6848a |
File details
Details for the file gasparse-0.0.6a0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
.
File metadata
- Download URL: gasparse-0.0.6a0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 359.4 kB
- Tags: CPython 3.7m, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc66d0a1993cdf1391bceca48b745eeda4c5921ec2645316f5429e1d4e529bfb |
|
MD5 | 70d2fea93bfec236f3b6027282acb1f1 |
|
BLAKE2b-256 | 9a870953fd690274220a5f1a33f163a494d87b4032c4db80719e68fe74a402c9 |