Skip to main content

GSFit: Equilibrium reconstruction

Project description

GSFit: Grad-Shafranov Fit

BSD-3-Clause License

Rust Rust coverage: Rust tests Rust coverage: Python tests Rust coverage: Rust + Python tests dependency status

Python 3.11|3.12|3.13|3.14 Python coverage: Python tests Ruff ty Checked with mypy

GSFit is a modern tokamak equilibrium reconstruction tool for post-shot experimental analysis and scientific interpretation. Developed by Tokamak Energy Ltd. for use on ST40, the world's highest field spherical tokamak.

The Grad-Shafranov equation is the equilibrium solution to the ideal, single-fluid, MHD equations, assuming axisymmetry. The Grad-Shafranov equation has two free degrees of freedom, often referred to as the source functions: the pressure gradient p_prime and ff_prime, where f gives rise to the poloidal plasma current. GSFit uses diagnostics, most importantly the magnetics, to simultaneously solve the non-linear Grad-Shafranov equation while optimising the p_prime and ff_prime degrees of freedom to minimise the difference between the experimental "measured" values and the "calculated" values. More details about the algorithms used can be found in the excellent paper J.-M. Moret, et. al., "Tokamak equilibrium reconstruction code LIUQE and its real time implementation", Fusion Eng. Design, 91, 2015.

GSFit's numerical solver is written in Rust for speed and robustness, and the user interface / set-up is written in Python for its convenience.

The goal of GSFit is high accuracy, not performance; when something can be calculated accurately, it should be calculated accurately regardless of computational cost.

GSFit uses the COCOS 13 coordinate system, as described in O. Sauter and S. Y. Medvedev, "Tokamak Coordinate Conventions: COCOS", Comput. Phys. Commun. 184, 2013. Where, in summary, flux is measured in weber, and the poloidal angle increases counterclockwise, starting from the outboard mid-plane.

Why Rust and Python?

Rust is a compiled, high-performance language, nearly as fast as C and Fortran. It includes modern tooling such as a package manager and centralised registry (cargo and crates.io), autoformatting (rustfmt), and has testing built into the language. Rust enforces strict ownership rules, making programs extremely memory efficient without requiring any extra effort. These rules also eliminate entire classes of memory issues. Additionally, Rust has zero-cost abstractions, allowing object-oriented programming (implementations) to be used without a performance penalty. For more information, the official Rust book gives a complete introduction to the language with examples.

Python is ubiquitous within the fusion industry. Using Python allows easy integration into existing workflows. For example, in examples/example_02_mastu_with_synthetic_data_from_freegsnke.ipynb, we reconstruct an equilibrium using synthetic "measured" data produced by the open source forward Grad-Shafranov solver FreeGSNKE.

1. Installation and environment

1.1 Python environment

GSFit can be run on Python 3.11, 3.12, 3.13, and 3.14.

uv is both an environment and package manager and is recommended. There are several other Python virtual environment providers which should work, but we have not tested against them.

# Install the `uv` environment and package manager
python -m pip install uv

# Creating and activating a virtual environment, called `venv_gsfit`
uv venv --python=3.13
source .venv/bin/activate

1.2 Installing from PyPI

GSFit is available on the PyPI package registry as a pre-compiled binary. The binary is compiled for Linux, macOS, and Windows. For Linux the "manylinux2014" build system is used, which typically can be run on any Linux machine newer than 2014.

All of the packages GSFit depends on are listed in the pyproject.toml. These are divided into essential packages which are always required for any run and optional packages which can be installed for different purposes. An example of optional packages are machine-specific database readers.

# Install GSFit from the PyPI package registry, with only the essential packages
uv pip install gsfit
# or install GSFit from the PyPI package registry, with the "developer" packages, such as `pytest` and `mypy`
uv pip install gsfit[dev]
# or install GSFit with reading/writing to/from ST40's experimental database
uv pip install gsfit[with_st40_mdsplus]  # (this will only work within Tokamak Energy's network)
# or any combination
uv pip install gsfit[dev,with_st40_mdsplus]

