gerberdiff 0.29.0__tar.gz → 0.29.1__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 (120) hide show
  1. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/CHANGELOG.md +11 -1
  2. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/PKG-INFO +3 -3
  3. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/__init__.py +1 -1
  4. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/cli.py +6 -1
  5. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/pyproject.toml +3 -3
  6. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/uv.lock +1 -1
  7. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/.editorconfig +0 -0
  8. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  9. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  10. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  11. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  12. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/.github/dependabot.yml +0 -0
  13. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/.github/workflows/ci.yml +0 -0
  14. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/.github/workflows/release.yml +0 -0
  15. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/.gitignore +0 -0
  16. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/.pre-commit-config.yaml +0 -0
  17. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/CONTRIBUTING.md +0 -0
  18. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/LICENSE +0 -0
  19. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/README.md +0 -0
  20. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/SECURITY.md +0 -0
  21. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/docs/api.md +0 -0
  22. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/docs/architecture.md +0 -0
  23. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/docs/cli.md +0 -0
  24. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/docs/geometry-diff.md +0 -0
  25. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/docs/schema.md +0 -0
  26. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/diff/__init__.py +0 -0
  27. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/diff/diff_engine.py +0 -0
  28. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/diff/layer_matcher.py +0 -0
  29. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/export/__init__.py +0 -0
  30. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/export/json_report.py +0 -0
  31. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/export/png_export.py +0 -0
  32. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/export/svg_export.py +0 -0
  33. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/geometry/__init__.py +0 -0
  34. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/geometry/attribute.py +0 -0
  35. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/geometry/driver.py +0 -0
  36. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/geometry/expand.py +0 -0
  37. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/geometry/geom_diff.py +0 -0
  38. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/geometry/layer_geometry.py +0 -0
  39. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/geometry/macro_geom.py +0 -0
  40. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/geometry/primitives.py +0 -0
  41. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/geometry/types.py +0 -0
  42. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/parse/__init__.py +0 -0
  43. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/parse/arc_math.py +0 -0
  44. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/parse/excellon_parser.py +0 -0
  45. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/parse/gerber_parser.py +0 -0
  46. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/parse/gerber_state.py +0 -0
  47. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/parse/macro_parser.py +0 -0
  48. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/parse/tokenizer.py +0 -0
  49. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/py.typed +0 -0
  50. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/render/__init__.py +0 -0
  51. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/render/compiled_render.py +0 -0
  52. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/render/draw_ops.py +0 -0
  53. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/render/macro_renderer.py +0 -0
  54. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/render/renderer.py +0 -0
  55. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/render/viewport.py +0 -0
  56. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/gerberdiff/types.py +0 -0
  57. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/__init__.py +0 -0
  58. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/cairo_support.py +0 -0
  59. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/conftest.py +0 -0
  60. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/drill-inch-tz.drl +0 -0
  61. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/drill-metric-lz.drl +0 -0
  62. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-B.Cu.gbr +0 -0
  63. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-B.Mask.gbr +0 -0
  64. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-B.Paste.gbr +0 -0
  65. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-B.SilkS.gbr +0 -0
  66. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-Edge.Cuts.gbr +0 -0
  67. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-F.Cu.gbr +0 -0
  68. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-F.Mask.gbr +0 -0
  69. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-F.Paste.gbr +0 -0
  70. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-F.SilkS.gbr +0 -0
  71. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-In1.Cu.gbr +0 -0
  72. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-In2.Cu.gbr +0 -0
  73. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-In3.Cu.gbr +0 -0
  74. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-In4.Cu.gbr +0 -0
  75. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-NPTH.drl +0 -0
  76. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-after/A64-OlinuXino-PTH.drl +0 -0
  77. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-B.Cu.gbr +0 -0
  78. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-B.Mask.gbr +0 -0
  79. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-B.Paste.gbr +0 -0
  80. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-B.SilkS.gbr +0 -0
  81. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-Edge.Cuts.gbr +0 -0
  82. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-F.Cu.gbr +0 -0
  83. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-F.Mask.gbr +0 -0
  84. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-F.Paste.gbr +0 -0
  85. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-F.SilkS.gbr +0 -0
  86. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-In1.Cu.gbr +0 -0
  87. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-In2.Cu.gbr +0 -0
  88. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-In3.Cu.gbr +0 -0
  89. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-In4.Cu.gbr +0 -0
  90. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-NPTH.drl +0 -0
  91. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/fixtures/gerbers-before/A64-OlinuXino-PTH.drl +0 -0
  92. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_arc_math.py +0 -0
  93. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_block_aperture.py +0 -0
  94. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_cli_diff.py +0 -0
  95. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_cli_geomdiff.py +0 -0
  96. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_cli_parse.py +0 -0
  97. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_cli_render.py +0 -0
  98. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_diff_engine.py +0 -0
  99. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_draw_ops.py +0 -0
  100. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_excellon_parser.py +0 -0
  101. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_geometry_attribute.py +0 -0
  102. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_geometry_booldiff.py +0 -0
  103. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_geometry_expand.py +0 -0
  104. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_geometry_layer.py +0 -0
  105. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_geometry_macro.py +0 -0
  106. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_geometry_oracle.py +0 -0
  107. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_geometry_primitives.py +0 -0
  108. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_geometry_report.py +0 -0
  109. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_gerber_parser.py +0 -0
  110. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_gerber_state.py +0 -0
  111. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_json_report.py +0 -0
  112. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_layer_matcher.py +0 -0
  113. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_macro_parser.py +0 -0
  114. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_macro_renderer.py +0 -0
  115. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_png_export.py +0 -0
  116. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_renderer.py +0 -0
  117. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_scaffold.py +0 -0
  118. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_tokenizer.py +0 -0
  119. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_types.py +0 -0
  120. {gerberdiff-0.29.0 → gerberdiff-0.29.1}/tests/test_viewport.py +0 -0
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.29.1] - 2026-06-13
11
+
12
+ ### Changed
13
+
14
+ - **Package metadata reflects both engines** -- the PyPI `description`
15
+ and the CLI group help text described only the raster engine; both now
16
+ cover the raster overlay and geometry diff pipelines. Added `geometry`
17
+ and `shapely` to the package keywords. No behaviour changes.
18
+
10
19
  ## [0.29.0] - 2026-06-12
