Skip to main content

A PyQt widget to display crystal structures

Project description

Latest Release Unit Tests Contributions PyPI package Packaging status

fastmolwidget

A PyQt/PySide6 widget to display crystal structures

fastmolwidget is a lightweight, embeddable Qt widget that renders molecular and crystal structures in both 2D projection and 3D OpenGL. It supports anisotropic displacement parameter (ADP) ellipsoids, ball-and-stick diagrams, and plain sphere representations. The 2D backend uses a pure-Python QPainter renderer (no OpenGL required); the 3D backend uses hardware-accelerated OpenGL with sphere and ellipsoid impostors.

Screenshots

2D (QPainter) 3D (OpenGL)
Fastmolwidget 2D ORTEP view Fastmolwidget 3D OpenGL view
ORTEP-style crystal structure with ADP ellipsoids (2D QPainter backend) Real-time 3D ball-and-stick view with depth-shaded spheres and cylinder bonds (OpenGL backend)

Features

  • ADP ellipsoids at the 50 % probability level
  • Ball-and-stick and isotropic sphere
  • Real-time 3D rendering via MoleculeWidget3D — sphere impostors and tessellated cylinder bonds in hardware-accelerated OpenGL
  • Interactive mouse controls: rotate (left-drag), zoom (right-drag), pan (middle-drag), scroll wheel to resize labels
  • Atom and bond selection: single click or Ctrl+click for multi-selection; emits atomClicked / bondClicked Qt signals
  • Hover labels: hovering over an atom shows its label; hovering over a bond shows the distance in Ångströms
  • Hydrogen visibility toggle
  • Atom label display toggle with adjustable font size
  • Bond width adjustment via spin box
  • Configurable bond color — set programmatically or via the control-bar color picker
  • Multiple file formats: CIF, SHELX .res/.ins, and plain XYZ. More to come...
  • Embeddable — both MoleculeWidget (2D) and MoleculeWidget3D (3D) are plain QWidget subclasses; drop either into any layout
  • Ready-to-use viewersMoleculeViewerWidget (2D) and MoleculeViewer3DWidget (3D) bundle the renderer with a full control bar
  • Common protocolMoleculeWidgetProtocol lets you write code that works with either widget interchangeably

Supported File Formats

Extension Format Notes
.cif Crystallographic Information File Reads atoms, unit cell, and ADPs
.res / .ins SHELXL instruction file Reads atoms and unit cell via shelxfile
.xyz Standard XYZ coordinate file Cartesian coordinates, no cell or ADPs

Installation

# with PySide6 (recommended)
uv add "fastmolwidget[pyside6]"

# or PyQt6
uv add "fastmolwidget[pyqt6]"

# add 3D OpenGL support
uv add "fastmolwidget[pyside6,gl3d]"

Optional C++ Acceleration (sdm_cpp)

The symmetry-growing step (SDM) has an optional C++ extension that uses pybind11 and OpenMP for a significant speed-up on large structures. The pure-Python fallback is always available.

uv pip install pybind11
uv pip install -e . --no-build-isolation

# macOS: optionally install libomp for multi-threaded acceleration
brew install libomp

Requirements: Python ≥ 3.12, NumPy, gemmi, shelxfile, qtpy, and either PySide6 or PyQt6.

Quick Start

Standalone 2D viewer

from qtpy.QtWidgets import QApplication
from fastmolwidget import MoleculeViewerWidget

app = QApplication([])
viewer = MoleculeViewerWidget()
viewer.load_file("structure.cif")
viewer.show()
app.exec()

Standalone 3D viewer

from qtpy.QtWidgets import QApplication
from fastmolwidget import MoleculeViewer3DWidget

app = QApplication([])
viewer = MoleculeViewer3DWidget()
viewer.load_file("structure.cif")
viewer.show()
app.exec()

Embedding the 3D widget in your own layout

from fastmolwidget import MoleculeWidget3D

mol = MoleculeWidget3D(parent=self)
mol.open_molecule(atoms, cell=cell, adps=adps)
layout.addWidget(mol)

Embedding in your own layout (2D)

from fastmolwidget import MoleculeWidget, MoleculeLoader

mol = MoleculeWidget(parent=self)
loader = MoleculeLoader(mol)
# The loader recognizes the file format from the extension and populates `mol` accordingly
loader.load_file("structure.cif")

# drop `mol` into any QLayout
layout.addWidget(mol)

Loading a different file at runtime

viewer.load_file("new_structure.res")

Reacting to atom / bond clicks

mol.atomClicked.connect(lambda label: print(f"Clicked atom: {label}"))
mol.bondClicked.connect(lambda a, b: print(f"Clicked bond: {a}{b}"))