1.3 Compiling and installing from source code on Linux

# Install the Rust compiler (only needs to be done once)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Clone a copy of GSFit from GitHub
git clone git@github.com:tokamak-energy/gsfit.git
cd gsfit

# Load OpenBLAS (gsfit is statically linked so this is only required when compiling)
module avail
module load OpenBLAS

# Install GSFit
uv pip install --reinstall --editable .
# or install with the "developer" packages, such as `pytest` and `mypy`
uv pip install --reinstall --editable .[dev]

1.4 Compiling and installing from source code on macOS

# Install the Rust compiler (only needs to be done once)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Clone a copy of GSFit from GitHub
git clone git@github.com:tokamak-energy/gsfit.git
cd gsfit

# Install OpenBLAS (gsfit is statically linked so this is only required when compiling)
brew install openblas

# Install GSFit
uv pip install --reinstall --editable .
# or install with the "developer" packages, such as `pytest` and `mypy`
uv pip install --reinstall --editable .[dev]

1.5 Compiling and installing from source code on Windows

On Windows, OpenBLAS can be installed using vcpkg:

# Install `vcpkg` (Windows package manager)
git clone https://github.com/Microsoft/vcpkg.git C:\Users\<user.name>\github\vcpkg
cd C:\Users\<user.name>\github\vcpkg
.\bootstrap-vcpkg.bat
# Install `vcpkg` for all users, into "C:/vcpkg/...", and make `vcpkg` command available in `PATH`
.\vcpkg\vcpkg integrate install

# Install OpenBLAS/LAPACK with static linking
vcpkg install openblas:x64-windows-static-md
vcpkg install lapack-reference:x64-windows-static-md

# Download and install Rust compiler
# run rustup-init.exe from https://www.rust-lang.org/tools/install

# Clone a copy of GSFit from GitHub
git clone git@github.com:tokamak-energy/gsfit.git
cd gsfit

# Copy OpenBLAS and LAPACk *.dll library files
# Since Python 3.8+, *.dll library files are not found using the `PATH` environment variable. Instead, they are only found from:
#   1. The directory containing the .pyd file (what we will be doing)
#   2. System directories
#   3. Directories explicitly added with `os.add_dll_directory("path_to_dlls")`
Copy-Item "C:/vcpkg/installed/x64-windows-static-md/bin/*.dll" -Destination "python/gsfit_rs/" -ErrorAction Stop

# Install GSFit
uv pip install --reinstall --editable .
# or install with the "developer" packages, such as `pytest` and `mypy`
uv pip install --reinstall --editable .[dev]

1.6 IDE

VS Code is the recommended IDE for GSFit.

A particularly useful extension is rust-analyzer, which "is a part of a larger rls-2.0 effort to create excellent IDE support for Rust."

The PyO3 crate requires Python>=3.7. On machines where the python3 command links to an unsupported Python version, you can change the following file: ~/.vscode-server/data/Machine/settings.json to point to your desired Python's "standard library files", which will be similar to:

{
    "rust-analyzer.server.extraEnv": {
        "PYO3_CROSS_LIB_DIR": "/home/<user.name>/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib"
    }
}

and Python's "standard library files" directory can be found by:

python -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR'))"

2. GSFit program layout and flow

2.1 Initialisation

GSFit's solver and numerics are programmed in Rust, with the initialisation done within Python.

The communication between Python and Rust is handled by the PyO3 crate. From the Python side the integration is seamless, and a general user would not know if a function / class is written in Python or Rust. In a similar way, a user interacting with numpy does not know if they are calling Python, C or Fortran.