11
20
 
12
21
  ### Added
@@ -529,7 +538,8 @@ merge_tolerance) -> SingleLayerDiff`.
529
538
  - mypy `strict=true`, `warn_unused_ignores=true`, `cairocffi.*` override for missing stubs.
530
539
  - 2 smoke tests in `tests/test_scaffold.py`.
531
540
 
532
- [Unreleased]: https://github.com/CameronBrooks11/gerberdiff/compare/v0.29.0...HEAD
541
+ [Unreleased]: https://github.com/CameronBrooks11/gerberdiff/compare/v0.29.1...HEAD
542
+ [0.29.1]: https://github.com/CameronBrooks11/gerberdiff/compare/v0.29.0...v0.29.1
533
543
  [0.29.0]: https://github.com/CameronBrooks11/gerberdiff/compare/v0.21.0...v0.29.0
534
544
  [0.14.0]: https://github.com/CameronBrooks11/gerberdiff/compare/v0.13.0...v0.14.0
535
545
  [0.13.0]: https://github.com/CameronBrooks11/gerberdiff/compare/v0.12.0...v0.13.0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gerberdiff
3
- Version: 0.29.0
4
- Summary: Visual raster diff tool for Gerber/Excellon PCB design files
3
+ Version: 0.29.1
4
+ Summary: Diff tool for Gerber/Excellon PCB files: visual raster overlays and attributed vector-geometry change analysis
5
5
  Project-URL: Homepage, https://github.com/CameronBrooks11/gerberdiff
6
6
  Project-URL: Repository, https://github.com/CameronBrooks11/gerberdiff
7
7
  Project-URL: Changelog, https://github.com/CameronBrooks11/gerberdiff/blob/main/CHANGELOG.md
@@ -9,7 +9,7 @@ Project-URL: Issues, https://github.com/CameronBrooks11/gerberdiff/issues
9
9
  Author-email: Cameron Brooks <cameronbrooks11@gmail.com>
10
10
  License-Expression: Apache-2.0
11
11
  License-File: LICENSE
12
- Keywords: diff,eda,excellon,gerber,grbl,kicad,pcb
12
+ Keywords: diff,eda,excellon,geometry,gerber,grbl,kicad,pcb,shapely
13
13
  Classifier: Development Status :: 4 - Beta
14
14
  Classifier: Intended Audience :: Developers
15
15
  Classifier: Intended Audience :: Manufacturing
@@ -1,4 +1,4 @@
1
- __version__ = "0.29.0"
1
+ __version__ = "0.29.1"
2
2
 
3
3
  from typing import TYPE_CHECKING, Any
4
4
 
@@ -17,7 +17,12 @@ _MEMORY_WARN_PIXELS = 16_777_216 # 4096^2
17
17
  @click.group()
18
18
  @click.version_option(__version__, prog_name="gerberdiff")
19
19
  def cli() -> None:
20
- """Visual raster diff tool for Gerber/Excellon PCB design files."""
20
+ """Diff tool for Gerber/Excellon PCB design files.
21
+
22
+ Two complementary engines: `diff` renders visual raster overlays of
23
+ changed pixels; `geomdiff` computes resolution-independent, attributed
24
+ changes (added / removed / moved / resized) on the vector geometry.
25
+ """
21
26
 
22
27
 
23
28
  @cli.command("parse")
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "gerberdiff"
7
- version = "0.29.0"
8
- description = "Visual raster diff tool for Gerber/Excellon PCB design files"
7
+ version = "0.29.1"
8
+ description = "Diff tool for Gerber/Excellon PCB files: visual raster overlays and attributed vector-geometry change analysis"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
11
11
  license = "Apache-2.0"
12
12
  authors = [{ name = "Cameron Brooks", email = "cameronbrooks11@gmail.com" }]
13
- keywords = ["gerber", "excellon", "pcb", "diff", "eda", "kicad", "grbl"]
13
+ keywords = ["gerber", "excellon", "pcb", "diff", "eda", "kicad", "grbl", "geometry", "shapely"]
14
14
  classifiers = [
15
15
  "Development Status :: 4 - Beta",
16
16
  "Intended Audience :: Developers",
@@ -215,7 +215,7 @@ toml = [
215
215
 
216
216
  [[package]]
217
217
  name = "gerberdiff"
218
- version = "0.29.0"
218
+ version = "0.29.1"
219
219
  source = { editable = "." }
220
220
  dependencies = [
221
221
  { name = "cairocffi" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes