Skip to main content

Extended XYZ file format tools

Project description

Extended XYZ specification and parsing tools

This repository contains a specification of the extended XYZ (extxyz) file format, and tools for reading and writing to it from programs written in C, Fortran, Python and Julia.

Using ASE? As of v0.3.0, extxyz is the standalone C parser with no ASE dependency, and a separate ase-extxyz package registers it as an ASE I/O plugin. Install both with pip install ase-extxyz and use ase.io.read("file.xyz", format="cextxyz").

Installation

Python

The latest development version can be installed via

pip install git+https://github.com/libAtoms/extxyz

This requires Python 3.10+ and a working C compiler, plus the PCRE2 and libcleri libraries. libcleri is included here as a submodule and will be compiled automatically, but you may need to install PCRE2 with something similar to one of the following commands.

brew install pcre2          # macOS with Homebrew
sudo apt-get install libpcre2-dev   # Ubuntu / Debian
vcpkg install pcre2:x64-windows     # Windows (via vcpkg)

Binary wheels for Linux, macOS (arm64 and x86_64), and Windows are built in the GitHub CI for each tagged release and bundle PCRE2 and libcleri, so an end-user pip install extxyz does not need either system library.

Stable releases are made to PyPI, so you can install with

pip install extxyz                # standalone parser, no ASE
pip install ase-extxyz            # ASE plugin (pulls in extxyz + ase)

The Python API on extxyz itself is the dict/array based Frame parser:

import extxyz
for frame in extxyz.iread_dicts('trajectory.xyz'):
    print(frame.natoms, frame.cell, list(frame.arrays))

For ASE-aware reading/writing see the ase-extxyz sibling package.

libextxyz C library and standalone executables

The C parser, the standalone libextxyz shared library, and the C-only cextxyz test driver are all Meson targets. To build them outside of the Python wheel flow:

meson setup builddir
meson compile -C builddir extxyz cextxyz       # libextxyz.{so,dylib,dll} + cextxyz
meson install -C builddir                      # installs libextxyz under --prefix

The Meson build picks up PCRE2 via pkg-config, falling back to a bundled WrapDB build of PCRE2 if no system copy is found.

Fortran bindings

To build the fextxyz executable demonstrating the Fortran bindings, you first need to compile QUIP's libAtoms library. QUIP now uses Meson too:

git clone --recursive https://github.com/libAtoms/QUIP
meson setup QUIP/builddir QUIP -Dgap=true -Dmpi=false
meson compile -C QUIP/builddir libAtoms f90wrap_stub

Then point this project's Meson build at the resulting library and module directories — the fextxyz target is opt-in via the quip_lib_dir and quip_mod_dir options:

QUIP_LIB_DIR=$PWD/QUIP/builddir/src/libAtoms
QUIP_MOD_DIR=$(find "$QUIP_LIB_DIR" -iname 'libatoms_module.mod' -printf '%h\n' | head -1)
meson setup builddir \
  -Dquip_lib_dir="$QUIP_LIB_DIR" \
  -Dquip_mod_dir="$QUIP_MOD_DIR"
meson compile -C builddir fextxyz

The Fortran bindings will later be moved to QUIP, since they are tied to QUIP's Dictionary and Atoms types.

Julia bindings

Julia bindings are distributed in a separate package, named ExtXYZ.jl. See its documentation for further details.

Usage

Usage of the Python package is similar to the ase.io.read() and ase.io.write() functions, e.g:

from extxyz import read, iread, write, ExtXYZTrajectoryWriter
from ase.build import bulk
from ase.optimize import BFGS
from ase.calculators.emt import EMT

atoms = bulk("Cu") * 3
frames = [atoms.copy() for frame in range(3)]
for frame in frames:
    frame.rattle()
    
write("filename.xyz", frames)

frames = read("filename.xyz") # all frames in file
atoms = read("filename.xyz", index=0) # first frame in file
write("newfile.xyz", frames)

traj = ExtXYZTrajectoryWriter("traj.xyz", atoms=atoms)
atoms.calc = EMT()
opt = BFGS(atoms, trajectory=traj)
opt.run(fmax=1e-3)

