cutoptim 1.0.0__tar.gz → 1.3.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: cutoptim
3
- Version: 1.0.0
3
+ Version: 1.3.0
4
4
  Summary: Official client for the CutOptim Engine API — cutting optimization (2D panels, 1D linear, timber, true-shape nesting) over HTTPS.
5
5
  Project-URL: Homepage, https://cutoptim.com/engine/reference
6
6
  Project-URL: Source, https://github.com/cutoptim/engine-python
@@ -9,5 +9,5 @@ Standard library only (urllib, hmac). Types are generated from the OpenAPI docum
9
9
  from .client import CutOptim, CutOptimError, is_job_accepted
10
10
  from .webhooks import verify_webhook, SIGNATURE_HEADER
11
11
 
12
- __version__ = "1.0.0"
12
+ __version__ = "1.3.0"
13
13
  __all__ = ["CutOptim", "CutOptimError", "is_job_accepted", "verify_webhook", "SIGNATURE_HEADER", "__version__"]
@@ -1,5 +1,5 @@
1
1
  # GENERATED by scripts/gen-sdks.ts from the CutOptim Engine API OpenAPI document — DO NOT EDIT.
2
- # contract 1 · spec sha256 d12a371f3242e7b21df0aa4ecf2df4b2f60f8670bbed7e47bbe3d4cbf08678fb · cutoptim 1.0.0
2
+ # contract 1 · spec sha256 e29a45d3c07667cf676ceb46a7c24ec3203683e50f72ba25f0677ac4af140c71 · cutoptim 1.3.0
3
3
  from __future__ import annotations
4
4
 
5
5
  from typing import Any, Dict, List, Literal, TypedDict, Union
@@ -358,6 +358,33 @@ class Part1D(_Part1DRequired, total=False):
358
358
  priority: bool
359
359
  material: str
360
360
  meta: Dict[str, Any]
361
+ ends: "MitreEnds"
362
+ flip: Literal["none", "face", "edge", "any"]
363
+ depth: float
364
+ thickness: float
365
+
366
+
367
+ class _EndCutRequired(TypedDict):
368
+ angle: float
369
+
370
+
371
+ class EndCut(_EndCutRequired, total=False):
372
+ """One end cut of a part, in degrees from square (0 = a square end), signed. The part is measured long point to long point (`length` is its overall length). A part whose two end cuts would cross inside its section (shorter than its leads) cannot be made: a 400 `invalid_request` naming `parts[i].ends` says how long it must at least be."""
373
+ bevel: float
374
+
375
+
376
+ class MitreEnds(TypedDict, total=False):
377
+ """The angled ends of a part, read only with `options.mitrePairing`. Two parts of one section whose facing ends lie in one plane (after a turn `flip` allows) can be cut with ONE saw cut between them: the triangle between the long and the short point is not wasted. Without `mitrePairing` the ends are not used (a warning says so) and the part packs as its `length`."""
378
+ start: "EndCut"
379
+ end: "EndCut"
380
+
381
+
382
+ class SharedCut(TypedDict):
383
+ """This part's far end is ONE saw cut shared with the next part on the bar. The next part starts at `pos + length − lead + kerfAlongAxis` computed from the rounded values shown (not one kerf after `pos + length`), and the shared wood is counted once in `yieldPct`."""
384
+ angle: float
385
+ bevel: float
386
+ kerfAlongAxis: float
387
+ lead: float
361
388
 
362
389
 
363
390
  class _Stock1DRequired(TypedDict):
@@ -386,6 +413,7 @@ class Options1D(TypedDict, total=False):
386
413
  minimizeCost: bool
387
414
  respectStock: bool
388
415
  minOffcut: float
416
+ mitrePairing: bool
389
417
 
390
418
 
391
419
  class _Optimize1DRequestRequired(TypedDict):
@@ -412,6 +440,8 @@ class PartWood(_PartWoodRequired, total=False):
412
440
  priority: bool
413
441
  material: str
