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

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.13.tar.gz (125.4 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.13-cp313-cp313-win_amd64.whl (409.1 kB view details)

Uploaded CPython 3.13Windows x86-64

eml_math-2.0.13-cp313-cp313-musllinux_1_2_x86_64.whl (619.0 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

eml_math-2.0.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (562.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

eml_math-2.0.13-cp313-cp313-macosx_11_0_arm64.whl (497.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

eml_math-2.0.13-cp312-cp312-win_amd64.whl (409.5 kB view details)

Uploaded CPython 3.12Windows x86-64

eml_math-2.0.13-cp312-cp312-musllinux_1_2_x86_64.whl (619.6 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

eml_math-2.0.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (562.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

eml_math-2.0.13-cp312-cp312-macosx_11_0_arm64.whl (497.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

eml_math-2.0.13-cp311-cp311-win_amd64.whl (411.9 kB view details)

Uploaded CPython 3.11Windows x86-64

eml_math-2.0.13-cp311-cp311-musllinux_1_2_x86_64.whl (621.3 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

eml_math-2.0.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (563.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

eml_math-2.0.13-cp311-cp311-macosx_11_0_arm64.whl (499.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: eml_math-2.0.13.tar.gz
  • Upload date:
  • Size: 125.4 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.13.tar.gz
Algorithm Hash digest
SHA256 afbb665346c022ef4c7da40d2361297adf0a5d57800969cd9ae226406db40b49
MD5 caad91778f1b85eb64071503749f46ca
BLAKE2b-256 f26609bb2b2fdb822c0cc9b74264e3e71ed9fd48be914772f024cdaa448d03b8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: eml_math-2.0.13-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 409.1 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.13-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 21bf90be5b7898cbc5ddf38526a850977bad898d8bbc759fceb58c677d3ea51d
MD5 0c1089eec744186159df4989eef485ce
BLAKE2b-256 9c754975449c60624322cfa4a4b4c538c8b8e2551424326f85e5ea7b7c6717ae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for eml_math-2.0.13-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 951e781a13801db10f01009abf93d9cd67fac6ee2f3934fd05aee7ed1925da02
MD5 9a4ae86a77ef3e5f0066474e2486ceaf
BLAKE2b-256 532e2c21e5513d0b4d46baacde00d47895decafcd8901917bc1208d11f9c7148

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for eml_math-2.0.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 178f3494182401679ec395ceadc3821a4740a939fcdfc149363795957b0328c4
MD5 fde577b070354fbbdc602ee942e8f391
BLAKE2b-256 76156e676b005627f4403908759f28dae36ff2d1eb43dd2d4ef3db1f3ba079fb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for eml_math-2.0.13-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dbfe472cc566092e0bb31b27b5f990bacb285802ba0f9e16e579825f262d8d8a
MD5 89b0d03e46fcc7a48537b790077d01bc
BLAKE2b-256 e79edc22ae26360bf3901c143ad7a13c52c8c4ed280535bf9d1daa578f914ab2

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: eml_math-2.0.13-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 409.5 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.13-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7d8459d1a2baca6269a7c4ffd0bb1e8bd9c60b3710e40b9205de522b7283c5e5
MD5 50f90422ae66d6836cf2b4c3a72180cb
BLAKE2b-256 0b57b95298d50dc7e0966ea3d627afc05442aace7c096027d7f9a5bbb76cd416

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for eml_math-2.0.13-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 09b567db74a5a654c1dd704131101a33482c87a8905ec372694de81838dfa895
MD5 64d90b7752cd0b0c5ab26486ed9a53f9
BLAKE2b-256 9c5828ae450ded7ee16ea179da3a87de0c86db7523be1d44739321c6604b0ce2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for eml_math-2.0.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b5ac09b3b3d7379694c5dcf369b8e7b13a54ab0f11e94e37468d5e51f00a53df
MD5 a430f17275cb95e95017c223b55879af
BLAKE2b-256 f670d160d8a319d3d6496a7f37c43f641dcbae6f4e9b0adfdf6289ed79201c63

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for eml_math-2.0.13-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fff749a4d48959351af88626513cf94dd9cd2f478aee87a09a01cf50544034c6
MD5 0b952f5d14eabf5d635cbe74d44e0ed9
BLAKE2b-256 2239e5126de09509fd8982afb63c25da25e5a69eb51ec0ec43fb293320f32d49

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: eml_math-2.0.13-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 411.9 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.13-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f235ade9641b09554266498934d0c5485a03eb10b40f33b5621e70c15de36fea
MD5 13498086ac90f87727dc10467da6ff5d
BLAKE2b-256 d14a889db366e44a19d3deb8a6104d328b272693309e62cdeebc8c4f80bc2c4e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for eml_math-2.0.13-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7ec387762941eb84444cf0e5476e6202f1e5dbe4624a344a14bf2c060734f44f
MD5 11c8c5d08cb23c12e5a409266ec351fa
BLAKE2b-256 4661c3fba5b4b29740c073f93bae511bd0161610f7017f30defff8c507ebbe93

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for eml_math-2.0.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3cffd13073bea5a700f8bbd4bde2c0be6205239a6fbae0e81d3b272c4bd9bd59
MD5 3f3fd31d132f6c8ed8156c5caa0bd408
BLAKE2b-256 63c3ce9038d5eb41dbd7bd3f6b5bbaaad0604617fba8736b07e905f47d4f3486

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for eml_math-2.0.13-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 816a26755419ec8f7cb062058dcb8a8dd27ff15f78a2e712d89b91dc7c6900a8
MD5 30095c613646ed03dc03a6d07e9520fc
BLAKE2b-256 170808161145b590ab68af54e594165f0d0380cd57a558599198aed636ea70e9

See more details on using hashes here.

Provenance

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