There is also an extxyz command line tool for testing purposes, see extxyz -h for help. This can alternatively be invoked via python -m extxyz.

Remaining issues

  1. make treatement of 9 elem old-1d consistent: now extxyz.py always reshapes (not just Lattice) to 3x3, but extxyz.c does not.
  2. Since we're using python regexp/PCRE, we could make per-atom strings be more complex, e.g. bare or quoted strings from key-value pairs. Should we?
  3. Decide what to do about unparseable comment lines. Just assume an old fashioned xyz with an arbitrary line, or fail? I don't think we really want every parsing breaking typo to result in plain xyz.
  4. Used to be able to quote with {}. Do we want to support this?

Extended XYZ specification

General formatting

  • Allowed characters: printable subset of ASCII, single byte
  • Allowed whitespace: plain space and tab (no fancy unicode nonbreaking space, etc)
  • Allowed end-of line (EOL) characters set by implementation + OS
    • pure python: whatever is used to return lines by file object iterator
    • low level c: fgets()
  • Blank lines: allowed only as 2nd line of each frame (for plain xyz) and at end of file

General definitions

  • regex: PCRE/python regular expression
  • Whitespace: regex \s, i.e. space and tab

Primitive Data Types

String

Sequence of one or more allowed characters, optionally quoted, but must be quoted in some circumstances.

  • Allowed characters - all except newline
  • Entire string may be surrounded by double quotes, as first and last characters (must match). Quotes inside string that are same as containing quotes must be escaped with backslash. Outermost double quotes are not considered part of string value.
  • Strings that contain any of the following characters must be quoted (not just backslash escaped)
    • whitespace (regex \s)
    • equals =
    • double quote ", must be represented by \"
    • comma ,
    • open or close square bracket [ ] or curly brackets { }
    • backslash, must be represented by double backslash \\
    • newline, must be represented by \n
  • Backslash \: only present in quoted strings, only used for escaping next character. All backslash escaped characters are the following character itself except \n, which encodes a newline.
  • Must conform to one of the following regex
    • quoted string: (")(?:(?=(\\?))\2.)*?\1
    • bare (unquoted) string: (?:[^\s=",}{\]\[\\]|(?:\\[\s=",}{\]\[\\]))+
  • only used in comment line key-value pairs, not per-atom data

Simple string

Sequence of one or more allowed characters, unquoted (so even outermost quotes are part of string), and without whitespace

  • allowed characters - regex \S, i.e. all except newline and whitespace
  • regex \S+
  • only used in per-atom data, not comment line key-value pairs

Logical/boolean

  • T or F or [tT]rue or [fF]alse or TRUE or FALSE
  • regex
    • true: (?:[tT]rue|TRUE|T)\b
    • false: (?:[fF]alse|FALSE|F)\b

Integer number

string of one or more decimal digits, optionally preceded by sign

  • regex [+-]?+(?:0|[1-9][0-9]*)+\b

Floating point number

  • optional leading sign [+-], decimal number including optional decimal point ., optional [dDeE] folllowed by exponent consisting of optional sign followed by string of one or more digits
  • regex
    • integer without leading sign bare_int = '(?:0|[1-9][0-9]*)'
    • optional sign opt_sign = '[+-]?'
    • floating number with decimal point float_dec = '(?:' + bare_int + '\.|\.)[0-9]*'
    • exponent exp = '(?:[dDeE]'+opt_sign+'[0-9]+)?'
    • end of number num_end = '(?:\b|(?=\W)|$)'
    • combined float regexp opt_sign + '(?:' + float_dec + exp + '|' + bare_int + exp + '|' + bare_int + ')' + num_end

Order for identifying primitive data types, accept first one that matches

  • int
  • float
  • bool
  • bare string (containing no whitespace or special characters)
  • quoted string (starting and ending with double quote and containing only allowed characters)

one dimensional array (vector)

sequence of one or more of the same primitive type

  • new style: opens with [, one or more of the same primitive type separated by commas and optional whitespace, ends with ]
  • backward compatible: opens with " or {, one or more of the same primitive types (all types allowed in {}, all except string in "") separated by whitespace, ends with matching " or }. For backward compatibility, a single element backward compatible array is interpreted as a scalar of the same type.
  • primitive data type is determined by same priority as single primitive item, but must be satisfied by entire list simultaneously. E.g. all integers will result in an integer array, but a mix of integer and float will result in a float array, and a mix of integer and valid strings will results in a string array.

two dimensional array (matrix)

sequence of one or more new style one dimensional arrays of the same length and type

  • opens with [, one or more new style one dimensional arrays separated by commas, ends with ]
  • all contained one dimensional arrays in a single two dimensional array must have same number and primitive data type elements, and will be promoted to other possible types if necessary to parse entire array. E.g. a row of integers followed by a row of strings will be promoted to a 2-d string array.

XYZ file

A concatenation of 1 or more FRAMES (below), with optional blank lines at the end (but not between frames)

FRAME

  • Line 1: a single integer <N> preceded and followed by optional whitespace
  • Line 2: zero or more per-config key=value pairs (see key-value pairs below)
  • Lines 3..N+2: per-atom data lines with M columns each (see Properties and Per-Atom Data below)

key=value pairs on second ("comment") line

Associates per-configuration value with key. Spaces are allowed around = sign, which do not become part of the key or value.

Key: bare or quoted string

Value: primitive type, 1-D array, or 2-D array. Type is determined from context according to order specified above.

Special key "Properties”: defines the columns in the subsequent lines in the frame.

  • Value is a string with the format of a series of triplets, separated by “:”, each triplet having the format: “<name>:<T>:<m>”.
    • The <name> (string) names the column(s), <T> is a one of “S”, “I”, “R”, “L”, and indicates the type in the column, “string”, “integer”, “real”, “logical”, respectively. <m> is an integer > 0 specifying how many consecutive columns are being referred to.
    • The sum of the counts "m" must equal number of per-atom columns M (as defined in FRAME)
  • If after full parsing the key “Properties” is missing, the format is retroactively assumed to be plain xyz (4 columns, Z/species x y z), the entire second line is stored as a per-config “comment” property, and columns beyond the 4th are not read.

Per-atom data lines

Each column contains a sequence of primitive types, except string, which is replaced with simple string, separated by one or more whitespace characters, ending with EOL (optional for last line). The total number of columns in each row must be equal to the M and to the sum of the counts "m" in the "Properties" value string.

READING ase.atoms.Atoms FROM THIS FORMAT

Specific keys indicate special values, with specific order for overriding

Key-value pairs:

  • Lattice -> Atoms.cell, optional [do we want to accept "cell" also?]
    • 3x3 matrix - rows are cell vectors [preferred]
    • 9-vector - 3 cell vectors concatenated [only for backward compat]
    • 3-vector - diagonal entries of cell matrix [?]
  • pbc -> Atoms.pbc, optional
    • 3-vector of bool
    • default [False]*3 if no Lattice, otherwise [True]*3
  • Calculator results, used to set SinglePointCalculator.results dict
    • all per-config properties in ase.calculator.all_properties, with same name
    • scalars, vectors - directly stored
    • stress
      • 6-vector Voigt
      • 9-vector, 3x3 matrix, stored as stress Voigt-6, fail if not symmetric
    • virial -> stress (to convert multiply by -1/cell_vol), same format as stress [warn/fail if stress also present, perhaps only if inconsistent?]

Properties keys (all types are per-atom), types are simple

  • Atoms
    • Z -> numbers
    • species -> numbers, fail if not valid chemical symbol [warn/fail if conflict with Z?]
    • pos -> positions
    • mass -> masses
    • velo -> momenta (get mass from atomic number if missing)
    • same name: initial_charges, initial_magmoms
  • Calculator.results
    • local_energy -> energies
    • forces -> forces [also support “force”? What about overriding, complain if inconsistent?]
    • same name: magmoms (scalar or 3-vector), charges

WRITING ase.atoms.Atoms TO THIS FORMAT