Mouse Controls

Action Effect
Left-drag Rotate the molecule
Right-drag Zoom in / out
Middle-drag Pan the view
Middle-click Recentre the rotation pivot on the clicked atom (3D only)
Alt/Option + Left-click On systems without a middle mouse button, Alt/Option + Left-click recentres the rotation pivot on the clicked atom (same as Middle-click)
Scroll wheel Increase / decrease label font size
Left-click Select a single atom or bond
Ctrl + Left-click Toggle multi-selection
Hover over atom Show the atom label (enlarged when persistent labels are on)
Hover over bond Show the bond distance (Å) in a rounded tooltip near the cursor

Keyboard Shortcuts

The widget must have keyboard focus (click on it once) for these shortcuts to work.

Key Effect
F1 Align the view so that the reciprocal axis a* points towards the viewer (requires a unit cell)
F2 Align the view so that the reciprocal axis b* points towards the viewer (requires a unit cell)
F3 Align the view so that the reciprocal axis c* points towards the viewer (requires a unit cell)

Note: The F-key shortcuts are available in both the 2D (MoleculeWidget) and 3D (MoleculeWidget3D) renderers. They have no effect when no unit cell is loaded (e.g. plain XYZ files).

Control Bar Options

MoleculeViewerWidget (2D) and MoleculeViewer3DWidget (3D)

Both viewers expose the same two-row control bar:

Row 1 — structure toggles

Control Default Description
Open File… Opens a file dialog to load a structure file
Grow Expand the asymmetric unit to complete molecules (mutually exclusive with Pack Unit Cell)
Pack Unit Cell Generate all symmetry-equivalent positions within one unit cell (mutually exclusive with Grow)
Show ADP Toggle ORTEP ellipsoid / isotropic sphere rendering
Show Labels Toggle non-hydrogen atom labels
Hide Hydrogens When checked, hydrogen atoms and their bonds are hidden

Row 2 — bond and view controls

Control Default Description
Bond Width 3 Stroke width / cylinder radius for bonds (2D: 1–15, 3D: 0–15)
Bond Color Opens a colour picker to change the default bond colour
Reset Rotation Center Restores the rotation pivot to the molecule's geometric centre (both 2D and 3D)
Save Image… Opens a file-save dialog and writes the current view to a PNG or JPEG file

When Pack Unit Cell is active, a unit-cell axis indicator (a = red, b = green, c = blue) is drawn in the bottom-left corner of the widget and rotates with the view.

API Overview

MoleculeViewer3DWidget(parent=None)

A self-contained 3D viewer combining MoleculeWidget3D with the control bar.

  • load_file(path) — load a structure file (format auto-detected from extension: .cif, .res, .ins, .xyz)
  • set_bond_color(color) — set the default color for non-selected bonds
  • render_widget — read-only property exposing the underlying MoleculeWidget3D

MoleculeWidget3D(parent=None)

Hardware-accelerated OpenGL renderer. A QOpenGLWidget (Qt ≥ 6) or QWidget subclass that can be dropped into any layout.

Rendering technique

Primitive Technique
Atoms Billboard sphere impostors — each atom is a quad; the fragment shader ray-casts a sphere and writes corrected depth values
ADP ellipsoids Impostor quads — the fragment shader ray-casts an exact ellipsoid using the inverse U_cart tensor passed as a mat3 uniform
Bonds Tessellated cylinder mesh (8-segment, 4-segment for angular style) built on the CPU and uploaded as a single VBO
Labels QPainter overlay drawn after the OpenGL pass

All GLSL shaders target #version 120 (OpenGL 2.1 / GLSL 1.20) for maximum hardware compatibility.

Qt Signals

Signal Signature Emitted when
atomClicked (label: str) The user clicks on an atom
bondClicked (label1: str, label2: str) The user clicks on a bond

Data Methods

  • open_molecule(atoms, cell=None, adps=None, keep_view=False)
    Load a new set of atoms and redraw.

    • atoms — list of Atomtuple(label, type, x, y, z, part) in Cartesian coordinates (Å)
    • cell — optional (a, b, c, α, β, γ) tuple; required for ADP rendering
    • adps — optional dict mapping atom labels to (U11, U22, U33, U23, U13, U12) tensors
    • keep_view — preserve current zoom, rotation, and pan when True
  • grow_molecule(atoms, cell=None, adps=None)
    Replace atoms while preserving the view. Equivalent to open_molecule(..., keep_view=True).

  • clear()
    Remove all atoms and bonds.

Display Methods

  • show_adps(value: bool) — toggle ADP ellipsoid rendering; falls back to isotropic spheres when False
  • show_labels(value: bool) — show / hide atom labels
  • show_hydrogens(value: bool) — show / hide hydrogen atoms and bonds
  • set_bond_width(width: int) — set cylinder radius scale (1–15)
  • set_bond_color(color) — set the default color for non-selected bonds; accepts QColor, hex string, or an RGB tuple
  • set_labels_visible(visible: bool) — alias for show_labels
  • setLabelFont(font_size: int) — set label font pixel size
  • set_background_color(color: QColor) — change background colour
  • reset_view() — reset zoom, rotation, and pan to defaults
  • reset_rotation_center() — restore the rotation pivot to the molecule's geometric center (undoes a middle-click recentring)
  • save_image(filename: Path, image_scale: float = 1.5) — capture the current OpenGL framebuffer and write it to a PNG or JPEG file (format inferred from the file extension). The captured image is then scaled by image_scale using smooth bilinear filtering before saving. Labels appear in the saved image if they are active at the time of the call.

Example — feeding atom data directly to MoleculeWidget3D

from fastmolwidget import MoleculeWidget3D
from fastmolwidget.sdm import Atomtuple

mol = MoleculeWidget3D(parent=self)

atoms = [
    Atomtuple(label="C1", type="C", x=0.0, y=0.0, z=0.0, part=0),
    Atomtuple(label="O1", type="O", x=1.22, y=0.0, z=0.0, part=0),
    Atomtuple(label="H1", type="H", x=-0.5, y=0.94, z=0.0, part=0),
]

adps = {
    "C1": (0.02, 0.02, 0.02, 0.0, 0.0, 0.0),
    "O1": (0.03, 0.03, 0.03, 0.0, 0.0, 0.0),
}

cell = (5.0, 5.0, 5.0, 90.0, 90.0, 90.0)

mol.open_molecule(atoms=atoms, cell=cell, adps=adps)
mol.atomClicked.connect(lambda label: print(f"Selected: {label}"))

layout.addWidget(mol)

MoleculeViewerWidget(parent=None)

A self-contained 2D viewer combining MoleculeWidget with the control bar.

  • load_file(path) — load a structure file (format auto-detected from extension)
  • set_bond_color(color) — set the default color for non-selected bonds
  • render_widget — read-only property exposing the underlying MoleculeWidget

MoleculeWidget(parent=None)

The 2D QPainter renderer. A plain QWidget subclass you can drop into any layout.

Qt Signals

Signal Signature Emitted when
atomClicked (label: str) The user clicks on an atom; label is the atom name (e.g. "C1")
bondClicked (label1: str, label2: str) The user clicks on a bond; both atom labels are passed

Data Methods

  • open_molecule(atoms, cell=None, adps=None, keep_view=False)
    Load a new set of atoms and reset (or optionally preserve) the view.

    • atoms — list of Atomtuple(label, type, x, y, z, part) in Cartesian coordinates (Å)
    • cell — optional (a, b, c, α, β, γ) tuple of unit-cell parameters (Å / °); required for ADP rendering
    • adps — optional dict mapping atom labels to (U11, U22, U33, U23, U13, U12) ADP tensors
    • keep_view — when True, the current zoom, pan, and rotation are preserved (useful for live updates)
  • grow_molecule(atoms, cell=None, adps=None)
    Replace the atom set while always preserving the current view.
    Equivalent to calling open_molecule(..., keep_view=True).

  • clear()
    Remove all atoms and bonds from the display.

Display Methods

  • show_adps(value: bool)
    Toggle ORTEP-style ADP ellipsoid rendering. When False, atoms are drawn as isotropic spheres.

  • show_labels(value: bool)
    Show or hide non-hydrogen atom labels.

  • show_hydrogens(value: bool)
    Show or hide hydrogen / deuterium atoms and their bonds.

  • set_bond_width(width: int)
    Set the stroke width for bonds in pixels (valid range: 1–15).

  • set_bond_color(color)
    Set the default color for non-selected bonds. Accepts QColor, hex string (e.g. "#d1812a"), or an RGB tuple (floats in [0..1] or integers in [0..255]).

  • set_labels_visible(visible: bool)
    Alias for show_labels.

  • setLabelFont(font_size: int)
    Set the pixel size used for atom labels.

  • set_background_color(color: QColor)
    Change the widget background color.

  • reset_view()
    Reset zoom, pan, and rotation to their defaults.

  • save_image(filename: Path, image_scale: float = 1.5)
    Render the current structure view to an image file.
    The widget is redrawn off-screen at widget_size × image_scale; the result is saved as PNG or JPEG (format inferred from the file extension).
    Labels appear in the saved image if they are active at the time of the call.

Example — feeding atom data directly to MoleculeWidget (2D)

from fastmolwidget import MoleculeWidget
from fastmolwidget.sdm import Atomtuple

mol = MoleculeWidget(parent=self)

atoms = [
    Atomtuple(label="C1", type="C", x=0.0, y=0.0, z=0.0, part=0),
    Atomtuple(label="O1", type="O", x=1.22, y=0.0, z=0.0, part=0),
    Atomtuple(label="H1", type="H", x=-0.5, y=0.94, z=0.0, part=0),
]

# ADP tensors: {atom_label: (U11, U22, U33, U23, U13, U12)}
adps = {
    "C1": (0.02, 0.02, 0.02, 0.0, 0.0, 0.0),
    "O1": (0.03, 0.03, 0.03, 0.0, 0.0, 0.0),
}

cell = (5.0, 5.0, 5.0, 90.0, 90.0, 90.0)  # optional

mol.open_molecule(atoms=atoms, cell=cell, adps=adps)
mol.atomClicked.connect(lambda label: print(f"Selected: {label}"))

layout.addWidget(mol)

Advanced API

MoleculeWidgetProtocol

The core rendering interface is defined by MoleculeWidgetProtocol. Both MoleculeWidget (2D) and MoleculeWidget3D (3D) satisfy this protocol, making them drop-in replacements for each other.

from fastmolwidget.molecule_base import MoleculeWidgetProtocol
from fastmolwidget import MoleculeWidget3D

def do_something_with_widget(widget: MoleculeWidgetProtocol):
    ...

3D Application Example

import sys
from qtpy.QtWidgets import QApplication
from fastmolwidget import MoleculeViewer3DWidget

app = QApplication(sys.argv)
viewer = MoleculeViewer3DWidget()
viewer.load_file("examples/test_molecule.res")
viewer.show()
sys.exit(app.exec_())

3D Generic Widget Example

import sys
from qtpy.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from fastmolwidget import MoleculeWidget3D
from fastmolwidget.loader import MoleculeLoader

app = QApplication(sys.argv)

main_window = QMainWindow()
central_widget = QWidget(main_window)
layout = QVBoxLayout(central_widget)

# Create and configure the 3D molecule widget
molecule_widget = MoleculeWidget3D()
molecule_widget.set_bond_color("#FF5733")  # Example: set bond color to a shade of orange

# Load a molecule file (CIF, RES, or XYZ format)
loader = MoleculeLoader(molecule_widget)
loader.load_file("examples/test_molecule.res")

layout.addWidget(molecule_widget)
main_window.setCentralWidget(central_widget)

main_window.show()
sys.exit(app.exec_())

Running the Examples

To run the provided examples, you can use the following commands:

# 2D Viewer example
python -m fastmolwidget.examples.viewer_2d_example

# 3D Viewer example
python -m fastmolwidget.examples.viewer_3d_example

# Generic 3D Widget example
python -m fastmolwidget.examples.generic_3d_widget_example

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.

fastmolwidget-0.7.4-cp314-cp314-win_amd64.whl (170.9 kB view details)

Uploaded CPython 3.14Windows x86-64

fastmolwidget-0.7.4-cp314-cp314-musllinux_1_2_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

fastmolwidget-0.7.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

fastmolwidget-0.7.4-cp314-cp314-macosx_14_0_universal2.whl (254.2 kB view details)

Uploaded CPython 3.14macOS 14.0+ universal2 (ARM64, x86-64)

fastmolwidget-0.7.4-cp313-cp313-win_amd64.whl (168.2 kB view details)

Uploaded CPython 3.13Windows x86-64

fastmolwidget-0.7.4-cp313-cp313-musllinux_1_2_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

fastmolwidget-0.7.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

fastmolwidget-0.7.4-cp313-cp313-macosx_14_0_universal2.whl (254.2 kB view details)

Uploaded CPython 3.13macOS 14.0+ universal2 (ARM64, x86-64)

fastmolwidget-0.7.4-cp312-cp312-win_amd64.whl (168.2 kB view details)

Uploaded CPython 3.12Windows x86-64

fastmolwidget-0.7.4-cp312-cp312-musllinux_1_2_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

fastmolwidget-0.7.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

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

fastmolwidget-0.7.4-cp312-cp312-macosx_14_0_universal2.whl (254.1 kB view details)

Uploaded CPython 3.12macOS 14.0+ universal2 (ARM64, x86-64)

File details

