ergmx 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. ergmx-0.1.0/.github/actions/test-wheel/action.yml +13 -0
  2. ergmx-0.1.0/.github/workflows/docs.yml +56 -0
  3. ergmx-0.1.0/.github/workflows/release.yml +124 -0
  4. ergmx-0.1.0/.github/workflows/tests.yml +65 -0
  5. ergmx-0.1.0/.gitignore +9 -0
  6. ergmx-0.1.0/.python-version +1 -0
  7. ergmx-0.1.0/Cargo.lock +281 -0
  8. ergmx-0.1.0/Cargo.toml +23 -0
  9. ergmx-0.1.0/LICENSE.md +595 -0
  10. ergmx-0.1.0/PKG-INFO +346 -0
  11. ergmx-0.1.0/README.md +310 -0
  12. ergmx-0.1.0/benchmarks/benchmark.R +60 -0
  13. ergmx-0.1.0/benchmarks/benchmark.py +64 -0
  14. ergmx-0.1.0/benchmarks/data/faux.dixon.high.graphml +3646 -0
  15. ergmx-0.1.0/benchmarks/data/faux.magnolia.high.graphml +9265 -0
  16. ergmx-0.1.0/benchmarks/data/faux.mesa.high.graphml +1443 -0
  17. ergmx-0.1.0/benchmarks/data/r_benchmark.json +179 -0
  18. ergmx-0.1.0/docs/_static/external-links.js +10 -0
  19. ergmx-0.1.0/docs/_templates/autosummary/class.rst +7 -0
  20. ergmx-0.1.0/docs/api.md +231 -0
  21. ergmx-0.1.0/docs/changelog.md +62 -0
  22. ergmx-0.1.0/docs/coming-from-r.md +166 -0
  23. ergmx-0.1.0/docs/conf.py +76 -0
  24. ergmx-0.1.0/docs/figures/gof-mesa.png +0 -0
  25. ergmx-0.1.0/docs/index.md +118 -0
  26. ergmx-0.1.0/docs/references.md +82 -0
  27. ergmx-0.1.0/docs/terms.md +383 -0
  28. ergmx-0.1.0/docs/user-guide/bipartite.md +70 -0
  29. ergmx-0.1.0/docs/user-guide/constraints.md +100 -0
  30. ergmx-0.1.0/docs/user-guide/diagnostics.md +87 -0
  31. ergmx-0.1.0/docs/user-guide/fitting.md +169 -0
  32. ergmx-0.1.0/docs/user-guide/formulas.md +74 -0
  33. ergmx-0.1.0/docs/user-guide/goodness-of-fit.md +57 -0
  34. ergmx-0.1.0/docs/user-guide/index.md +26 -0
  35. ergmx-0.1.0/docs/user-guide/installation.md +274 -0
  36. ergmx-0.1.0/docs/user-guide/interpretation.md +105 -0
  37. ergmx-0.1.0/docs/user-guide/missing-data.md +96 -0
  38. ergmx-0.1.0/docs/user-guide/model-comparison.md +63 -0
  39. ergmx-0.1.0/docs/user-guide/multilevel.md +186 -0
  40. ergmx-0.1.0/docs/user-guide/multiple-networks.md +126 -0
  41. ergmx-0.1.0/docs/user-guide/networks.md +88 -0
  42. ergmx-0.1.0/docs/user-guide/simulation.md +54 -0
  43. ergmx-0.1.0/docs/user-guide/temporal.md +112 -0
  44. ergmx-0.1.0/docs/user-guide/under-the-hood.md +228 -0
  45. ergmx-0.1.0/docs/validation.md +110 -0
  46. ergmx-0.1.0/pyproject.toml +82 -0
  47. ergmx-0.1.0/python/ergmx/__init__.py +225 -0
  48. ergmx-0.1.0/python/ergmx/_compare.py +85 -0
  49. ergmx-0.1.0/python/ergmx/_core.pyi +35 -0
  50. ergmx-0.1.0/python/ergmx/_diagnostics.py +168 -0
  51. ergmx-0.1.0/python/ergmx/_estimation.py +622 -0
  52. ergmx-0.1.0/python/ergmx/_fit.py +377 -0
  53. ergmx-0.1.0/python/ergmx/_gof.py +312 -0
  54. ergmx-0.1.0/python/ergmx/_interpret.py +256 -0
  55. ergmx-0.1.0/python/ergmx/_lm.py +335 -0
  56. ergmx-0.1.0/python/ergmx/_loglik.py +133 -0
  57. ergmx-0.1.0/python/ergmx/_model.py +314 -0
  58. ergmx-0.1.0/python/ergmx/_multi.py +152 -0
  59. ergmx-0.1.0/python/ergmx/_network.py +232 -0
  60. ergmx-0.1.0/python/ergmx/_simulate.py +195 -0
  61. ergmx-0.1.0/python/ergmx/_table.py +267 -0
  62. ergmx-0.1.0/python/ergmx/_temporal.py +236 -0
  63. ergmx-0.1.0/python/ergmx/constraints.py +256 -0
  64. ergmx-0.1.0/python/ergmx/data/Goeyvaerts.json.gz +0 -0
  65. ergmx-0.1.0/python/ergmx/data/davis.graphml.gz +0 -0
  66. ergmx-0.1.0/python/ergmx/data/faux.dixon.high.graphml.gz +0 -0
  67. ergmx-0.1.0/python/ergmx/data/faux.magnolia.high.graphml.gz +0 -0
  68. ergmx-0.1.0/python/ergmx/data/faux.mesa.high.graphml.gz +0 -0
  69. ergmx-0.1.0/python/ergmx/data/flobusiness.graphml.gz +0 -0
  70. ergmx-0.1.0/python/ergmx/data/flomarriage.graphml.gz +0 -0
  71. ergmx-0.1.0/python/ergmx/data/linked_sim.graphml.gz +0 -0
  72. ergmx-0.1.0/python/ergmx/data/samplk1.graphml.gz +0 -0
  73. ergmx-0.1.0/python/ergmx/data/samplk2.graphml.gz +0 -0
  74. ergmx-0.1.0/python/ergmx/data/samplk3.graphml.gz +0 -0
  75. ergmx-0.1.0/python/ergmx/datasets.py +166 -0
  76. ergmx-0.1.0/python/ergmx/formula.py +264 -0
  77. ergmx-0.1.0/python/ergmx/py.typed +0 -0
  78. ergmx-0.1.0/python/ergmx/terms.py +2118 -0
  79. ergmx-0.1.0/rust-toolchain.toml +8 -0
  80. ergmx-0.1.0/scripts/export_datasets.R +38 -0
  81. ergmx-0.1.0/scripts/export_davis.py +28 -0
  82. ergmx-0.1.0/scripts/export_goeyvaerts.R +21 -0
  83. ergmx-0.1.0/scripts/r_gof_reference.R +44 -0
  84. ergmx-0.1.0/scripts/r_interpret_reference.R +95 -0
  85. ergmx-0.1.0/scripts/r_reference.R +427 -0
  86. ergmx-0.1.0/src/lib.rs +326 -0
  87. ergmx-0.1.0/src/network.rs +231 -0
  88. ergmx-0.1.0/src/partners.rs +286 -0
  89. ergmx-0.1.0/src/rng.rs +45 -0
  90. ergmx-0.1.0/src/sampler.rs +579 -0
  91. ergmx-0.1.0/src/space.rs +224 -0
  92. ergmx-0.1.0/src/terms.rs +1554 -0
  93. ergmx-0.1.0/tests/conftest.py +67 -0
  94. ergmx-0.1.0/tests/data/bipartite_sim.graphml +923 -0
  95. ergmx-0.1.0/tests/data/davis.graphml +407 -0
  96. ergmx-0.1.0/tests/data/faux.dixon.high.graphml +5093 -0
  97. ergmx-0.1.0/tests/data/faux.dixon.high__asym.csv +248 -0
  98. ergmx-0.1.0/tests/data/faux.mesa.high.graphml +1853 -0
  99. ergmx-0.1.0/tests/data/faux.mesa.high.missing.graphml +4961 -0
  100. ergmx-0.1.0/tests/data/faux.mesa.high__asym.csv +205 -0
  101. ergmx-0.1.0/tests/data/flomarriage.graphml +170 -0
  102. ergmx-0.1.0/tests/data/flomarriage__business.csv +16 -0
  103. ergmx-0.1.0/tests/data/linked_sim.graphml +2563 -0
  104. ergmx-0.1.0/tests/data/r_gof_reference.json +1 -0
  105. ergmx-0.1.0/tests/data/r_interpret_reference.json +173 -0
  106. ergmx-0.1.0/tests/data/r_reference.json +3221 -0
  107. ergmx-0.1.0/tests/data/samplk1.graphml +306 -0
  108. ergmx-0.1.0/tests/data/samplk2.graphml +312 -0
  109. ergmx-0.1.0/tests/data/samplk3.graphml +309 -0
  110. ergmx-0.1.0/tests/data/samplk3.nonresponse.graphml +393 -0
  111. ergmx-0.1.0/tests/test_constraints.py +219 -0
  112. ergmx-0.1.0/tests/test_datasets.py +43 -0
  113. ergmx-0.1.0/tests/test_diagnostics.py +55 -0
  114. ergmx-0.1.0/tests/test_estimation.py +144 -0
  115. ergmx-0.1.0/tests/test_formula.py +53 -0
  116. ergmx-0.1.0/tests/test_gof.py +81 -0
  117. ergmx-0.1.0/tests/test_interpret.py +189 -0
  118. ergmx-0.1.0/tests/test_loglik.py +84 -0
  119. ergmx-0.1.0/tests/test_multi.py +228 -0
  120. ergmx-0.1.0/tests/test_multilevel.py +160 -0
  121. ergmx-0.1.0/tests/test_operators.py +72 -0
  122. ergmx-0.1.0/tests/test_sampler.py +116 -0
  123. ergmx-0.1.0/tests/test_simulate.py +37 -0
  124. ergmx-0.1.0/tests/test_statistics.py +154 -0
  125. ergmx-0.1.0/tests/test_temporal.py +186 -0
  126. ergmx-0.1.0/uv.lock +2760 -0
