Skip to main content

Proxima Fusion's reimplementation of the Variational Moments Equilibrium Code (VMEC), a free-boundary ideal-MHD equilibrium solver for stellarators and Tokamaks.

Project description

A dark Proxima logo in light color mode and a light one in dark color mode.

VMEC++

Ruff Code style: black MIT license Python version DOI

CI C++ core tests Publish wheels to PyPI

VMEC++ is a Python-friendly, from-scratch reimplementation in C++ of the Variational Moments Equilibrium Code (VMEC), a free-boundary ideal-MHD equilibrium solver for stellarators and tokamaks.

The original version was written by Steven P. Hirshman and colleagues in the 1980s and 1990s. The latest version of the original code is called PARVMEC and is available here.

Compared to its Fortran predecessors, VMEC++:

  • has a zero-crash policy and reports issues via standard Python exceptions
  • allows hot-restarting a run from a previous converged state (see Hot restart)
  • supports inputs in the classic INDATA format as well as simpler-to-parse JSON files; it is also simple to construct input objects programmatically in Python
  • typically runs just as fast or faster
  • comes with substantial documentation of its internal numerics

VMEC++ can run on a laptop, but it is a suitable component for large-scale stellarator optimization pipelines.

On the other hand, some features of the original Fortran VMEC are not available in VMEC++. See below for more details.


Table of Contents

Usage

This is a quick overview of the three main ways in which you can use VMEC++. See examples/ for some actual example scripts. Suitable input files are found in examples/data. If unsure where to start, we suggest to give the w7x case a try, which is a five-field-period stellarator case for the Wendelstein 7-X stellarator.

For example examples/force_residual_convergence.py runs fixed-boundary VMEC++ on the W7-X case and plots the convergence of the force residuals.

W7-X force residual convergence

As a Python package

VMEC++ offers a simple Python API:

import vmecpp

# Construct a VmecInput object, e.g. from a classic Fortran input file
vmec_input = vmecpp.VmecInput.from_file("input.w7x")  # or VMEC++'s w7x.json format
# This is a normal Python object: it can be constructed and modified programmatically
vmec_input.rbc[0, 0] *= 1.1

# Run VMEC++
vmec_output = vmecpp.run(vmec_input)

# Inspect the results programmatically or save them as a classic wout file
print(vmec_output.mercier.iota)
vmec_output.wout.save("wout_w7x.nc")

All other output files are accessible via members of the output object called threed1_volumetrics, jxbout and mercier.

With SIMSOPT

SIMSOPT is a popular stellarator optimization framework. VMEC++ implements a SIMSOPT-friendly wrapper that makes it easy to use it with SIMSOPT.

import vmecpp.simsopt_compat

vmec = vmecpp.simsopt_compat.Vmec("input.w7x")
print(f"Computed plasma volume: {vmec.volume()}")

As a command line tool

You can use VMEC++ directly as a CLI tool. In a terminal in which Python has access to the VMEC++ package:

# run on a given input file -> produce corresponding wout_w7x.nc
# vmecpp is a python module and can be either run with `python -m` or directly as a script
vmecpp examples/data/input.w7x

# check all options
vmecpp --help

As a Docker image

A pre-built Docker image is available at https://github.com/proximafusion/vmecpp/pkgs/container/vmecpp. Note that at present it is only updated occasionally.

See docker/README.md for more information and instructions on how to build a new image.

Installation

The easiest method for installing vmecpp is using pip:

pip install vmecpp

For usage as part of MPI-parallelized SIMSOPT applications, you might want to also install MPI on your machine and pip install mpi4py.

Alternatively you can build the latest vmecpp directly from source according to the appropriate instructions below.

Ubuntu/Debian

Ubuntu 22.04 and 24.04, as well as Debian 12 are officially supported.

  1. Install required system packages:
sudo apt-get install -y build-essential cmake libnetcdf-dev liblapack-dev libomp-dev libhdf5-dev python3-dev
  1. Install VMEC++ as a Python package (possibly after creating a dedicated virtual environment):
