Skip to main content

momwire

A pure-Python method-of-moments antenna simulator with optional C++ accelerators (pybind11).

Extracted from antenna_designer.

Solvers

BSplineSolver (degree-d Galerkin, default d=1/2) is the default solver; HMatrixSolver and ArrayBlockSolver are structural accelerators built on top of it. SinusoidalSolver and SinusoidalGalerkinSolver reproduce NEC2's three-term basis (collocation and Galerkin testing respectively) as in-codebase NEC comparators. RazorSolver is the NEC-5 formulation twin: a tent basis with razor-blade (RWG mixed-potential path) testing, transcribed from the NEC-5 Users Manual rather than NEC2's, over every ground, buried and crossing decks included. Because its testing rule — not its basis, which it shares with BSplineSolver(degree=1) — is NEC-5's own, it reproduces NEC-5's characteristic slow O(1/N) impedance walk without needing the (licensed) NEC-5 binary; see docs/razor-solver.md (momwire#309).

Ports

Every solver family exposes the same port surface, and it is the surface to build on: compute_port_solution() runs one fill and one factorisation over every port at once, so a multi-port structure costs what a single-port one costs.

Three kinds of port, declared at construction, and they can be mixed:

kwarg what it is entry
feeds= a delta gap at a point along a wire — NEC's EX 0 (wire_index, arclength, voltage)
junction_ports= a shunt port on a junction NODE's KCL row: the node drives net inflow (the node's row leaves the constraint set) (junction_index, voltage), or a bare index for 0 V
node_gaps= a SERIES EMF at a junction node, in series with one named wire end — the apex feed (wire_index, "start"|"end", voltage)

Ports are numbered [feeds…, junction_ports…, node_gaps…], and that is the order every port readout is in.

A junction port has one terminal. Its voltage is the node's potential and its current is the current the port puts into the wires at the node, on every family that serves it. Nothing in the model carries that current back, so a junction port on its own is not a one-port in the circuit sense: its Re(Y) is not a radiation conductance and can be negative. An L of two wires driven at its corner reads −26.9 − 342.3j Ω on both BSplineSolver and SinusoidalGalerkinSolver (momwire#1165), and that is not a sign error. Junction ports are for a network that closes the current: an element between nodes A and B sees Z_AA + Z_BB − Z_AB − Z_BA of Z = inv(sol.y). That impedance is passive, its input power is the radiated power, and across two facing wire ends it tends to a delta gap's as the gap closes.

sol = solver.compute_port_solution()  # one fill, one factorisation
sol.y  # (n_ports, n_ports) short-circuit Y
sol.coeffs  # (n_dof, n_ports) — column j is the
#   solution for 1 V at port j
sol.port_currents  # the same matrix as `y`, asserted

compute_y_matrix() is compute_port_solution().y, so the two cannot drift. Any other excitation is coeffs @ V with no second fill — that is the point of the class. To turn a column into currents on the structure, use the solver's currents_at_knots(coeffs[:, j]), or element_currents(coeffs[:, j], subdiv=…) for the (mid, moment, nodes, delta) source terms a field evaluator wants. PortSolution.basis is an opaque per-solve handle — do not introspect it.

Decks

momwire.deck reads a NEC-2 deck and puts it on a solver. The dialect — which cards run, which are refused and in exactly what words — is specified at momwire.dev/reference/deck-grammar-nec2/; that page is normative, and the code is tested against its anchors.

from momwire.deck import build_solver, parse

deck = """CM 20 m dipole, 10 m up over average ground
CE
GW 1 21 -5.05 0. 10. 5.05 0. 10. 1.E-3
GE 1
GN 2 0 0 0 13. 0.005
EX 0 1 11 0 1. 0.
FR 0 1 0 0 14.1
XQ
EN
"""
built = build_solver(parse(deck), basis="bspline")
y = built.solver.compute_port_solution().y
port = built.ports.feed_ports[0]  # the solver row this EX card drives
print(f"Z = {1.0 / y[port, port]:.1f} ohm")  # Z = 67.0-41.1j ohm

