Skip to main content

Exp-Minus-Log Mathematics: the EML Sheffer operator eml(x,y)=exp(x)−ln(y). Slim core: expression trees, symbolic regression, flow-diagram renderer. (Algebras + GR live in the sister package eml-spectral.)

Project description

EML-Math

EML Mathematics — a universal real-valued foundation for elementary mathematics, built from a single binary operator.

PyPI Python 3.11+ License: MIT

Repo: https://github.com/andrewkwatts-maker/EML-Math

Created by Andrew K Watts. Based on the EML Sheffer operator established by Andrzej Odrzywolek: arXiv:2603.21852v2 (CC BY 4.0).


The core idea

A single binary operator generates every elementary function:

eml(x, y) = exp(x) − ln(y)

This is the EML Sheffer operator — the continuous analog of the NAND gate for Boolean logic. From it the 36 standard elementary functions (+, , ×, /, exp, ln, sin, cos, tan, π, e, …) can all be reconstructed as composed expression trees.

EMLPoint is the operator's computation node — simultaneously a mathematical state and a composable expression-tree leaf:

from eml_math import EMLPoint
import math

EMLPoint(1, 1).tension()                                  # e   = eml(1, 1)
EMLPoint(2, 1).tension()                                  # exp(2)
EMLPoint(1, EMLPoint(EMLPoint(1, math.e), 1)).tension()   # ln(e) = 1.0

What's new in v2.x

The 2.x line keeps the same scope (pure-EML universal-math toolkit) but sharpens correctness and readability of the pure-EML LaTeX renderer. Highlights since v1.x:

  • Numerical validation of every famous equation — 1,000 random variable combinations × 47 entries in FAMOUS × EMLEvaluator ≡ a reference Python form, 46,000+ comparisons in ~2 s. See tests/test_famous_random.py.
  • pow(x, n) is now mathematically correct for non-literal exponents — emits exp(exp(ln(n) + ln(ln(x)))) instead of the earlier incorrect exp(add(ln(n), ln(x))) (which collapsed to n·x). Fixes (x-1)**2 → (x-1)^2 after expand_numeric_constants.
  • Pure-EML LaTeX recogniser picks up 1/x, −ln x, a − b, a + b, x^c (including the double-exp pow shape) directly from the pure-EML structure, in addition to the existing e^x, ln x, −x rules.
  • Algebraic simplifications in the renderer: ln(1) → 0, e^0 → 1, x + 0 = x, 0 − x = −x, double-negation cancellation, exp(ln y) = y. Hover-on-sub-expression reads as math instead of literal EML scaffolding.
  • BOTTOM () renders as 0 — readable, not an abstract symbol. The longer eml(⊥, …) shapes are still consumed by the pattern matchers so the change only surfaces in rare compound expressions.
  • Width-aware tidy-tree layoutcompute_layout accepts a width_for_label callback; the contour walker reserves the actual rendered box footprint per node so wide eml labels can't collide with narrow 0/1 stubs.
  • Layout overlap fix for deep cousins — the contour walker now propagates n.shift + n.mod (not just n.mod) when descending, so descendants of every sibling live in the same frame as descendants of earlier siblings.

The slim core

eml-math stays the pure-EML universal-math toolkit: the operator, expression trees, symbolic regression, the elementary-function operator library, the famous-equations registry, and the flow-diagram renderer. Nothing else.

Module Purpose
EMLPoint, _VarNode The EML node, with variable-leaf support for symbolic work
tree Expression-tree parser, renderer, JSON-array compact form
operators The 36 elementary functions as ready-made EML trees
evaluator Parse and evaluate EML formula strings
symbols Named-symbol registry (e, π, φ, √2, …)
discover compress, recognize, Searcher — symbolic regression
famous Registered classic equations (Pythagoras, Euler, Einstein, …)
flow + flow_layout Legacy SVG / PNG / PDF / HTML flow-diagram renderer
render New abstracted renderer — raw JSON → layout dict → pluggable Renderer (SVGRenderer, HTMLRenderer, PNGRenderer, PDFRenderer, BYO). Three edge styles (straight · curve · spline), Reingold-Tilford tidy-tree layout, MathJax/MathML output via decompress(r, fmt='mathjax').
web Bundled eml_flow.js UMD bundle for browser-side rendering

Algebras and physics are now in eml-spectral — the sister package, v1.0.0 release. EML-tree representations of Clifford algebras, octonions, exceptional algebras (E7/E8/Freudenthal), Lorentz-invariant spacetime ops, named GR metrics, and the spectral-flow operator Φ all live there. Same zero-deps philosophy, optional Rust acceleration, optional C API.