pip install git+https://github.com/proximafusion/vmecpp

The procedure will take a few minutes as it will build VMEC++ and some dependencies from source.

A common issue on Ubuntu is a build failure due to no python executable being available in PATH, since on Ubuntu the executable is called python3. When installing in a virtual environment (which is always a good idea anyways) python will be present. Otherwise the Ubuntu package python-is-python3 provides the python alias.

Arch Linux

  1. Install required system packages:
pacman -Sy --noconfirm python-pip gcc gcc-fortran openmp hdf5 netcdf lapack
  1. Install VMEC++ as a Python package (possibly after creating a virtual environment):
python -m pip install git+https://github.com/proximafusion/vmecpp

Fedora

Fedora 41 is officially supported.

  1. Install required system packages:
dnf install -y python3.10-devel cmake g++ gfortran libomp-devel hdf5-devel netcdf-devel lapack-devel
  1. Install VMEC++ as a Python package (possibly after creating a virtual environment):
# If you are installing with MPI support, remember to source the mpi compiler first
. /etc/profile.d/modules.sh
python3.10 -m pip install git+https://github.com/proximafusion/vmecpp

MacOS

  1. Install dependencies via Homebrew:
brew install python@3.10 ninja libomp netcdf-cxx git
# And if they aren't pre-installed already:
brew install gcc cmake
  1. Install VMEC++ as a Python package (possibly after creating a virtual environment):
# tell cmake where to find gfortran and gcc as they have non-standard names
export FC=$(which gfortran-14)
# OpenMP headers live under a different path newer OS-X versions, so CMake can't find them
export OpenMP_ROOT=$(brew --prefix)/opt/libomp
export HDF5_ROOT=$(brew --prefix hdf5)
python3.10 -m pip install git+https://github.com/proximafusion/vmecpp

As part of a conda environment

VMEC++ is currently not packaged for conda, but all its dependencies are and VMEC++ can be installed inside a conda environment. An example environment.yml file is provided here that can be used, after cloning the vmecpp repository, as:

git clone https://github.com/proximafusion/vmecpp.git
cd vmecpp
# this creates a "vmecpp" conda environment
conda env create --file environment.yml
# use the environment as usual
conda activate vmecpp

C++ build from source

After having installed the build dependencies as shown above, you can compile the C++ core of VMEC++ via CMake or Bazel. E.g. with CMake:

git clone https://github.com/proximafusion/vmecpp.git
cd vmecpp
cmake -B build  # create and configure build directory
cmake --build build --parallel  # build VMEC++
# you can now use the vmec_standalone C++ executable to run VMEC on a VMEC++ input JSON file, e.g.
./build/vmec_standalone ./examples/data/solovev.json

The main C++ source code tree is located at src/vmecpp/cpp/vmecpp.

Hot restart

By passing the output of a VMEC++ run as initial state for a subsequent one, VMEC++ is initialized using the previously converged equilibrium. This can dramatically decrease the number of iterations to convergence when running VMEC++ on a configuration that is very similar to the converged equilibrium.

Example

import vmecpp

input = vmecpp.VmecInput.from_file("w7x.json")

# Base run
output = vmecpp.run(input)

# Now let's perturb the plasma boundary a little bit...
input.rbc[0, 0] *= 0.8
input.rbc[1, 0] *= 1.2
# ...and fix up the multigrid steps: hot-restarted runs only allow a single step
input.ns_array = input.ns_array[-1:]
input.ftol_array = input.ftol_array[-1:]
input.niter_array = input.niter_array[-1:]

# We can now run with hot restart:
# passing the previously obtained output ensures that
# the run starts already close to the equilibrium, so it will take
# very few iterations to converge this time!
hot_restarted_output = vmecpp.run(input, restart_from=output)

Full tests and validation against the reference Fortran VMEC v8.52

When developing the C++ core, it's advisable to locally run the full C++ tests for debugging or to validate changes before submitting them. The full tests are not stored in the sources of this repo, but in a separate repo: https://github.com/proximafusion/vmecpp_large_cpp_tests . See the instructions there for how to run those tests locally. The CI of this repo includes those tests too.