General considerations

  • platform-appropriate EOL
  • [require some specific whitespace convention?]
  • scalars
    • all strings are quoted
    • otherwise stored unquoted
  • arrays
    • use {} [or []?] container marks, comma separated (not backward compatible " and space separated forms)
  • Definitely store (naming as described below)
    • all "first-class" Atoms properties (cell, pbc, numbers, masses, positions, momenta [any others?])
    • all info keys that are scalar, 1-D, 2-D array of prim type
    • all arrays that are scalar (Natoms x 1) or 1-D array( Natoms x (m > 1)) of prim type, shape[1] mapped to number of columns and space separated, not using regular array notation
    • [optionally warn about un-representable quantities?]
  • all Calculator.results key-value pairs, per-config same as info, per-atom same as arrays
  • Perhaps store
    • all info keys, per-config calculator results that are not representable (i.e. not prim type scalar, 1-D, or 2-D for per-config only) but can be mapped to JSON, as string starting with "_JSON "
    • same for arrays [?]
  • In general, keep ASE data type/dimension, invert mapping of names for reading. For quantities that have multiple possible names, use:
    • Lattice, not cell, 3x3 matrix
    • velo, not momenta
    • stress, not virial, as 3x3 matrix [are we OK with this?]

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.

extxyz-0.3.0-cp313-cp313-win_amd64.whl (281.7 kB view details)

Uploaded CPython 3.13Windows x86-64

extxyz-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl (261.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

extxyz-0.3.0-cp313-cp313-macosx_15_0_x86_64.whl (286.6 kB view details)

Uploaded CPython 3.13macOS 15.0+ x86-64

extxyz-0.3.0-cp313-cp313-macosx_15_0_arm64.whl (267.2 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

extxyz-0.3.0-cp312-cp312-win_amd64.whl (281.7 kB view details)

Uploaded CPython 3.12Windows x86-64

extxyz-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl (261.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

extxyz-0.3.0-cp312-cp312-macosx_15_0_x86_64.whl (286.6 kB view details)

Uploaded CPython 3.12macOS 15.0+ x86-64

extxyz-0.3.0-cp312-cp312-macosx_15_0_arm64.whl (267.2 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

extxyz-0.3.0-cp311-cp311-win_amd64.whl (281.7 kB view details)

Uploaded CPython 3.11Windows x86-64

extxyz-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl (261.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

extxyz-0.3.0-cp311-cp311-macosx_15_0_x86_64.whl (286.6 kB view details)

Uploaded CPython 3.11macOS 15.0+ x86-64

extxyz-0.3.0-cp311-cp311-macosx_15_0_arm64.whl (267.2 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

extxyz-0.3.0-cp310-cp310-win_amd64.whl (281.7 kB view details)

Uploaded CPython 3.10Windows x86-64

extxyz-0.3.0-cp310-cp310-manylinux_2_28_x86_64.whl (261.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

extxyz-0.3.0-cp310-cp310-macosx_15_0_x86_64.whl (286.6 kB view details)

Uploaded CPython 3.10macOS 15.0+ x86-64

extxyz-0.3.0-cp310-cp310-macosx_15_0_arm64.whl (267.2 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

File details

Details for the file extxyz-0.3.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: extxyz-0.3.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 281.7 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for extxyz-0.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 986e965549d1a7b74b800f84a7cefcd80c63f85ec6b7a373d3a20ab3e657de77
MD5 b135c57f9a5c461cbf3212e01ed02b0f
BLAKE2b-256 2a5b48cc7c1266fe0662c574c66ab221ad517c5d2dc8082852c2d289c7612a79

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e6543b61d2d8071fb31c8866c5c93bb32f6a3461a766ac123899660542280499
MD5 c17f089670610914d5b234ceb9020091
BLAKE2b-256 1a6c35eda8f62b86d878de5a2581b99a8a1f2f1b9e0c66b2d440fa1b2bc2a7cf

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp313-cp313-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 63355e34495bef07bc54e50d638abc384cca9964c73840ebc9ba0bf7a40b4b48
MD5 d62609feb33a7fe06a937b5a67c29bc1
BLAKE2b-256 1e134f0144923130d6d596809baa8cbc985530c1ed86a04b35caa73fbe1e4c5b

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 825fceb7952081e181262c8a0f867e4629e9af41d70cefa18bc97e8bfe54e195
MD5 f2f3481ced8ba530b7aecfe65ee4a21e
BLAKE2b-256 3e8d661e9b23f81acc8909e15e86bcb1b204d659c69cfeaa3834f3205a3c5faf

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: extxyz-0.3.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 281.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for extxyz-0.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8717aaed30cb95afb3babf0fc8b6f973375fb3ad9e24376b2f1747a452cb74d2
MD5 e2fcbe3a9a7595d7631fdb465cc86ca0
BLAKE2b-256 436b7ee0c8739c0b83309c0628180513cc72297140804c30e9b482423add68c1

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5d545587b733baa6c5987ced64bcc2af43df1e253ff2e5fc7f11aee7604908a9
MD5 621494ba3a7f69f9c197ba957a1a1d0c
BLAKE2b-256 7792adf9283f3e8986051952048bb3c2b243d34da1f0ee43ff17420b28096f1a

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp312-cp312-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 5d216cef5d2c6c380b7edd42ba189c5222d00ce2cb19f450e5da97e94a1690bb
MD5 6205721f55d5925dfee74175c8bb3fa2
BLAKE2b-256 8f3be99ffd9363a91ca7675557aa2f0c4b32bef0a0f83832aa3f6e8dd6da1e15

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 ae9c99bc15d674da7bfc720e009a844ba996d999cbe2ecac304bbb063a5aa1d6
MD5 72220053469b7b68606918e1cd022c58
BLAKE2b-256 a8e48516305cc8edc32578a6f795cb02bb40a2b3336ca073c202c6d61cee4b04

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: extxyz-0.3.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 281.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for extxyz-0.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cd4d8f4b562d896fe2a5403b188a1a10af1d39f340bc0a2f864e5029161376d0
MD5 252095a9ddd4a8f7943e7053fa4cc34b
BLAKE2b-256 222c108132d73e29a090586ee7595e0165a30247ff64525d90dab5809bbbb426

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8bb43d2bd538e35fac1739f6e658c0d94ec21a45b15f244cbaa8214f195b49fd
MD5 fc5335086b7fe4c76ca3a94d36ec4672
BLAKE2b-256 2070d21f454675f7b5891815f566f943523347200b6e6cace89692a96521def9

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp311-cp311-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 f531a8283346f5fbec739f3e1d78b25495865495aebed664c33f353f86d9cc9d
MD5 73f227c72e739117906c421715945f08
BLAKE2b-256 31d9011ba2c37d9cb7065186af594f5c18cb3fa395ecd31d726cc9acc19fd0cd

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6706bb16e7b67c460220404f016deb7a5aa17347d6fa5337608ed7343956e7ef
MD5 c70f689f5a19a6008588fe7c560e3165
BLAKE2b-256 455c87b6939fa0057e362d134c43dff2a3f16234b279cf915ba5e83ce1fd2fc5

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: extxyz-0.3.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 281.7 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for extxyz-0.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 981dfac6978b20d810dccf08a408996950c3c0e94acb0ccf46d1db52c5ecd33a
MD5 228ebd314b587b9d725e500e88ff0e1a
BLAKE2b-256 b50e63c646e2518f3ddcc972016f011502a2d4d3ae68eb30ec291bc58a98d40f

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 582470936be21e06d4d5422782f238ac6188cd798203787e9e0d719440030e8d
MD5 8d38c9dcfdddf6b98501f323936adfc4
BLAKE2b-256 ddc02428ba80810da271bd2fe45a24d3f28aec703f4118a3a70922e266a8e11a

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp310-cp310-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 328d555dfd37e6365654c971964249698e46353190949fb4e01f3b8439938b5e
MD5 e8ed4673cdea50062d7b6f4302c6a433
BLAKE2b-256 7e5a22c6b7f6dafcdc86b5e64bbc0b526f0b37fe060c8bf43489ea69e5d4f721

See more details on using hashes here.

File details

Details for the file extxyz-0.3.0-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for extxyz-0.3.0-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4f0a037f83b7dc014697019500495f5543037a1815c2303d9c537980fec61505
MD5 3fff013f29eee7a5cb50c07a813eeb5a
BLAKE2b-256 4e7ec1c12dd4fdb5b3d5c5d918dc9fe9fcd0cf21a53deae3630ee07cd8e41d77

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