GSFit has the following implementations (which are similar to classes):

  • coils for the PF and TF coils. This object contains the geometry; measured values; and reconstructed values
  • passives for the toroidally conducting structures, such as the vacuum vessel and passive plates. passives also contains the degrees of freedom allowed for the passive conductors
  • plasma contains a $(R, Z)$ grid and the reconstructed equilibrium
  • bp_probes contains the Mirnov coils: geometry; measured values; which sensors to use in the reconstruction and their weights; and the reconstructed values
  • flux_loops the toroidal flux loops. Note the units are in weber.
  • rogowski_coils measuring toroidal currents
  • isoflux contains two time-dependent $(R, Z)$ coordinates which have equal poloidal flux
  • isoflux_boundary contains a time-dependent $(R, Z)$ coordinate which has the same poloidal flux as the plasma boundary. This can be used if we have measurements of where the strike point is, for example if there is an IR camera

All of these implementations are initialised from Python. As a result, all of the database access is contained within Python, and any pre-processing such as filtering or smoothing experimental data can also be done within Python.

Below is a reproduction of examples/example_01_st40_with_experimental_data.py.

# Note, this example will only run inside Tokamak Energy's network

from gsfit import Gsfit

# Construct the GSFit object
gsfit_controller = Gsfit(
    pulseNo=12050,
    run_name="TEST01",
    run_description="Test run",
    write_to_mds=True,
    settings_path="default"
)

# Run (solve the inverse Grad-Shafranov equation, and if requested write to database)
gsfit_controller.run()

To improve reliability and traceability, the number of arguments needed to initialise the gsfit_controller object is deliberately kept to a minimum. The settings_path="default" argument tells GSFit to use the settings (JSON files) from this directory python/gsfit/settings/default/. By storing all the settings needed to run GSFit in JSON files allows changes to be tracked through Git.

2.2 Adding a new experimental device or coupling to a new forward Grad-Shafranov code

The information needed to run GSFit comes from two sources:

  1. python/gsfit/settings/: Contains parameters in JSON files, such as:
    • the maximum number of iterations,
    • which magnetic sensors to use in the reconstruction,
    • the degrees of freedom given to p_prime and ff_prime,
    • and which database_reader to use.
  2. python/gsfit/database_readers/: Connects to machine-specific databases to read experimental results in, such as:
    • geometry and current in poloidal field coils
    • measured signals from magnetic sensors
    • isoflux constraints

These two sources of information are combined to initialise the Rust objects needed to run GSFit (as described in section 2.1).

Writing to the database is done through python/gsfit/database_writers/, in a similar format to database_readers.

Included are the settings and readers for ST40's experimental data, and synthetic data produced by FreeGS and FreeGSNKE simulations. We welcome and are happy to include configurations for other devices.

2.3 Where are the Green's tables stored?

We can classify objects as either "current sources" or "sensors".

  • coils, passives, and plasma are "current sources".
  • bp_probes, flux_loops, rogowski_coils, isoflux, and plasma are "sensors".

Note, plasma is both a current source and a sensor; this is because it contains the plasma current and the 2D (R, Z) grid where we want to take measurements on.

Principles about where data should be:

  • "sensors" contain the Green's tables.
  • "current sources" contain the currents.

The sensors and currents are linked by names; every magnetic probe and PF coil must have a unique name.

2.4 Decision on coils vs PSUs

On many tokamaks, including ST40, several PF coils are connected to a single PSU. For ST40 we have the BVLT and BVLB PF coils, both connected to the BVL PSU.

Several equilibrium reconstruction codes treat the PSU current as a measurement with an associated degree of freedom. To allow for this degree of freedom we would need to tell GSFit which PF coil is connected to which PSU. This is quite burdensome and to keep GSFit simple to initialise, we have decided to only consider "coils". The work-around, if you want to have the PSU currents as a degree of freedom, is to combine all of the PF coils connected to a single power supply into a single coil. On ST40 we could create a PF coil called BVL_combined which contains both BVLT and BVLB.

3. Advanced building

GSFit is intended to be a Python library, where the Rust code is called from Python (Python is not called from within Rust). The advantage of this is that the Rust binary does not need to link agains libpython-dev which is not always installed on all machines.

However, for testing, where the Rust code is run as it's own executable, not from within Python, we must link to Python!