pip install eml-spectral   # transitively installs eml-math >= 1.2.0

Installation

pip install eml-math               # core
pip install eml-math[ext]          # + numpy, sympy
pip install eml-math[precision]    # + mpmath
pip install eml-math[dev]          # + pytest, ruff, mypy

For the algebras / physics layer:

pip install eml-spectral
# transitively pulls in eml-math >= 1.2.0

Companion app — eml_math.Launch()

The pip wheel ships with a one-call launcher for the EML-Math-App — a KivyMD visual explorer for the library. It builds the expression tree live as you type, renders Normal-math / EML-primitive LaTeX previews, draws the EML graph with hover-per-node sub-expression preview, lets you copy any sub-tree in Normal / EML / LaTeX / Python / JSON, and exports PNG at any DPI.

import eml_math
eml_math.Launch()        # finds or clones EML-Math-App, runs it

On first call the launcher looks for a sibling EML-Math-App checkout next to your eml-math source directory; otherwise it clones the matching version tag from GitHub into ~/.eml-math-app and pip install -e it. Subsequent calls reuse the cached checkout.

The app needs the Kivy stack:

pip install eml-math-app   # installs Kivy + KivyMD too
eml-math-app               # CLI entry point if you'd rather skip Python

Public API reference

Every name below is importable directly from eml_math.

Group Symbols What it does
Core EML node EMLPoint The eml(x, y) computation node. .tension() evaluates. Composes recursively (children can be EMLPoints).
Trees & parsing EMLTreeNode, NodeKind, parse_eml_tree, normalize_input, tree_to_python, EML_EXPANSIONS Expression trees, JSON dict round-trip, compact ↔ pure-EML conversion, "EML:" DSL parser.
Compact ↔ array to_compact, from_compact, KIND_CHAR, CHAR_KIND JSON-array serialisation of trees (compact bracket form).
Evaluator EMLEvaluator, eml_eval, ParseError Evaluate an "EML: …" string with a parameter map.
Operators eml_scalar, eml_pi, eml_vec Atomic leaf factories used inside "EML: ops.…" descriptions.
Symbols Symbol, SYMBOLS, lookup, construct, register Named-constant registry — e, π, φ, √2, γ, τ …
Symbolic regression Searcher, SearchResult, compress, compress_str, compress_latex, recognize Find an EML expression matching a target value or text.
Decompose decompress, get, get_tree, list_symbols, list_constants, expand_numeric_constants Convert a search result into math / latex / mathjax / mathml / python / eml; rewrite numeric literals into EML form.
Datasheet API Get Uniform query — returns a JSON-serialisable dict with value, formula, EML tree for any named constant.
Famous equations FamousEquation, FAMOUS, get_famous, famous_by_category, all_famous_equations Curated catalogue (Pythagoras, Euler identity, mass-energy equivalence, …) — every entry round-trips through the renderers.
Legacy flow renderer flow_svg, flow_html, flow_png, flow_pdf, DEFAULT_PALETTE One-shot graph rendering — see "Generating equation graphs" below.
Abstract render pipeline render, to_layout, render_layout_svg, render_layout_png, render_layout_pdf, gentle_curves, tighten_base, spread_horizontal, fit_to_canvas, organic_layout Layout-dict → renderer; post-process JSON to apply visual styles.
Browser bundle get_flow_js, FLOW_JS_PATH Inline UMD bundle for client-side rendering in HTML pages.
Companion app Launch Start the EML-Math-App GUI (see section above).

Every symbol has a Python docstring — help(eml_math.Searcher), help(eml_math.decompress), etc. read the inline documentation.


Quickstart — symbolic regression

Searcher finds an EML expression that matches a target numeric value:

from eml_math import Searcher

s = Searcher(target=2.71828)
result = s.search()
print(result.formula)      # 'eml(1, 1)'   (i.e. e)

compress and recognize go in the other direction:

from eml_math import compress, recognize

print(recognize(3.14159))         # ('π', 3.141592653589793, 0.0)
print(compress("exp(x) - ln(y)")) # SearchResult: matches the EML primitive itself

Generating equation graphs (SVG / PNG / PDF / HTML)

Every formula in the famous-equations registry can be rendered to SVG / PNG / PDF / HTML directly. The same primitives work on any EML expression you build.

One-liner from a famous equation

from eml_math.famous import get

einstein = get("einstein_e_mc2")

# Bytes → write yourself
open("einstein.svg", "w", encoding="utf-8").write(einstein.flow_svg(width=900, height=600))
open("einstein.png", "wb").write(einstein.flow_png(width=900, height=600))
open("einstein.pdf", "wb").write(einstein.flow_pdf(width=900, height=600))

# Self-contained interactive HTML (UMD bundle inlined)
open("einstein.html", "w", encoding="utf-8").write(einstein.parse().flow_html(width=900, height=600))

Direct from an EML expression

from eml_math import parse_eml_tree

tree = parse_eml_tree(
    "EML: ops.sqrt(ops.add(ops.pow(eml_vec('a'), eml_scalar(2.0)), "
    "ops.pow(eml_vec('b'), eml_scalar(2.0))))",
    pure_eml=True,
)

open("pythagoras.svg", "w", encoding="utf-8").write(tree.flow_svg(width=1200, height=900))
open("pythagoras.png", "wb").write(tree.flow_png(width=1200, height=900))

Render-time options

Useful kwargs accepted by flow_svg / flow_png / flow_pdf:

Argument Default Effect
width, height 800 × 600 SVG / PNG canvas in px
direction "down" growth direction: "down" · "up" · "left" · "right"
auto_height True grow the canvas vertically for deep trees instead of cropping
min_layer_height 38.0 minimum vertical gap per tree level
palette built-in sequence of (r, g, b) colours for variable inputs
output_label "Out" label drawn at the root of the tree
show_output_label True hide the root label by passing False
inline_constants False render small constants (2, 0.5) on the edge instead of as a leaf
merge_inputs False combine repeated variable leaves into a single fan-out node
expand_symbols False expand named symbols (π, φ, …) to their pure-EML form
edge_width 3.0 stroke width for edges
junction_radius 4.0 dot radius at each internal node
label_font_size / output_font_size 18 / 22 label sizes
background None SVG background colour (None = transparent)

For a different visual style, post-process the layout JSON before rendering — see the next section.

Layout-intermediate JSON pipeline (this is how styles are applied)

For finer control — or to render the same geometry from JavaScript / post-process it programmatically — go through the layout-intermediate form. to_layout returns a JSON-serialisable dict; the post-processes return a transformed copy; render_layout_svg / render_layout_png / render_layout_pdf produce final output.

The two named styles in the gallery are post-process pipelines applied to the same to_layout(tree) output:

Style Post-process pipeline
formal fit_to_canvas(L) — symmetric, top-down, the default
organic organic_layout(L, branch_angle=24, length_scale=44, length_decay=0.97, min_length=24)fit_to_canvas — branching, tree-like; min_length floor stops deep leaves clumping
import json
from eml_math import (
    to_layout, render_layout_svg, render_layout_png, render_layout_pdf,
    organic_layout, fit_to_canvas,
)

layout = to_layout(tree, width=1200, height=900)

# Apply organic style
layout = organic_layout(layout,
                        branch_angle=24.0, length_scale=44.0,
                        length_decay=0.97, min_length=24.0,
                        branch_jitter=0.12, trunk_pull=0.35,
                        balance="subtree_size")
layout = fit_to_canvas(layout, margin=20)

# Inspect / save the geometry before rendering
with open("pythagoras_layout.json", "w", encoding="utf-8") as f:
    json.dump(layout, f, indent=2)

# Render to whatever you need
open("pythagoras.svg", "w", encoding="utf-8").write(render_layout_svg(layout))
open("pythagoras.png", "wb").write(render_layout_png(layout))
open("pythagoras.pdf", "wb").write(render_layout_pdf(layout))

Knobs on organic_layout worth knowing:

  • length_decay (default 0.97) — how aggressively branches shrink per generation. Closer to 1.0 keeps deep leaves spaciously apart.
  • min_length (default 22) — floor on per-generation branch length. Even after length_decay reduces the geometric length, no branch shrinks below this. Set to 0 for the pure geometric decay look.
  • trunk_pull (default 0.35) — how strongly each child's growing direction is pulled back toward the global trunk axis. Prevents long chains from curling into a tight spiral.
  • balance (default "subtree_size") — assigns the larger subtree to the outside of each fork so the tree visually balances.

Compact JSON for the tree itself

The expression tree (independent of layout) round-trips through a tiny JSON-friendly array. Useful for storage, transport, or rendering on the JS side without re-parsing the EML string:

import json
from eml_math import to_compact, from_compact

compact = to_compact(tree)             # list of nested arrays
encoded = json.dumps(compact)          # plain JSON, ~7× smaller than the dict form
rebuilt = from_compact(json.loads(encoded))   # exact structural round-trip

Browser-side rendering (eml_flow.js)

eml_math.web ships a UMD bundle that renders the same layout JSON in the browser. Two ways to use it:

from eml_math import flow_html, get_flow_js, FLOW_JS_PATH

# Self-contained HTML (the JS bundle is inlined — open the file, no server needed)
open("einstein.html", "w", encoding="utf-8").write(
    tree.flow_html(width=900, height=600)
)

# Or grab the bundle to host yourself
open("static/eml_flow.js", "w", encoding="utf-8").write(get_flow_js())
print("Bundle path on disk:", FLOW_JS_PATH)

In your own page:

<script src="eml_flow.js"></script>
<script>
  const layout = /* JSON dumped from to_layout(...) */;
  document.body.innerHTML = EMLFlow.renderSVG(layout);
</script>

Batch generation — the famous-equations gallery

To regenerate every equation in the registry across all styles (produces formal/, gentle/, organic/, tree/ folders with PNG + PDF for each, plus a self-contained index.html):

python examples/famous_gallery.py [output_dir]   # default: ./famous_gallery

Output structure:

famous_gallery/
├── index.html        # browse every style of every equation
├── formal/
│   ├── png/einstein_e_mc2.png
│   └── pdf/einstein_e_mc2.pdf
├── organic/   (same layout)
├── gentle/    (same layout)
└── tree/      (same layout)

Famous-equations registry

from eml_math import all_famous_equations, get_famous

print([eq.name for eq in all_famous_equations()])
# ['Pythagoras', 'Euler identity', 'E = mc²', 'Schrödinger', ...]

einstein = get_famous("einstein_e_mc2")
print(einstein.eml_formula)    # the EML-tree form

Rust accelerator (optional)

The wheel bundles a Rust extension exposing Rayon-parallel batch operators (exp_n, ln_n, add_n, mul_n, sin_n, tension_n, …):

from eml_math.eml_core import tension_n
import numpy as np

xs = np.linspace(0, 5, 1_000_000)
ys = np.ones_like(xs)
out = tension_n(xs.tolist(), ys.tolist())   # parallel

A C/C++/Rust shared-library API lives under c_api/ for embedding the operator into other languages. Build it with:

cargo build --release -p eml_c_api

Project layout

eml-math/                           # this repo
├─ src/eml_math/                    # Python sources (the slim core)
│  ├─ render/                       # Abstracted renderer pipeline
│  │  ├─ layout.py                  # Reingold-Tilford tidy-tree
│  │  ├─ edges.py                   # straight / curve / spline path generators
│  │  ├─ palette.py                 # palette helpers
│  │  └─ renderers/                 # SVG, HTML, PNG, PDF — pluggable Renderer protocol
│  └─ ...
├─ rust/eml_core/                   # Rust accelerator (PyO3 module)
├─ c_api/                           # C/C++/Rust shared-library bindings
├─ docs/                            # Static-HTML site (index/api/guide/concepts)
└─ tests/                           # pytest suite (2077 tests, 0 required deps)

License

MIT, © Andrew K Watts.

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

eml_math-2.0.37.tar.gz (126.3 kB view details)

Uploaded Source

Built Distributions

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

eml_math-2.0.37-cp313-cp313-win_amd64.whl (409.8 kB view details)

Uploaded CPython 3.13Windows x86-64

