Skip to main content

gVirtualXray (gVXR) Bindings to simulate realist X-ray attenuation images in microseconds from triangle meshes.

Project description

gVirtualXray (gVXR): Virtual X-Ray Imaging Library on GPU

What does gVXR do?

gVirtualXRay (gVXR) is a C++ library to simulate X-ray imaging. It is based on the Beer-Lambert law to compute the absorption of light (i.e. photons) by 3D objects (here polygon meshes). It is implemented on the graphics processing unit (GPU) using the OpenGL Shading Language (GLSL).

SimpleGVXR is a smaller library build on the top of gVirtualXRay. It provides wrappers to Python, R, Ruby, Tcl, C#, Java, and GNU Octave.

What can you do with gVXR?

X-ray simulations created with gVirtualXRay have been used in a wide range of applications, including

  • real-time medical simulators,
  • proposing a new densitometric radiographic modality in clinical imaging,
  • studying noise removal techniques in fluoroscopy,
  • teaching particle physics and X-ray imaging to undergraduate students in engineering, and XCT to masters students,
  • predicting image quality and artifacts in material science, etc. gVXR has also been used to produce a high number of realistic simulated images in optimisation problems and to train machine learning algorithms, with applications in oncology and radiology in medicine as well as material science.

Further details are available in three community review articles:

Who is it for?

gVXR is an application programming interface (API). It is for software developers who wish to simulate realistic X-ray images in realtime when photon scattering is negligible. gVXR's features can be used in C++, Python, R, Ruby, Tcl, C#, Java, and GNU Octave. To simplify the setting up of a simulation, a user-friendly JSON file format has been designed (note: for Python only at the moment).

If programming is not your thing, check out WebCT, a feature-rich environment for previewing and simulating X-ray scans on the web browser.

Is gVXR available for free?

Yes, gVXR is open source. Its source code is available under the BSD 3-Clause License. For details on use and redistribution please refer to http://opensource.org/licenses/BSD-3-Clause.

Is gVXR available as a package that can be deployed without building it?

Python wheels are available on Python Package Index (Pypi). For other programming languages, you will have to build gVXR from the source code.

Is gVXR code publicly available to download?

Yes. It is hosted in an established third-party source code repository called SourceForge.

Installation

pip install gvxr

You may also install Numpy, tifffile and Matplotlib to run the test below.

pip install numpy matplotlib tifffile

Usage

There are 6 main steps to simulate an X-ray image:

  1. Create a renderer (OpenGL context): gvxr.createOpenGLContext()
  2. X-ray source:
    • Position
      • x: -40.0 cm,
      • y: 0.0 cm,
      • z: 0.0 cm,
      • gvxr.setSourcePosition(-40.0, 0.0, 0.0, "cm")
    • Shape:
      • cone beam: gvxr.usePointSource(), or
      • Parallel (e.g. synchrotron): gvxr.useParallelBeam();
  3. Spectrum:
    • monochromatic (0.08 MeV, i.e. 80 keV),
    • 1000 photons per ray,
    • gvxr.setMonoChromatic(0.08, "MeV", 1000)
  4. Detector:
    • Position:
      • x: 10.0 cm,
      • y: 0.0 cm,
      • z: 0.0 cm,
      • gvxr.setDetectorPosition(10.0, 0.0, 0.0, "cm")
    • Orientation:
      • 0, 0, -1
      • gvxr.setDetectorUpVector(0, 0, -1)
    • Resolution:
      • $640 \times 320$ pixels
      • gvxr.setDetectorNumberOfPixels(640, 320)
    • Pixel spacing:
      • 0.5, 0.5, mm
      • gvxr.setDetectorPixelSize(0.5, 0.5, "mm")
  5. Sample:
    • Welsh dragon in a STL file:
      • ID: "Dragon",
      • STL file: "input_data/welsh-dragon-small.stl",
      • Unit: mm,
      • gvxr.loadMeshFile("Dragon", "input_data/welsh-dragon-small.stl", "mm")
    • Material of the sample (ID = "Dragon"):
      • For a chemical element such as iron, you can use the Z number or symbol:
        • gvxr.setElement("Dragon", 26), or
        • gvxr.setElement("Dragon", "Fe")
      • For a compound such as water, do not forget to specify the density:
        • gvxr.setCompound("Dragon", "H2O")
        • gvxr.setDensity("Dragon", 1.0, "g/cm3")
        • gvxr.setDensity("Dragon", 1.0, "g.cm-3")
      • For a mixture such as Titanium-Aluminum-Vanadium alloy, do not forget to specify the density:
        • gvxr.setMixture("Dragon", "Ti90Al6V4")
        • gvxr.setMixture("Dragon", [22, 13, 23], [0.9, 0.06, 0.04])
        • gvxr.setMixture("Dragon", ["Ti", "Al", "V"], [0.9, 0.06, 0.04]) # Not yet implemented
        • gvxr.setDensity("Dragon", 4.43, "g/cm3")
        • gvxr.setDensity("Dragon", 4.43, "g.cm-3")
  6. Compute the corresponding X-ray image: xray_image = gvxr.computeXRayImage()

You can find the Jupyter Notebook of the example below at: https://github.com/effepivi/gvxr-demos/blob/main/training-course/02-first_xray_simulation.ipynb.

#!/usr/bin/env python3

# Import packages
import os
import numpy as np # Who does not use Numpy?

import matplotlib # To plot images
import matplotlib.pyplot as plt # Plotting
from matplotlib.colors import LogNorm # Look up table
from matplotlib.colors import PowerNorm # Look up table

# from tifffile import imwrite # Write TIFF files

from gvxrPython3 import gvxr # Simulate X-ray images

# Create an OpenGL context
print("Create an OpenGL context")
gvxr.createOpenGLContext();

# Create a source
print("Set up the beam")
gvxr.setSourcePosition(-40.0,  0.0, 0.0, "cm");
gvxr.usePointSource();
#  For a parallel source, use gvxr.useParallelBeam();

# Set its spectrum, here a monochromatic beam
# 1000 photons of 80 keV (i.e. 0.08 MeV) per ray
gvxr.setMonoChromatic(0.08, "MeV", 1000);
# The following is equivalent: gvxr.setMonoChromatic(80, "keV", 1000);

# Set up the detector
print("Set up the detector");
gvxr.setDetectorPosition(10.0, 0.0, 0.0, "cm");
gvxr.setDetectorUpVector(0, 0, -1);
gvxr.setDetectorNumberOfPixels(640, 320);
gvxr.setDetectorPixelSize(0.5, 0.5, "mm");

# Locate the sample STL file from the package directory
path = os.path.dirname(gvxr.__file__)
fname = path + "/welsh-dragon-small.stl"

# Load the sample data
if not os.path.exists(fname):
    raise IOError(fname)

print("Load the mesh data from", fname);
gvxr.loadMeshFile("Dragon", fname, "mm")

print("Move ", "Dragon", " to the centre");
gvxr.moveToCentre("Dragon");

# Material properties
print("Set ", "Dragon", "'s material");

# Iron (Z number: 26, symbol: Fe)
gvxr.setElement("Dragon", 26)
gvxr.setElement("Dragon", "Fe")

# Liquid water
gvxr.setCompound("Dragon", "H2O")
gvxr.setDensity("Dragon", 1.0, "g/cm3")
gvxr.setDensity("Dragon", 1.0, "g.cm-3")

# Titanium Aluminum Vanadium Alloy
gvxr.setMixture("Dragon", "Ti90Al6V4")
gvxr.setMixture("Dragon", [22, 13, 23], [0.9, 0.06, 0.04])
# gvxr.setMixture("Dragon", ["Ti", "Al", "V"], [0.9, 0.06, 0.04]) # Not yet implemented
gvxr.setDensity("Dragon", 4.43, "g/cm3")
gvxr.setDensity("Dragon", 4.43, "g.cm-3")

# Compute an X-ray image
# We convert the array in a Numpy structure and store the data using single-precision floating-point numbers.
print("Compute an X-ray image");
x_ray_image = np.array(gvxr.computeXRayImage()).astype(np.single)

# Update the visualisation window
gvxr.displayScene()

# Create the output directory if needed
if not os.path.exists("output_data"):
    os.mkdir("output_data")

# Save the X-ray image in a TIFF file and store the data using single-precision floating-point numbers.
gvxr.saveLastXRayImage('output_data/raw_x-ray_image-02.tif')

# The line below will also works
# imwrite('output_data/raw_x-ray_image-02.tif', x_ray_image)

# Save the L-buffer
gvxr.saveLastLBuffer('output_data/lbuffer-02.tif');

# Display the X-ray image
# using a linear colour scale
plt.figure(figsize=(10, 5))
plt.title("Image simulated using gVirtualXray\nusing a linear colour scale")
plt.imshow(x_ray_image, cmap="gray")
plt.colorbar(orientation='vertical');
plt.show()

# using a logarithmic colour scale
plt.figure(figsize=(10, 5))
plt.title("Image simulated using gVirtualXray\nusing a logarithmic colour scale")
plt.imshow(x_ray_image, cmap="gray", norm=LogNorm(vmin=x_ray_image.min(), vmax=x_ray_image.max()))
plt.colorbar(orientation='vertical');
plt.show()

# using a Power-law colour scale (gamma=0.5)
plt.figure(figsize=(10, 5))
plt.title("Image simulated using gVirtualXray\nusing a Power-law colour scale ($\gamma=0.5$)")
plt.imshow(x_ray_image, cmap="gray", norm=PowerNorm(gamma=1./2.))
plt.colorbar(orientation='vertical');
plt.show()

# Display the X-ray image and compare three different lookup tables
plt.figure(figsize=(17, 7.5))

plt.suptitle("Image simulated with gVirtualXray visualised", y=0.75)

plt.subplot(131)
plt.imshow(x_ray_image, cmap="gray")
plt.colorbar(orientation='horizontal')
plt.title("using a linear colour scale")

plt.subplot(132)
plt.imshow(x_ray_image, norm=LogNorm(), cmap="gray")
plt.colorbar(orientation='horizontal')
plt.title("using a logarithmic colour scale")

plt.subplot(133)
plt.imshow(x_ray_image, norm=PowerNorm(gamma=1./2.), cmap="gray")
plt.colorbar(orientation='horizontal');
plt.title("using a Power-law colour scale ($\gamma=0.5$)")

plt.tight_layout()

plt.savefig("output_data/projection-02.pdf", dpi=600);

# Change the sample's colour
# By default the object is white, which is not always pretty. Let's change it to purple.
red = 102 / 255
green = 51 / 255
blue = 153 / 255
gvxr.setColour("Dragon", red, green, blue, 1.0)

# This image can be used in a research paper to illustrate the simulation environment, in which case you may want to change the background colour to white with:
gvxr.setWindowBackGroundColour(1.0, 1.0, 1.0)

# Update the visualisation window
gvxr.displayScene()

# Take the screenshot and save it in a file
screenshot = gvxr.takeScreenshot()
plt.imsave("output_data/screenshot-02.png", np.array(screenshot))

# or display it using Matplotlib
plt.figure(figsize=(10, 10))
plt.imshow(screenshot)
plt.title("Screenshot of the X-ray simulation environment")
plt.axis('off');
plt.show()


# Interactive visualisation
# The user can rotate the 3D scene and zoom-in and -out in the visualisation window.

# - Keys are:
#     - Q/Escape: to quit the event loop (does not close the window)
#     - B: display/hide the X-ray beam
#     - W: display the polygon meshes in solid or wireframe
#     - N: display the X-ray image in negative or positive
#     - H: display/hide the X-ray detector
# - Mouse interactions:
#     - Zoom in/out: mouse wheel
#     - Rotation: Right mouse button down + move cursor```
gvxr.renderLoop()

Awards & accolades

  1. 2nd place Eurographics 2009 - Medical Prize for "ImaGiNe-S : Imaging Guided Needle Simulation". DOI: 10.2312/egm.20091024
  2. Winner of Ken Brodlie Prize for best paper Theory and Practice of Computer Graphics 2009 (TPCG 2009) for "Simulation of X-ray Attenuation on the GPU". DOI: 10.2312/LocalChapterEvents/TPCG/TPCG09/025-032
  3. Winner of David Duce Prize for best short paper Computer Graphics and Visual Computing 2019 (CGVC 2019) for "Projectional Radiography Simulator: an Interactive Teaching Tool". DOI: 10.2312/cgvc.20191267
  4. Best poster presentation 6th Dimensional X-ray Computed Tomography Conference (dXCT 2022) for "WebCT: Fully Featured Browser-Based Interactive X-Ray Simulations for Scan Planning and Training".
  5. Runner-up award for best student presentation Image-Based Simulation for Industry (IBSim-4i) 2023 for "Creating Functional Digital Shadows of X-ray systems".
  6. 1st place CoSeC Impact Award 2023 for "Digital twins of industrial XCT scanners". URL: https://www.cosec.ac.uk/impact/cosec-announces-impact-award-for-2023/
  7. Best Presentation Award International Symposium on Machinery and Mechatronics for Agriculture and Biosystems Engineering (ISMAB) 2024 for "Enhancing Material Decomposition in spectral CT Imaging via Deep Learning".
  8. Best paper award for tomography outreach tools Developments in X-Ray Tomography XV, SPIE Optics & Photonics 2024 for "X-ray simulations with gVXR as a useful tool for education, data analysis, set-up of CT scans, and scanner development". DOI: 10.1117/12.3025315
  9. 3rd place Dirk Bartz Prize for Visual Computing in Medicine and Life Sciences 2025 (Eurographics Medical Prize) for "X-ray simulations with gVirtualXray in medicine and life sciences". DOI: 10.2312/evm.20251974

Build and test status of the trunk

gVirtualXRay may be built from source using CMake. The status of the latest build can be found on CDash.

gVXR is cross-platform: it runs on

  • MS Windows(Intel architecture only, it might work on ARM architecture too),
  • GNU/Linux (Intel & ARM architectures), and
  • MacOS computers (Intel architecture only).

It supports GPUs from any manufacturer. It can even run on platforms without GPUs (in this case, be patient as the CPU will be used).

gVXR is scalable: it runs on

  • Raspberry Pi,
  • laptops,
  • desktop PCs,
  • supercomputers, and
  • cloud infrastructures, including:
    • Google Colab,
    • Code Ocean, and
    • STFC cloud.

Containerization using Docker is even possible.

It should be possible to run it on other platforms, but this has not been tested.

How to cite

If you use gVXR in your own applications, particularly for research & development, I will be grateful if you could cite the articles as follows:

  • Seminal paper: F.P. Vidal, M. Garnier, N. Freud, J.M. Létang, and N.W. John: Simulation of X-ray attenuation on the GPU. Proceedings of Theory and Practice of Computer Graphics 2009, Eurographics Association, Cardiff, UK (2009), pp. 25-32, doi: 10.2312/LocalChapterEvents/TPCG/TPCG09/025-032
  • First reference to gVXR as an opensource software: F.P. Vidal and P.-F. Villard: Development and validation of real-time simulation of X-ray imaging with respiratory motion. Computerized Medical Imaging Graphics, 49 (2016), pp. 1-15, doi: 10.1016/j.compmedimag.2015.12.002
  • Clinical validation study: J.L. Pointon, T. Wen, J. Tugwell-Allsup, A. Sújar, J.M. Létang, and F.P. Vidal: Simulation of X-ray projections on GPU: Benchmarking gVirtualXray with clinically realistic phantoms. Computer Methods and Programs in Biomedicine, 234 (2023), pp. 107500, doi: 10.1016/j.cmpb.2023.107500
  • Comprehensive review paper: Vidal, F. P., Afshari, S., Ahmed, S., Albiol, A., Albiol, F., Béchet, É., … Villard, P.-F. (2025).: X-ray simulations with gVXR in education, digital twining, experiment planning, and data analysis Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms, vol. 568, article 165804, doi: 10.1016/j.nimb.2025.165804
@article{POINTON2023107500,
    title = {{Simulation of X-ray projections on GPU: Benchmarking gVirtualXray with clinically realistic phantoms}},
    journal = {Computer Methods and Programs in Biomedicine},
    volume = {234},
    pages = {107500},
    year = {2023},
    issn = {0169-2607},
    doi = {10.1016/j.cmpb.2023.107500},
    author = {Jamie Lea Pointon and Tianci Wen and Jenna Tugwell-Allsup and 
        Aaron S\'ujar and Jean Michel L\'etang and Franck Patrick Vidal}
}

@article{Vidal2016ComputMedImagingGraph,
    author = "Franck P. Vidal and Pierre-Frédéric Villard",
    title = "Development and validation of real-time simulation of X-ray imaging
    with respiratory motion ",
    journal = "Computerized Medical Imaging and Graphics ",
    year = "2016",
    volume = "49",
    pages = "1-15",
    month = apr,
    doi = "10.1016/j.compmedimag.2015.12.002",
    publisher = {Elsevier},
}

@inproceedings{Vidal2009TPCG,
    author = {F. P. Vidal and M. Garnier and N. Freud and J. M. L\'etang and N. W. John},
    title = {Simulation of {X-ray} Attenuation on the {GPU}},
    booktitle = {Proceedings of Theory and Practice of Computer Graphics 2009},
    year = 2009,
    pages = {25-32},
    month = jun,
    address = {Cardiff, UK},
    annotation = {Jun~17--19, 2009},
    note = {Winner of Ken Brodlie Prize for Best Paper},
    doi = {10.2312/LocalChapterEvents/TPCG/TPCG09/025-032},
    publisher = {Eurographics Association},
}

@article{Vidal2025NIMB,
	author = {Vidal, Franck P. and Afshari, Shaghayegh and Ahmed, Sharif and Albiol, Alberto and 
	    Albiol, Francisco and B{\'e}chet, {\'E}ric and Bellot, Alberto Corb{\'\i} and Bosse, Stefan and 
	    Burkhard, Simon and Chahid, Younes and Chou, Cheng-Ying and Culver, Robert and Desbarats, Pascal and 
	    Dixon, Lewis and Friemann, Johan and Garbout, Amin and Garc{\'\i}a-Lorenzo, Marcos and 
	    Giovannelli, Jean-Fran{\c c}ois and Hanna, Ross and Hatton, Cl{\'e}mentine and Henry, Audrey and 
	    Kelly, Graham and Leblanc, Christophe and Leonardi, Alberto and L{\'e}tang, Jean Michel and 
	    Lipscomb, Harry and Manchester, Tristan and Meere, Bas and Michelet, Claire and Middleburgh, Simon and 
	    Mihail, Radu P. and Mitchell, Iwan and Perera, Liam and Puig, Mart{\'\i} and Racy, Malek and 
	    Rouwane, Ali and Seznec, Herv{\'e} and S{\'u}jar, Aaron and Tugwell-Allsup, Jenna and 
	    Villard, Pierre-Fr{\'e}d{\'e}ric},
	doi = {10.1016/j.nimb.2025.165804},
	journal = {Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms},
	keywords = {X-ray imaging; Computed tomography; Simulation; GPU programming; Digital twinning; Registration; Machine learning},
	pages = {165804},
	title = {{X-ray simulations with gVXR in education, digital twining, experiment planning, and data analysis}},
	volume = 568,
	year = 2025
}

Scientific and Industrial Collaboration

If you are interested in any form of collaboration (e.g. to develop your own application), e.g. research papers or grant proposals, drop the package maintainer an email.

© Copyright 2011-2023, Dr Franck P. Vidal, School of Computer science and Electronic Engineering, Bangor University. All rights reserved

© Copyright 2024-, Prof Franck P. Vidal, Computed Tomography, Scientific Computing, Science and Technology Facilities Council (STFC). All rights reserved

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

gvxr-2.1.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl (29.4 MB view details)

Uploaded PyPymanylinux: glibc 2.34+ x86-64

gvxr-2.1.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl (29.0 MB view details)

Uploaded PyPymanylinux: glibc 2.34+ ARM64

gvxr-2.1.0-cp315-cp315t-manylinux_2_34_x86_64.whl (29.4 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.34+ x86-64

gvxr-2.1.0-cp315-cp315t-manylinux_2_34_aarch64.whl (29.0 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.34+ ARM64

gvxr-2.1.0-cp315-cp315-win_amd64.whl (25.0 MB view details)

Uploaded CPython 3.15Windows x86-64

gvxr-2.1.0-cp315-cp315-manylinux_2_34_x86_64.whl (29.4 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.34+ x86-64

gvxr-2.1.0-cp315-cp315-manylinux_2_34_aarch64.whl (29.0 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.34+ ARM64

gvxr-2.1.0-cp314-cp314t-manylinux_2_34_x86_64.whl (29.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.34+ x86-64

gvxr-2.1.0-cp314-cp314t-manylinux_2_34_aarch64.whl (29.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.34+ ARM64

gvxr-2.1.0-cp314-cp314-win_amd64.whl (25.0 MB view details)

Uploaded CPython 3.14Windows x86-64

gvxr-2.1.0-cp314-cp314-manylinux_2_34_x86_64.whl (29.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

gvxr-2.1.0-cp314-cp314-manylinux_2_34_aarch64.whl (29.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ ARM64

gvxr-2.1.0-cp313-cp313-win_amd64.whl (24.9 MB view details)

Uploaded CPython 3.13Windows x86-64

gvxr-2.1.0-cp313-cp313-manylinux_2_34_x86_64.whl (29.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

gvxr-2.1.0-cp313-cp313-manylinux_2_34_aarch64.whl (29.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ ARM64

gvxr-2.1.0-cp312-cp312-win_amd64.whl (24.9 MB view details)

Uploaded CPython 3.12Windows x86-64

gvxr-2.1.0-cp312-cp312-manylinux_2_34_x86_64.whl (29.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

gvxr-2.1.0-cp312-cp312-manylinux_2_34_aarch64.whl (29.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ ARM64

gvxr-2.1.0-cp311-cp311-win_amd64.whl (24.9 MB view details)

Uploaded CPython 3.11Windows x86-64

gvxr-2.1.0-cp311-cp311-manylinux_2_34_x86_64.whl (29.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

gvxr-2.1.0-cp311-cp311-manylinux_2_34_aarch64.whl (29.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ ARM64

gvxr-2.1.0-cp311-cp311-manylinux_2_28_x86_64.whl (29.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

gvxr-2.1.0-cp310-cp310-win_amd64.whl (24.9 MB view details)

Uploaded CPython 3.10Windows x86-64

gvxr-2.1.0-cp310-cp310-manylinux_2_34_x86_64.whl (29.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

gvxr-2.1.0-cp310-cp310-manylinux_2_34_aarch64.whl (29.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ ARM64

File details

Details for the file gvxr-2.1.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 9b30bc02bb18090f001c8e88e6f7266e2dba369cf698f2d177cb85d0dc8199ed
MD5 409b7a2fc61ae8ee3d242c82d0a1653e
BLAKE2b-256 5b7734a3cb3ff669da8c1c029522c5fd699a403a52de5e36001c45bea7cbf028

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 75585fa63b40616703405cec4f22b1b34ef03ebc200bbcb30e1ceec73b9a3023
MD5 f24f1442c56a4cb1bc05d758a9233ee3
BLAKE2b-256 bda781c98f99d840adb78d8786ebcd0fff9a93d97be126b36ba94b0534ce4051

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp315-cp315t-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp315-cp315t-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b51c73218f5a712552333aa2cecc2e1b472672ceb6ff4007d9d98f6591f7401a
MD5 d30fe6ac1e3a9957c9983f07a327c68e
BLAKE2b-256 7a5629225d31c746fa826dd5fa934caa43c1d228c4e5ef3aa2371d0588e27458

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp315-cp315t-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp315-cp315t-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 454b83f4e63dc3a645459769dd2cea21c242fe5296602ef54af8979b104b021a
MD5 c4dcdb344abeb3971db408a964dd6b68
BLAKE2b-256 8da27f68b8a9e0587f23144877c279b4c07cf7aff0f60bc4bbe679f83477a308

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp315-cp315-win_amd64.whl.

File metadata

  • Download URL: gvxr-2.1.0-cp315-cp315-win_amd64.whl
  • Upload date:
  • Size: 25.0 MB
  • Tags: CPython 3.15, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for gvxr-2.1.0-cp315-cp315-win_amd64.whl
Algorithm Hash digest
SHA256 2e9c91c9b92b81016731be86f951e1e85dd84bd8f2c0c2dd8c4d862ccacc03d7
MD5 ddabe2cc153dfaf2390d20cbeff51ec5
BLAKE2b-256 a3e1d72a7161a582f10079149e435bc643d2abbe89e1412a9b5b52e2ce8812ff

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp315-cp315-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp315-cp315-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 fa0b8212ff2485accb1843120f56ee7ace954502d6c6977c4b33b902d1e57c51
MD5 d0ae6207e99329a617791637134daa87
BLAKE2b-256 151bd7a8462a49b47d7af3c71b89e1ef7d30259cd10aa3f3d63bb2756f901907

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp315-cp315-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp315-cp315-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 8c0aff41890f44c2cd22ce331251ce289a9527ec66b61124bdfe45959063ccec
MD5 1958bc9a8e4dc215c53bf1f9c54b7618
BLAKE2b-256 c8536c876cb44e4e0c494418a81d99624ece89a0aee90681d999162970344a91

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp314-cp314t-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp314-cp314t-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b7a7e9deda9b123624d74606405b40570f18d43a0c5a7b3d4a96f9235bb3ac44
MD5 1e8d823ac77f483d0a421d49846f5b08
BLAKE2b-256 e56fd2a701ed95e6b54d8a427d417248f2875e08804e24e28e593e0950f47031

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp314-cp314t-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp314-cp314t-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 a7428b7c3ac5addd6b67e6d517dddbe97d45edf84843316e489501f1e517e866
MD5 95ba550e8fc499985bf35981dc0d0e11
BLAKE2b-256 9a3a241d9422403c40218f57ccce8a702b9e1e8dd4518f0df14613c981e7cd49

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: gvxr-2.1.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 25.0 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for gvxr-2.1.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 4cc4f8e16383bcc1ffdc6d5e92240a75f24ab7f1f0e1d2db213650a3986cbb9c
MD5 699cb13f2ce86d1bfb7a3e3b81452088
BLAKE2b-256 90b5ec1e8141df411ea15f7adce6db6eee3869c97a0f7968ce9f6a0229abdd4b

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 562a2da38a80cdbeaf69579b101baeb2320e822e31ac394de12aca61688f05ea
MD5 0dd6bd2f8b676d7e03a2ceec8397ffaf
BLAKE2b-256 d8e72b69bb6853c1630869813bf025113999ddc0a97cf52b4f5d05cd4cce3a27

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp314-cp314-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp314-cp314-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 d2d7d15aca82a63e1e34550372d9669b4e15bd8e8a58c9b01e49a872fd5d9d25
MD5 55c046ee3de0f439b719d9bc241be399
BLAKE2b-256 5f14d2706a2c90aa47ab22a4e3c04304907acfbea5e5cbe3b80acb8e17ba119a

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: gvxr-2.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 24.9 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for gvxr-2.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 cf620a9fc392bd86bdaf8c0cf2d6a421d1a90fa5c3bd9af793026467f85a1339
MD5 a5d38cf627d79c6130267ca50672ac55
BLAKE2b-256 2a22f5d8bb189d069eed03566fb83df5e2d4800816b5a207aca6d43515d64e46

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 10a45c1b43a6a3213d552f2a0d29fb599b4cafd49568cbba822f0b5050eb2894
MD5 9b2f376f8cfa2188ddd566752062b2df
BLAKE2b-256 21c7cb312c81eec82788aca5301f7897303034329dc4d2d199ae1e0e34593b13

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp313-cp313-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp313-cp313-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 b19319c135518350cb3c11c72d935a35b069c8444679413a7a39cffe4f10783f
MD5 f87ec5c8d806d63c108cf4032e178d54
BLAKE2b-256 41e8e2ec5b7d5f24b458ce5aed88b9b24726edc255c8ccbad1c935e18b97f089

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: gvxr-2.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 24.9 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for gvxr-2.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3ec146321b7875552f33c4b8aa5dc602bf676354b075c65ca51d7c234b079440
MD5 d25fd4fc3ce4231834fde944c2f407bc
BLAKE2b-256 11cdb20214be40fb469c2ee12b2cf4dfd337cf11222d7b81b1f1578323e5ae4a

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 9345a3be3c976f8d6277a32682f07ff0932c8030052e325237895a1b4cae05ea
MD5 a7c537efeb132e8b7e41683474261044
BLAKE2b-256 c234ac476a602b7652484b8caa88c1090a1b1cf1f124e34d6e4e7acf958d2824

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp312-cp312-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp312-cp312-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 3531479edf13aa5ba98fbe9cd032963ae66b5e84815d7fadff0ce48c15938778
MD5 ba8f50d32625c220a5059c2875a78577
BLAKE2b-256 24c73b00a07fcd3909c8c42acbfaefbb4e37165438bc9408af4ea86bf8239756

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: gvxr-2.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 24.9 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for gvxr-2.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 53e175dc6d541d77f7479e17ee365fb35824322520901056ce4631ea16dd6e6f
MD5 3bb14790e95e3382548d3cb2146b82f4
BLAKE2b-256 85ebd01f52dae1271be9da8d519868d2e4e3c9765a47d8e466b840e4f8ee9411

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 a4bbbc665318c840b002b2a11649536af51beb112a3b66f0a373a604517ea264
MD5 41d4ddb1de893c9caa9a8af135cebdb8
BLAKE2b-256 28a2566c151b1f3f43197f6b58b1a1abaed50bd819112e8654ccfaaf8eca0f65

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp311-cp311-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp311-cp311-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 328aba16ae9fa2b0f828b820c6c846a827b3f10bf0b2a0a4750ca50df4b233d7
MD5 c62ed253b2aa66d0daa0feba9e1109b1
BLAKE2b-256 7a50cb7c1b9a29d38eb67de2ce44cc33c8abbb4ca731318994db0978c7ae3085

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 17df8e0772c82d6728d0992742f6a8ed6b7bd6b512bd773e172a8e2869e3d3ab
MD5 03a2f670c0a63e1d7a30e71af75745cf
BLAKE2b-256 919d99892d4444f0e28b51c0739c7b29ab18c16028c072be7b6fe9443cbf0922

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: gvxr-2.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 24.9 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for gvxr-2.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d41de74cd6efc48fcd779398c0cd3279ac53bffe0106ad91154c53b821aee395
MD5 87be3a64d6dbf7fc46a2398a79810838
BLAKE2b-256 5195c089011490b1e7afe20f9e48e131aac2e606fbc26ba0501f4e19c8666273

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 091115cc66572cf71555f135377e9c086e2eb7357cf297ddcfde71ecfb0fdf5b
MD5 42ba1f89a2bfaeacd2c045f330818c34
BLAKE2b-256 2f988e857c370ee6bab19f2acce2cb757f407e8296745f677789c551dc068220

See more details on using hashes here.

File details

Details for the file gvxr-2.1.0-cp310-cp310-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for gvxr-2.1.0-cp310-cp310-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 4e3014208598c15160c8721b8fe7b4366cb53bbd1701d99fc9c45bb16e20bbc1
MD5 8a1801f05f20a210fc34f34df123449a
BLAKE2b-256 2fec2fac844c06092335355ae65a75e9d10f58b7a765315fbfe038a3bc4b65e1

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