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 in v1.2.0 — the slim core

eml-math v1.2.0 is 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

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-1.3.0.tar.gz (112.8 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-1.3.0-cp313-cp313-win_amd64.whl (402.0 kB view details)

Uploaded CPython 3.13Windows x86-64

eml_math-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl (608.5 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

eml_math-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (551.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

eml_math-1.3.0-cp313-cp313-macosx_11_0_arm64.whl (486.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

eml_math-1.3.0-cp312-cp312-win_amd64.whl (402.7 kB view details)

Uploaded CPython 3.12Windows x86-64

eml_math-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl (609.2 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

eml_math-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (552.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

eml_math-1.3.0-cp312-cp312-macosx_11_0_arm64.whl (487.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

eml_math-1.3.0-cp311-cp311-win_amd64.whl (404.2 kB view details)

Uploaded CPython 3.11Windows x86-64

eml_math-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl (610.4 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

eml_math-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (553.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

eml_math-1.3.0-cp311-cp311-macosx_11_0_arm64.whl (489.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for eml_math-1.3.0.tar.gz
Algorithm Hash digest
SHA256 6d77212ec0621ae675d7ce4ba803dab365cb1d272bf46f680c8215c1bf898e3a
MD5 847163273679ac3a9168c7e857fb22ab
BLAKE2b-256 77e49cfed94d69122ec14d71e6e0a31280431c1982de05db82030a1608d3df1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0.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-1.3.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: eml_math-1.3.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 402.0 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-1.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c5f5d545680eb0757aea204a798582b61b747791fa5b04658340a11be3f07beb
MD5 02a061778e33169f09a69d25e4545499
BLAKE2b-256 f4a0828611b14f840ebc9a6e27619512578cade9c609d71aa712db6149e67701

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f80efd35619c45ac1ae7b04eb5c7f2b25fc7cb6f270c4b2e55b5bc45b927181d
MD5 9b763c3a541faf96866dabc353274c5f
BLAKE2b-256 2a0e3efea3d5801ec793279dcd5e5a531c2fbd01fba54f8905684439075975cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6c6c91034ac16bc2576767edae609f1b229e541054619897fc9fe129a97f696f
MD5 565725ddecbac61300dddf62251dcf68
BLAKE2b-256 9a702aa91d43c3be2ce7085b4a92b7aed6a1633cc5e4e18bf24b70e1e31eefeb

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for eml_math-1.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb67daa45193e199967fb2302f13076290a4285e2f2e81e0e8165596d172a6b9
MD5 1c3398aba5f5a9082cad1537e5e92adc
BLAKE2b-256 daf2b97238b7e64c33a3567e74643eab5f1e9dd899719b5e7ee8e41eb1874366

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: eml_math-1.3.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 402.7 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-1.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8cd3bab4459a4bf68e21cd72f94ba86aeb790883b5bbcd89ddb6bb23c1b98863
MD5 38f57536cd437f13f5f4f9eea743c813
BLAKE2b-256 0210396714a63b9783bb5dfd11c7f6e9165c6b975f3acb7f77ab1f09c4eb9f93

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 469646398154d15e8e968a4a2afdaa68b65efbf5b2ac00374bc90ff1dfc37b83
MD5 ea80bd3385da59cdd409cd791a1d7175
BLAKE2b-256 7846a97df995e3633953408952867f9a001290c12fe88a8eb2350ab453e89514

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de3d92712dc5b7d340225e80a5ca7a7463dd710cb2a360d17d5e77d189e47084
MD5 1562f9072a74910b13a42ef7b62069f4
BLAKE2b-256 610868959f6626a73ab846c5267d1f04af6426c691885a4277016beda36fb604

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for eml_math-1.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 709f84e28fc15119acdc5c81f9d1581b803615224e9712d4c76bf0b15b50d592
MD5 c7d56b77c5808ae7f7fd0e72d92e0fd2
BLAKE2b-256 90a955ea31ad808ce23c93bac6f3e95ba648fe780e58f1125000631780f13b23

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: eml_math-1.3.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 404.2 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-1.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 eaf3f567c953e11e57264c2d957cac15513cbe7c48e8851f87a77f15e74d5a0c
MD5 0fa3864cd506a797567a15873a031811
BLAKE2b-256 d80045156d1da8db67b5237fc6e9381f4f00af1a9edff83be4cecd06db6e2507

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 82a6a6b094adc394f588cbe597ef7c4ca4217d720d1ae20694a867bececdb200
MD5 46214240a6aa0ae7674d881c21c23e11
BLAKE2b-256 0a0cfc4c412050797a79bae47f9879d436c176f3349822a437413ee2ea72157e

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for eml_math-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c0cd712e5ee5f67d8b275c7099ef8f2b45eb27437ac4431c91800e55d16fd054
MD5 54db2a064c8f4f19cc6f02733408e538
BLAKE2b-256 04f92210fb23116755144dde17fa31d32be82d7af753729009f02d5c04264dd1

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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-1.3.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for eml_math-1.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bca76d4516b0d03b290a8649bd0ba454485326b411aaed3dbb8adfb1e313d300
MD5 1108c6ef8662c7c08fab8a46d7d48c46
BLAKE2b-256 0530ef6e2e0e548fb3a55a65de70c23923c95de9bfea5bcabcba2b75f513b03c

See more details on using hashes here.

Provenance

The following attestation bundles were made for eml_math-1.3.0-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