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.
- {netoptim-0.3 → netoptim-0.4}/.github/workflows/multi-platforms.yml +1 -1
- {netoptim-0.3 → netoptim-0.4}/.github/workflows/python-app.yml +3 -3
- {netoptim-0.3 → netoptim-0.4}/.github/workflows/python-package.yml +1 -1
- {netoptim-0.3 → netoptim-0.4}/.gitignore +3 -0
- netoptim-0.4/AGENTS.md +121 -0
- netoptim-0.4/CHANGELOG.md +51 -0
- {netoptim-0.3/src/netoptim.egg-info → netoptim-0.4}/PKG-INFO +1 -1
- {netoptim-0.3 → netoptim-0.4}/docs/requirements.txt +1 -0
- {netoptim-0.3 → netoptim-0.4}/mypy.ini +0 -10
- netoptim-0.4/paper/.gitignore +8 -0
- netoptim-0.4/paper/Makefile +53 -0
- netoptim-0.4/paper/clock_skew_scheduling.md +1323 -0
- netoptim-0.4/paper/clock_skew_scheduling.pdf +0 -0
- netoptim-0.4/paper/figures/contraction_tree.tikz +15 -0
- netoptim-0.4/paper/figures/fig01.pdf +0 -0
- netoptim-0.4/paper/figures/fig02.pdf +0 -0
- netoptim-0.4/paper/figures/fig04.pdf +0 -0
- netoptim-0.4/paper/figures/fig07.png +0 -0
- netoptim-0.4/paper/figures/fig18.png +0 -0
- netoptim-0.4/paper/figures/fig20.png +0 -0
- netoptim-0.4/paper/figures/fig21.png +0 -0
- netoptim-0.4/paper/figures/fig23.png +0 -0
- netoptim-0.4/paper/figures/hierachy.tikz +14 -0
- netoptim-0.4/paper/figures/howard.pdf +0 -0
- netoptim-0.4/paper/figures/hybrid.pdf +0 -0
- netoptim-0.4/paper/figures/improved.pdf +0 -0
- netoptim-0.4/paper/figures/independent.tikz +11 -0
- netoptim-0.4/paper/figures/lawler.pdf +0 -0
- netoptim-0.4/paper/figures/network.tikz +19 -0
- netoptim-0.4/paper/figures/no_delay.tikz +7 -0
- netoptim-0.4/paper/figures/non-gaussian.png +0 -0
- netoptim-0.4/paper/figures/same_delay.tikz +9 -0
- netoptim-0.4/paper/figures/setup_greater.tikz +12 -0
- netoptim-0.4/paper/figures/tcgraph.tikz +15 -0
- netoptim-0.4/paper/figures/tcgraph2.tikz +16 -0
- netoptim-0.4/paper/figures/tcgraph3.tikz +16 -0
- netoptim-0.4/paper/figures/tcgraph4.tikz +16 -0
- netoptim-0.4/paper/figures/tcgraph5.tikz +13 -0
- netoptim-0.4/paper/figures/tcgraph6.tikz +10 -0
- netoptim-0.4/paper/figures/tcgraph7.tikz +10 -0
- netoptim-0.4/paper/figures/tcgraph8.tikz +16 -0
- netoptim-0.4/paper/figures/tcgraph9.tikz +16 -0
- netoptim-0.4/paper/ieee.csl +519 -0
- netoptim-0.4/paper/latex.yaml +14 -0
- netoptim-0.4/paper/metadata.yaml +34 -0
- netoptim-0.4/paper/refs.bib +197 -0
- netoptim-0.4/paper/slides/.gitignore +9 -0
- netoptim-0.4/paper/slides/Makefile +31 -0
- netoptim-0.4/paper/slides/beamer.yaml +10 -0
- netoptim-0.4/paper/slides/preamble.tex +46 -0
- netoptim-0.4/paper/slides/slides.md +403 -0
- netoptim-0.4/paper/slides/slides.pdf +0 -0
- netoptim-0.4/refs/README.md +63 -0
- netoptim-0.4/refs/luk2026_lecture_algo4dfm.md +257 -0
- netoptim-0.4/refs/luk2026_lecture_net_optim.md +294 -0
- netoptim-0.4/src/netoptim/__init__.py +98 -0
- netoptim-0.4/src/netoptim/_typing.py +33 -0
- {netoptim-0.3 → netoptim-0.4}/src/netoptim/network_oracle.py +21 -22
- {netoptim-0.3 → netoptim-0.4}/src/netoptim/optscaling_oracle.py +31 -8
- {netoptim-0.3 → netoptim-0.4/src/netoptim.egg-info}/PKG-INFO +1 -1
- {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/SOURCES.txt +49 -2
- {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/scm_file_list.json +98 -51
- netoptim-0.4/src/netoptim.egg-info/scm_version.json +8 -0
- {netoptim-0.3 → netoptim-0.4}/tests/test_network_oracle.py +61 -0
- {netoptim-0.3 → netoptim-0.4}/tests/test_optscaling.py +58 -0
- netoptim-0.4/tunable_parameter.md +100 -0
- netoptim-0.3/.github/workflows/ci.bak +0 -128
- netoptim-0.3/.github/workflows/multi-platforms.bak +0 -37
- netoptim-0.3/CHANGELOG.md +0 -22
- netoptim-0.3/src/netoptim/__init__.py +0 -16
- netoptim-0.3/src/netoptim.egg-info/scm_version.json +0 -8
- {netoptim-0.3 → netoptim-0.4}/.coveragerc +0 -0
- {netoptim-0.3 → netoptim-0.4}/.flake8 +0 -0
- {netoptim-0.3 → netoptim-0.4}/.github/workflows/jekyll-gh-pages.yml +0 -0
- {netoptim-0.3 → netoptim-0.4}/.github/workflows/python-publish.yml +0 -0
- {netoptim-0.3 → netoptim-0.4}/.gitpod.yml +0 -0
- {netoptim-0.3 → netoptim-0.4}/.isort.cfg +0 -0
- {netoptim-0.3 → netoptim-0.4}/.markdownlint.json +0 -0
- {netoptim-0.3 → netoptim-0.4}/.pre-commit-config.yaml +0 -0
- {netoptim-0.3 → netoptim-0.4}/.readthedocs.yml +0 -0
- {netoptim-0.3 → netoptim-0.4}/.shellcheckrc +0 -0
- {netoptim-0.3 → netoptim-0.4}/.vscode/settings.json +0 -0
- {netoptim-0.3 → netoptim-0.4}/AUTHORS.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/AUTHORS.rst +0 -0
- {netoptim-0.3 → netoptim-0.4}/CHANGELOG.rst +0 -0
- {netoptim-0.3 → netoptim-0.4}/CONTRIBUTING.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/GEMINI.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/LICENSE.txt +0 -0
- {netoptim-0.3 → netoptim-0.4}/README.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/README.rst +0 -0
- {netoptim-0.3 → netoptim-0.4}/_config.yml +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/Makefile +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/_static/.gitignore +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/api/modules.rst +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/api/netoptim.rst +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/authors.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/changelog.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/conf.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/contributing.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/examples/plot_network_flow.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/examples/plot_network_oracle.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/figures_demo.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/index.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/license.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/docs/readme.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/environment.yml +0 -0
- {netoptim-0.3 → netoptim-0.4}/experiments/plot_node_colormap.ipynb +0 -0
- {netoptim-0.3 → netoptim-0.4}/experiments/plot_node_colormap.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/note.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/pyproject.toml +0 -0
- {netoptim-0.3 → netoptim-0.4}/requirements/README.md +0 -0
- {netoptim-0.3 → netoptim-0.4}/requirements/default.txt +0 -0
- {netoptim-0.3 → netoptim-0.4}/requirements/doc.txt +0 -0
- {netoptim-0.3 → netoptim-0.4}/requirements/test.txt +0 -0
- {netoptim-0.3 → netoptim-0.4}/requirements.txt +0 -0
- {netoptim-0.3 → netoptim-0.4}/setup.cfg +0 -0
- {netoptim-0.3 → netoptim-0.4}/setup.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/src/netoptim/py.typed +0 -0
- {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/dependency_links.txt +0 -0
- {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/not-zip-safe +0 -0
- {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/requires.txt +0 -0
- {netoptim-0.3 → netoptim-0.4}/src/netoptim.egg-info/top_level.txt +0 -0
- {netoptim-0.3 → netoptim-0.4}/tests/__init__.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/tests/conftest.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/tests/test_cycle_finder.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/tests/test_cycle_finder2.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/tests/test_delay_padding.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/tests/test_network_oracle2.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/tests/test_ratio.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/tests/test_stress_network_oracle.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/tests/test_stress_optscaling.py +0 -0
- {netoptim-0.3 → netoptim-0.4}/tox.ini +0 -0
|
@@ -14,9 +14,9 @@ jobs:
|
|
|
14
14
|
runs-on: ubuntu-latest
|
|
15
15
|
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
18
|
- name: Set up Python 3.9
|
|
19
|
-
uses: actions/setup-python@
|
|
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@
|
|
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 }}
|
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)
|
|
@@ -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,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
|