eml_math-2.0.37-cp313-cp313-musllinux_1_2_x86_64.whl (620.2 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

eml_math-2.0.37-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (562.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

eml_math-2.0.37-cp313-cp313-macosx_11_0_arm64.whl (498.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

eml_math-2.0.37-cp312-cp312-win_amd64.whl (410.4 kB view details)

Uploaded CPython 3.12Windows x86-64

eml_math-2.0.37-cp312-cp312-musllinux_1_2_x86_64.whl (620.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

eml_math-2.0.37-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (563.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

eml_math-2.0.37-cp312-cp312-macosx_11_0_arm64.whl (498.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

eml_math-2.0.37-cp311-cp311-win_amd64.whl (412.8 kB view details)

Uploaded CPython 3.11Windows x86-64

eml_math-2.0.37-cp311-cp311-musllinux_1_2_x86_64.whl (622.1 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

eml_math-2.0.37-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (564.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

eml_math-2.0.37-cp311-cp311-macosx_11_0_arm64.whl (500.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file eml_math-2.0.37.tar.gz.

File metadata

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

File hashes

Hashes for eml_math-2.0.37.tar.gz
Algorithm Hash digest
SHA256 3f4bbb8419749b62a2e93b2bf62af7c1ea64b9a93ffee0e0375dd763df775d7f
MD5 823c141f62dffe050a9437eb53bf4ea0
BLAKE2b-256 e438fb5e9395a05a1a050f3e17082d9e6b56918e5e526d86ff40e41993c44bc8

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37.tar.gz:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: eml_math-2.0.37-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 409.8 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for eml_math-2.0.37-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a8fa97497561c378b01dee31eb88e2a986f98ae49a4734917eceb9d2de261264
MD5 7315bda258959bd4be003ef975304708
BLAKE2b-256 676ff9b8232d3c948a7790ec921880b1b1cc687f6b5e9d96cee3371d5d4bfe1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp313-cp313-win_amd64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-2.0.37-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4f307af0c1e43224a94f07b3ccc72cc4849d3d312fd1c8f51a510c114a2b0689
MD5 521995d3822afbd7832ab6d13443fe9f
BLAKE2b-256 13dd455ff47aaafca2f0d2b49357c6b697f0d0b049656264225a888bd6dd1368

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-2.0.37-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 07c97452f4fe2e037fa12bf59721b9dbb08fb65ed75699db5e820b3ecf00e85d
MD5 37b30bd1b174553e9c4b3aa2fd94a42f
BLAKE2b-256 725a3a195e74d01879c6b5f66f93379d9c0d72cdc4da760851686d49a4c6b6a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for eml_math-2.0.37-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 293ca9b74c72d46a2efec322210e9bdcba079b02a9c3f3bf12899c1634847d6d
MD5 6c07640bbbbf7122a09e27bc1c3e1804
BLAKE2b-256 e756c9c5df6059c857dd697f80f7f6d462d155e535f31d83c9c266d93c6c445e

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: eml_math-2.0.37-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 410.4 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for eml_math-2.0.37-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 62f85e97b641d151f20b6f703d40a2f48ecd1cbe7a0fe238a325c42a048c9691
MD5 56b6baa3e46eb3a93cb2faafe163c5b8
BLAKE2b-256 87f8411246f11cde76548101142e39618192947613d6891f605157f4d53ef47d

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp312-cp312-win_amd64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-2.0.37-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 34eab3e2352a275a0e0829533f28163532f2c1584dddeb9c7d2fb12023631a25
MD5 685736d86e3b8a6e0f4c239d27bd8ac8
BLAKE2b-256 0475710263fef82f010a35e4de67a32769e0ab5876ea11066af2707befacaa7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-2.0.37-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f0c669ad5df72c8feadb67aca5ff8cece5fdf1de6b32ea28da1de7314c2ecd20
MD5 4396ce4429a0119e1ea5943e48a063e5
BLAKE2b-256 36e29afb2021d59776818a1395bbbf33107b1b975a204948e6a8f6dd96d88e9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for eml_math-2.0.37-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 18a7d34291ec1edb997da4d6f47a0da70fb6d5cb333a0e436a1bedbb39f4b418
MD5 2d514365048386cefa8f89a92de6e9ca
BLAKE2b-256 e99a77c4c9fb0ab1dd6a5c8d43456cd78b87e8e982378099cc295a428f47acdf

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: eml_math-2.0.37-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 412.8 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for eml_math-2.0.37-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4650787c9ae47ddff5596d8a03c3fd982524031202ca12d7c40c6f0f0084d35d
MD5 22f5a731ade7f21aa4daa3466ad2618d
BLAKE2b-256 3948d376779097c0c4f578cefb7d88a6cda8deb445fbff800bccef9df944757b

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp311-cp311-win_amd64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-2.0.37-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b2cf1c89b2d7d17c39eb59995ceb81debd6d1376cb160366a096ece3b14df4a2
MD5 e26a8d6f647fce670765e7b90f6d68df
BLAKE2b-256 20e3ed3c58b9635760caad337a011bc0e6fcb09fe11071bf4a44ad92dae0dacb

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-2.0.37-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f63efb046dd609e3d7619767baa5384cd8dc133a9c2cb90111fabe31cf4006f1
MD5 3deed8fc058af2b02a0ab8bf5c385717
BLAKE2b-256 3279f08947615a9d5bf53900e59aa39888521a1c666000bb90c28dfc5fb8498c

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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

File details

Details for the file eml_math-2.0.37-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for eml_math-2.0.37-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1dabc3236ed3aad16cdc5078ad661c0a61d068f6d3b45f952c75e2566994b14f
MD5 6acaa91029144d42308a0577da2a0014
BLAKE2b-256 0757445d3f68d9359513aa5f09f9015c02706af18109441d93f34e00f2ee5ee8

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-2.0.37-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: workflow.yml on andrewkwatts-maker/EML-Math

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