netoptim 0.3__tar.gz → 0.4__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 (132) hide show
  1. {netoptim-0.3 → netoptim-0.4}/.github/workflows/multi-platforms.yml +1 -1
  2. {netoptim-0.3 → netoptim-0.4}/.github/workflows/python-app.yml +3 -3
  3. {netoptim-0.3 → netoptim-0.4}/.github/workflows/python-package.yml +1 -1
  4. {netoptim-0.3 → netoptim-0.4}/.gitignore +3 -0
  5. netoptim-0.4/AGENTS.md +121 -0
  6. netoptim-0.4/CHANGELOG.md +51 -0
  7. {netoptim-0.3/src/netoptim.egg-info → netoptim-0.4}/PKG-INFO +1 -1
  8. {netoptim-0.3 → netoptim-0.4}/docs/requirements.txt +1 -0
  9. {netoptim-0.3 → netoptim-0.4}/mypy.ini +0 -10
  10. netoptim-0.4/paper/.gitignore +8 -0
  11. netoptim-0.4/paper/Makefile +53 -0
  12. netoptim-0.4/paper/clock_skew_scheduling.md +1323 -0
  13. netoptim-0.4/paper/clock_skew_scheduling.pdf +0 -0
  14. netoptim-0.4/paper/figures/contraction_tree.tikz +15 -0
  15. netoptim-0.4/paper/figures/fig01.pdf +0 -0
  16. netoptim-0.4/paper/figures/fig02.pdf +0 -0
  17. netoptim-0.4/paper/figures/fig04.pdf +0 -0
  18. netoptim-0.4/paper/figures/fig07.png +0 -0
  19. netoptim-0.4/paper/figures/fig18.png +0 -0
  20. netoptim-0.4/paper/figures/fig20.png +0 -0
  21. netoptim-0.4/paper/figures/fig21.png +0 -0
  22. netoptim-0.4/paper/figures/fig23.png +0 -0
  23. netoptim-0.4/paper/figures/hierachy.tikz +14 -0
  24. netoptim-0.4/paper/figures/howard.pdf +0 -0
  25. netoptim-0.4/paper/figures/hybrid.pdf +0 -0
  26. netoptim-0.4/paper/figures/improved.pdf +0 -0
  27. netoptim-0.4/paper/figures/independent.tikz +11 -0
  28. netoptim-0.4/paper/figures/lawler.pdf +0 -0
  29. netoptim-0.4/paper/figures/network.tikz +19 -0
  30. netoptim-0.4/paper/figures/no_delay.tikz +7 -0
  31. netoptim-0.4/paper/figures/non-gaussian.png +0 -0
  32. netoptim-0.4/paper/figures/same_delay.tikz +9 -0
  33. netoptim-0.4/paper/figures/setup_greater.tikz +12 -0
  34. netoptim-0.4/paper/figures/tcgraph.tikz +15 -0
  35. netoptim-0.4/paper/figures/tcgraph2.tikz +16 -0
  36. netoptim-0.4/paper/figures/tcgraph3.tikz +16 -0
  37. netoptim-0.4/paper/figures/tcgraph4.tikz +16 -0
  38. netoptim-0.4/paper/figures/tcgraph5.tikz +13 -0
  39. netoptim-0.4/paper/figures/tcgraph6.tikz +10 -0
  40. netoptim-0.4/paper/figures/tcgraph7.tikz +10 -0
  41. netoptim-0.4/paper/figures/tcgraph8.tikz +16 -0
  42. netoptim-0.4/paper/figures/tcgraph9.tikz +16 -0
  43. netoptim-0.4/paper/ieee.csl +519 -0
  44. netoptim-0.4/paper/latex.yaml +14 -0
  45. netoptim-0.4/paper/metadata.yaml +34 -0
  46. netoptim-0.4/paper/refs.bib +197 -0
  47. netoptim-0.4/paper/slides/.gitignore +9 -0
  48. netoptim-0.4/paper/slides/Makefile +31 -0
  49. netoptim-0.4/paper/slides/beamer.yaml +10 -0
  50. netoptim-0.4/paper/slides/preamble.tex +46 -0
  51. netoptim-0.4/paper/slides/slides.md +403 -0
  52. netoptim-0.4/paper/slides/slides.pdf +0 -0
  53. netoptim-0.4/refs/README.md +63 -0
  54. netoptim-0.4/refs/luk2026_lecture_algo4dfm.md +257 -0
  55. netoptim-0.4/refs/luk2026_lecture_net_optim.md +294 -0
  56. netoptim-0.4/src/netoptim/__init__.py +98 -0
  57. netoptim-0.4/src/netoptim/_typing.py +33 -0
  58. {netoptim-0.3 → netoptim-0.4}/src/netoptim/network_oracle.py +21 -22
  59. {netoptim-0.3 → netoptim-0.4}/src/netoptim/optscaling_oracle.py +31 -8
  60. {netoptim-0.3 → netoptim-0.4/src/netoptim.egg-info}/PKG-INFO +1 -1
  61. {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/SOURCES.txt +49 -2
  62. {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/scm_file_list.json +98 -51
  63. netoptim-0.4/src/netoptim.egg-info/scm_version.json +8 -0
  64. {netoptim-0.3 → netoptim-0.4}/tests/test_network_oracle.py +61 -0
  65. {netoptim-0.3 → netoptim-0.4}/tests/test_optscaling.py +58 -0
  66. netoptim-0.4/tunable_parameter.md +100 -0
  67. netoptim-0.3/.github/workflows/ci.bak +0 -128
  68. netoptim-0.3/.github/workflows/multi-platforms.bak +0 -37
  69. netoptim-0.3/CHANGELOG.md +0 -22
  70. netoptim-0.3/src/netoptim/__init__.py +0 -16
  71. netoptim-0.3/src/netoptim.egg-info/scm_version.json +0 -8
  72. {netoptim-0.3 → netoptim-0.4}/.coveragerc +0 -0
  73. {netoptim-0.3 → netoptim-0.4}/.flake8 +0 -0
  74. {netoptim-0.3 → netoptim-0.4}/.github/workflows/jekyll-gh-pages.yml +0 -0
  75. {netoptim-0.3 → netoptim-0.4}/.github/workflows/python-publish.yml +0 -0
  76. {netoptim-0.3 → netoptim-0.4}/.gitpod.yml +0 -0
  77. {netoptim-0.3 → netoptim-0.4}/.isort.cfg +0 -0
  78. {netoptim-0.3 → netoptim-0.4}/.markdownlint.json +0 -0
  79. {netoptim-0.3 → netoptim-0.4}/.pre-commit-config.yaml +0 -0
  80. {netoptim-0.3 → netoptim-0.4}/.readthedocs.yml +0 -0
  81. {netoptim-0.3 → netoptim-0.4}/.shellcheckrc +0 -0
  82. {netoptim-0.3 → netoptim-0.4}/.vscode/settings.json +0 -0
  83. {netoptim-0.3 → netoptim-0.4}/AUTHORS.md +0 -0
  84. {netoptim-0.3 → netoptim-0.4}/AUTHORS.rst +0 -0
  85. {netoptim-0.3 → netoptim-0.4}/CHANGELOG.rst +0 -0
  86. {netoptim-0.3 → netoptim-0.4}/CONTRIBUTING.md +0 -0
  87. {netoptim-0.3 → netoptim-0.4}/GEMINI.md +0 -0
  88. {netoptim-0.3 → netoptim-0.4}/LICENSE.txt +0 -0
  89. {netoptim-0.3 → netoptim-0.4}/README.md +0 -0
  90. {netoptim-0.3 → netoptim-0.4}/README.rst +0 -0
  91. {netoptim-0.3 → netoptim-0.4}/_config.yml +0 -0
  92. {netoptim-0.3 → netoptim-0.4}/docs/Makefile +0 -0
  93. {netoptim-0.3 → netoptim-0.4}/docs/_static/.gitignore +0 -0
  94. {netoptim-0.3 → netoptim-0.4}/docs/api/modules.rst +0 -0
  95. {netoptim-0.3 → netoptim-0.4}/docs/api/netoptim.rst +0 -0
  96. {netoptim-0.3 → netoptim-0.4}/docs/authors.md +0 -0
  97. {netoptim-0.3 → netoptim-0.4}/docs/changelog.md +0 -0
  98. {netoptim-0.3 → netoptim-0.4}/docs/conf.py +0 -0
  99. {netoptim-0.3 → netoptim-0.4}/docs/contributing.md +0 -0
  100. {netoptim-0.3 → netoptim-0.4}/docs/examples/plot_network_flow.py +0 -0
  101. {netoptim-0.3 → netoptim-0.4}/docs/examples/plot_network_oracle.py +0 -0
  102. {netoptim-0.3 → netoptim-0.4}/docs/figures_demo.md +0 -0
  103. {netoptim-0.3 → netoptim-0.4}/docs/index.md +0 -0
  104. {netoptim-0.3 → netoptim-0.4}/docs/license.md +0 -0
  105. {netoptim-0.3 → netoptim-0.4}/docs/readme.md +0 -0
  106. {netoptim-0.3 → netoptim-0.4}/environment.yml +0 -0
  107. {netoptim-0.3 → netoptim-0.4}/experiments/plot_node_colormap.ipynb +0 -0
  108. {netoptim-0.3 → netoptim-0.4}/experiments/plot_node_colormap.py +0 -0
  109. {netoptim-0.3 → netoptim-0.4}/note.md +0 -0
  110. {netoptim-0.3 → netoptim-0.4}/pyproject.toml +0 -0
  111. {netoptim-0.3 → netoptim-0.4}/requirements/README.md +0 -0
  112. {netoptim-0.3 → netoptim-0.4}/requirements/default.txt +0 -0
  113. {netoptim-0.3 → netoptim-0.4}/requirements/doc.txt +0 -0
  114. {netoptim-0.3 → netoptim-0.4}/requirements/test.txt +0 -0
  115. {netoptim-0.3 → netoptim-0.4}/requirements.txt +0 -0
  116. {netoptim-0.3 → netoptim-0.4}/setup.cfg +0 -0
  117. {netoptim-0.3 → netoptim-0.4}/setup.py +0 -0
  118. {netoptim-0.3 → netoptim-0.4}/src/netoptim/py.typed +0 -0
  119. {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/dependency_links.txt +0 -0
  120. {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/not-zip-safe +0 -0
  121. {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/requires.txt +0 -0
  122. {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/top_level.txt +0 -0
  123. {netoptim-0.3 → netoptim-0.4}/tests/__init__.py +0 -0
  124. {netoptim-0.3 → netoptim-0.4}/tests/conftest.py +0 -0
  125. {netoptim-0.3 → netoptim-0.4}/tests/test_cycle_finder.py +0 -0
  126. {netoptim-0.3 → netoptim-0.4}/tests/test_cycle_finder2.py +0 -0
  127. {netoptim-0.3 → netoptim-0.4}/tests/test_delay_padding.py +0 -0
  128. {netoptim-0.3 → netoptim-0.4}/tests/test_network_oracle2.py +0 -0
  129. {netoptim-0.3 → netoptim-0.4}/tests/test_ratio.py +0 -0
  130. {netoptim-0.3 → netoptim-0.4}/tests/test_stress_network_oracle.py +0 -0
  131. {netoptim-0.3 → netoptim-0.4}/tests/test_stress_optscaling.py +0 -0
  132. {netoptim-0.3 → netoptim-0.4}/tox.ini +0 -0
@@ -10,7 +10,7 @@ jobs:
10
10
  os: ["ubuntu-latest", "windows-latest"]
11
11
  version: ["3.9", "3.11"]
12
12
  steps:
13
- - uses: actions/checkout@v3
13
+ - uses: actions/checkout@v4
14
14
  - uses: conda-incubator/setup-miniconda@v3
15
15
  with:
16
16
  activate-environment: test
@@ -14,9 +14,9 @@ jobs:
14
14
  runs-on: ubuntu-latest
15
15
 
16
16
  steps:
17
- - uses: actions/checkout@v2
17
+ - uses: actions/checkout@v4
18
18
  - name: Set up Python 3.9
19
- uses: actions/setup-python@v2
19
+ uses: actions/setup-python@v5
20
20
  with:
21
21
  python-version: 3.9
22
22
  - name: Install dependencies
@@ -40,7 +40,7 @@ jobs:
40
40
  - name: Codecov
41
41
  # You may pin to the exact commit or the version.
42
42
  # uses: codecov/codecov-action@29386c70ef20e286228c72b668a06fd0e8399192
43
- uses: codecov/codecov-action@v1.5.2
43
+ uses: codecov/codecov-action@v4
44
44
  with:
45
45
  # Repository upload token - get it from codecov.io. Required only for private repositories
46
46
  token: ${{ secrets.CODECOV_TOKEN }}
@@ -18,7 +18,7 @@ jobs:
18
18
  python-version: ["3.9", "3.11"]
19
19
 
20
20
  steps:
21
- - uses: actions/checkout@v2
21
+ - uses: actions/checkout@v4
22
22
  - name: Set up Python ${{ matrix.python-version }}
23
23
  uses: actions/setup-python@v4
24
24
  with:
@@ -180,3 +180,6 @@ MANIFEST
180
180
  # Cache dirs
181
181
  .ruff_cache/
182
182
  .benchmarks/
183
+
184
+ # Downloaded reference papers -- not redistributable, see refs/README.md
185
+ refs/*.pdf
netoptim-0.4/AGENTS.md ADDED
@@ -0,0 +1,121 @@
1
+ # AGENTS.md - Agent Guidelines for netoptim
2
+
3
+ ## Build/Lint/Test Commands
4
+
5
+ ### Testing
6
+ ```bash
7
+ # Run all tests (coverage on by default)
8
+ pytest
9
+
10
+ # Run single test
11
+ pytest tests/test_network_oracle.py::test_network_oracle_update
12
+
13
+ # Run tests matching a pattern
14
+ pytest -k "cycle_finder"
15
+
16
+ # With explicit coverage
17
+ pytest --cov netoptim --cov-report term-missing
18
+
19
+ # Run via tox (isolated environment)
20
+ tox
21
+ ```
22
+
23
+ ### Linting & Formatting
24
+ ```bash
25
+ # Run all pre-commit hooks (recommended before committing)
26
+ pre-commit run --all-files
27
+
28
+ # Individual tools
29
+ black . # Format code (line length 256)
30
+ isort . # Sort imports
31
+ flake8 . # Lint (max_line_length=256, ignores E203/W503)
32
+ mypy src/ # Type check (Python 3.12 target)
33
+ ```
34
+
35
+ ### Build & Docs
36
+ ```bash
37
+ tox -e build # Build sdist + wheel
38
+ tox -e clean # Remove build artifacts
39
+ tox -e docs # Build HTML docs
40
+ tox -e doctests # Run doctests
41
+ tox -e linkcheck # Check for broken doc links
42
+ ```
43
+
44
+ ## Code Style Guidelines
45
+
46
+ ### Project Structure
47
+ - Source code: `src/netoptim/`
48
+ - Tests: `tests/` (test_network_oracle.py, test_optscaling.py, test_cycle_finder.py, test_ratio.py, test_delay_padding.py, test_stress_*.py)
49
+ - Version managed via setuptools_scm (`no-guess-dev` scheme)
50
+
51
+ ### Naming Conventions
52
+ - **Classes**: PascalCase (e.g., `NetworkOracle`, `OptScalingOracle`)
53
+ - **Inner classes**: Nested PascalCase for helpers (e.g., `OptScalingOracle.Ratio`)
54
+ - **Functions/Methods**: snake_case (e.g., `assess_feas`, `assess_optim`, `update`)
55
+ - **Type aliases**: Short PascalCase (e.g., `Cut = Tuple[Any, float]`, `Graph = Dict[...]`, `Arr = np.ndarray`)
56
+ - **Private attributes**: Single underscore prefix (e.g., `_gra`, `_potential`, `_ncf`)
57
+
58
+ ### Type Hints
59
+ - **Required**: All function parameters and return types
60
+ - Type aliases documented with module-level string docstrings
61
+ - Oracle interfaces typed against `ellalgo.ell_typing` (`OracleOptim`, `OracleFeas`)
62
+ - Generic types used where appropriate (e.g., `NegCycleFinder[Any, Any, float]`)
63
+
64
+ ### Docstrings
65
+ - **Primary style**: Sphinx/reStructuredText with `:param:`, `:type:`, `:return:`
66
+ - **Alternative**: Google-style `Args:`/`Returns:` sections
67
+ - **Examples**: doctest blocks with `>>>` (use `unittest.mock.Mock` for graph oracles)
68
+ - **Diagrams**: `.. svgbob::` ASCII art for constraint descriptions
69
+
70
+ ### Imports
71
+ - **Order**: stdlib → third-party → local (PEP8, enforced by isort)
72
+ - Relative import for package-local module:
73
+ ```python
74
+ from .network_oracle import NetworkOracle
75
+ ```
76
+
77
+ ### Error Handling
78
+ - **Minimal explicit error handling** — rely on natural exceptions
79
+ - Oracles return `(Cut, value)` tuples; `None` value signals infeasible/continuing
80
+ - No `assert` preconditions or `try/except` in algorithm code
81
+
82
+ ### Python Version
83
+ - Minimum: Python 3.9 (setup.cfg `python_requires`)
84
+ - CI tests on Python 3.9 and 3.11
85
+
86
+ ### Configuration Files
87
+ - `setup.cfg`: package metadata, pytest options, flake8 config
88
+ - `.flake8`: formatter-friendly (ignores E1/E2/E3/E501/W1/W2/W3/W5)
89
+ - `.pre-commit-config.yaml`: pre-commit hooks
90
+ - `mypy.ini`: Python 3.12 target, ignores setuptools/matplotlib/digraphx/ellalgo/mywheel
91
+ - `pyproject.toml`: build system (setuptools_scm)
92
+ - `tox.ini`: task automation (test, build, clean, docs, doctests, linkcheck, publish)
93
+ - `.coveragerc`: branch coverage, excludes `__repr__`, debug, and assertion code
94
+
95
+ ### Pre-commit Hooks
96
+ - trailing-whitespace
97
+ - check-added-large-files
98
+ - check-ast
99
+ - check-json / check-yaml / check-xml
100
+ - check-merge-conflict
101
+ - debug-statements
102
+ - end-of-file-fixer
103
+ - requirements-txt-fixer
104
+ - mixed-line-ending (auto-fix)
105
+ - isort
106
+ - black
107
+ - flake8
108
+
109
+ ### Testing Patterns
110
+ - Framework: pytest with coverage (addopts: `--cov netoptim --cov-report term-missing --verbose`)
111
+ - Custom mock oracle classes (e.g., `MockOracle` in tests) replace external oracles
112
+ - Graph fixtures built from `networkx` (`nx.DiGraph`)
113
+ - Stress tests (`test_stress_*.py`) exercise iteration bounds
114
+
115
+ ## Key Project Context
116
+
117
+ netoptim solves parametric network flow optimization problems using cutting-plane/ellipsoid methods:
118
+ - **NetworkOracle**: feasibility oracle that detects negative cycles via Howard's algorithm (from `digraphx`) and emits a cutting plane `(gradient, intercept)` for each infeasible point
119
+ - **OptScalingOracle**: optimal matrix scaling (Orlin & Rothblum) built on the network oracle, exposing `assess_optim` for `cutting_plane_optim`
120
+ - **Solver backend**: `ellalgo` cutting-plane and ellipsoid routines; `digraphx` for negative-cycle search; `mywheel` for graph adapters
121
+ - **Key dependencies**: `digraphx`, `ellalgo`, `mywheel`, `networkx`, `numpy`
@@ -0,0 +1,51 @@
1
+ # Changelog
2
+
3
+ ## Version 0.4 (2026-10-09)
4
+
5
+ ### Features
6
+ - **Oracle facades + `EdgeOracle` protocol**: Added `_typing.py` (`EdgeOracle` Protocol + `Cut` alias), re-exported the oracles from `__init__.py`, and added `solve_network_feas` / `solve_opt_scaling` facades. `OptScalingOracle.Ratio` gained its missing `update()` no-op. (#9137d2f)
7
+ - **Tighter default optimizer settings**: `DEFAULT_TOLERANCE` tightened to `1e-10` (was `1e-8`; measured ~1e-5 vs ~1e-4 objective error for ~10–15 extra iterations), and `solve_opt_scaling`'s `gamma` now defaults to `float('inf')`. (#1d36ef0)
8
+
9
+ ### Performance
10
+ - **Oracle hot path + Options forwarding**: Forward `Options` through the facades (default `1e-8` vs ellalgo's `1e-20`: 51→27 iterations on the stress graph); added an optional `EdgeOracle.make_weight_fn` hook with `Ratio` binding `x[0]`/`x[1]` once per assessment to avoid NumPy scalar indexing in the per-edge loop. Measured ~300 ms → ~90 ms (3.4×) on the 250-node / 1844-edge optscaling stress graph with identical gamma. (#505fab2)
11
+
12
+ ### Bug Fixes
13
+ - **`solve_network_feas` facade**: It called `cutting_plane_optim` (needs `assess_optim`) and raised `AttributeError`; now calls `cutting_plane_feas` and drops the unused `x0` argument. `NetworkOracle` now nominally subclasses `OracleFeas`, making mypy clean. (#505fab2)
14
+ - **`Ratio.update()` latent `AttributeError`**: Added the missing no-op. (#9137d2f)
15
+ - **mypy config**: Removed the duplicate `ignore_missing_imports` entry. (#8aa12b1)
16
+ - **RTD docs build**: Added matplotlib to `docs/requirements.txt`. (#be689e8)
17
+
18
+ ### Testing & Code Quality
19
+ - **Oracle tests**: Added tests for the `make_weight_fn` hook, Options forwarding, and the feasibility facade. (#505fab2)
20
+
21
+ ### Code Cleanup
22
+ - **Removed AI slop**: Stripped docstring/comment boilerplate and expanded the `EdgeOracle` protocol stubs to multi-line. (#94f68b0, #d62cc66)
23
+
24
+ ### Documentation
25
+ - **Clock-skew scheduling survey paper + slides**: Added a 16-page two-column Pandoc survey (`paper/clock_skew_scheduling.md`) and a 30-minute Beamer deck (41 frames) with a vendored IEEE CSL, TikZ figures, offline build Makefiles, and reference-availability notes. (#1f0df97, #59b61e2, #ab91ef7, #1fc930c, #25981dd)
26
+ - **Tunable parameter reference**: Added `tunable_parameter.md`. (#7afef62)
27
+ - **AGENTS.md**: Added agent guidelines. (#6e36a7f)
28
+
29
+ ### Build & CI
30
+ - **Updated GitHub Actions**: `checkout`→v4, `setup-python`→v5, `codecov-action`→v4; removed the stale `.bak` workflow files. (#6016c29, #5351aa8)
31
+
32
+ ## Version 0.3 (2026-07-16)
33
+
34
+ ### Documentation
35
+ - **plot_directive with network flow examples**: Enabled matplotlib plot_directive for auto-generated figures. Added network flow and network oracle example plots. (#4ae94a8)
36
+
37
+ ### Bug Fixes
38
+ - **mypy type annotation fixes**: Annotated `NegCycleFinder` with `float Domain` to prevent `int` default. Fixed `NetworkOracle.__init__` parameter types to `Dict[Any, float]`. (#336ef29)
39
+ - **Float literal normalization**: Normalized integer literals to float in test graph data across cycle_finder, ratio, and stress_optscaling tests for type consistency. (#30f5d7a)
40
+ - **Re-enabled disabled tests**: Fixed type annotations in `test_delay_padding` and re-enabled `test_maximize_slack`, `test_maximize_effective_slack`. (#8a76500)
41
+
42
+ ### Testing & Code Quality
43
+ - **Delay padding implementation**: Added delay padding with enhanced cycle finder test cases. (#9df6788)
44
+ - **Additional cycle finder tests**: Added extra test cases for cycle finder algorithms. (#9df6788)
45
+
46
+ ### Code Cleanup
47
+ - **Removed PyScaffold boilerplate**: Deleted `skeleton.py`/`test_skeleton.py`, removed Python < 3.9 compat, dead entry points, stale `IFLOW.md`, duplicate `LICENSE`. (#4cd5756)
48
+
49
+ ### Build & CI
50
+ - **CI repair**: Fixed broken entry_points and remaining skeleton imports. (#c2bf0d3)
51
+ - **Dependency fixes**: Added explicit `mywheel` dep, PyPI-compatible version pins, removed redundant git+https installs. (#81b59c8, #2d232b7, #f07e1bf)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: netoptim
3
- Version: 0.3
3
+ Version: 0.4
4
4
  Summary: Network Optimization Python Code
5
5
  Home-page: https://github.com/luk036/netoptim
6
6
  Author: Wai-Shing Luk
@@ -8,3 +8,4 @@ myst-parser[linkify]
8
8
  numpy
9
9
  sphinx>=3.2.1
10
10
  sphinxcontrib-svgbob
11
+ matplotlib
@@ -5,16 +5,6 @@ warn_unused_configs = True
5
5
  [mypy-setuptools.*]
6
6
  ignore_missing_imports = True
7
7
 
8
- ignore_missing_imports = True
9
-
10
- ignore_missing_imports = True
11
-
12
- ignore_missing_imports = True
13
-
14
- ignore_missing_imports = True
15
-
16
- ignore_missing_imports = True
17
-
18
8
  [mypy-matplotlib.*]
19
9
  ignore_missing_imports = True
20
10
 
@@ -0,0 +1,8 @@
1
+ # Build artifacts (regenerable via `make`)
2
+ clock_skew_scheduling.tex
3
+ clock_skew_scheduling.html
4
+ *.aux
5
+ *.log
6
+ *.out
7
+ *.fls
8
+ *.fdb_latexmk
@@ -0,0 +1,53 @@
1
+ # Build pipeline for the "Clock Skew Scheduling" survey.
2
+ #
3
+ # Flag rationale (see also the md-to-latex skill):
4
+ # --citeproc --csl=ieee.csl : IEEE numeric in-text citations and a numeric
5
+ # reference list. ieee.csl is *vendored* in this directory and is
6
+ # self-contained (it has no <link rel="independent-parent">), so the
7
+ # build needs no network access. Verified offline with
8
+ # HTTP_PROXY=http://127.0.0.1:9.
9
+ # -N : number sections/subsections.
10
+ # --pdf-engine=pdflatex : all mathematics and text are ASCII, so pdflatex
11
+ # is sufficient; no xelatex/font fallback is required.
12
+ # -V geometry:margin=1in : comfortable single-column page.
13
+ #
14
+ # Figures are *native TikZ* included via \input{figures/*.tikz}. We do NOT
15
+ # convert the source SVGs with rsvg-convert: without a font configuration it
16
+ # silently drops every <text> element, producing empty figures. Compiling the
17
+ # original .tikz sources keeps the labels (text) intact and the output vector.
18
+ #
19
+ # We deliberately do NOT use pandoc-crossref/cleveref. Plain LaTeX
20
+ # \label/\ref/\eqref is used for every cross-reference; this is robust across
21
+ # document classes and avoids the cleveref/\newlabel conflicts that render
22
+ # references as "??" with older classes.
23
+
24
+ PANDOC ?= pandoc
25
+ CSL ?= ieee.csl
26
+ BIB ?= refs.bib
27
+ MD = clock_skew_scheduling.md
28
+ OUT = clock_skew_scheduling.pdf
29
+
30
+ PDFFLAGS = -s -t latex -N --pdf-engine=pdflatex \
31
+ --pdf-engine-opt=-interaction=nonstopmode \
32
+ --citeproc --csl=$(CSL) \
33
+ -V geometry:margin=1in
34
+
35
+ .PHONY: paper pdf html tex clean
36
+
37
+ paper: pdf
38
+
39
+ pdf: $(OUT)
40
+
41
+ $(OUT): $(MD) metadata.yaml latex.yaml $(BIB) $(CSL)
42
+ $(PANDOC) $(PDFFLAGS) metadata.yaml latex.yaml $(MD) -o $(OUT)
43
+
44
+ html: $(MD) metadata.yaml latex.yaml $(BIB) $(CSL)
45
+ $(PANDOC) -s -t html5 --citeproc --csl=$(CSL) --mathjax \
46
+ metadata.yaml latex.yaml $(MD) -o clock_skew_scheduling.html
47
+
48
+ tex: $(MD) metadata.yaml latex.yaml $(BIB) $(CSL)
49
+ $(PANDOC) -s -t latex -N --citeproc --csl=$(CSL) \
50
+ metadata.yaml latex.yaml $(MD) -o clock_skew_scheduling.tex
51
+
52
+ clean:
53
+ rm -f $(OUT) clock_skew_scheduling.tex clock_skew_scheduling.html