@@ -0,0 +1,13 @@
1
+ name: Test the wheel
2
+ description: Install the built wheel in fresh environments, without Rust or the source tree, and fit a model.
3
+ runs:
4
+ using: composite
5
+ steps:
6
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
7
+ - name: Fit a model with the wheel, on the oldest and newest Python
8
+ shell: bash
9
+ run: |
10
+ for python in 3.11 3.14; do
11
+ uv run --isolated --no-project --python "$python" --with "$(ls dist/*.whl)" --with igraph \
12
+ python -c "import ergmx; from ergmx import datasets; fit = ergmx.ergm(datasets.load('samplk3'), 'edges + mutual', seed=1); assert fit.converged; print('Python $python:', fit.coef)"
13
+ done
@@ -0,0 +1,56 @@
1
+ # This workflow builds the documentation with Sphinx and publishes it to GitHub Pages
2
+ # For more information see: https://docs.github.com/en/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages
3
+
4
+ name: Documentation
5
+
6
+ on:
7
+ push:
8
+ branches: [main]
9
+ pull_request:
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ concurrency:
16
+ group: pages-${{ github.ref }}
17
+ cancel-in-progress: false
18
+
19
+ jobs:
20
+ build:
21
+
22
+ runs-on: ubuntu-latest
23
+
24
+ steps:
25
+ - uses: actions/checkout@v7
26
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
27
+ with:
28
+ enable-cache: true
29
+ - name: Install the Rust toolchain of rust-toolchain.toml
30
+ run: rustup toolchain install
31
+ - name: Build ergmx and install the documentation tools
32
+ run: uv sync --locked --group docs
33
+ - name: Build documentation
34
+ run: uv run sphinx-build -W --keep-going -d docs/_build/doctrees docs docs/_build/html
35
+ - name: Upload documentation
36
+ uses: actions/upload-pages-artifact@v5
37
+ with:
38
+ path: docs/_build/html
39
+
40
+ # Pull requests only check that the documentation builds.
41
+ deploy:
42
+
43
+ if: github.event_name != 'pull_request'
44
+ needs: build
45
+ runs-on: ubuntu-latest
46
+ permissions:
47
+ pages: write
48
+ id-token: write
49
+ environment:
50
+ name: github-pages
51
+ url: ${{ steps.deployment.outputs.page_url }}
52
+
53
+ steps:
54
+ - name: Deploy to GitHub Pages
55
+ id: deployment
56
+ uses: actions/deploy-pages@v5
@@ -0,0 +1,124 @@
1
+ # Builds ergmx's wheels, with the Rust core compiled in, and its source
2
+ # distribution, and publishes them to PyPI when a GitHub release is published.
3
+ #
4
+ # The wheels use Python's stable ABI (abi3): one wheel per platform serves
5
+ # every Python from 3.11 on. Run it by hand (workflow_dispatch) to build and
6
+ # test the wheels without publishing them.
7
+ #
8
+ # Publishing uses PyPI's trusted publishing, which needs a one-time setup on
9
+ # PyPI: see docs/user-guide/installation.md, "Publishing a release".
10
+
11
+ name: Release
12
+
13
+ on:
14
+ release:
15
+ types: [published]
16
+ workflow_dispatch:
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ jobs:
22
+ linux:
23
+ name: Linux ${{ matrix.libc }} ${{ matrix.target }}
24
+ runs-on: ubuntu-latest
25
+ strategy:
26
+ matrix:
27
+ target: [x86_64, aarch64]
28
+ libc: [manylinux, musllinux]
29
+ steps:
30
+ - uses: actions/checkout@v7
31
+ - name: Build the wheel
32
+ uses: PyO3/maturin-action@v1
33
+ with:
34
+ target: ${{ matrix.target }}
35
+ manylinux: ${{ matrix.libc == 'manylinux' && 'auto' || 'musllinux_1_2' }}
36
+ args: --release --out dist
37
+ - name: Test the wheel
38
+ if: matrix.target == 'x86_64' && matrix.libc == 'manylinux'
39
+ uses: ./.github/actions/test-wheel
40
+ - uses: actions/upload-artifact@v7
41
+ with:
42
+ name: wheels-linux-${{ matrix.libc }}-${{ matrix.target }}
43
+ path: dist
44
+
45
+ macos:
46
+ name: macOS ${{ matrix.target }}
47
+ runs-on: ${{ matrix.runner }}
48
+ strategy:
49
+ matrix:
50
+ include:
51
+ - runner: macos-15-intel
52
+ target: x86_64
53
+ - runner: macos-latest
54
+ target: aarch64
55
+ steps:
56
+ - uses: actions/checkout@v7
57
+ - name: Build the wheel
58
+ uses: PyO3/maturin-action@v1
59
+ with:
60
+ target: ${{ matrix.target }}
61
+ args: --release --out dist
62
+ - name: Test the wheel
63
+ uses: ./.github/actions/test-wheel
64
+ - uses: actions/upload-artifact@v7
65
+ with:
66
+ name: wheels-macos-${{ matrix.target }}
67
+ path: dist
68
+
69
+ windows:
70
+ name: Windows x64
71
+ runs-on: windows-latest
72
+ steps:
73
+ - uses: actions/checkout@v7
74
+ - name: Build the wheel
75
+ uses: PyO3/maturin-action@v1
76
+ with:
77
+ target: x64
78
+ args: --release --out dist
79
+ - name: Test the wheel
80
+ uses: ./.github/actions/test-wheel
81
+ - uses: actions/upload-artifact@v7
82
+ with:
83
+ name: wheels-windows-x64
84
+ path: dist
85
+
86
+ sdist:
87
+ name: Source distribution
88
+ runs-on: ubuntu-latest
89
+ steps:
90
+ - uses: actions/checkout@v7
91
+ - name: Build the sdist
92
+ uses: PyO3/maturin-action@v1
93
+ with:
94
+ command: sdist
95
+ args: --out dist
96
+ - uses: actions/upload-artifact@v7
97
+ with:
98
+ name: wheels-sdist
99
+ path: dist
100
+
101
+ publish:
102
+ name: Publish to PyPI
103
+ if: github.event_name == 'release'
104
+ needs: [linux, macos, windows, sdist]
105
+ runs-on: ubuntu-latest
106
+ environment:
107
+ name: pypi
108
+ url: https://pypi.org/project/ergmx/
109
+ permissions:
110
+ id-token: write # trusted publishing
111
+ attestations: write # build provenance
112
+ steps:
113
+ - uses: actions/download-artifact@v8
114
+ with:
115
+ pattern: wheels-*
116
+ merge-multiple: true
117
+ path: dist
118
+ - name: Attest build provenance
119
+ uses: actions/attest-build-provenance@v4
120
+ with:
121
+ subject-path: dist/*
122
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
123
+ - name: Publish
124
+ run: uv publish --trusted-publishing always dist/*
@@ -0,0 +1,65 @@
1
+ # Runs the test suites on every push to main and every pull request.
2
+
3
+ name: Tests
4
+
5
+ on:
6
+ push:
7
+ branches: [main]
8
+ pull_request:
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ jobs:
15
+ python:
16
+ name: ${{ matrix.os }}, Python ${{ matrix.python }}
17
+ runs-on: ${{ matrix.os }}
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ os: [ubuntu-latest, macos-latest, windows-latest]
22
+ python: ["3.11", "3.14"]
23
+ steps:
24
+ - uses: actions/checkout@v7
25
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
26
+ with:
27
+ python-version: ${{ matrix.python }}
28
+ enable-cache: true
29
+ - name: Install the Rust toolchain of rust-toolchain.toml
30
+ run: rustup toolchain install
31
+ - name: Build ergmx and install the development dependencies
32
+ run: uv sync --locked
33
+ - name: Test
34
+ run: uv run pytest
35
+
36
+ lowest:
37
+ name: Oldest supported dependencies
38
+ runs-on: ubuntu-latest
39
+ steps:
40
+ - uses: actions/checkout@v7
41
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
42
+ - name: Install the Rust toolchain of rust-toolchain.toml
43
+ run: rustup toolchain install
44
+ - name: Install ergmx with the oldest versions its requirements allow
45
+ run: |
46
+ uv venv --python 3.11
47
+ uv pip install --resolution lowest-direct . "pytest>=8" "igraph>=0.11.5" "networkx>=3.2" "matplotlib>=3.9"
48
+ - name: Test
49
+ run: .venv/bin/python -m pytest
50
+
51
+ rust:
52
+ name: Rust
53
+ runs-on: ubuntu-latest
54
+ steps:
55
+ - uses: actions/checkout@v7
56
+ # The Rust tests link to libpython, which this Python provides.
57
+ - uses: actions/setup-python@v7
58
+ with:
59
+ python-version: "3.14"
60
+ - name: Install the Rust toolchain of rust-toolchain.toml
61
+ run: rustup toolchain install
62
+ - name: Clippy
63
+ run: cargo clippy --release --all-targets -- -D warnings
64
+ - name: Test
65
+ run: cargo test --release
ergmx-0.1.0/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ target/
2
+ .venv/
3
+ __pycache__/
4
+ *.so
5
+ *.pyd
6
+ .pytest_cache/
7
+ dist/
8
+ docs/_build/
9
+ docs/generated/
@@ -0,0 +1 @@
1
+ 3.14
ergmx-0.1.0/Cargo.lock ADDED
@@ -0,0 +1,281 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "autocfg"
7
+ version = "1.5.1"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
10
+
11
+ [[package]]
12
+ name = "crossbeam-deque"
13
+ version = "0.8.8"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a"
16
+ dependencies = [
17
+ "crossbeam-epoch",
18
+ "crossbeam-utils",
19
+ ]
20
+
21
+ [[package]]
22
+ name = "crossbeam-epoch"
23
+ version = "0.9.21"
24
+ source = "registry+https://github.com/rust-lang/crates.io-index"
25
+ checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d"
26
+ dependencies = [
27
+ "crossbeam-utils",
28
+ ]
29
+
30
+ [[package]]
31
+ name = "crossbeam-utils"
32
+ version = "0.8.23"
33
+ source = "registry+https://github.com/rust-lang/crates.io-index"
34
+ checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6"
35
+
36
+ [[package]]
37
+ name = "either"
38
+ version = "1.18.0"
39
+ source = "registry+https://github.com/rust-lang/crates.io-index"
40
+ checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34"
41
+
42
+ [[package]]
43
+ name = "ergmx"
44
+ version = "0.1.0"
45
+ dependencies = [
46
+ "numpy",
47
+ "pyo3",
48
+ "rayon",
49
+ "rustc-hash",
50
+ ]
51
+
52
+ [[package]]
53
+ name = "heck"
54
+ version = "0.5.0"
55
+ source = "registry+https://github.com/rust-lang/crates.io-index"
56
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
57
+
58
+ [[package]]
59
+ name = "libc"
60
+ version = "0.2.189"
61
+ source = "registry+https://github.com/rust-lang/crates.io-index"
62
+ checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
63
+
64
+ [[package]]
65
+ name = "matrixmultiply"
66
+ version = "0.3.11"
67
+ source = "registry+https://github.com/rust-lang/crates.io-index"
68
+ checksum = "3f607c237553f086e7043417a51df26b2eb899d3caff94e6a67592ff992fedc7"
69
+ dependencies = [
70
+ "autocfg",
71
+ "rawpointer",
72
+ ]
73
+
74
+ [[package]]
75
+ name = "ndarray"
76
+ version = "0.17.2"
77
+ source = "registry+https://github.com/rust-lang/crates.io-index"
78
+ checksum = "520080814a7a6b4a6e9070823bb24b4531daac8c4627e08ba5de8c5ef2f2752d"
79
+ dependencies = [
80
+ "matrixmultiply",
81
+ "num-complex",
82
+ "num-integer",
83
+ "num-traits",
84
+ "portable-atomic",
85
+ "portable-atomic-util",
86
+ "rawpointer",
87
+ ]
88
+
89
+ [[package]]
90
+ name = "num-complex"
91
+ version = "0.4.6"
92
+ source = "registry+https://github.com/rust-lang/crates.io-index"
93
+ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
94
+ dependencies = [
95
+ "num-traits",
96
+ ]
97
+
98
+ [[package]]
99
+ name = "num-integer"
100
+ version = "0.1.47"
101
+ source = "registry+https://github.com/rust-lang/crates.io-index"
102
+ checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b"
103
+ dependencies = [
104
+ "num-traits",
105
+ ]
106
+
107
+ [[package]]
108
+ name = "num-traits"
109
+ version = "0.2.19"
110
+ source = "registry+https://github.com/rust-lang/crates.io-index"
111
+ checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
112
+ dependencies = [
113
+ "autocfg",
114
+ ]
115
+
116
+ [[package]]
117
+ name = "numpy"
118
+ version = "0.29.0"
119
+ source = "registry+https://github.com/rust-lang/crates.io-index"
120
+ checksum = "6a5b15d63a5ff39e378daed0e1340d3a5964703ea9712eb09a0dc66fade996f4"
121
+ dependencies = [
122
+ "libc",
123
+ "ndarray",
124
+ "num-complex",
125
+ "num-integer",
126
+ "num-traits",
127
+ "pyo3",
128
+ "pyo3-build-config",
129
+ "rustc-hash",
130
+ ]
131
+
132
+ [[package]]
133
+ name = "once_cell"
134
+ version = "1.21.4"
135
+ source = "registry+https://github.com/rust-lang/crates.io-index"
136
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
137
+
138
+ [[package]]
139
+ name = "portable-atomic"
140
+ version = "1.15.0"
141
+ source = "registry+https://github.com/rust-lang/crates.io-index"
142
+ checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
143
+
144
+ [[package]]
145
+ name = "portable-atomic-util"
146
+ version = "0.2.8"
147
+ source = "registry+https://github.com/rust-lang/crates.io-index"
148
+ checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715"
149
+ dependencies = [
150
+ "portable-atomic",
151
+ ]
152
+
153
+ [[package]]
154
+ name = "proc-macro2"
155
+ version = "1.0.107"
156
+ source = "registry+https://github.com/rust-lang/crates.io-index"
157
+ checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
158
+ dependencies = [
159
+ "unicode-ident",
160
+ ]
161
+
162
+ [[package]]
163
+ name = "pyo3"
164
+ version = "0.29.2"
165
+ source = "registry+https://github.com/rust-lang/crates.io-index"
166
+ checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
167
+ dependencies = [
168
+ "libc",
169
+ "once_cell",
170
+ "portable-atomic",
171
+ "pyo3-build-config",
172
+ "pyo3-ffi",
173
+ "pyo3-macros",
174
+ ]
175
+
176
+ [[package]]
177
+ name = "pyo3-build-config"
178
+ version = "0.29.2"
179
+ source = "registry+https://github.com/rust-lang/crates.io-index"
180
+ checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
181
+ dependencies = [
182
+ "target-lexicon",
183
+ ]
184
+
185
+ [[package]]
186
+ name = "pyo3-ffi"
187
+ version = "0.29.2"
188
+ source = "registry+https://github.com/rust-lang/crates.io-index"
189
+ checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
190
+ dependencies = [
191
+ "libc",
192
+ "pyo3-build-config",
193
+ ]
194
+
195
+ [[package]]
196
+ name = "pyo3-macros"
197
+ version = "0.29.2"
198
+ source = "registry+https://github.com/rust-lang/crates.io-index"
199
+ checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
200
+ dependencies = [
201
+ "proc-macro2",
202
+ "pyo3-macros-backend",
203
+ "quote",
204
+ "syn",
205
+ ]
206
+
207
+ [[package]]
208
+ name = "pyo3-macros-backend"
209
+ version = "0.29.2"
210
+ source = "registry+https://github.com/rust-lang/crates.io-index"
211
+ checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
212
+ dependencies = [
213
+ "heck",
214
+ "proc-macro2",
215
+ "quote",
216
+ "syn",
217
+ ]
218
+
219
+ [[package]]
220
+ name = "quote"
221
+ version = "1.0.47"
222
+ source = "registry+https://github.com/rust-lang/crates.io-index"
223
+ checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
224
+ dependencies = [
225
+ "proc-macro2",
226
+ ]
227
+
228
+ [[package]]
229
+ name = "rawpointer"
230
+ version = "0.2.1"
231
+ source = "registry+https://github.com/rust-lang/crates.io-index"
232
+ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
233
+
234
+ [[package]]
235
+ name = "rayon"
236
+ version = "1.12.0"
237
+ source = "registry+https://github.com/rust-lang/crates.io-index"
238
+ checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d"
239
+ dependencies = [
240
+ "either",
241
+ "rayon-core",
242
+ ]
243
+
244
+ [[package]]
245
+ name = "rayon-core"
246
+ version = "1.13.0"
247
+ source = "registry+https://github.com/rust-lang/crates.io-index"
248
+ checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
249
+ dependencies = [
250
+ "crossbeam-deque",
251
+ "crossbeam-utils",
252
+ ]
253
+
254
+ [[package]]
255
+ name = "rustc-hash"
256
+ version = "2.1.3"
257
+ source = "registry+https://github.com/rust-lang/crates.io-index"
258
+ checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"
259
+
260
+ [[package]]
261
+ name = "syn"
262
+ version = "2.0.119"
263
+ source = "registry+https://github.com/rust-lang/crates.io-index"
264
+ checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
265
+ dependencies = [
266
+ "proc-macro2",
267
+ "quote",
268
+ "unicode-ident",
269
+ ]
270
+
271
+ [[package]]
272
+ name = "target-lexicon"
273
+ version = "0.13.5"
274
+ source = "registry+https://github.com/rust-lang/crates.io-index"
275
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
276
+
277
+ [[package]]
278
+ name = "unicode-ident"
279
+ version = "1.0.26"
280
+ source = "registry+https://github.com/rust-lang/crates.io-index"
281
+ checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
ergmx-0.1.0/Cargo.toml ADDED
@@ -0,0 +1,23 @@
1
+ [package]
2
+ name = "ergmx"
3
+ version = "0.1.0"
4
+ edition = "2024"
5
+ # The oldest Rust that builds ergmx; rust-toolchain.toml pins the one used.
6
+ rust-version = "1.88"
7
+ license = "GPL-3.0-only"
8
+ publish = false
9
+ readme = "README.md"
10
+
11
+ [lib]
12
+ name = "_core"
13
+ crate-type = ["cdylib"]
14
+
15
+ [dependencies]
16
+ numpy = "0.29"
17
+ pyo3 = { version = "0.29", features = ["abi3-py311"] }
18
+ rayon = "1.12"
19
+ rustc-hash = "2.1"
20
+
21
+ [profile.release]
22
+ codegen-units = 1
23
+ lto = "fat"