414
442
  meta: Dict[str, Any]
443
+ ends: "MitreEnds"
444
+ flip: Literal["none", "face", "edge", "any"]
415
445
 
416
446
 
417
447
  class _StockWoodRequired(TypedDict):
@@ -437,6 +467,7 @@ class OptionsWood(TypedDict, total=False):
437
467
  minimizeCost: bool
438
468
  respectStock: bool
439
469
  minOffcut: float
470
+ mitrePairing: bool
440
471
 
441
472
 
442
473
  class _OptimizeWoodRequestRequired(TypedDict):
@@ -450,8 +481,7 @@ class OptimizeWoodRequest(_OptimizeWoodRequestRequired, total=False):
450
481
  include: List[Literal["cutPlan", "offcuts", "svg", "csv", "dxf", "labels", "planHash", "pdf", "labelsPdf"]]
451
482
 
452
483
 
453
- class CutStep(TypedDict):
454
- """One blade movement, in physically executable order (parent before children: you cannot crosscut a strip before you have ripped it off)."""
484
+ class _CutStepRequired(TypedDict):
455
485
  sheet: int
456
486
  step: int
457
487
  axis: Literal["h", "v"]
@@ -460,6 +490,12 @@ class CutStep(TypedDict):
460
490
  stage: int
461
491
 
462
492
 
493
+ class CutStep(_CutStepRequired, total=False):
494
+ """One blade movement, in physically executable order (parent before children: you cannot crosscut a strip before you have ripped it off)."""
495
+ angle: float
496
+ bevel: float
497
+
498
+
463
499
  class _PlacedPart2DRequired(TypedDict):
464
500
  name: str
465
501
  x: float
@@ -642,6 +678,8 @@ class _PlacedPart1DRequired(TypedDict):
642
678
 
643
679
  class PlacedPart1D(_PlacedPart1DRequired, total=False):
644
680
  meta: Dict[str, Any]
681
+ sharedCut: "SharedCut"
682
+ flipped: Literal["face", "edge", "roll"]
645
683
 
646
684
 
647
685
  class _RodRequired(TypedDict):
@@ -657,7 +695,7 @@ class Rod(_RodRequired, total=False):
657
695
  meta: Dict[str, Any]
658
696
 
659
697
 
660
- class Metrics1D(TypedDict):
698
+ class _Metrics1DRequired(TypedDict):
661
699
  rodCount: int
662
700
  yieldPct: float
663
701
  placed: int
@@ -667,6 +705,10 @@ class Metrics1D(TypedDict):
667
705
  toleranceAcceptedCount: int
668
706
 
669
707
 
708
+ class Metrics1D(_Metrics1DRequired, total=False):
709
+ sharedCuts: int
710
+
711
+
670
712
  class Unplaced1D(TypedDict):
671
713
  name: str
672
714
  length: float
@@ -751,8 +793,7 @@ class WoodUnmatched(_WoodUnmatchedRequired, total=False):
751
793
  material: str
752
794
 
753
795
 
754
- class MetricsWood(TypedDict):
755
- """Job-wide totals across every section."""
796
+ class _MetricsWoodRequired(TypedDict):
756
797
  sectionCount: int
757
798
  rodCount: int
758
799
  yieldPct: float
@@ -763,6 +804,11 @@ class MetricsWood(TypedDict):
763
804
  toleranceAcceptedCount: int
764
805
 
765
806
 
807
+ class MetricsWood(_MetricsWoodRequired, total=False):
808
+ """Job-wide totals across every section."""
809
+ sharedCuts: int
810
+
811
+
766
812
  class _OptimizeWoodResponseRequired(TypedDict):
767
813
  engine: Literal["heuristic", "balanced"]
768
814
  engineVersion: str
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "cutoptim"
7
- version = "1.0.0"
7
+ version = "1.3.0"
8
8
  description = "Official client for the CutOptim Engine API — cutting optimization (2D panels, 1D linear, timber, true-shape nesting) over HTTPS."
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes