gdsdiff 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.
- gdsdiff-0.1.0/.github/workflows/ci.yml +88 -0
- gdsdiff-0.1.0/.github/workflows/release.yml +124 -0
- gdsdiff-0.1.0/AGENTS.md +32 -0
- gdsdiff-0.1.0/CHANGELOG.md +17 -0
- gdsdiff-0.1.0/CONTRIBUTING.md +15 -0
- gdsdiff-0.1.0/LICENSE +674 -0
- gdsdiff-0.1.0/MANIFEST.in +8 -0
- gdsdiff-0.1.0/PKG-INFO +135 -0
- gdsdiff-0.1.0/PROVENANCE.md +11 -0
- gdsdiff-0.1.0/QUALIFICATION.md +56 -0
- gdsdiff-0.1.0/README.md +90 -0
- gdsdiff-0.1.0/SECURITY.md +11 -0
- gdsdiff-0.1.0/agents/gdsdiff.md +86 -0
- gdsdiff-0.1.0/benchmarks/gdsdiff/README.md +14 -0
- gdsdiff-0.1.0/benchmarks/gdsdiff/run_benchmarks.py +177 -0
- gdsdiff-0.1.0/docs/api.md +19 -0
- gdsdiff-0.1.0/docs/gdsdiff.md +58 -0
- gdsdiff-0.1.0/docs/gdsdiff_debugging.md +63 -0
- gdsdiff-0.1.0/docs/gdsdiff_engine.md +125 -0
- gdsdiff-0.1.0/docs/gdsdiff_report.md +64 -0
- gdsdiff-0.1.0/docs/gdsdiff_semantics.md +70 -0
- gdsdiff-0.1.0/docs/releasing.md +31 -0
- gdsdiff-0.1.0/provenance/scgds-commit-map.txt +16 -0
- gdsdiff-0.1.0/pyproject.toml +91 -0
- gdsdiff-0.1.0/setup.cfg +4 -0
- gdsdiff-0.1.0/src/gdsdiff/__init__.py +148 -0
- gdsdiff-0.1.0/src/gdsdiff/__main__.py +7 -0
- gdsdiff-0.1.0/src/gdsdiff/_environment.py +12 -0
- gdsdiff-0.1.0/src/gdsdiff/_version.py +34 -0
- gdsdiff-0.1.0/src/gdsdiff/acceptance_evidence.py +530 -0
- gdsdiff-0.1.0/src/gdsdiff/api.py +2955 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/__init__.py +26 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/base.py +77 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/boundary_loop_ctypes.py +191 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/cpu.py +20 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/cpu_ctypes.py +255 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/cuda.py +40 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/cuda_ctypes.py +1297 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/exact.py +424 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/geometry_ctypes.py +252 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/identity.py +53 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/metal.py +198 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/metal_ctypes.py +866 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/polygon_extract_ctypes.py +233 -0
- gdsdiff-0.1.0/src/gdsdiff/backends/structural_ctypes.py +130 -0
- gdsdiff-0.1.0/src/gdsdiff/boundary_loops.py +616 -0
- gdsdiff-0.1.0/src/gdsdiff/cache.py +544 -0
- gdsdiff-0.1.0/src/gdsdiff/canonicalize.py +176 -0
- gdsdiff-0.1.0/src/gdsdiff/cli.py +352 -0
- gdsdiff-0.1.0/src/gdsdiff/config.py +257 -0
- gdsdiff-0.1.0/src/gdsdiff/cuda_setup.py +174 -0
- gdsdiff-0.1.0/src/gdsdiff/design_history.py +65 -0
- gdsdiff-0.1.0/src/gdsdiff/diagnostics.py +42 -0
- gdsdiff-0.1.0/src/gdsdiff/diff_gds.py +66 -0
- gdsdiff-0.1.0/src/gdsdiff/exact_diff_markdown.py +979 -0
- gdsdiff-0.1.0/src/gdsdiff/exact_oracle.py +649 -0
- gdsdiff-0.1.0/src/gdsdiff/extract.py +376 -0
- gdsdiff-0.1.0/src/gdsdiff/gds_metadata.py +43 -0
- gdsdiff-0.1.0/src/gdsdiff/geometry.py +112 -0
- gdsdiff-0.1.0/src/gdsdiff/grid.py +143 -0
- gdsdiff-0.1.0/src/gdsdiff/hierarchy.py +215 -0
- gdsdiff-0.1.0/src/gdsdiff/hierarchy_extract.py +263 -0
- gdsdiff-0.1.0/src/gdsdiff/inventory.py +153 -0
- gdsdiff-0.1.0/src/gdsdiff/multiprocessing_support.py +39 -0
- gdsdiff-0.1.0/src/gdsdiff/native.py +135 -0
- gdsdiff-0.1.0/src/gdsdiff/native_cache.py +265 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/cpu_prefilter.cpp +349 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gds_boundary_loops.cpp +505 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gds_geometry_scan.cpp +601 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gds_polygon_extract.cpp +594 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gds_structural_scan.cpp +335 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/CMakeLists.txt +74 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/core.cpp +191 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/core.hpp +96 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/cuda_assignment.cu +304 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/cuda_assignment.cuh +33 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/cuda_candidates.cu +133 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/cuda_candidates.cuh +17 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/cuda_ctypes.cu +4528 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/cuda_memory.cu +194 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/cuda_memory.cuh +34 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/metal_ctypes.mm +2791 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/python_bindings.cpp +21 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/test_core.cpp +93 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/test_cuda_assignment.cu +109 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/test_cuda_candidates.cu +94 -0
- gdsdiff-0.1.0/src/gdsdiff/native_src/gdsdiff/test_cuda_memory.cu +97 -0
- gdsdiff-0.1.0/src/gdsdiff/policy.py +305 -0
- gdsdiff-0.1.0/src/gdsdiff/polygon_components.py +860 -0
- gdsdiff-0.1.0/src/gdsdiff/profiles.py +152 -0
- gdsdiff-0.1.0/src/gdsdiff/py.typed +1 -0
- gdsdiff-0.1.0/src/gdsdiff/rect_coverage.py +384 -0
- gdsdiff-0.1.0/src/gdsdiff/report.py +354 -0
- gdsdiff-0.1.0/src/gdsdiff/schemas/gdsdiff_report-v1.schema.json +92 -0
- gdsdiff-0.1.0/src/gdsdiff/semantics.py +75 -0
- gdsdiff-0.1.0/src/gdsdiff/source_edge_diff.py +1120 -0
- gdsdiff-0.1.0/src/gdsdiff/spatial.py +71 -0
- gdsdiff-0.1.0/src/gdsdiff/structural_guard.py +161 -0
- gdsdiff-0.1.0/src/gdsdiff/surplus_coverage.py +255 -0
- gdsdiff-0.1.0/src/gdsdiff/synthetic_suite.py +1643 -0
- gdsdiff-0.1.0/src/gdsdiff/templates.py +709 -0
- gdsdiff-0.1.0/src/gdsdiff/tiling.py +153 -0
- gdsdiff-0.1.0/src/gdsdiff/windowed_exact.py +270 -0
- gdsdiff-0.1.0/src/gdsdiff/windows.py +184 -0
- gdsdiff-0.1.0/src/gdsdiff.egg-info/PKG-INFO +135 -0
- gdsdiff-0.1.0/src/gdsdiff.egg-info/SOURCES.txt +156 -0
- gdsdiff-0.1.0/src/gdsdiff.egg-info/dependency_links.txt +1 -0
- gdsdiff-0.1.0/src/gdsdiff.egg-info/entry_points.txt +4 -0
- gdsdiff-0.1.0/src/gdsdiff.egg-info/requires.txt +22 -0
- gdsdiff-0.1.0/src/gdsdiff.egg-info/top_level.txt +1 -0
- gdsdiff-0.1.0/tests/__init__.py +1 -0
- gdsdiff-0.1.0/tests/fixtures.py +137 -0
- gdsdiff-0.1.0/tests/generate_fixtures.py +19 -0
- gdsdiff-0.1.0/tests/golden/.gitkeep +1 -0
- gdsdiff-0.1.0/tests/test_acceptance_evidence.py +122 -0
- gdsdiff-0.1.0/tests/test_api.py +854 -0
- gdsdiff-0.1.0/tests/test_backend_dispatch.py +170 -0
- gdsdiff-0.1.0/tests/test_benchmarks.py +73 -0
- gdsdiff-0.1.0/tests/test_boundary_loops.py +82 -0
- gdsdiff-0.1.0/tests/test_canonicalize.py +72 -0
- gdsdiff-0.1.0/tests/test_cli.py +498 -0
- gdsdiff-0.1.0/tests/test_config.py +158 -0
- gdsdiff-0.1.0/tests/test_cpp_core.py +41 -0
- gdsdiff-0.1.0/tests/test_cpu_tiling.py +143 -0
- gdsdiff-0.1.0/tests/test_cuda_assignment.py +42 -0
- gdsdiff-0.1.0/tests/test_cuda_candidates.py +64 -0
- gdsdiff-0.1.0/tests/test_cuda_memory.py +44 -0
- gdsdiff-0.1.0/tests/test_cuda_polygon_record_delta.py +77 -0
- gdsdiff-0.1.0/tests/test_cuda_setup.py +23 -0
- gdsdiff-0.1.0/tests/test_diagnostics.py +41 -0
- gdsdiff-0.1.0/tests/test_exact_oracle.py +603 -0
- gdsdiff-0.1.0/tests/test_extract.py +125 -0
- gdsdiff-0.1.0/tests/test_golden_corpus.py +44 -0
- gdsdiff-0.1.0/tests/test_grid_resolution.py +90 -0
- gdsdiff-0.1.0/tests/test_hierarchy_match.py +132 -0
- gdsdiff-0.1.0/tests/test_inventory.py +107 -0
- gdsdiff-0.1.0/tests/test_metal_polygon_record_delta.py +476 -0
- gdsdiff-0.1.0/tests/test_multiprocessing_support.py +50 -0
- gdsdiff-0.1.0/tests/test_native_build.py +137 -0
- gdsdiff-0.1.0/tests/test_native_cache.py +131 -0
- gdsdiff-0.1.0/tests/test_native_geometry_scan.py +106 -0
- gdsdiff-0.1.0/tests/test_native_polygon_extract.py +119 -0
- gdsdiff-0.1.0/tests/test_outputs.py +382 -0
- gdsdiff-0.1.0/tests/test_policy.py +149 -0
- gdsdiff-0.1.0/tests/test_polygon_components.py +742 -0
- gdsdiff-0.1.0/tests/test_profiles.py +109 -0
- gdsdiff-0.1.0/tests/test_property.py +115 -0
- gdsdiff-0.1.0/tests/test_rect_coverage.py +97 -0
- gdsdiff-0.1.0/tests/test_report_schema.py +150 -0
- gdsdiff-0.1.0/tests/test_semantics.py +36 -0
- gdsdiff-0.1.0/tests/test_spatial_index.py +36 -0
- gdsdiff-0.1.0/tests/test_structural_guard.py +32 -0
- gdsdiff-0.1.0/tests/test_surplus_coverage.py +127 -0
- gdsdiff-0.1.0/tests/test_synthetic_suite.py +143 -0
- gdsdiff-0.1.0/tests/test_template_workflow.py +194 -0
- gdsdiff-0.1.0/tests/test_windowed_exact.py +198 -0
- gdsdiff-0.1.0/tests/test_windowed_hierarchy_extract.py +159 -0
- gdsdiff-0.1.0/tests/test_windows.py +118 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ci-${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
env:
|
|
15
|
+
UV_VERSION: 0.11.29
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
test:
|
|
19
|
+
timeout-minutes: 30
|
|
20
|
+
strategy:
|
|
21
|
+
fail-fast: false
|
|
22
|
+
matrix:
|
|
23
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
24
|
+
python-version: ["3.10", "3.14"]
|
|
25
|
+
runs-on: ${{ matrix.os }}
|
|
26
|
+
env:
|
|
27
|
+
UV_PYTHON: ${{ matrix.python-version }}
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
|
30
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
31
|
+
with:
|
|
32
|
+
python-version: ${{ matrix.python-version }}
|
|
33
|
+
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
34
|
+
with:
|
|
35
|
+
version: ${{ env.UV_VERSION }}
|
|
36
|
+
enable-cache: true
|
|
37
|
+
- run: uv lock --check
|
|
38
|
+
- run: uv sync --locked --extra test
|
|
39
|
+
- run: uv run --locked --extra test python -m pytest
|
|
40
|
+
|
|
41
|
+
package:
|
|
42
|
+
timeout-minutes: 20
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
|
46
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
47
|
+
with:
|
|
48
|
+
python-version: "3.14"
|
|
49
|
+
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
50
|
+
with:
|
|
51
|
+
version: ${{ env.UV_VERSION }}
|
|
52
|
+
- run: uv build --no-sources
|
|
53
|
+
- run: uvx --from twine==6.2.0 twine check --strict dist/*
|
|
54
|
+
- name: Smoke-test installed wheel
|
|
55
|
+
shell: bash
|
|
56
|
+
run: |
|
|
57
|
+
uv venv --python 3.14 /tmp/gdsdiff-wheel-smoke
|
|
58
|
+
uv pip install --python /tmp/gdsdiff-wheel-smoke/bin/python dist/*.whl jsonschema
|
|
59
|
+
cd /tmp
|
|
60
|
+
/tmp/gdsdiff-wheel-smoke/bin/python "$GITHUB_WORKSPACE/scripts/installed_smoke.py"
|
|
61
|
+
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
62
|
+
with:
|
|
63
|
+
name: gdsdiff-distributions
|
|
64
|
+
path: dist/*
|
|
65
|
+
if-no-files-found: error
|
|
66
|
+
retention-days: 14
|
|
67
|
+
|
|
68
|
+
compilerless-cpu:
|
|
69
|
+
timeout-minutes: 15
|
|
70
|
+
runs-on: ubuntu-latest
|
|
71
|
+
steps:
|
|
72
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
|
73
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
74
|
+
with:
|
|
75
|
+
python-version: "3.14"
|
|
76
|
+
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
77
|
+
with:
|
|
78
|
+
version: ${{ env.UV_VERSION }}
|
|
79
|
+
- run: uv sync --locked --extra test
|
|
80
|
+
- name: Verify passive CPU operation with no toolchain on PATH
|
|
81
|
+
shell: bash
|
|
82
|
+
run: |
|
|
83
|
+
python_path=$(uv run --locked python -c 'import sys; print(sys.executable)')
|
|
84
|
+
mkdir -p /tmp/gdsdiff-no-tools /tmp/gdsdiff-empty-cache
|
|
85
|
+
cd /tmp
|
|
86
|
+
PATH=/tmp/gdsdiff-no-tools GDSDIFF_NATIVE_CACHE_DIR=/tmp/gdsdiff-empty-cache \
|
|
87
|
+
"$python_path" -c 'import gdsdiff; d=gdsdiff.backend_diagnostics(); assert d["capabilities"]["cpu_available"]; assert not d["capabilities"]["nvcc_available"]'
|
|
88
|
+
test -z "$(find /tmp/gdsdiff-empty-cache -type f -print -quit)"
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: release-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: false
|
|
13
|
+
|
|
14
|
+
env:
|
|
15
|
+
UV_VERSION: 0.11.29
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
build:
|
|
19
|
+
timeout-minutes: 20
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
|
23
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
24
|
+
with:
|
|
25
|
+
python-version: "3.14"
|
|
26
|
+
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
27
|
+
with:
|
|
28
|
+
version: ${{ env.UV_VERSION }}
|
|
29
|
+
- name: Verify tag and package versions
|
|
30
|
+
shell: bash
|
|
31
|
+
run: |
|
|
32
|
+
package_version=$(python -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')
|
|
33
|
+
test "v$package_version" = "$GITHUB_REF_NAME"
|
|
34
|
+
- run: uv lock --check
|
|
35
|
+
- run: uv sync --locked --extra test
|
|
36
|
+
- run: uv run --locked --extra test python -m pytest
|
|
37
|
+
- run: uv build --no-sources
|
|
38
|
+
- run: uvx --from twine==6.2.0 twine check --strict dist/*
|
|
39
|
+
- name: Stage immutable release artifacts and hashes
|
|
40
|
+
shell: bash
|
|
41
|
+
run: |
|
|
42
|
+
mkdir -p release/packages
|
|
43
|
+
cp dist/* release/packages/
|
|
44
|
+
cd release/packages
|
|
45
|
+
sha256sum * > ../SHA256SUMS
|
|
46
|
+
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
47
|
+
with:
|
|
48
|
+
name: release-distributions
|
|
49
|
+
path: release/
|
|
50
|
+
if-no-files-found: error
|
|
51
|
+
retention-days: 30
|
|
52
|
+
|
|
53
|
+
testpypi:
|
|
54
|
+
needs: build
|
|
55
|
+
timeout-minutes: 10
|
|
56
|
+
runs-on: ubuntu-latest
|
|
57
|
+
environment: testpypi
|
|
58
|
+
permissions:
|
|
59
|
+
id-token: write
|
|
60
|
+
steps:
|
|
61
|
+
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
|
|
62
|
+
with:
|
|
63
|
+
name: release-distributions
|
|
64
|
+
path: release
|
|
65
|
+
- uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
|
|
66
|
+
with:
|
|
67
|
+
packages-dir: release/packages
|
|
68
|
+
repository-url: https://test.pypi.org/legacy/
|
|
69
|
+
|
|
70
|
+
verify-testpypi:
|
|
71
|
+
needs: testpypi
|
|
72
|
+
timeout-minutes: 15
|
|
73
|
+
runs-on: ubuntu-latest
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
|
|
76
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
77
|
+
with:
|
|
78
|
+
python-version: "3.14"
|
|
79
|
+
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
80
|
+
with:
|
|
81
|
+
version: ${{ env.UV_VERSION }}
|
|
82
|
+
- name: Install exact TestPyPI release without dependency confusion
|
|
83
|
+
shell: bash
|
|
84
|
+
run: |
|
|
85
|
+
version=${GITHUB_REF_NAME#v}
|
|
86
|
+
uv venv /tmp/gdsdiff-testpypi
|
|
87
|
+
uv pip install --python /tmp/gdsdiff-testpypi/bin/python --index-url https://pypi.org/simple gdstk numpy jsonschema
|
|
88
|
+
uv pip install --python /tmp/gdsdiff-testpypi/bin/python --index-url https://test.pypi.org/simple --no-deps "gdsdiff==$version"
|
|
89
|
+
cd /tmp
|
|
90
|
+
/tmp/gdsdiff-testpypi/bin/python "$GITHUB_WORKSPACE/scripts/installed_smoke.py"
|
|
91
|
+
|
|
92
|
+
pypi:
|
|
93
|
+
if: ${{ !contains(github.ref_name, 'rc') }}
|
|
94
|
+
needs: verify-testpypi
|
|
95
|
+
timeout-minutes: 10
|
|
96
|
+
runs-on: ubuntu-latest
|
|
97
|
+
environment: pypi
|
|
98
|
+
permissions:
|
|
99
|
+
id-token: write
|
|
100
|
+
steps:
|
|
101
|
+
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
|
|
102
|
+
with:
|
|
103
|
+
name: release-distributions
|
|
104
|
+
path: release
|
|
105
|
+
- uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
|
|
106
|
+
with:
|
|
107
|
+
packages-dir: release/packages
|
|
108
|
+
|
|
109
|
+
github-release:
|
|
110
|
+
if: ${{ !contains(github.ref_name, 'rc') }}
|
|
111
|
+
needs: pypi
|
|
112
|
+
timeout-minutes: 10
|
|
113
|
+
runs-on: ubuntu-latest
|
|
114
|
+
permissions:
|
|
115
|
+
contents: write
|
|
116
|
+
steps:
|
|
117
|
+
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
|
|
118
|
+
with:
|
|
119
|
+
name: release-distributions
|
|
120
|
+
path: release
|
|
121
|
+
- name: Create GitHub release
|
|
122
|
+
env:
|
|
123
|
+
GH_TOKEN: ${{ github.token }}
|
|
124
|
+
run: gh release create "$GITHUB_REF_NAME" release/packages/* release/SHA256SUMS --verify-tag --generate-notes
|
gdsdiff-0.1.0/AGENTS.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Agent Notes
|
|
2
|
+
|
|
3
|
+
This repository is the standalone `gdsdiff` GDSII comparison library. Durable
|
|
4
|
+
implementation belongs under `src/gdsdiff/`; tests belong under `tests/`.
|
|
5
|
+
Read `agents/gdsdiff.md` before changing comparator semantics, reports,
|
|
6
|
+
artifacts, acceleration, or agent-facing diff workflows.
|
|
7
|
+
|
|
8
|
+
## Environment
|
|
9
|
+
|
|
10
|
+
- Identify the host OS and architecture before environment-sensitive work.
|
|
11
|
+
- Use `.venv_wsl/bin/python` on Windows 11 through WSL,
|
|
12
|
+
`.venv_mac/bin/python` on macOS, and `.venv/bin/python` on native Linux.
|
|
13
|
+
- Do not use the base system Python for imports, builds, or tests.
|
|
14
|
+
- CPU behavior must remain usable without CUDA, Metal, CMake, or a compiler.
|
|
15
|
+
- Use the exact `uv` version required by `pyproject.toml`. On WSL under
|
|
16
|
+
`/mnt/f`, set `UV_PROJECT_ENVIRONMENT=.venv_wsl`, `UV_LINK_MODE=copy`, and
|
|
17
|
+
`TMPDIR=/tmp` for pytest. Use `.venv_mac` on macOS and `.venv` on Linux.
|
|
18
|
+
|
|
19
|
+
## Development Rules
|
|
20
|
+
|
|
21
|
+
- Work on the current branch unless the user explicitly requests another one.
|
|
22
|
+
- Preserve neutral report wording and stable exit-code semantics.
|
|
23
|
+
- Treat report schemas, CLI behavior, and root exports as public contracts.
|
|
24
|
+
- Do not commit generated GDS, build products, native binaries, caches, or
|
|
25
|
+
benchmark results.
|
|
26
|
+
- Use `.tmp/` for disposable local work and ignored `results/` for retained
|
|
27
|
+
local qualification evidence.
|
|
28
|
+
- Run `python -m pytest` plus distribution build/inspection for packaging work.
|
|
29
|
+
- For performance-sensitive changes, compare exact semantics first, then use a
|
|
30
|
+
warm-up and at least seven measured runs.
|
|
31
|
+
- CUDA and Metal are optional runtime capabilities. Never make their toolchains
|
|
32
|
+
mandatory installation dependencies.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.0 - 2026-07-18
|
|
4
|
+
|
|
5
|
+
- Promote the independently verified `0.1.0rc1` package without behavior or
|
|
6
|
+
dependency changes.
|
|
7
|
+
- Record successful OIDC Trusted Publishing, signed attestations, exact
|
|
8
|
+
GitHub/TestPyPI artifact parity, clean indexed installation, and the complete
|
|
9
|
+
Python 3.10/3.14 Ubuntu, macOS, and Windows release-candidate matrix.
|
|
10
|
+
|
|
11
|
+
## 0.1.0rc1 - 2026-07-17
|
|
12
|
+
|
|
13
|
+
- Extract `gdsdiff` from `scgds` as an independently installable package while
|
|
14
|
+
preserving its comparator history and public behavior.
|
|
15
|
+
- Replaced executable pickle geometry caches with versioned JSON/NumPy caches.
|
|
16
|
+
- Added side-effect-free CUDA inspection, explicit preparation, stronger native
|
|
17
|
+
cache identity/permissions, packaged-schema validation, and release workflows.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Use Python 3.10 or newer and the pinned `uv` release. On WSL use:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
UV_PROJECT_ENVIRONMENT=.venv_wsl UV_LINK_MODE=copy uv sync --locked --extra dev
|
|
7
|
+
TMPDIR=/tmp .venv_wsl/bin/python -m pytest
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Use `.venv_mac` on macOS and `.venv` on native Linux. Ordinary `pip` installs
|
|
11
|
+
remain a required distribution-compatibility gate.
|
|
12
|
+
|
|
13
|
+
Changes to comparison semantics, report fields, exit codes, root exports, or
|
|
14
|
+
native acceleration must include focused tests and compatibility notes. Keep
|
|
15
|
+
CPU-only operation fully supported.
|