4. Planned future development

  • Interfacing to and from IMAS & OMAS.
  • More kinetic sensors, such as MSE, polarimeters, and interferometers.

5. Citing GSFit

We intend on publishing a paper on GSFit. While GSFit is unpublished, please cite it as "P. F. Buxton, GSFit, https://github.com/tokamak-energy/gsfit, 2025"

Please use the GSFit nomenclature, not GS-Fit, GSFIT, or g/s fit.

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

gsfit-0.0.5.tar.gz (1.9 MB view details)

Uploaded Source

Built Distributions

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

gsfit-0.0.5-cp315-cp315-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.15Windows x86-64

gsfit-0.0.5-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

gsfit-0.0.5-cp315-cp315-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.15macOS 11.0+ ARM64

gsfit-0.0.5-cp314-cp314-win_amd64.whl (7.6 MB view details)

Uploaded CPython 3.14Windows x86-64

gsfit-0.0.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

gsfit-0.0.5-cp314-cp314-macosx_11_0_arm64.whl (1.9 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

gsfit-0.0.5-cp313-cp313-win_amd64.whl (7.6 MB view details)

Uploaded CPython 3.13Windows x86-64

gsfit-0.0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

gsfit-0.0.5-cp313-cp313-macosx_11_0_arm64.whl (1.9 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

gsfit-0.0.5-cp312-cp312-win_amd64.whl (7.6 MB view details)

Uploaded CPython 3.12Windows x86-64

gsfit-0.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

gsfit-0.0.5-cp312-cp312-macosx_11_0_arm64.whl (1.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

gsfit-0.0.5-cp311-cp311-win_amd64.whl (7.6 MB view details)

Uploaded CPython 3.11Windows x86-64

gsfit-0.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

gsfit-0.0.5-cp311-cp311-macosx_11_0_arm64.whl (1.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file gsfit-0.0.5.tar.gz.

File metadata

  • Download URL: gsfit-0.0.5.tar.gz
  • Upload date:
  • Size: 1.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for gsfit-0.0.5.tar.gz
Algorithm Hash digest
SHA256 c4450164196f7ca3626aedf33b5adcb6bd2252558840e87c588901907b0ff050
MD5 37309c7f6c6ebf81f2d6a8d829802390
BLAKE2b-256 ae51c6997536cedd3bedc195ed2a4b4ad669297b50d072e2047c5c33dfc4d5be

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp315-cp315-win_amd64.whl.

File metadata

  • Download URL: gsfit-0.0.5-cp315-cp315-win_amd64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.15, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for gsfit-0.0.5-cp315-cp315-win_amd64.whl
Algorithm Hash digest
SHA256 6626034bec9d1deeccd3e27ecc9573018efb7f45870c3d72c5dcb32e2de311a2
MD5 bda512fb10107cd54af792a1d53c999d
BLAKE2b-256 3705253fd9e248e2dd6319cf7cff5665c965d0b87a95c777ad700a2859636c31

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gsfit-0.0.5-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7004dc41d5aed015b00c40a4342e355132d5df890459a88ca1542914432b0413
MD5 6ca41746c9205a2c4106722b84613a8d
BLAKE2b-256 cddc924315ecee78970d83c792748ebfa96fc8eb1e1ae0a0c5ec570eba6278e4

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp315-cp315-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gsfit-0.0.5-cp315-cp315-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 37f2aebda7ec29565754b5fc3e96d436a81dc8038365fced7d1af116c98537a2
MD5 0c109540e3a93d55115f2cc708be7cbc
BLAKE2b-256 7a53b8765576e21dcc4330a5351871ff37fea7374a467788964a666525742f99

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: gsfit-0.0.5-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 7.6 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for gsfit-0.0.5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ac6af5ac802d7460d3ef5e3526e89ba276cb8ea87544516e9ca662b58c08f904
MD5 11b73cf9da95a80b0dbfef97d521581b
BLAKE2b-256 dfea80979967a2f601ca88ec1120cd88258ec515481f27f851d8bd02bcf0bb3e

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gsfit-0.0.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 49a22dcdf3e932bd2e233ce94891e6dd2b41298a89eb2de3ad0b4f13b1e68c7a
MD5 3236e68912c1e44552aa2ebc2a1f5692
BLAKE2b-256 1f95557c9bb0c8d81d1d2c2892bdec96c2aef66dd6e1360832f18b9ba2631c29

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gsfit-0.0.5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 074ffc6769d93831b0d75b3361ff5ac09d40944f1f42d8877ac913912a9706f3
MD5 1b6bd5dc7155943018c2e9c467f93b8e
BLAKE2b-256 60bfa0bf28acd2e4cee05fff71c94efc878ada91e9dc155ddad8d94b9b0214c8

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: gsfit-0.0.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 7.6 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for gsfit-0.0.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 dcf799cfe2710f9c5ca0fccfb0df3405d41bbabcc143940793d91b2313a7fe43
MD5 a8ab97f640ce9144f9a894257659eabd
BLAKE2b-256 5b1498f8e066ccd329c0c237dfb7e83251ffc0039480eeed456cc6dc7cbd4c1c

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gsfit-0.0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7eec4dde509aad545b12764f359cfea07fdc1a5fdc0a67ab19a399edada03519
MD5 fd53e6d408c727abe70534004d393dda
BLAKE2b-256 05478ba9f33db9ecdfac49c8cc0a227bae3b6abc5c774293e97cec3b9c196be8

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gsfit-0.0.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 921d55ce282aa1cb99ca7af4ce1b6eea6651abb2eb8efa89ba8638f3d6535e6a
MD5 65defdcbe59ca000547722c213188a8b
BLAKE2b-256 bc835dd25f68340cd21a1b202a14d4879035bfbc365fab0460290a5efbe5d6be

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: gsfit-0.0.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 7.6 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for gsfit-0.0.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 934da4d951d4fe63a289a36967da2c61ce1508b5b6d02c30c456bf4c3b6db852
MD5 7289e63b4407a39ace2e237e4caf5d94
BLAKE2b-256 7250576c592c083f53f5737ec45215e6bfe291f6e3cb0bc78d7ed30e92ede2ae

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gsfit-0.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 736f5dc11226d5b08991da6bfb9d7020bed63d2d846ec39de3eef67bc9a02626
MD5 3c8e586faffe1ec8e25d50f296079707
BLAKE2b-256 a4c0545ac292366217722b3a4561c8ffde2e4a948113bd682d2030e238b03ae0

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gsfit-0.0.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9e8812193597ef627ab188bb2e2bc22ddd8b1038f0ac3a70dcd20677423d2b6c
MD5 975a624eb984fac29a01c3d964394ee9
BLAKE2b-256 59c190c974c56af080801ab599633ba9cca937b26b7d734861dd73f22800befa

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: gsfit-0.0.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 7.6 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for gsfit-0.0.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f4b757b0cbbab9c89babc6eeaaa95ca68adb329b84bafc9dfec34b23b8b9c769
MD5 a4cd0e10564bf64b9822db7cba0a00fa
BLAKE2b-256 d88034a6360d89106e1c219a0e1f21a16ec203f930b6cab1bf0b789fed323f47

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gsfit-0.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 86767086bf6951a8ce7521a4e810975809deba4101e7f4dfe3490736c2c0581b
MD5 88b00a5f7b65e5bafdd4cbc1a08cdf97
BLAKE2b-256 cc8aaaeb130f1d570ae249b5149759cbc60fe1427fc61155603fb6e1017898a3

See more details on using hashes here.

File details

Details for the file gsfit-0.0.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gsfit-0.0.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 506e5ba5b64d5cb27c0b06c2a7680fa568fb0f8064f9dd1ebb122ae8201744f1
MD5 736a3917704323679c6a493a50b9f197
BLAKE2b-256 fff7457aefc8a213276517198e835dab8f62a4696acec535a2b5f341205acf05

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