The single-thread runtimes as well as the contents of the "wout" file produced by VMEC++ can be compared with those of Fortran VMEC v8.52. The full validation test can be found at https://github.com/proximafusion/vmecpp-validation, including a set of sensible input configurations, parameter scan values and tolerances that make the comparison pass. See that repo for more information.

Differences with respect to PARVMEC/VMEC2000

VMEC++:

  • reports issues via standard Python exceptions and has a zero crash policy
  • allows hot-restarting a run from a previous converged state (see Hot restart)
  • supports inputs in the classic INDATA format as well as simpler-to-parse JSON files; it is also simple to construct input objects programmatically in Python
  • employs the same parallelization strategy as Fortran VMEC, but VMEC++ leverages OpenMP for a multi-thread implementation rather than Fortran VMEC's MPI parallelization: as a consequence it cannot parallelize over multiple nodes
  • implements the iteration algorithm of Fortran VMEC 8.52, which sometimes has different convergence behavior from (PAR)VMEC 9.0: some configurations might converge with VMEC++ and not with (PAR)VMEC 9.0, and vice versa

Limitations with respect to the Fortran implementations

  • non-stellarator-symmetric terms (lasym == true) are not supported yet
  • free-boundary works only for ntor > 0 - axisymmetric (ntor = 0) free-boundary runs don't work yet
  • lgiveup/fgiveup logic for early termination of a multi-grid sequence is not implemented yet
  • lbsubs logic in computing outputs is not implemented yet
  • lforbal logic for non-variational forces near the magnetic axis is not implemented yet
  • lrfp flag is available for wout compatibility, but RFP-specific physics is not implemented yet - only stellarators/Tokamaks for now
  • several profile parameterizations are not fully implemented yet:
    • gauss_trunc
    • two_power_gs
    • akima_spline
    • akima_spline_i
    • akima_spline_ip
    • cubic_spline
    • cubic_spline_i
    • cubic_spline_ip
    • pedestal
    • rational
    • nice_quadratic
    • sum_cossq_s
    • sum_cossq_sqrts
    • sum_cossq_s_free
  • some (rarely used) free-boundary-related output quantities are not implemented yet:
    • curlabel - declared but not populated yet
    • potvac - declared but not populated yet
    • xmpot - not declared yet
    • xnpot - not declared yet
  • 2D preconditioning using block-tridiagonal solver (BCYCLIC) is not implemented; neither are the associated input fields precon_type and prec2d_threshold
  • VMEC++ only computes the output quantities if the run converged
  • The Fortran version falls back to fixed-boundary computation if the mgrid file cannot be found; VMEC++ (gracefully) errors out instead.
  • The Fortran version accepts both the full path or filename of the input file as well as the "extension", i.e., the part after input.; VMEC++ only supports a valid filename or full path to an existing input file.

Roadmap

Some of the things we are planning for VMEC++'s future:

  • free-boundary hot-restart in Python
  • open-sourcing the full VMEC++ test suite (including the Verification&Validation part that compares wout contents)
  • open-sourcing the source code to reproduce VMEC++'s performance benchmarks
  • VMEC++ usable as a C++ bazel module

Some items we do not plan to work on, but where community ownership is welcome:

  • packaging VMEC++ for platforms or package managers other than pip (e.g. conda, homebrew, ...)
  • native Windows support
  • ARM support
  • 2D preconditioner using bcyclic_plus_plus

Related repositories

License

vmecpp is distributed under the terms of the MIT license.

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

vmecpp-0.5.0.tar.gz (373.0 kB view details)

Uploaded Source

Built Distributions

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

vmecpp-0.5.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vmecpp-0.5.0-cp314-cp314t-macosx_15_0_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.14tmacOS 15.0+ x86-64

vmecpp-0.5.0-cp314-cp314t-macosx_14_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.14tmacOS 14.0+ ARM64