parse() returns a dialect-neutral DeckModel; build_solver() maps it onto one of the seven BASES names (five solver families — "bspline" is the default, the degree-2 B-spline) and returns the solver together with a PortPlan. The plan is what makes the solver's ports readable: which row is which EX or LD card, each load's LoadSpec, and one drive vector per execute group over a port set that never changes. Stamping a load impedance is port algebra and stays with the consumer — momwire.deck puts the gap in the matrix and hands over the spec.

A deck's execute groups are what the model says about running it: one per execute card, each carrying its own frequency list, kernel flag and Environment (the ground, its plane and a cliff's second medium). A GN card arms, so a deck may run once in free space and once over ground and each group says which; build_solver(model, group=k) builds over group k's, and frequency_mhz=, extended_kernel= and environment= override it.

Only the operating point moves between those calls, never the geometry, so a swept caller translates once:

from momwire.deck import prepare_mesh

mesh = prepare_mesh(model)  # the polylines, the port plan
solvers = [build_solver(model, mesh=mesh, frequency_mhz=f) for f in sweep]

Every solver built from one handle is given the same coordinate arrays, so a prepared solve is bit-equal to an unprepared one.

NEC-2 launcher

Installing momwire puts momwire-nec2c on your path — the NEC-2 launcher (momwire-nec2c and its siblings), a resident NEC engine speaking the protocol SimNEC uses to drive nec2c, with momwire's solver behind it. Point SimNEC's NEC portal dialog at that command and its Smith chart, tuner and sweeps run on momwire. python -m momwire.portal is the long spelling, and --selftest is the deployment smoke.

momwire-nec2c -version                            # NEC2 momwire-nec2c [sb] <version>
momwire-nec2c --selftest                          # PASS / FAIL, no checkout needed
momwire-nec2c --basis sinusoidal < dipole.nec     # or run a deck by hand

SimNEC's NEC-5 slot takes the momwire-nec5[-<basis>] commands instead (momwire-nec5-razor-2p is NEC-5's own formulation): SimNEC picks the deck syntax from nec2c or nec5 in the engine's path.

Setup, the two filename rules SimNEC enforces, --basis, the caching flags and what refusals look like: momwire.dev/reference/portal-usage/.

momwire.portal may use the solver API and momwire.deck; nothing else in momwire may import from it. The SimNEC protocol is the portal's business alone, and a test enforces that.

Public names

Everything importable from momwire itself. __all__ is the source of truth — tests/test_public_surface_954.py fails if this list and __all__ disagree in either direction, so a name promoted without a line here (or a line here for a name that was never exported) is a red test, not a stale doc.

Solvers — see Solvers above for what distinguishes them:

  • BSplineSolver — degree-d Galerkin, the default.
  • HMatrixSolver, ArrayBlockSolver — structural accelerators over it.
  • SinusoidalSolver, SinusoidalGalerkinSolver — NEC2's three-term basis.
  • RazorSolver — the NEC-5 formulation twin, over every ground, buried and crossing decks included.
  • PulseSolver, HarringtonSolver — the textbook pair.

