mixmax-py: a python implemented PRNG based on uniformly hyperbolic Anosov C-systems defined on a torus.
Copyright (C) 2019-2023 Michail Liarmakopoulos [email protected]
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
A python implementation of the MIXMAX PRNG.
In this project we successfully construct a python implementation of the two-parameter family of C-system operators A(N,s)
, as discussed in this [1] paper. A more general three-parameter family of C-system operators A(N,s,m)
is calculated too. But our generator doesn't produce all the results of the three parameter family, whereas it works good for the two parameter family.
There are two implementations. The first attempt was a naive approach, using vanilla python3 for the construction of the operator A(N,s)
. The second attempt, which is much better and faster is using cython for speeding up the construction process.
Run: python3 create_matrix.py
. You'll get instructions then.
An example of correct run: python3 create_matrix.py 128 1 1
.
Simply run in your terminal:
python3 setup.py build_ext --inplace
Run: python3 create_matrix_new.py
. You'll get instructions then.
A correct run: python3 create_matrix_new.py 128 1 1
.
Both programs plot the distributions of the eigenvalues of the given A(N,s,m)
for input variables N,s,m
on the plane.
When m
equals 1
then A(N,s,m)
is the same matrix as the matrix A(N,s)
.
The results agree with the results presented in the paper [1]. The distribution of the eigenvalues in some cases follow the curve of a cardioid as expected. For various other values of N
and s
different shapes are being created. See inside the images directory for more examples.
- cython-0.29.26
- numpy-1.19.5
- matplotlib-3.3.4
To my friend rembesques.
[1] Konstantin Savvidy, George Savvidy, Spectrum and entropy of C-systems MIXMAX random number generator, (DOI), (arxiv).