ergmx
Exponential-family random graph models (ERGMs) in Python, with a Rust core.
ergmx fits, simulates, summarizes and checks ERGMs with a high-level API in
the spirit of R's ergm and statnet: R-style
formulas, the same term names and statistics, and summary() and gof()
that read like R's.
74 terms and 9 operators for directed, undirected and bipartite networks; curved ERGMs; sample space constraints; missing ties; multilevel networks (as MPNet); samples of networks (as ergm.multi); temporal ERGMs and dynamic simulation (as tergm); MPLE, contrastive divergence and Monte Carlo MLE; MCMC diagnostics, log-likelihoods, model comparison and goodness of fit; tie probabilities, marginal effects and tables of results, all validated against R. See what's missing.
import ergmx
from ergmx import datasets
g = datasets.load("faux.mesa.high") # an igraph.Graph; ergm's networks are bundled
fit = ergmx.ergm(
g, "edges + nodefactor('Sex') + nodematch('Grade') + nodematch('Race') + gwesp(0.5, fixed=TRUE)",
seed=1,
)
fit.summary()
Monte Carlo Maximum Likelihood Results:
Estimate Std. Error MCMC % z value Pr(>|z|)
edges -6.1846 0.1734 0 -35.669 <1e-04 ***
nodefactor.Sex.M -0.1256 0.0747 0 -1.681 0.09274 .
nodematch.Grade 1.9710 0.1758 0 11.210 <1e-04 ***
nodematch.Race 0.2657 0.1188 0 2.235 0.02539 *
gwesp.fixed.0.5 1.2166 0.0853 0 14.271 <1e-04 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Log-likelihood: -867.1531 (MC SE 0.194) AIC: 1744.3062 BIC: 1784.0461
Converged after 6 iterations (4 chains, 1024 samples).
R's ergm gives -6.1884, -0.1293, 1.9761, 0.2699, 1.2178 and a log-likelihood
of -867.56 on the same model, in 16.8 s; ergmx took 2.5 s. (A high-precision
estimate of the log-likelihood is -867.09: R's is off by 0.47, see
validation.)
Then check the fit, as with R's gof():
result = fit.gof() # degree, edgewise shared partners, geodesic distances, model statistics
print(result["degree"])
result.plot()
Check the MCMC and compare models, as with R's mcmc.diagnostics() and
anova():
fit.mcmc_diagnostics() # effective sizes, R-hat across chains, Geweke; .plot() for traces
simpler = ergmx.ergm(g, "edges + nodefactor('Sex') + nodematch('Grade') + nodematch('Race')")
ergmx.compare(simpler, fit) # log-likelihoods, AIC, BIC, likelihood-ratio test
Features
-
Networks:
igraph.Graphornetworkx.Graph/DiGraph, directed or undirected. Vertex attributes are available to the terms; edges withna=Truemark missing dyads. -
Formulas in R syntax (
"edges + gwesp(0.5, fixed=TRUE)", even withnet ~in front), or terms combined with+:edges() + gwesp(0.5, fixed=True). Nothing is evaluated: arguments must be literals. -
Terms, with ergm's definitions and names:
Undirected Directed Dyadic edges,edgecov,socialityedges,edgecov,mutual,asymmetric,sender,receiverDegree kstar(k),degree(d),isolates,concurrent,twopath,gwdegreeistar(k),ostar(k),idegree(d),odegree(d),isolates,twopath,gwidegree,gwodegreeTriads and cycles triangle,cycle(k),gwesp,gwdsp,gwnsp,esp(d),dsp(d),nsp(d)triangle,ttriple,ctriple,transitive,cycle(k), and the shared partner terms with anytype(OTP, ITP, RTP, OSP, ISP)Attributes nodematch(diff=TRUEtoo),nodemix,nodefactor,nodecov,absdiff,absdiffcatthe same, plus nodeifactor,nodeofactor,nodeicov,nodeocovOperators offset(term)(with-infto forbid ties),F(~terms, ~filter)the same Bipartite networks have
b1star,b1degree,gwb1degree,b1concurrent,b1factor,b1cov,b1nodematch,b1dsp,gwb1dspand theirb2twins. The geometrically weighted terms take a fixed decay (fixed=TRUE) or, as in ergm by default, estimate it: curved ERGMs.edgecov('name')reads an n x n matrix from a graph attribute. -
Constraints, as in ergm:
bd(bounded degrees, for fixed-choice designs),blocks(fix the dyads of some mixing types),degrees,odegreesandidegrees, with degree-preserving MCMC moves. -
Missing ties: likelihood inference conditional on the observed dyads (Handcock and Gile 2010), assuming they are missing at random, for the estimates, standard errors, log-likelihood and goodness of fit.
-
Bipartite networks (
bipartite=True): only the ties between modes are modeled, with their own terms and ergm's goodness of fit statistics. -
Curved ERGMs: the decays of gwesp, gwdegree and the other geometrically weighted terms estimated in the MPLE, contrastive divergence, the Monte Carlo MLE and the log-likelihood, with an overflow statistic where ergm's cutoff stops with an error.
-
Multilevel networks as one network with a level attribute, as MPNet models them (Wang et al. 2013): ergm's
S()for terms within a level or between two (S(~edges + gwesp(0.5, fixed=TRUE), ~level == 'A')), MPNet's cross-level configurations (star2ax,txax,atxax,l3axb,c4axb...), andnodemix,F()andblocksto model kinds of ties. -
Samples of networks, as R's ergm.multi:
ergmx.Networks(g1, g2, ...)models many networks (classrooms, households) jointly, andN(~terms, lm=~log(n) + weekday)lets the coefficients depend on network-level attributes, with R's syntax and names. -
Temporal ERGMs, as R's tergm:
ergmx.tergm([wave1, wave2, wave3], "Form(~edges + mutual) + Persist(~edges)")fits the conditional MLE of a series of networks, withForm(),Persist(),Diss(),Cross()andChange();fit.simulate(time_slices=20)andergmx.simulate_dynamic()run the process forward, with the ties that form and dissolve and their durations. -
Estimation:
- dyad-independent models: the exact MLE (logistic regression), with log-likelihood, AIC and BIC;
- other models: Monte Carlo MLE starting from the MPLE (or from the
contrastive divergence estimate,
init="CD"), with Hummel et al. (2012) step lengths, the log-normal approximation, an adaptive MCMC interval that targets an effective sample size, and standard errors that include the MCMC error; estimate="MPLE"orestimate="CD"for those estimates only;- degenerate models stop with a
DegeneracyErrorthat says why: a density guard (as in ergm) and a check that the estimate is still moving, with the simulated and observed statistics side by side.
-
Log-likelihood of dyad-dependent models, with its Monte Carlo standard error, by path sampling from the dyad-independent submodel as ergm does, but integrated with the Euler-Maclaurin corrected trapezoidal rule: its error falls as 1/bridges^4 instead of 1/bridges^2 for ergm's midpoint rule.
ergmx.compare(fit1, fit2, ...)tabulates log-likelihoods, AIC, BIC and likelihood-ratio tests of nested models. -
MCMC diagnostics:
fit.mcmc_diagnostics()reports mean deviations from the observed statistics, naive and time-series standard errors, effective sizes, split R-hat across the parallel chains and Geweke z-scores, with trace and density plots. -
MCMC in Rust: tie/no-tie (TNT) proposals mixed with triadic proposals, which close or open triangles, for models with triangle or shared partner terms, directed or not (like ergm's
MH_SPDyaddefault). Chains run in parallel threads. -
Goodness of fit:
fit.gof()orergmx.gof(network, formula, coef)compares the degree (in- and out-degree if directed), edgewise shared partner and geodesic distance distributions, and the model statistics, with simulated networks: tables with Monte Carlo p-values like R's, andplot(). -
ergmx.simulate(network, formula, coef, nsim)returns graphs of the same kind as the input, or their statistics;fit.simulate()uses the estimates. -
Interpreting and reporting:
fit.predict()(tie probabilities, as ergm'spredict()),fit.marginal_effects()(as ergMargins),fit.odds_ratios(),fit.confint(), andergmx.table(fit1, fit2), a table of models identical to texreg'sscreenreg(), also as LaTeX, HTML and Markdown;to_frame()for pandas. -
ergmx.summary_stats(network, formula): R'ssummary(net ~ formula). -
ergmx.datasets: the networks of R's ergm documentation (flomarriage, flobusiness, samplk1-3, faux.mesa.high, faux.dixon.high, faux.magnolia.high), ergm.multi's 318 household networksGoeyvaerts, and multinets' multilevellinked_sim.
Documentation
A user guide, a term reference, the API reference and a guide for R users,
built with Sphinx in docs/; every example runs when it is built:
uv sync --group docs
uv run sphinx-build -W --keep-going -d docs/_build/doctrees docs docs/_build/html
.github/workflows/docs.yml publishes it to GitHub Pages.
Validation against R
scripts/r_reference.R fits the models below with ergm 4.12 (ergm.multi 0.3.0
and tergm 4.2.2 for samples and series of networks) and stores the
results in tests/data/r_reference.json; the test suite compares.
| Check | Result |
|---|---|
| Statistics of ergm's 58 terms and 9 operators, 70 models | identical to R's summary() (1e-12), names included, except two statistics that ergm 4.12.0 computes differently from its documentation, where ergmx follows the documentation: transitive, and the edgewise RTP statistics, which ergmx gives as ergm does with its shared-partner cache off (see validation) |
| MPLE, 47 models | identical to R (1e-6; curved models 1e-3, with a pseudo-likelihood at least R's) |
Dyad-independent MLE, standard errors, log-likelihood and BIC (13 models, with offsets, blocks, S(), missing dyads, bipartite networks, samples and series of networks) |
identical to R (1e-6; SEs 1e-3, R's glm tolerance) |
| Monte Carlo MLE, 7 models (4 undirected, 3 directed) x 3–10 seeds | within 0.12 standard errors of R; SEs within 0.89–1.12 of R's |
Monte Carlo MLE with constraints, missing dyads, offsets, F() and multilevel models, 12 models x 5 seeds |
within 0.17 standard errors of R; SEs within 0.91–1.09 of R's |
| Monte Carlo MLE of the new terms, bipartite and curved models (directed and undirected), 10 models x 3–5 seeds | within 0.2 standard errors of R; SEs within 0.90–1.12 of R's, except one curved model with a nearly flat decay |
| Monte Carlo MLE of samples of networks (ergm.multi) and of series (tergm's CMLE), 4 models x 5 seeds | within 0.10 standard errors of R; SEs within 0.94–1.05 of R's |
Monte Carlo MLE of a multilevel model with S(), 5 seeds |
within 0.08 standard errors of R; SEs within 0.96–1.04 of R's |
| MPNet's 16 multilevel configurations (no R implementation exists) | equal to their matrix definitions (1e-12); the MCMC matches exact enumeration |
| Goodness of fit, directed and undirected | observed distributions and p-values identical to R's; simulated distributions agree within Monte Carlo error |
| Tie probabilities, marginal effects, confidence intervals and tables | identical to R's predict() (1e-12), ergMargins' effects, confint() and texreg's tables (character for character) |
| MCMC stationary distribution, unconstrained and under every constraint | matches exact enumeration of every network each constraint allows on 3 to 6 vertices, directed and undirected |
| Log-likelihood, directed and undirected | unbiased against exact enumeration (6 and 4 vertices), with calibrated standard errors |
| Log-likelihood, 5 dyad-dependent models | within one standard error of high-precision estimates (128 bridges); R's 16-point midpoint rule is off by 0.1 to 2.1 |
| Contrastive divergence | a fixed point of its defining equation; the MLE from a CD start matches R's |
The networks are ergm's flomarriage, samplk3, faux.mesa.high and faux.dixon.high (248 students, directed friendship nominations), the second and third also with missing dyads, and multinets' linked_sim. R's own standard errors vary by about 15% between seeds on the small networks, so the SE comparison is only as tight as R allows. Full details: docs/validation.md.
Performance
benchmarks/benchmark.R and benchmarks/benchmark.py: median of 3 seeds on an
Apple M4 Pro, both with their defaults, which include the log-likelihood. R's
ergm runs on one thread; the single-threaded ergmx run is limited to one thread
too.
| Model | Vertices | R ergm 4.12 | ergmx, 1 thread | ergmx, all threads | Max |difference| |
|---|---|---|---|---|---|
| faux.mesa.high, gwesp(0.5) | 205 | 16.8 s | 10.6 s (1.6x) | 2.5 s (6.6x) | 0.04 SE |
| faux.magnolia.high, gwesp(0.25) | 1,461 | 17.3 s | 15.3 s (1.1x) | 5.5 s (3.1x) | 0.07 SE |
| faux.dixon.high (directed), gwesp(0.1) | 248 | 142 s | 83 s (1.7x) | 17 s (8.1x) | 0.07 SE |
ergmx's log-likelihood samples about 17 times more than ergm's, which is what
makes it accurate. Without the log-likelihood on either side (eval_loglik=False
and eval.loglik = FALSE), a single thread was 1.9 to 3.6 times faster than R
on these models.
The proposal matters as much as the language: with plain TNT proposals, R takes 128 s on faux.magnolia.high.
Architecture
python/ergmx/ Python API
formula.py R-style formula parsing (Python's ast, no eval)
terms.py term definitions: names, parameters, directedness
_estimation.py MPLE, contrastive divergence, Monte Carlo MLE, degeneracy checks
_loglik.py log-likelihood by path sampling
_diagnostics.py MCMC diagnostics
_gof.py goodness of fit
_compare.py model comparison
constraints.py sample space constraints
datasets.py ergm's and multinets' networks, bundled in data/
_fit.py ErgmFit and its summary table
_simulate.py ergm(), simulate(), summary_stats()
src/ Rust core (PyO3), exposed as ergmx._core.Model
network.rs sorted neighbour lists + edge list for O(1) random ties
terms.rs the Term trait and the change statistics
sampler.rs Metropolis-Hastings: TNT, triadic and degree-preserving moves
space.rs the sample space: free dyads, degree bounds
lib.rs bindings; chains run in parallel with rayon
Adding a term means implementing its change statistic in src/terms.rs and
describing it in python/ergmx/terms.py.
Not yet
bd()bounds by attribute, and more of ergm's constraints and terms.- Valued networks (ergm.count) and egocentric data (ergm.ego).
- tergm's EGMME estimator and duration terms; ergm.multi's
gofN(), and N()'ssubset,offsetandlabelarguments.
Installation
ergmx needs Python 3.11 or newer. With uv:
uv add "ergmx[igraph,plot]" # in a uv project; or: uv pip install / pip install
Releases come as wheels with the Rust core already compiled, for Linux, macOS and Windows, so no Rust compiler is needed. To install it from GitHub, which builds it from source:
uv add "ergmx[igraph,plot] @ git+https://github.com/neylsoncrepalde/ergmx"
Building from source needs a C linker (Xcode Command Line Tools,
build-essential or the Visual Studio C++ Build Tools) and Rust 1.88 or
newer. If Rust isn't installed, maturin downloads a private copy (about 500
MB, cached). The installation guide has
the details.
Development
git clone https://github.com/neylsoncrepalde/ergmx.git && cd ergmx
rustup toolchain install # the Rust pinned in rust-toolchain.toml
uv sync # Python 3.14, locked dependencies, ergmx built in release mode
uv run pytest # Python tests
cargo clippy --release --all-targets -- -D warnings && cargo test --release
uv run rebuilds the Rust core after changes to it. uv build makes a wheel
and a source distribution in dist/; .github/workflows/release.yml builds
the wheels of every platform and publishes them to PyPI when a GitHub release
is published.
To regenerate the R reference results or rerun the benchmark (needs R with ergm, igraph and jsonlite):
Rscript scripts/r_reference.R && Rscript scripts/r_gof_reference.R
Rscript benchmarks/benchmark.R && uv run python benchmarks/benchmark.py
License
GPL-3.0, like R's ergm.
Metadata
Release files for ergmx 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ergmx-0.1.0.tar.gz | 760.1 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| ergmx-0.1.0-cp311-abi3-win_amd64.whl | CPython 3.11 | abi3 | Windows x86-64 | Details |
| ergmx-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl | CPython 3.11 | abi3 | Linux musl 1.2+ x86-64 | Details |
| ergmx-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl | CPython 3.11 | abi3 | Linux musl 1.2+ ARM64 | Details |
| ergmx-0.1.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| ergmx-0.1.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| ergmx-0.1.0-cp311-abi3-macosx_11_0_arm64.whl | CPython 3.11 | abi3 | macOS 11.0+ ARM64 | Details |
| ergmx-0.1.0-cp311-abi3-macosx_10_12_x86_64.whl | CPython 3.11 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 4.9 MB
Release files / ergmx-0.1.0.tar.gz
| Download URL | ergmx-0.1.0.tar.gz |
|---|---|
| Size | 760.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
66c91f5828b3f82f93b4cec81bc12a0e7892448467b3b6611f56d0b00a7191e0
|
|
BLAKE2b-256 checksum How to use checksums |
071e75fb88bf4a201759a2e61d2c305656459c57b8fdfbea104a2a485c5b5593
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ergmx-0.1.0-cp311-abi3-win_amd64.whl
| Download URL | ergmx-0.1.0-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 439.1 kB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
807c4cb875d7cbf69d3f169bc09f76e4a0e67e51177b09f176bee5680ebcb3bc
|
|
BLAKE2b-256 checksum How to use checksums |
74f3a9f0cffb930a390462d10f1d54ebdddcb7d0714a95b6feba1ca98a1ef17d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ergmx-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl
| Download URL | ergmx-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 773.1 kB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b5aa34be9528477dfc4b8df99a4ccc288d2c9010c5083e5268bc115d7b34760f
|
|
BLAKE2b-256 checksum How to use checksums |
4281c129b5318ddc9887d952aac6228d2c542691651d479fd7ed9848ee99fa41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ergmx-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl
| Download URL | ergmx-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 729.7 kB |
| Tags | CPython 3.11 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
ba296017018ebb64da35d27bd03f9d4d402d31ab83c23db72c6b770003a65ba6
|
|
BLAKE2b-256 checksum How to use checksums |
273b0ef7d4cb39b36482fe71f8a3bf72702dafdcc5ba71099395ecc01de4dfe4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ergmx-0.1.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | ergmx-0.1.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 561.4 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1b0c9a0cdb22150bdc385bb2a39eb0b98bace4a3e7d95f4e587ccac43c3e2c2a
|
|
BLAKE2b-256 checksum How to use checksums |
a954a0a84ca420645fe2d02c22e041085e92373a741c054d8db81a1f39a32ace
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ergmx-0.1.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | ergmx-0.1.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 551.3 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
c22be6377a658cf01f1eb3cbf76b54e814d68fbfd40aa6ee6e969c4bb7dfbca4
|
|
BLAKE2b-256 checksum How to use checksums |
1f83f7e3ea1cb8962e825c84991adc68090d75aa4a1bb8ea287ab84ff7f954bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ergmx-0.1.0-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | ergmx-0.1.0-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 516.0 kB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3fe07579dbd68d1c921685fd7b8d1f3c36a9dacf4ba44ac39f0ddad4529d9a01
|
|
BLAKE2b-256 checksum How to use checksums |
7f203c8a221f09a3648f47468f4ec9996bf6568accbd5ddf636c9367f51818ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ergmx-0.1.0-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | ergmx-0.1.0-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 527.7 kB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
8331c82242afc0cdec3c1e3707708666bf0eb2a4f7a973bdb699a46620185651
|
|
BLAKE2b-256 checksum How to use checksums |
ef048b618cc9719d913e50828b2f310178662792398dabfa91062c512d7bcd04
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|