Results and control:

  • PortSolution — a solved port network's currents, voltages and Z.
  • DistributedRLC — a wire's per-metre series or parallel RLC (NEC's LD 2 / LD 3), the distributed_rlc kwarg every loading family takes beside wire_conductivity and the insulation pair.
  • FeedPlacement — where a solver put a feed (or a Razor lumped load): the arclength asked for, the one used, and the offset between them. Returned by every solver's feed_placements() (momwire#1059).
  • Capabilities — what a solver class declares it spans.
  • CancelToken, SolveAborted — cooperative cancellation for a long solve.
  • LatticeFFTUnavailable — raised when a lattice deck cannot take the FFT path.
  • accelerated — True iff the C++ accelerator loaded. Assert it rather than discovering a silent fall-back to pure Python by its runtime.
  • accelerator_variant — which build of it loaded: "avx2", "sse2", "legacy" (the single unsuffixed extension macOS and non-x86 still ship), or None when none did. On x86 the wheel carries the same kernels compiled twice and picks by CPU feature before importing either, because an AVX2 binary on an older CPU does not raise ImportError — it kills the interpreter with an illegal instruction (momwire#1032).

Wire material, for a consumer mirroring the loading into another tool:

  • wire_internal_impedance, insulation_inductance — the per-metre quantities.
  • equivalent_radius — the coated-wire pair's effective radius.

Answers a consumer must give IDENTICALLY to momwire, exported so it cannot answer them differently:

  • ground_touch_tol — is this wire end on the plane (a per-wire relative tolerance; an invented absolute one disagrees at the margin).
  • grounded_crossing_exemption — does this in-plane junction earn the crossing exemption.
  • below_reach_refusal — how far a buried structure may span before the below/below remainder stops being tabulated.
  • wire_to_element — the geometry conversion the array-block path uses.
  • SURFACE_HEIGHT_CLASS — the low-stand-off class's measured conditioning, including the validity floor a consumer refuses against.

Capability axes:

  • axes_for — every axis of one capability row, declared union derived. The single derivation point: a consumer re-deriving ground_model from grounds, or wire_position from buried/contact, is the drift this exists to prevent.
  • AXIS_VALUES — the declared vocabulary.
  • DERIVED_AXES — which axes are computed rather than declared.

Install

python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -e .

macOS: the C++ accelerator uses Homebrew's OpenMP runtime, so brew install libomp is required — both to compile from source and to run the prebuilt Apple-Silicon wheel. The wheel deliberately does not bundle libomp (it links Homebrew's by absolute path) so that it shares a single OpenMP runtime with pynec-accel; two private copies in one process abort with OMP: Error #15 (or deadlock). Without libomp installed, the accelerator can't load and momwire warns and falls back to the slower pure-Python path. On Linux the system libgomp covers this, so no extra step is needed.

The NEC-5 engines on Linux, without Python

Each release also carries momwire-nec5-linux-x86_64.tar.gz: two of momwire's NEC-5 engines as native programs, with no Python in them. They are razor-2p (momwire-nec5-razor-2p) and bs2, the default B-spline formulation (momwire-nec5-bspline). You do not need Python, pip or momwire installed. Their printouts are byte for byte the Python commands'.

tar -xzf momwire-nec5-linux-x86_64.tar.gz
cd momwire-nec5-linux-x86_64
./momwire-nec5-razor2p-linux -version
./momwire-nec5-razor2p-linux deck.nec deck.out   # EZNEC's and SimNEC's form
./momwire-nec5-razor2p-linux - - < chain.nec     # SimNEC's streaming form
./momwire-nec5-bs2-linux deck.nec deck.out       # the same forms, bs2

For SimNEC, point the NEC-5 engine setting at momwire-nec5-razor2p-linux or momwire-nec5-bs2-linux in that folder, and keep the folder together: each command runs its -avx2 build on a processor with AVX2 and FMA, and its -sse2 build on any other 64-bit x86 processor. They need 64-bit x86 Linux with glibc 2.28 or newer (RHEL/Alma 8, Debian 10, Ubuntu 18.10 and later); everything else is built in. A deck an engine does not serve yet is refused in the printout by name ("not served by this build: ..."), and the Python command serves it. The other formulations stay Python. The existing Windows momwire-nec5-razor-2p.exe in the EZNEC drop-in zip is unchanged.

The NEC-4.2 sinusoidal engine on Linux, without Python (preview)

Preview: from 0.83.0 the same tarball also carries momwire-nec42-sinusoidal-linux, the native twin of the Python command momwire-nec42-sinusoidal for EZNEC's and SimNEC's NEC-4.2 slot, with the same -avx2 / -sse2 picking and the same three forms. Its printouts are the Python command's byte for byte, apart from the two lines that report measured time (FILL= ... SEC. and RUN TIME =). It serves free space, a perfect ground (GN 1), a Sommerfeld ground (GN 2 / GN 3) with every wire above it, wire loading, TL / NT networks, helices and near fields. It still refuses by name a wire below the ground plane (buried wires), a GD far-field ground, and an insulated wire (IS); the Python command serves those decks.

Radius steps and junctions on the sinusoidal basis: the junction rule

