Skip to main content

Python bindings for the nmhit NEML2-flavored HIT parser

Project description

neml2-hit

A standalone C++17 parser for a NEML2-flavored dialect of HIT (Hierarchical Input Text) — the hierarchical input format used by MOOSE. This library provides a self-contained, opinionated implementation tailored for use in NEML2 and related projects. It differs from the upstream MOOSE HIT parser in syntax restrictions and API design choices; it is not a general-purpose drop-in replacement. The library depends on Flex & Bison.

The public C++ namespace is nmhit ("NEML2 HIT").


HIT Format

HIT is a simple, human-readable format for hierarchical configuration. A file is a flat sequence of items — sections, key-value fields, comments, blank lines, and file includes — which together form a tree.


Syntax Reference

Comments

A # character begins a comment that extends to the end of the line. Comments are preserved in the AST and are reproduced by render().

# This is a comment
key = value  # inline comments are not supported; this text is part of the value

Note: # is a reserved character in all value positions. It cannot appear inside an unquoted string value or an array element.

Blank lines

One or more consecutive blank lines are preserved as a single Blank node and are reproduced by render().

Sections

A section groups related fields and nested sub-sections.

[section_name]
  key = value
  nested_key = 42
[]

Every section must be closed with []. There is no [../] or [./name] syntax.

Path splitting. A slash in the section header creates the corresponding nesting in the AST:

[mesh/generator]
  type = CartesianMesh
[]

is equivalent to:

[mesh]
  [generator]
    type = CartesianMesh
  []
[]

Sections may appear at the top level or nested inside other sections. Fields and nested sections can appear in any order within a section body.

Fields

A field assigns a value to a name.

key = value

Identifier characters. A field name may contain letters, digits, and any of . / : < > + - * ! _. Slashes in a field name trigger path splitting (see below).

Path splitting. A slash in the field name creates intermediate Section nodes in the AST:

[solver]
  linear/max_iter = 100
[]

is equivalent to:

[solver]
  [linear]
    max_iter = 100
  []
[]

Override assignment. The operators := and :override= are both accepted. The library implements last-override-wins semantics directly: the earlier occurrence of the field is removed from the tree, leaving only the overriding value.

max_iter := 200
max_iter :override= 200   # identical meaning

Values

Every value is one of the following kinds.

Integer

An optional sign followed by one or more decimal digits.

n = 42
n = -7
n = +0

Floating-point number

Standard decimal notation with an optional sign and optional exponent.

x = 3.14
x = -1.0e-3
x = .5
x = 2.
x = 1e10

At least one digit must appear on one side of the decimal point, or an exponent must be present.

The value is stored verbatim as a string. At interpretation time:

  • param<double>() parses it as a 64-bit IEEE 754 double-precision value.
  • param<float>() parses it as double first, then narrows to 32-bit single precision. Values outside the float range become ±inf; values that are representable in double but not exactly in float are rounded to the nearest float.

Boolean

Exactly the two lowercase literals true and false. No other strings (including yes, no, on, off, or any capitalised variant) are accepted.

flag = true
flag = false

Unquoted string

Any sequence of non-whitespace characters that does not begin a number, boolean, quoted string, array, or brace expression, and contains none of [ # $ ' " \.

type = GeneratedMesh
label = some_label
path = /usr/local/share

Unquoted strings are single-line only — they cannot contain whitespace or newlines.

Array (1-D)

A whitespace-delimited sequence of elements enclosed in single quotes or double quotes — both delimiters are completely equivalent. Elements may be integers, floating-point numbers, or unquoted tokens (none of which may contain ;, #, $, ', ", or \).

vals   = '1 2 3'
floats = '1.0 2.5 3.14'
tags   = 'alpha beta gamma'

The two quote styles are interchangeable:

vals = '1 2 3'
vals = "1 2 3"   # identical meaning

An empty array is written as '' or "".

Array contents may span multiple lines — newlines inside the quotes are treated as whitespace:

vals = '
  1 2 3
  4 5 6
'

Array (2-D)

Rows are separated by ;. Each row is a whitespace-delimited sequence of elements, following the same rules as 1-D array elements.

matrix = '1 2 3; 4 5 6; 7 8 9'

The semicolons and surrounding whitespace (including newlines) are flexible:

matrix = '
  1 2 3;
  4 5 6;
  7 8 9
'

Every row must contain at least one element. Trailing semicolons (an empty last row) are a parse error.

Accessing a 2-D array value as a 1-D type (e.g. param<std::vector<int>>) will fail because the semicolons are stored as part of the raw value. Accessing a 1-D array as a 2-D type returns a single-row result.

Brace expressions

A ${...} expression is expanded at value-extraction time (i.e. when param<T>() is called). The raw token is stored in the AST as-is.

The following built-in commands are supported:

Expression Effect
${varname} Look up the field at path varname from the document root and return its string value.
${replace varname} Identical to ${varname}.
${env VARNAME} Substitute the environment variable VARNAME. Returns an empty string when unset.
${raw a b c} Concatenate all arguments literally: abc.

Brace expressions may be nested:

prefix = /opt
lib    = ${raw ${prefix} /lib}   # → /opt/lib

A brace expression may appear as the sole value of a field:

dim = ${mesh/dim}

File inclusion

!include relative/or/absolute/path.i

The referenced file is parsed recursively and its top-level items are spliced into the AST at the point of the !include directive. Relative paths are resolved against the directory of the including file.


Complete Grammar (EBNF)

file        = item* ;
item        = section | field | comment | blank | include ;
section     = '[' path ']' item* '[]' ;
field       = ident ('=' | ':=' | ':override=') value ;
quote       = "'" | '"' ;
value       = integer | float | bool | unquoted_str
            | brace_expr
            | quote array_row (';' array_row)* quote
            | quote quote ;
array_row   = array_elem+ ;
array_elem  = integer | float | unquoted_elem ;
include     = '!include' path ;
comment     = '#' <to end of line> ;
blank       = <two or more consecutive newlines> ;

path        = segment ('/' segment)* ;
segment     = <one or more non-whitespace, non-bracket characters> ;
ident       = [A-Za-z0-9_./<>+\-*!:]+ ;
integer     = [+\-]? [0-9]+ ;
float       = [+\-]? ( [0-9]* '.' [0-9]+ | [0-9]+ '.' [0-9]* ) ([eE] [+\-]? [0-9]+)?
            | [+\-]? [0-9]+ [eE] [+\-]? [0-9]+ ;
            (* stored verbatim; interpreted as double-precision (64-bit IEEE 754) by default,
               narrowed to single-precision (32-bit) when read as float *)
bool        = 'true' | 'false' ;
unquoted_str= [^ \t\n\r\[#$'"\\]+ ;
unquoted_elem=[^ \t\n\r;#$'"\\]+ ;
brace_expr  = '${' <content, brace-depth-tracked> '}' ;

C++ API

Parsing

Two entry points are provided to avoid ambiguity when passing string literals:

#include "nmhit/nmhit.h"

// Read and parse a file from disk.
// Throws nmhit::Error if the file cannot be opened or on syntax errors.
std::unique_ptr<nmhit::Node> root = nmhit::parse_file("my_file.i");

// Parse an in-memory string.
// !include paths are resolved relative to the current working directory.
std::unique_ptr<nmhit::Node> root = nmhit::parse_text("dim = 3\n");

Both functions accept optional pre/post string vectors for injecting HIT snippets (e.g. command-line overrides). All content is concatenated and parsed as a single document, so := override semantics apply globally across all sources:

std::vector<std::string> cli_overrides = { "solver/max_iter := 200" };
auto root = nmhit::parse_file("input.i", /*pre=*/{}, cli_overrides);
auto root = nmhit::parse_text(input_text, /*pre=*/{}, cli_overrides);

Reading values

// Resolve a slash-separated path and return a typed value.
// Throws nmhit::Error if the path does not exist or the value cannot be converted.
int    n  = root->param<int>("mesh/dim");
double x  = root->param<double>("solver/tol");
bool   on = root->param<bool>("output/enabled");

// Return a default when the path is absent (does not throw).
int n = root->param_optional<int>("mesh/dim", 3);

Built-in scalar types: bool, int, unsigned int, int64_t, float, double, std::string.

1-D arrays: std::vector<T> for any built-in or registered scalar T.

2-D arrays: std::vector<std::vector<T>> for any built-in or registered scalar T.

Tree navigation

// Walk direct children, optionally filtered by node type.
for (nmhit::Node * child : root->children())          { ... }
for (nmhit::Node * child : root->children(nmhit::NodeType::Field)) { ... }

// Find a node by relative path (returns nullptr when absent).
nmhit::Node * n = root->find("mesh/dim");

// Walk upward.
nmhit::Node * parent = n->parent();
nmhit::Node * docroot = n->root();

// Full slash-joined path from the root.
std::string fp = n->fullpath();   // e.g. "mesh/dim"

// Source location.
int line = n->line();
int col  = n->column();
std::string file = n->filename();

Inspecting fields

auto * f = dynamic_cast<nmhit::Field *>(root->find("mesh/dim"));
if (f) {
    std::string raw = f->raw_val();    // stored string, e.g. "3" or "'1 2 3'"
    f->set_val("4");                   // replace the stored value
}

Rendering

// Render the tree back to HIT text (preserves comments and blank lines).
std::string text = root->render();

// Custom indentation.
std::string text = root->render(0, "    ");  // 4-space indent

Scalar converters

The same conversions used internally by param<T>() are available as free functions for use on raw strings (e.g. from Field::raw_val()). Surrounding single or double quotes are stripped before conversion. All functions throw nmhit::Error on failure; the optional ctx node is used only to attach file/line/column information to the error.

bool    nmhit::parse_bool  (const std::string & s, const nmhit::Node * ctx = nullptr);
int64_t nmhit::parse_int   (const std::string & s, const nmhit::Node * ctx = nullptr);
double  nmhit::parse_double(const std::string & s, const nmhit::Node * ctx = nullptr);
float   nmhit::parse_float (const std::string & s, const nmhit::Node * ctx = nullptr);

Custom types

Register a scalar parser once before any param<T>() call:

// Registration (e.g. in main() or a static initializer)
nmhit::TypeRegistry::register_parser<MyEnum>(
  [](const std::string & s) -> MyEnum {
    if (s == "linear")    return MyEnum::Linear;
    if (s == "quadratic") return MyEnum::Quadratic;
    throw std::invalid_argument("unknown MyEnum value: " + s);
  }
);

// Usage — all three arities work automatically once T is registered.
MyEnum                          e  = root->param<MyEnum>("order");
std::vector<MyEnum>             v  = root->param<std::vector<MyEnum>>("orders");
std::vector<std::vector<MyEnum>> m = root->param<std::vector<std::vector<MyEnum>>>("order_matrix");

The parser receives the unquoted, brace-expanded token string. Calling param<T>() for an unregistered type throws nmhit::Error.

Thread safety: register_parser is not thread-safe relative to concurrent param calls. Register all custom types before spawning threads that call param.

Errors

All errors throw nmhit::Error, which is a std::exception carrying a vector of nmhit::ErrorMessage (filename, line, column, message).

try {
    auto root = nmhit::parse("input.i", text);
} catch (const nmhit::Error & e) {
    for (auto & msg : e.messages)
        std::cerr << msg.str() << '\n';   // "file.i:10:5: unexpected '}'"
}

Python API

Installation

pip install nmhit

Wheels are published to PyPI for Linux (x86_64, aarch64) and macOS (x86_64, arm64), covering Python 3.9 and later. No Flex or Bison is required.

Quick start

import nmhit

# Parse a file or an in-memory string
root = nmhit.parse_file("input.i")
root = nmhit.parse_text("[mesh]\n  dim = 3\n[]")

# Read typed values via slash-separated paths
dim = root.param_int("mesh/dim")         # int
tol = root.param_float("solver/tol")     # float
on  = root.param_bool("output/enabled")  # bool
tag = root.param_str("type")             # str

# Optional — returns a default when the path is absent
n = root.param_optional_int("mesh/dim", 3)

# 1-D and 2-D arrays
vals   = root.param_list_int("vals")           # list[int]
matrix = root.param_list_list_float("matrix")  # list[list[float]]

parse_text and parse_file accept optional pre and post keyword arguments (lists of HIT strings) for injecting snippets or command-line overrides:

root = nmhit.parse_file("input.i", post=["solver/max_iter := 200"])

Auto-detection with param()

nmhit.param() infers the type from the raw value (bool → int → float → str) and returns a native Python object. Pass an explicit type as the third argument to override inference:

nmhit.param(root, "mesh/dim")           # → 3  (int)
nmhit.param(root, "mesh/dim", float)    # → 3.0
nmhit.param(root, "mesh/dim", str)      # → "3"

Node types and tree navigation

root = nmhit.parse_text("[mesh]\n  dim = 3\n[]")

node = root.find("mesh/dim")            # returns Field, or None if absent
sec  = root.find("mesh")               # returns Section

node.type()      # nmhit.NodeType.Field / .Section / .Root / ...
node.path()      # "dim"
node.fullpath()  # "mesh/dim"
node.line()      # source line number

# Direct children, optionally filtered by type
root.children()                          # list[Node]
root.children(nmhit.NodeType.Section)    # list[Section]

# Walk upward
node.parent()    # parent Node, or None at root
node.root_node() # the Root node

Mutation

# Change a field value in-place
root.find("mesh/dim").set_val("2")

# Add / insert / remove children (cloned into the tree)
root.add_child(nmhit.Field("k", "42"))
root.insert_child(0, nmhit.Field("first", "1"))
removed = root.remove_child("mesh")    # returns the detached node

# Deep copy
root2 = root.clone()

Render

text = root.render()          # default 2-space indent
text = root.render(indent_text="    ")

Errors

All errors raise nmhit.Error (a subclass of RuntimeError). The exception carries a .messages attribute — a list of ErrorMessage objects with line, column, message, and filename fields:

try:
    nmhit.parse_text("[mesh]\n  dim = 3")   # missing []
except nmhit.Error as e:
    for m in e.messages:
        print(m)   # e.g. "<string>:2:9: expected '[]'"

Building

Requirements

Tool Minimum version When required
CMake 3.20 Always
C++ compiler C++17 Always
Flex 2.6 Debug builds only
Bison 3.7 Debug builds only

Pre-generated parser/lexer sources are committed to generated/ and used automatically for non-Debug build types, so end users and CI release builds do not need flex or bison installed.

Configure and build

Release build (no flex or bison required — uses committed generated sources):

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)

Debug build (requires flex ≥ 2.6 and bison ≥ 3.7 — regenerates parser/lexer from source):

cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build -j$(nproc)

After modifying src/Lexer.l or src/Parser.y, run the helper target to refresh the committed sources in generated/ and then commit them:

cmake --build build --target update_generated
git add generated/ && git commit

Pass -DNMHIT_BUILD_TESTS=OFF to skip building the test executable.

Run tests

ctest --test-dir build --output-on-failure

Install

cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/your/prefix
cmake --build build -j$(nproc)
cmake --install build

This installs:

Path Contents
<prefix>/lib/libnmhit.a Static library
<prefix>/include/nmhit/ Public headers
<prefix>/lib/cmake/nmhit/ CMake config files
<prefix>/lib/pkgconfig/nmhit.pc pkg-config file

Use from an installed location

CMake find_package:

find_package(nmhit REQUIRED)
target_link_libraries(myapp PRIVATE nmhit::nmhit)

If the library was installed to a non-standard prefix, point CMake at it:

cmake -S . -B build -Dnmhit_DIR=/your/prefix/lib/cmake/nmhit

pkg-config:

pkg-config --cflags --libs nmhit

If the library was installed to a non-standard prefix:

PKG_CONFIG_PATH=/your/prefix/lib/pkgconfig pkg-config --cflags --libs nmhit

Use as a CMake subdirectory

Add the repository as a subdirectory of your project:

add_subdirectory(neml2-hit)
target_link_libraries(myapp PRIVATE nmhit)

The nmhit target exports include/ as a public include directory, so #include "nmhit/nmhit.h" works without any additional configuration.


License

This project is a sub-component of NEML2 and is distributed under the same 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

nmhit-0.1.5.tar.gz (95.6 kB view details)

Uploaded Source

Built Distributions

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

nmhit-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (233.4 kB view details)

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

nmhit-0.1.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (215.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

nmhit-0.1.5-cp312-cp312-macosx_11_0_arm64.whl (138.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

nmhit-0.1.5-cp312-cp312-macosx_10_15_x86_64.whl (149.8 kB view details)

Uploaded CPython 3.12macOS 10.15+ x86-64

nmhit-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (233.9 kB view details)

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

nmhit-0.1.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (216.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

nmhit-0.1.5-cp311-cp311-macosx_11_0_arm64.whl (139.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

nmhit-0.1.5-cp311-cp311-macosx_10_15_x86_64.whl (150.2 kB view details)

Uploaded CPython 3.11macOS 10.15+ x86-64

nmhit-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (233.6 kB view details)

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

nmhit-0.1.5-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (216.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

nmhit-0.1.5-cp310-cp310-macosx_11_0_arm64.whl (139.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

nmhit-0.1.5-cp310-cp310-macosx_10_15_x86_64.whl (149.9 kB view details)

Uploaded CPython 3.10macOS 10.15+ x86-64

nmhit-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (234.0 kB view details)

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

nmhit-0.1.5-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (216.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

nmhit-0.1.5-cp39-cp39-macosx_11_0_arm64.whl (139.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

nmhit-0.1.5-cp39-cp39-macosx_10_15_x86_64.whl (150.1 kB view details)

Uploaded CPython 3.9macOS 10.15+ x86-64

File details

Details for the file nmhit-0.1.5.tar.gz.

File metadata

  • Download URL: nmhit-0.1.5.tar.gz
  • Upload date:
  • Size: 95.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nmhit-0.1.5.tar.gz
Algorithm Hash digest
SHA256 b236a9d46ad69476944ffa2d9320b3ecb00c32ffffcbfc75ad1cd0c9115841a0
MD5 b6d3f5dbc64ed21fdb84f39ab835dd3a
BLAKE2b-256 02e7e03db407cb14577640f42742c1513cc844aef263128123bbdb9091fbc9b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5.tar.gz:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3a423f89f8f1bdd96bcc59634b9b021ccbbd17dee5b3de15b4b53e6a43f2a254
MD5 0754973a9fa6dd78653012a5e5fc3294
BLAKE2b-256 2f825a12af833983ab2cbc03f3e42807acd34e96474350344305fdf686fe94e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4ed747ffbd66bdae41dc8378d861dea5e28bc0c72ab547d3fde649840461a66e
MD5 f0276e1a2b57a1099a0b09d22bf04250
BLAKE2b-256 3b57c5431e7ccd2a31291f49ada6256a76f75fcca69532c780408c2fb5d044df

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 781ed55e5b82f30e281ce984f2ff9badbb1756c13e5f5707d67c491b812a451e
MD5 0d59f720e4b8f4921eac6ca0f7e79fa0
BLAKE2b-256 d7757bdaab50a5eb6de59e28f9854cfb2538bfed35c305383ed8152d3a2a9238

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp312-cp312-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp312-cp312-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 73aceb0621855a7afa9e0a9a5fada38e8873b7643d761e4bf14908e9b94c5f85
MD5 25d304cbda39e64f3dd540a9bfd3ae4b
BLAKE2b-256 ac74d1c4171aaf4da6f81f6991af8b298c89d830766c7b56f677f3c6eaf23e24

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp312-cp312-macosx_10_15_x86_64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7ea1285a3dbab3ccdd7de359a96832495c674e9aafab97e431e4660dde5edfb6
MD5 13c98317b3a39a0de48b9c8ed2675de2
BLAKE2b-256 414901d7ee3c3bef962c441d2cbffd74f9ee9469fbcfbd7ac6f4a16d09d45962

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 54e5daadd16ddc0a4e2ea77eef9c2d9debab8079f7b9515e4a97f2caad180306
MD5 8ee8bf30adc7ae934f846b221f6e8591
BLAKE2b-256 986f0d0faa5e35d86cd6c26120bfd493a66841841e0c29b387c06c016c63086c

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 236c97207c249941e194f85aa28fd3395474c0af5bf765f7793c4f419c398030
MD5 9b72c37c3130efde6480d27c4e5fba64
BLAKE2b-256 94772c51bc6d49e13e3631073bd8d868c7493296bf808150afa8a2bd2795bf34

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp311-cp311-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 9e32ea5ec527c4caaa76663a6c31d2a381ed44444d2115b4fd1743e0523562dc
MD5 2ae9604345b9575f7a4813ca442919a9
BLAKE2b-256 07b54ec2965390dd2491bff3e69531fa9c42bf810e0a3a096bc42c11918e8644

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp311-cp311-macosx_10_15_x86_64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b78dab60daf1538688d1c8fa37d4a1cca1f592a298f122318e1d2ef14abe33ec
MD5 67825a5bbf9072a66ff43749dd7f274f
BLAKE2b-256 84e5a7c3fdb3c6f4f33dfd6b91b3a969f44d1fae263fa70934cd8e23b6d12ac2

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ebceaecfa190550eb8d10ee6d0274c1b1602812bc3e3b4d54a420a952af7a744
MD5 92693aa8cf6f8db54c85e291ac5b9041
BLAKE2b-256 32f4a70a6aef9170b17323569c5ef87fa91fa58795c19a2ee0404b868d93e3f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 38829143fe9c8fe08eb83db63228ec3836353dfc4f2b3942e36c032a4405a69a
MD5 6005c818df957dfad748b6efee213069
BLAKE2b-256 9318a12bd4efa150a8078571846767019ba86c4570562d982463f59bceec2fb0

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 28dbd6bcf4ceccdd69d9cd91700ccc8763963f48438ccff28a0fe974215c54c0
MD5 7549030a340f9bd0c5dbb610a63defa1
BLAKE2b-256 9be20233e3e62fdb17586cdbe50a45b663d6c7ac3312b8d662fb09df442a6280

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp310-cp310-macosx_10_15_x86_64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8c65063a351532ef471e98b4c6620caa2124078a3fb3bbc754691e9b80af8de7
MD5 57c7dee73e6c37d6c2211ae5453e83b0
BLAKE2b-256 e7a7a4f8cac7e877d4931b83b63027f2b16daf1a6f099f5e1b6824968dd27400

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 adf5ec8dc96862314d0e9682cd6eacd58b08ae086232613ca9fc4beea1c7f6f2
MD5 8086520651acbc6541d468aa75cb160d
BLAKE2b-256 db9c0ff5cedfa7f0d323047fdcdf5a122aab141c5672cf746cc117a08382096a

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: nmhit-0.1.5-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 139.6 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nmhit-0.1.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 784e20e5c786d09cb8aba2a8bdb5442e494d13e8c8d0c83bd7a92150b0ca0e6c
MD5 c1a5bae954023d37314aa51474e4390e
BLAKE2b-256 b8f32edee1d22f2589c877f676710af6522db8f521a00664cae213d84327271a

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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

File details

Details for the file nmhit-0.1.5-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for nmhit-0.1.5-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 3d43a59f6f7b05bebcaa17ca03826a6d8e0e027ac28f590444816ea744dfcab4
MD5 4eeb72cae0713c18dd3fcd9f10027df8
BLAKE2b-256 fe3b51f1997fa4d77313351a010c8d8a69a32b87dc1b476bc2e2510d6a36ca88

See more details on using hashes here.

Provenance

The following attestation bundles were made for nmhit-0.1.5-cp39-cp39-macosx_10_15_x86_64.whl:

Publisher: release.yml on applied-material-modeling/neml2-hit

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