Details for the file fastmolwidget-0.7.4-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 db3da7ac0a0b79dc332185ff0ecd6b8e2d82315c8b63027e7528429a7ee45888
MD5 5da6cd7282b7271a1a6fcedaf7450f04
BLAKE2b-256 2e4304c1a91342c91c9d386bb4a4f1383bcb36e3974032a5a5a5bf48e053a24e

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp314-cp314-win_amd64.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d694af02a6893bf64c6e4237f3fcf496a865540b4e1686abf1eb2646e8938669
MD5 7f33b8b0fd420731b3bc17f21a1ebad3
BLAKE2b-256 0fee0544847d625b63bdb58324a3d971b5e2fd052c1fb85bc1c56dc092b25c06

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0ded19ac757b4a88326ba0d662e763419452acb76dd13ddec3c8b1415fcdd221
MD5 165a7ec0fdaf5c3e1cfff69f07a3170b
BLAKE2b-256 6d5e2eadc214c33909071292f7d2b9df24c96773ef711a3bfeecc95e7be1b9bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp314-cp314-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp314-cp314-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 10dfc64899ec068d67769e8b27010860275a7e5cf6bc592eeedd156c7d2dad0b
MD5 0557af8b5a7d5b01e9f3fb496baf9eda
BLAKE2b-256 9289b87241c637cc3d6ca4294d81e15e7b3e6687f0d0f8e242b7ad75440a48f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp314-cp314-macosx_14_0_universal2.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f559aea0a5cebbc9d6852a8fd5cc861436ad3f3184f3e5b828690660723d6d2e
MD5 1fb36ea462f50307b3f2d84fcdddaaba
BLAKE2b-256 1eeb68fa842b7e47bf49680c9b630359ef293e8e093605a16402be17b92ce550

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp313-cp313-win_amd64.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fa11d434e7c11bc1c2334183bd0791d73049cbdbff680b6700f0952879b797bb
MD5 5584699392ae316a73f9fdc08a002065
BLAKE2b-256 cc80ecd7f0e3872d2fd53cc999fee043d8ca653cc081c611bb865c75a4bd9b47

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1864731b24bb0092b2e2e085152b16258fd10b3b5b54e51c6d96b12201d7ee7e
MD5 f33f20e3bf54919a1a63d621bf91404c
BLAKE2b-256 384da355ab06b0172c7ca14e75c5e8d6b6cd32c24707b79c024743d7eefd849a

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp313-cp313-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp313-cp313-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 d5c606002a3c3c1020773c289d6ce41dc8786b7d0d2bd2d959c769eb43d9013b
MD5 8679bbd3112047a8737839ebdc2f6c34
BLAKE2b-256 f5a6ad7c4243172ca65eace3dbcd7aba8aa0e9f3d755f52885c15c3a9c2ec9a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp313-cp313-macosx_14_0_universal2.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 757091fba8aa899e67bdcdbe3acd2632344481405a3fa6a65ec75d1969125334
MD5 2b94bcc7fc0204f8a2875841d66ffb1a
BLAKE2b-256 e61a9baf8c80f8aabee24d0dd8f6157d1eced621d26b2e6a1aee5eb5c44f1a58

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp312-cp312-win_amd64.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ad54d928d7c96d16adfe8dacdefc1364dd3c81047f222202c635273696eb2ecc
MD5 019ff1240b53121485249a76d9717f1b
BLAKE2b-256 92e271f4174e46873906ac52438c53666b8c9ff2cb88b9f86be4bccd35a3458d

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d3380307a1fddb239a2c2f8b616ba892e43cb92ab816b97fddfe71c6c76c71d5
MD5 081fb940541d231fc5c9387d3ae45451
BLAKE2b-256 aaa58a47807b1db9a31c994dde390d5c8cafa0c1b6f51dcbbf5b29533ef6dec7

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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

File details

Details for the file fastmolwidget-0.7.4-cp312-cp312-macosx_14_0_universal2.whl.

File metadata

File hashes

Hashes for fastmolwidget-0.7.4-cp312-cp312-macosx_14_0_universal2.whl
Algorithm Hash digest
SHA256 b821c6d2aa5b1ca7db376ad048091dba49926dc4c4f2ca4b861f7b0942335c68
MD5 1ba4f92a1c4242fb1276c2cb8d70a948
BLAKE2b-256 60c3330b0eb3d27f9c468c0b188c707eec12f73d689b3199101c81ff6b46aa54

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastmolwidget-0.7.4-cp312-cp312-macosx_14_0_universal2.whl:

Publisher: python-publish.yml on dkratzert/Fastmolwidget

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