vmecpp-0.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vmecpp-0.5.0-cp314-cp314-macosx_15_0_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

vmecpp-0.5.0-cp314-cp314-macosx_14_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

vmecpp-0.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vmecpp-0.5.0-cp313-cp313-macosx_15_0_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.13macOS 15.0+ x86-64

vmecpp-0.5.0-cp313-cp313-macosx_14_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

vmecpp-0.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vmecpp-0.5.0-cp312-cp312-macosx_15_0_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.12macOS 15.0+ x86-64

vmecpp-0.5.0-cp312-cp312-macosx_14_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

vmecpp-0.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vmecpp-0.5.0-cp311-cp311-macosx_15_0_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.11macOS 15.0+ x86-64

vmecpp-0.5.0-cp311-cp311-macosx_14_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

vmecpp-0.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (15.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

vmecpp-0.5.0-cp310-cp310-macosx_15_0_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.10macOS 15.0+ x86-64

vmecpp-0.5.0-cp310-cp310-macosx_14_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

Details for the file vmecpp-0.5.0.tar.gz.

File metadata

  • Download URL: vmecpp-0.5.0.tar.gz
  • Upload date:
  • Size: 373.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for vmecpp-0.5.0.tar.gz
Algorithm Hash digest
SHA256 f906070bf06a88d121a5db2adfba11d9a48168405ebb813354549118aab4db65
MD5 2cd8d3bd03d5e09232a63442ee81f814
BLAKE2b-256 6564d5d04a6fa48ed22bb82afe9106eff72ae6eceb3d36047269c4a21512556c

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0.tar.gz:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 05fbd7135350d5e9c92fb0553c22d1833949156a34543f69d4ecc7d3b35165bd
MD5 3f4cbd3ee15f325f506d80691a18d2ec
BLAKE2b-256 1ade6e30d869a364a65423834dd63ba13efe878d4d7e4e93b484fa60d402b120

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp314-cp314t-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp314-cp314t-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 64d90205ada624cbf4c23b23b17863f4d06af6595862e52d60a89d13550ffcb2
MD5 70645f77357bbe977876ac3d1b9da113
BLAKE2b-256 ca2b0311ac4d01a8f8566eac0b454e413b65731a9398d61ab35998f945170059

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp314-cp314t-macosx_15_0_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp314-cp314t-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 040e85976ca66ee11b35f0f9e9c4d3a4d7040b6851923c94546b06a66178f8a4
MD5 100f5a1e8f83fc2090e0a1bfd31fc11c
BLAKE2b-256 1dbdaf3082310bebafb96beb760e29e4670db1eb5eef2e6e27b526f23f9e04ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp314-cp314t-macosx_14_0_arm64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 733844cca9eda5127a6c75c0bb77673fcc4e2c1e2df7194d449a484df910a46e
MD5 401b6b664655a74fba5f1c5c20a925c4
BLAKE2b-256 f802c8699ec4d2ed0111bacf9e0987a42864b08e11b102489a90edfc121d0f47

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp314-cp314-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 2efec2407c9aa0dc5b9fb8cacffc76345848c02458259faa96b072f5baf3f4fc
MD5 1f0d32e4765d91f0c61fddb830aac8ac
BLAKE2b-256 6cb1b2a0c04fc10899bd035f8be8c1b31d3c6a3664167e9c6ac52ddb94ff3612

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp314-cp314-macosx_15_0_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 fadcba6f3590c6fed13d8baaf79c69fd92dd4dfee54eaffd64b6482f661fa091
MD5 397257ab396d4fdc2ae3eaf2245e420d
BLAKE2b-256 5998fa0fc741040f0b32063d1aed9495929e57c6b354d9cd7d590e61044e3da6

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp314-cp314-macosx_14_0_arm64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8ccd7f5d73d5b7d924cacf14833393931c13e6e13e3a3b9e70c946e76782c5a0
MD5 356d4de4215a15be83be77f8d0e07db7
BLAKE2b-256 e11b7467de79c53b26acb3332e2e287aa3159811e469a80b6e7fa300ac3a2355

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp313-cp313-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 12f564f973a34a0a6e8e3907bea15c40bc9ee0a35e7d59edff8b24aa48d5a03d
MD5 e1aa4ab306efc4afa61ba016987b0dcd
BLAKE2b-256 8818ccb0662445720a617988b65cdbf297f93f7e5fd3bbea81299f3890bd9029

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp313-cp313-macosx_15_0_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 51759a8369462ed067bb3b75594beb2bef5a237f1a2ea3939721f9ab6a773fb7
MD5 cf85c503707e3c894ec012c0b949d684
BLAKE2b-256 140c95247e5e87e5ed473c1ec16b368c7c442a24b69414665c3da3dc3253e67e

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp313-cp313-macosx_14_0_arm64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3bfccd17972fa842ae328926d2220affc47d5a07bad22b01964979f9cb4df431
MD5 1803aee803c57984e2fc086b2a9644c7
BLAKE2b-256 554a81b0d8d2cbdc190e27bf8f0a7461a5c2ad1e65d14782b113eb2b875ee848

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp312-cp312-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 7c302f3abaa60dd76d2c407751ee186a1f47f4e41e48cec09f8611f8fa5a6813
MD5 33d3cd3b93574188bfbc5e50d49acd99
BLAKE2b-256 b6793164ef4d87fc34b0457720c669c7d32b9191c56615df4d8db7fb24fd950e

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp312-cp312-macosx_15_0_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 9d8e9bd09ce291cf501395bc8a8c352d2687a2dd321bbe25386fb71520d976ef
MD5 f53c999b1f173370556c9b8f2752bed5
BLAKE2b-256 ea9290e1152707b958db6568e1c55e85df12c9a08315d3056e74aad282352a96

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d7b63c153c039f28804c347e7a6bc82942c9494d76d361980b7cd7535eaad27c
MD5 9ed9a8ddac8b6fab427731b0fc55bf8c
BLAKE2b-256 6b6df51369b57a88362f85203eb8a396047fc49889af18b80deccc9d368bb533

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp311-cp311-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 5aeaf646ac8efad21807cf327b3c52b713cb2e3a48f9057e8b6ecff05af62137
MD5 f6641147848f61cc3fb616a8fe6b8b77
BLAKE2b-256 9feab58e8843b11292628bf029ba299905822ebd240ddf64138d23e435b74f5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp311-cp311-macosx_15_0_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d6573a3d82ea01fe4b6f9368e525f634abb39db9322de6752a249bd6b224d5e0
MD5 fc2b131dccb3f2de61b8d98ca0cc5c30
BLAKE2b-256 52aad8095cfbc87061120ad1e260948f405439270ae5ce820bc32b9e833e0a63

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cd0da0a0e61ed2650260be0f0dc721eb2507afbad8174290c0bc65c19ddac159
MD5 b7fb4dd4d7f88313c3f33a0f9be42235
BLAKE2b-256 b295ee376e551cd70a36304adfe242eaee3aeeb6ee3f9f3ed60207256f02da5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp310-cp310-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 62ced87b932b9fb5bfdcd8d7e9e73e729ebafb325ec4c5d4d4ef0c8358c09a75
MD5 515ca9e70c89edb34a914eaba3b9fd3c
BLAKE2b-256 a665980edbadb70e6374ba18bc16b5a9362ddb3fd266608076175e4239ad048f

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp310-cp310-macosx_15_0_x86_64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vmecpp-0.5.0-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for vmecpp-0.5.0-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 115425f7b78e9eb2664e16a693e22114978a3751e2195616ff10c30f84a9ba95
MD5 70efa0b8ebda71cbea4463697870a1a9
BLAKE2b-256 189a1e397a21404f734dc7724101df0bfbec611a2de1c183935957367780804e

See more details on using hashes here.

Provenance

The following attestation bundles were made for vmecpp-0.5.0-cp310-cp310-macosx_14_0_arm64.whl:

Publisher: pypi_publish.yml on proximafusion/vmecpp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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