The point-matched sinusoidal basis takes a junction rule, SinusoidalSolver(junction_rule=...) (momwire#1644). "nec2" is NEC-2's log rule at every junction, the class default and what the NEC-2 launchers (momwire-nec2c*) use. "nec42" is NEC-4.2's treatment, from the public NEC-4 theory manual (UCRL-MA-109338): a small charge solve at each junction where wires of different radius meet (and at every junction of three or more wires), with NEC-4's thin-wire kernel and end caps. It is what the NEC-4.2 launchers (momwire-nec42*, and the native momwire-nec42-sinusoidal) use, and on a tapered element it lands within about half an ohm of licensed NEC-4.2, where the NEC-2 rule is off by 10 to 20 ohms. A deck with no such junction solves exactly as before under either rule.

Each launcher's choice is only its default. Set MOMWIRE_JUNCTION_RULE to nec2 or nec42 in the environment the engine runs in to choose the other on any launcher. Sin-Galerkin and the other bases take no junction rule.

The NEC-5 engines on Windows, without Python (preview)

Preview: each release from 0.79.0 also carries momwire-nec5-windows-x64.zip, the same two engines as native Windows programs, signed with momwire's certificate. The zip holds momwire-nec5-razor2p-avx2.exe and momwire-nec5-bs2-avx2.exe for a processor with AVX2, the -sse2 pair for any other 64-bit x86 processor, and a win7 folder with the sse2 pair built to run on Windows 7 SP1. The zip's README.txt says which to use. The DLLs they load ship beside them, so nothing needs installing; keep each folder together. A deck an engine does not serve yet is refused in the printout by name, as on Linux. The drop-in, momwire-windows.zip (named momwire-eznec-windows.zip before 0.80.0), is still the supported way to run momwire under EZNEC, SimNEC or 4nec2 on Windows.

The NEC-5 engines on macOS, without Python (preview)

Preview: each release from 0.79.0 also carries the same two engines for Apple silicon (macOS 14 or later, arm64), as momwire-nec5-macos-arm64.tar.gz. The math library is the system's Accelerate, the one numpy and SciPy use on a Mac, and the OpenMP runtime is built in, so nothing ships beside the two programs. Their printouts match the Python commands' on the same Mac.

They are ad-hoc signed only: no Developer ID and no notarisation. A tarball fetched with curl and unpacked with tar carries no quarantine flag and runs as it is:

curl -LO <URL of momwire-nec5-macos-arm64.tar.gz>
tar -xzf momwire-nec5-macos-arm64.tar.gz
cd momwire-nec5-macos-arm64
./momwire-nec5-razor2p-macos -version
./momwire-nec5-bs2-macos deck.nec deck.out

A copy downloaded through a web browser is quarantined, and macOS refuses to open it until the flag is cleared from the whole folder:

xattr -dr com.apple.quarantine momwire-nec5-macos-arm64

Where the time goes (MOMWIRE_TIMES=1)

Every NEC-5 engine, the standalone programs and the Python commands alike, reports its timing when the environment variable MOMWIRE_TIMES=1 is set. It is off by default and changes no result. With it set, the printout's FILL=/FACTOR= (under MATRIX TIMING) and RUN TIME = lines carry measured seconds in NEC-5's places instead of zeros. The printout also gains the environment in effect at the top (threads, build, anchors mode, ground table cache) and, under each MATRIX TIMING, the run's phases: the ground tables (computed, read from the disk cache, or anchor-blended), the fill and factor with their thread counts, the solution, and the far and near fields. Each answer also writes one line on standard error with every stage in milliseconds:

times: route=cxx threads=4 runs=1 start_ms=2.378 load_ms=0.000 seam_ms=0.478 ground_ms=9.752 fill_ms=50.326 factor_ms=1.209 rp_ms=0.022 near_ms=0.000 run_ms=0.062 printout_ms=0.371 write_ms=0.067 other_ms=0.195 total_ms=64.860 ground_built=4 ground_disk=0 ground_blended=1

Under SimNEC or EZNEC, set it on the command line that starts the program, so the engine inherits it: MOMWIRE_TIMES=1 <the command that starts SimNEC>. The keys are described in the docs site's momwire.dev/reference/standalone/.

The same answer with or without AVX-512

numpy and OpenBLAS switch to AVX-512 code on a processor that has it, and that code rounds differently in the last bits. momwire's own entry points (the momwire-nec5/momwire-nec42/momwire-nec2c-shared commands and the servers they start, the Windows drop-in, the Linux razor-2p program and the test suite) turn it off on such a processor, by setting NPY_DISABLE_CPU_FEATURES and OPENBLAS_CORETYPE=Haswell before numpy loads, so the printout doesn't change with the processor. A value you set yourself is left alone, and on a processor without AVX-512 nothing is set. This doesn't cover everything. momwire-nec2c, python -m momwire... run by hand, a resident server one of those started, and a program that imports numpy before momwire have all loaded numpy before the pin. For those, call momwire_serve_client.pin_cpu_env() before importing numpy, or set the two variables in the environment. The Windows razor-2p hybrid's own OpenBLAS DLL picks its kernels before any code can pin it. Even pinned, a value that cancels to almost nothing can still print differently in its last digits.

Test

pip install -e ".[test]"   # core + test deps, and what `make build` needs (pybind11, setuptools, wheel)
pytest tests/

The cross-validation against NEC2 (tests/test_pynec_backend.py) additionally needs PyNEC — a test-only dependency installed separately from a wheel (see below). Those tests skip cleanly when it isn't present; everything else runs without it.

Optional: PyNEC backend (test-only)

momwire can be cross-validated against NEC2 via PyNEC (the tests/test_pynec_backend.py suite); NEC2 also delivers ~5–10× faster single-frequency solves. PyNEC is a test-flow-only dependency — momwire's own solver never imports it.

Install the PyNEC wheel

Install PyNEC from the python-necpp fork's release. The distribution is named pynec-accel (the import name stays PyNEC); the wheels are self-contained — OpenBLAS is vendored (via scipy-openblas32), so no system BLAS, SWIG, or build toolchain is needed — and cover Linux, Windows, and macOS (arm64) on CPython 3.10–3.14:

pip install pynec-accel --no-index \
    --find-links https://github.com/stevenmburns/python-necpp/releases/expanded_assets/v1.7.6

--no-index ensures pip takes the fork's wheel rather than upstream PyNEC on PyPI (which is broken on current Python and lacks the OpenBLAS/OpenMP work). On macOS the wheel shares Homebrew's libomp (brew install libomp) rather than vendoring its own, so it can coexist with momwire's accelerator in one process. After install, from PyNEC import nec_context works and the cross-validation tests run; without it they're skipped (momwire itself needs no PyNEC).

Runtime thread pinning

The wheel links OpenBLAS and parallelises the NEC2 matrix fill with OpenMP. Pick thread counts up front:

export OMP_NUM_THREADS=$(nproc --all)   # PyNEC matrix fill
export OPENBLAS_NUM_THREADS=1           # muzzle numpy/scipy's idle pool

Pinning OPENBLAS_NUM_THREADS=1 stops numpy/scipy from spinning up their own OpenBLAS thread pool that contends with PyNEC's threads on the same cores. On a 100-director Yagi (2142 segs) this is worth ~8% wall time at NP=4.

Metadata

Release files for momwire 0.84.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for momwire 0.84.0
File Size Uploaded Provenance
momwire-0.84.0.tar.gz 5.7 MB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for momwire 0.84.0
File
momwire-0.84.0-cp315-cp315-win_amd64.whl CPython 3.15 CPython 3.15 Windows x86-64 Details
momwire-0.84.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
momwire-0.84.0-cp315-cp315-macosx_14_0_arm64.whl CPython 3.15 CPython 3.15 macOS 14.0+ ARM64 Details
momwire-0.84.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
momwire-0.84.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
momwire-0.84.0-cp314-cp314-macosx_14_0_arm64.whl CPython 3.14 CPython 3.14 macOS 14.0+ ARM64 Details
momwire-0.84.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
momwire-0.84.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
momwire-0.84.0-cp313-cp313-macosx_14_0_arm64.whl CPython 3.13 CPython 3.13 macOS 14.0+ ARM64 Details
momwire-0.84.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
momwire-0.84.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
momwire-0.84.0-cp312-cp312-macosx_14_0_arm64.whl CPython 3.12 CPython 3.12 macOS 14.0+ ARM64 Details
momwire-0.84.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
momwire-0.84.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
momwire-0.84.0-cp311-cp311-macosx_14_0_arm64.whl CPython 3.11 CPython 3.11 macOS 14.0+ ARM64 Details
momwire-0.84.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
momwire-0.84.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
momwire-0.84.0-cp310-cp310-macosx_14_0_arm64.whl CPython 3.10 CPython 3.10 macOS 14.0+ ARM64 Details

Total release size: 198.6 MB

Release files / momwire-0.84.0.tar.gz

Download URL momwire-0.84.0.tar.gz
Size 5.7 MB
Tags Source
SHA-256 checksum
How to use checksums
d25b4188f759db99e6cf39e52f5f3a332ddbc43540d9a804f624738ef674c99c
BLAKE2b-256 checksum
How to use checksums
aeb3a29cccc161d9176869d5cfe270130913d13b3ad6da7671de87f94c5225a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp315-cp315-win_amd64.whl

Download URL momwire-0.84.0-cp315-cp315-win_amd64.whl
Size 10.8 MB
Tags CPython 3.15 Windows x86-64
SHA-256 checksum
How to use checksums
971fcc7d7930b97236008fc199570c4b58c29430c1eace8f4186416e335da128
BLAKE2b-256 checksum
How to use checksums
ee3f8e280c17f660adeca1a9de4fc6a753e257b15c1fffbdd4ad0a09a90a4cd7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL momwire-0.84.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 14.4 MB
Tags CPython 3.15 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0edfc127e9bea3c38502b350071dc39358a9d3b13b565042e5271996d9bced52
BLAKE2b-256 checksum
How to use checksums
b9c85210829ae5b0b6e9c2171c54c0cdc7aee9444e5cecb528b77ca30628b2b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp315-cp315-macosx_14_0_arm64.whl

Download URL momwire-0.84.0-cp315-cp315-macosx_14_0_arm64.whl
Size 7.1 MB
Tags CPython 3.15 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
eeebda8752d99a06f01e4a4d098aae849e61a279abfe3001c73ec750a90406d7
BLAKE2b-256 checksum
How to use checksums
8e2e7db1a27f9b19edd54897a06c983f9c208e1de5a2c1d15026104a75de2d2d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp314-cp314-win_amd64.whl

Download URL momwire-0.84.0-cp314-cp314-win_amd64.whl
Size 10.8 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
7edf59e07ba7a0d64d02e8694e6abe075cfa69430871a4a2fa1562372c7dac75
BLAKE2b-256 checksum
How to use checksums
5f357b815b085dd9008aa16ca3d0dadae120f3e9c02a3d6d85533687f9d9ecb6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL momwire-0.84.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 14.4 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e639f7504a168d4d59eb96c1dc5df3e9545b53c1aa0cb26ed5bd07978f16332a
BLAKE2b-256 checksum
How to use checksums
42bf5c65c0af6999c3a75be5b216a8d9416241a6c5c141c8fa659e63fc7afc2d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp314-cp314-macosx_14_0_arm64.whl

Download URL momwire-0.84.0-cp314-cp314-macosx_14_0_arm64.whl
Size 7.1 MB
Tags CPython 3.14 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
f5c19143534a20882114086f25356dc5c7afe9dcd19777b2384a5f075ad29a69
BLAKE2b-256 checksum
How to use checksums
e9e4307befd6a9a8e5989ceaac6574e8776d9f17879d30ba19699e7e5db53fad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp313-cp313-win_amd64.whl

Download URL momwire-0.84.0-cp313-cp313-win_amd64.whl
Size 10.6 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
79158773d7a67714c5d4ad0d4f6a8dde1b9c40babf316d66444ca43eb48a01b9
BLAKE2b-256 checksum
How to use checksums
3e09070e1093fe0f0fef25bb19dca2f145f6c04624511204e5fa267fe084f60f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL momwire-0.84.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 14.4 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6b92b6302e41928ab5e2409beb5619cd821cbbb0a87a4f0d67aafe71027a5cfe
BLAKE2b-256 checksum
How to use checksums
121220356c76f6a7f084f30c5113505383ba4f6ae9502f1b59fab4dd58fc8286
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp313-cp313-macosx_14_0_arm64.whl

Download URL momwire-0.84.0-cp313-cp313-macosx_14_0_arm64.whl
Size 7.1 MB
Tags CPython 3.13 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
d1d215bd612f0a9443318d4e1c1cd3672eeb91fcffccfd17bbc2ef17c43b3cfc
BLAKE2b-256 checksum
How to use checksums
5ad0a5158c562f38f7996394579b8dab8cecb2f6a8665efc947160c0ab42cb83
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp312-cp312-win_amd64.whl

Download URL momwire-0.84.0-cp312-cp312-win_amd64.whl
Size 10.6 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
b116297ec47b6b812c5096bb7eb76911b73b1a89404a045944d9aa131df71837
BLAKE2b-256 checksum
How to use checksums
b4fdc13ead5af061540aff90610a7dfbe75afa2bd563567d74e851fa721caa49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL momwire-0.84.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 14.4 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
52aa630ad3f3faa33e427667ca38b61e8c551269247a03bc557cb4aa200c3193
BLAKE2b-256 checksum
How to use checksums
dccdce9d370de314716c3e8d7527e63c2d2190958baaa559dc0fa4bfa3918bf0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp312-cp312-macosx_14_0_arm64.whl

Download URL momwire-0.84.0-cp312-cp312-macosx_14_0_arm64.whl
Size 7.1 MB
Tags CPython 3.12 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
02770b5962c28e82d24e4bad894603f46d59655513e14bfcb2186d45ce17d035
BLAKE2b-256 checksum
How to use checksums
d685ef54edacb134a85402a7ef2ed8eaf4b6683240c7eb7e171d7f6eab0c26b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp311-cp311-win_amd64.whl

Download URL momwire-0.84.0-cp311-cp311-win_amd64.whl
Size 10.5 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
decbf1ba25a1c56eb9e981f4e83737ec223d71327dff456fe6c67e444d3545c0
BLAKE2b-256 checksum
How to use checksums
fcc48c260250ca7992e30309c716157e1e7b973fabce2b99c10c034daa05efef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL momwire-0.84.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 14.4 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3d7bf403ed55eab187becd6b734c0f08c6526dc86189477cf27b0878f0720738
BLAKE2b-256 checksum
How to use checksums
1ef090591ac921d56106fb7996b9f8bc02daf2f87a496ae605a1e7593a2ba172
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp311-cp311-macosx_14_0_arm64.whl

Download URL momwire-0.84.0-cp311-cp311-macosx_14_0_arm64.whl
Size 7.1 MB
Tags CPython 3.11 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
db151f66c8d63422043452409e079f661782926b4662232813c04cca5d10852c
BLAKE2b-256 checksum
How to use checksums
c943d12924b96465554f83c512f77435cd97dcc323c25155edff2e472ca6a3da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp310-cp310-win_amd64.whl

Download URL momwire-0.84.0-cp310-cp310-win_amd64.whl
Size 10.5 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
5f997ba6c5af7ff823c92394e34e97f711c87196b1786e132cbda2eacf00394d
BLAKE2b-256 checksum
How to use checksums
ad129df05497efd340530df9e4778a8a4cafa4b6ec137dfd5756167f9ecfe177
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL momwire-0.84.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 14.4 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
76e14577028be101816b16c8e1e19621b2f91d4dcf5f5be4da22318a3e1d75b0
BLAKE2b-256 checksum
How to use checksums
4b23cc1f5d8bbf215bd96862d2f651972095163abdeffafc076845dd8230f278
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / momwire-0.84.0-cp310-cp310-macosx_14_0_arm64.whl

Download URL momwire-0.84.0-cp310-cp310-macosx_14_0_arm64.whl
Size 7.1 MB
Tags CPython 3.10 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
4c81f035bcd94ea329767e60ab4bfee64494f17d1c2d89ca2fe2638f1ed94d05
BLAKE2b-256 checksum
How to use checksums
f4ee3e68260bff5ac9a054ac925c0a3805baa0ef912bacc94a248ceeb5734737
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Security for momwire 0.84.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 19 files in this release have been uploaded with provenance metadata.

Select from 19 files

Attestation for momwire-0.84.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.84.0 This release

19 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page