Skip to main content

pylmcf: min-cost-flow solvers for Python and C++

Overview

pylmcf ships two independent deliverables from one source tree:

  1. A Python extension — fast min-cost flow via LEMON's solvers, with a stateful object API that warm-restarts on re-solve.
  2. A header-only C++ include tree — LEMON extended with warm-restart machinery, plus pylmcf's own solvers: a link-cut tree, two link-cut-tree network simplex variants, and a specialised 1D-chain solver. Downstream C++ code compiles against it directly.

It is used by wnet (efficient Wasserstein and Truncated Wasserstein distance between multidimensional distributions) and wnetalign (alignment of MS or NMR spectra). Both re-solve the same graph hundreds of times with one thing moved, which is what most of the machinery here exists to make cheap.

The LCT simplex variants and 1D chain solver are also available from Python; see the Python solver APIs.

Features

  • Fast min-cost flow computation using a C++ backend (LEMON's Network Simplex by default)
  • Warm restarts: re-solving after changing supplies, capacities or costs reuses the retained spanning-tree basis instead of rebuilding one — docs
  • Multiple solver variants: Network Simplex, Cycle Canceling, Cost Scaling, Capacity Scaling
  • Supports capacities, costs, supplies/demands, and per-edge lower bounds (minimum flow)
  • NetworkX integration: construct from nx.DiGraph or convert results back for visualization
  • Free-threaded CPython support (a separate cp315-abi3t wheel)
  • A C++ header tree for downstream packages, including the standalone link-cut-tree data structure

Documentation

See the changelog for release notes and migration details.

Warm restarts How re-solving reuses the basis, the repair strategies, the counters and the two policy knobs. Start here — it is on by default and affects every re-solve.
The C++ header tree Consuming src/pylmcf/cpp/ from your own C++, what is in it, and why the vendored LEMON must not be replaced wholesale.
Link-cut trees LinkCutTree<Val> — a standalone Sleator–Tarjan link-cut tree with path-sum, path-min-with-argmin and lazy path-add.
LCT network simplex NetworkSimplexLCT and the experimental NetworkSimplexLCTDyn, plus the adapter that A/B-tests them against real LEMON.
The 1D chain solver ChainSolver1D — successive shortest paths specialised to the 1D-chain LP.
Build modes and threading nanobind split vs linked, free-threading, what is and is not thread-safe, wheels.
Testing and diagnostics The two test suites (the C++ one runs in CI under five sanitizer lanes), and the diagnostic build flags.

Installation

pip install pylmcf

Optional extras for NetworkX support and visualization:

pip install pylmcf[extras]

Usage

Basic usage

import numpy as np
import pylmcf

# 3-node graph with edges 0→1, 0→2, 1→2
# Edges must be sorted by (start, end)
G = pylmcf.Graph(3,
    edge_starts=np.array([0, 0, 1]),
    edge_ends=np.array([1, 2, 2]))

G.set_node_supply(np.array([5, 0, -5]))   # node 0 supplies 5, node 2 demands 5
G.set_edge_costs(np.array([1, 3, 5]))
G.set_edge_capacities(np.array([3, 3, 5]))

G.solve()

G.result()      # np.array([2, 3, 2])  — flow on each edge
G.total_cost()  # 21
G.potentials()  # np.array([-6, -5, 0]) — node potentials (dual solution)

For performance-sensitive dual consumers, use raw_potentials(), dual_values() or allocation-free dual_values_into(). These are also exposed on both LCT variants. See Fast dual certificates.

potentials() returns the dual solution in LEMON's convention: the reduced cost of edge (u, v) is cost + pi[u] - pi[v], and complementary slackness holds against result() (reduced cost > 0 ⇒ flow at its minimum, < 0 ⇒ flow at capacity). Potentials are not unique, so pylmcf returns a canonical choice: of all potentials optimal for the returned flows, the pointwise-largest with pi <= 0 (the smallest with pi >= 0 under "leq" supply, below). Its values are bounded by path costs — LEMON's raw tree potentials can instead carry its internal 2^62 artificial cost on some nodes.

Input arrays may be writable or read-only (including read-only NumPy memory maps); they must be contiguous and aligned to their element size. Returned flow and potential arrays are writable and own their data.

All integer arrays in the OO API are int64, and the dtype is not converted for you — a mismatched array raises TypeError. Costs and minimums must be non-negative, costs at most 2^62 − 1 (network simplex's artificial arcs cost 2^62 and must stay dearer than any real arc), supplies greater than the dtype's minimum (LEMON negates them), and the graph must be feasible (see below for unbalanced supply) or solve() raises RuntimeError: INFEASIBLE. A rejected setter leaves the graph unchanged. As in the functional API below, the value range is unchecked: total supply and every flow must fit in int64 with room to spare, a capacity of INT64_MAX means unbounded, and the total cost must fit in int64.

LCT and 1D-chain solvers

from pylmcf import NetworkSimplexLCT, lmcf_lct, lmcf_lct_dyn, solve_chain_1d

# Same five int64 arrays as the functional LEMON API; arbitrary edge order.
flows = lmcf_lct(supply, starts, ends, capacities, costs)
# lmcf_lct_dyn(...) selects the experimental dynamic-tree variant.
solver = NetworkSimplexLCT(supply, starts, ends, capacities, costs)
solver.solve()
solver.set_node_supply(new_supply)
solver.solve()  # warm restart, with automatic cold fallback

chain = solve_chain_1d(
    np.array([0, 10], dtype=np.int64),
    np.array([5, 0], dtype=np.int64),   # empirical masses
    np.array([0, 5], dtype=np.int64),   # theoretical masses
    kappa=3,
)
chain["total_cost"]  # 15: trash is cheaper than transport

These solvers require contiguous int64 arrays. LCT solvers require balanced supplies, non-negative costs, finite capacities, and zero lower bounds. Costs and topology are fixed on a stateful LCT instance. See Python solver APIs for return values, counters, validation, and the chain's SimpleTrash semantics.

Per-edge lower bounds (minimum flow)

G.set_edge_minimums(np.array([3, 0, 0]))  # edge 0→1 must carry at least 3 units
G.solve()
G.result()      # np.array([3, 2, 3])
G.total_cost()  # 24

Unbalanced supply, and why a problem is infeasible

When total supply and demand differ, the supply type says which side may fall short (LEMON's SupplyType; with balanced supply both mean equality):

G.set_supply_type("geq")  # default: out - in >= supply. Every supply is shipped,
                          # demands may go unmet; needs sum(supply) <= 0.
G.set_supply_type("leq")  # out - in <= supply. Every demand is met, supplies
                          # may go unused; needs sum(supply) >= 0.

Unbalanced re-solves do not warm-restart. When solve() raises INFEASIBLE, infeasibility_cut() says why: a boolean mask of nodes B that must push out more than the edges leaving B can carry (under "leq": must take in more than the edges entering B can deliver). It returns None when the problem is feasible, and does not need or disturb a solve.

G.set_node_supply(np.array([9, 0, -9]))
G.infeasibility_cut()     # array([ True, False, False]) — node 0's out-edges carry at most 6

Re-solving: warm restarts

Changing supplies, capacities or costs and calling solve() again reuses the basis from the previous solve. Nothing to switch on:

H = pylmcf.Graph(3,
    edge_starts=np.array([0, 0, 1]),
    edge_ends=np.array([1, 2, 2]))
H.set_edge_costs(np.array([1, 3, 5]))
H.set_edge_capacities(np.array([3, 3, 5]))

for d in (5, 4, 6, 2):
    H.set_node_supply(np.array([d, 0, -d]))
    H.solve()
    print(d, H.result(), H.total_cost())

H.warm_start_count()    # 2
H.cold_start_count()    # 0
H.dual_repair_count()   # 1
5 [2 3 2] 21
4 [1 3 1] 15
6 [3 3 3] 27
2 [0 2 0] 6

The first solve() is always cold and is not counted. The counters are how you tell whether warm restarts are actually firing — a regression that silently routes every re-solve through a cold rebuild still gives correct answers. Nonzero lower bounds force a cold solve.

The pivot rule (set_pivot_rule(): "block_search" by default, or "first_eligible", "best_eligible", "candidate_list", "altering_list"), the warm-repair strategy (set_warm_repair(): "dual" by default, or "repair_only", "primal", "dual_ratio", "dual_greedy") and the repair time budget (set_warm_repair_budget()) are configurable; the defaults are what you want unless you are benchmarking. Full details, the repair strategies, the set_warm_violation_limit() policy and the C++ API: Warm restarts.

Constructing from a NetworkX graph

Note: Graph.FromNX() iterates over graph elements in Python and is significantly slower than constructing Graph directly from numpy arrays. Prefer the direct API for performance-sensitive code.

import networkx as nx

G_nx = nx.DiGraph()
G_nx.add_edge(0, 1, weight=1, capacity=3)
G_nx.add_edge(0, 2, weight=3, capacity=3)
G_nx.add_edge(1, 2, weight=5, capacity=5)
G_nx.nodes[0]["demand"] = -5
G_nx.nodes[2]["demand"] = 5

G = pylmcf.Graph.FromNX(G_nx)
G.solve()
G.result()      # np.array([2, 3, 2])

Alternative solvers

The default solver is LEMON's Network Simplex. Three alternatives are available via the low-level functional API:

from pylmcf import pylmcf_cpp
import numpy as np

a = lambda x: np.array(x, dtype=np.int64)
supply = a([5, 0, -5])
starts = a([0, 0, 1])
ends   = a([1, 2, 2])
caps   = a([3, 3, 5])
costs  = a([1, 3, 5])

flows = pylmcf_cpp.lmcf(supply, starts, ends, caps, costs)               # Network Simplex (default)
flows = pylmcf_cpp.lmcf_cycle_canceling(supply, starts, ends, caps, costs)
flows = pylmcf_cpp.lmcf_cost_scaling(supply, starts, ends, caps, costs)   # int32/int64 only
flows = pylmcf_cpp.lmcf_capacity_scaling(supply, starts, ends, caps, costs)  # int32/int64 only

Pass return_potentials=True to get (flows, potentials) instead; potentials are always int64 and canonical as above, so every solver returning the same flows returns the same potentials.

The functional API is stateless and has no warm restart. It is duck-typed over int8/16/32/64 (cost and capacity scaling excepted, which need the wider range), and each function has a with- and without-minimums overload.

Value range is the caller's responsibility, at every width. Supplies, capacities, minimums and flows are computed in the input dtype (costs and the objective in int64), and nothing checks that intermediate values fit — that is what keeps the narrow types small. The sum of the positive supplies, the magnitude of the sum of the negative ones, and therefore every arc's flow must fit the dtype with room to spare: at the exact limit some solvers already overflow internally. Outside that range, int8/int16 return wrong results without an error (a feasible problem reported INFEASIBLE, say), and int32/int64 is undefined behaviour. A capacity equal to the dtype's maximum (127 for int8, 32767 for int16, …) means unbounded, not that number. The total cost must fit in int64.

Visualization

G.show()               # display with matplotlib
G.show("graph.png")    # save to file

Threading

Independent Graph objects may be solved concurrently, including on free-threaded CPython — tests/test_free_threading.py hammers 8 threads against a serial oracle. A single Graph must not be driven from two threads at once: solve() mutates the instance, takes no lock, and no binding releases the GIL. See Build modes and threading.

Using the C++ solvers

python -m pylmcf --include

prints the include root; there is nothing to link.

g++ -I$(python -m pylmcf --include) -std=c++20 -O2 mycode.cpp -o mycode

Beyond LEMON, the tree carries pylmcf's own header-only solvers — LinkCutTree, NetworkSimplexLCT, the experimental NetworkSimplexLCTDyn, a lemon::NetworkSimplex-compatible adapter, and ChainSolver1D. None of these have a Python binding. See The C++ header tree.

Requirements

  • Python 3.10+
  • For a build from source (sdist, or a local checkout): a C++20 compiler

Licence

pylmcf is published under the Boost Software Licence.

src/pylmcf/cpp/lemon is a modified copy of the LEMON graph library, also covered by the Boost Software Licence. lemon/network_simplex.h in particular carries substantial pylmcf-specific work that upstream does not have — the entire warm-restart machinery — so it must not be replaced with a stock LEMON release. Diff, do not overwrite; see the header-tree docs.

Citation

If you use this software, please cite:

Król J, Bochenek M, Jopa S, Kazimierczuk K, Gambin A, Startek MP (2026). WNetAlign: fast and accurate spectra alignment using truncated Wasserstein distance and network simplex. Briefings in Bioinformatics, 27(3), bbag247. https://doi.org/10.1093/bib/bbag247

@article{krol2026wnetalign,
  title   = {WNetAlign: fast and accurate spectra alignment using truncated Wasserstein distance and network simplex},
  author  = {Kr{\'o}l, Justyna and Bochenek, Maria and Jopa, Sylwia and Kazimierczuk, Krzysztof and Gambin, Anna and Startek, Micha{\l} Piotr},
  journal = {Briefings in Bioinformatics},
  volume  = {27},
  number  = {3},
  pages   = {bbag247},
  year    = {2026},
  doi     = {10.1093/bib/bbag247}
}

References

  • LEMON Graph Library
  • wnet package
  • wnetalign package
  • Min Cost Flow Problem
  • Sleator, D. D. and Tarjan, R. E. (1983). A data structure for dynamic trees. Journal of Computer and System Sciences 26(3), 362–391.
  • Cunningham, W. H. (1976). A network simplex method. Mathematical Programming 11(1), 105–116. — the strongly-feasible-basis anti-cycling rule both LCT solvers reproduce.

Metadata

Release files for pylmcf 1.3.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 pylmcf 1.3.0
File Size Uploaded
pylmcf-1.3.0.tar.gz 339.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for pylmcf 1.3.0
File
pylmcf-1.3.0-cp315-abi3t-win_arm64.whl CPython 3.15 abi3t Windows ARM64 Details
pylmcf-1.3.0-cp315-abi3t-win_amd64.whl CPython 3.15 abi3t Windows x86-64 Details
pylmcf-1.3.0-cp315-abi3t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 abi3t Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details
pylmcf-1.3.0-cp315-abi3t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.15 abi3t Linux glibc 2.24+ ARM64, Linux glibc 2.28+ ARM64 Details
pylmcf-1.3.0-cp315-abi3t-macosx_11_0_arm64.whl CPython 3.15 abi3t macOS 11.0+ ARM64 Details
pylmcf-1.3.0-cp315-abi3t-macosx_10_15_x86_64.whl CPython 3.15 abi3t macOS 10.15+ x86-64 Details
pylmcf-1.3.0-cp310-abi3-win_arm64.whl CPython 3.10 abi3 Windows ARM64 Details
pylmcf-1.3.0-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
pylmcf-1.3.0-cp310-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 abi3 Linux glibc 2.28+ x86-64, Linux glibc 2.24+ x86-64 Details
pylmcf-1.3.0-cp310-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 abi3 Linux glibc 2.28+ ARM64, Linux glibc 2.24+ ARM64 Details
pylmcf-1.3.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
pylmcf-1.3.0-cp310-abi3-macosx_10_15_x86_64.whl CPython 3.10 abi3 macOS 10.15+ x86-64 Details

Total release size: 8.6 MB

Release files / pylmcf-1.3.0.tar.gz

Download URL pylmcf-1.3.0.tar.gz
Size 339.3 kB
Tags Source
SHA-256 checksum
How to use checksums
6b43ee0e2c574ac207104f3a2a4addb73a95a075f947b3732e499aca04a1457c
BLAKE2b-256 checksum
How to use checksums
3c4053b7560423e1e6e4a4e33ee2f64ecafdf90934ab3af4c47781c87cf914f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp315-abi3t-win_arm64.whl

Download URL pylmcf-1.3.0-cp315-abi3t-win_arm64.whl
Size 872.8 kB
Tags CPython 3.15 Windows ARM64 abi3t
SHA-256 checksum
How to use checksums
192d8a28cc326d90d3a0eb299ec90e05793fe03c30fd2106aad7e441211ec13a
BLAKE2b-256 checksum
How to use checksums
59964f17a1ed5b0e1354770ceb6bf537a469f7c69320ea7efe25a4bf1b6baf06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp315-abi3t-win_amd64.whl

Download URL pylmcf-1.3.0-cp315-abi3t-win_amd64.whl
Size 712.1 kB
Tags CPython 3.15 Windows x86-64 abi3t
SHA-256 checksum
How to use checksums
f97b14b62b34d2af184544f2822c2d87d31e0665b9691d4d10c37805a99c4054
BLAKE2b-256 checksum
How to use checksums
86f336daa9e77045ca226e36f6b44003c6e6a61256362c2f0a5dc13876df35cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp315-abi3t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL pylmcf-1.3.0-cp315-abi3t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 656.7 kB
Tags CPython 3.15 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 abi3t
SHA-256 checksum
How to use checksums
24869ee9d15617709384d24a39f03795f6ec66e9204d372e69cdf35bc7e1f6c6
BLAKE2b-256 checksum
How to use checksums
1a94644dbd85cd7d3f159f710ab46ad6e2c5b92c4522be62293dc558630e330b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp315-abi3t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL pylmcf-1.3.0-cp315-abi3t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 622.9 kB
Tags CPython 3.15 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 abi3t
SHA-256 checksum
How to use checksums
130d1ac4c8521fd7951a35cc2ded003c733ce1ee9634892535881bc365436160
BLAKE2b-256 checksum
How to use checksums
f15d117ce829904e46651900e0cd706656b818b725c668dc9609b14ba12fd8aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp315-abi3t-macosx_11_0_arm64.whl

Download URL pylmcf-1.3.0-cp315-abi3t-macosx_11_0_arm64.whl
Size 607.2 kB
Tags CPython 3.15 abi3t macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4927932d81c392e92fa0288f0f4d67fd05002abc8991551f93391ebc359c2e37
BLAKE2b-256 checksum
How to use checksums
11b17ed0291d63d45568f4c87610031d2a97c63dc6cc71c4cb4e757903ba2b2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp315-abi3t-macosx_10_15_x86_64.whl

Download URL pylmcf-1.3.0-cp315-abi3t-macosx_10_15_x86_64.whl
Size 669.5 kB
Tags CPython 3.15 abi3t macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
d81cc238d3169fe056a8826f29ba3b76276b082b7caf7d7a5790b3b5e01f3237
BLAKE2b-256 checksum
How to use checksums
4fde681b145faf93bdfd2a5c29d0f17c67067588e75a599a34a8eba4045f66ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp310-abi3-win_arm64.whl

Download URL pylmcf-1.3.0-cp310-abi3-win_arm64.whl
Size 855.2 kB
Tags CPython 3.10 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
55ea17bf50394526ba70b6bf9762b525d2bdc412ee99259da72e6e309643941d
BLAKE2b-256 checksum
How to use checksums
d73990d6ea2ed890fb5ddcda299de37cff2ea591b519a20d020da1ec30c3d225
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp310-abi3-win_amd64.whl

Download URL pylmcf-1.3.0-cp310-abi3-win_amd64.whl
Size 700.5 kB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
52c14e909f760d6378b29e68ab38ea4cf57bf0c5d6db4740763624a31f3267ec
BLAKE2b-256 checksum
How to use checksums
b65763f6a46e727326319fba27e3f29822aefa0fbe3b43b2cff926b147d30af0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp310-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL pylmcf-1.3.0-cp310-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 656.3 kB
Tags CPython 3.10 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
c9dd21aa8141b03e685dbf71a90f6361930a05ab7fc7c761c2ea5e591d7e1cfc
BLAKE2b-256 checksum
How to use checksums
57169e376b4cc4464cf31d23954a795b2652a1119e7462770e14785d748c9bed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp310-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL pylmcf-1.3.0-cp310-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 621.8 kB
Tags CPython 3.10 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
8bb66383c5bca957bacece7325e3ba6adfd95bb121802c6eedc4693e3aaf39a4
BLAKE2b-256 checksum
How to use checksums
ea9014bdd0fb9aede726ad1c369edefbb8a78b9f479cef21396eebdfda8a5c80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL pylmcf-1.3.0-cp310-abi3-macosx_11_0_arm64.whl
Size 607.7 kB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4926f11b00879750fc5addb0e364024a81e5580422cfbd715f7344745a00d60d
BLAKE2b-256 checksum
How to use checksums
e3e61f837261b3e554d87e53d1ea0cee15baf59dc82d2673780bd05dd3d0b159
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release files / pylmcf-1.3.0-cp310-abi3-macosx_10_15_x86_64.whl

Download URL pylmcf-1.3.0-cp310-abi3-macosx_10_15_x86_64.whl
Size 669.2 kB
Tags CPython 3.10 abi3 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
9479337b24aea9e18bf856a7c471da6a489fde5695ac54d10666446824de1264
BLAKE2b-256 checksum
How to use checksums
d9123a8be7e1601a278d1afb82474c618293ac71f2787ca16004f42ba54847d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 9, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.3.0 This release

13 release files

1.1.0

85 release files

1.0.0

67 release files

0.9.8

67 release files

0.9.7

67 release files

0.9.6

67 release files

0.9.5

67 release files

0.9.4

67 release files

0.9.3

74 release files

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