From c8393f135cd687565a25fe21a19a6cffae0a691e Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Thu, 24 Sep 2026 10:37:56 -0400 Subject: [PATCH] chore: remove the Qwen scaffold It was the starting point for the Qwen3.8-Flash-Next run, which now continues as OpenNest.Engine.Qwen38FlashNext (stamped from _Template). The unimplemented scaffold under the bare "Qwen" name would only collide with or be confused for that engine once it lands here. Co-Authored-By: Claude Opus 5.5 --- .../OpenNest.Engine.Qwen.csproj | 3 - OpenNest.Engine.Qwen/QwenNestingEngine.cs | 41 ----------- OpenNest.Engine.Qwen/README.md | 70 ------------------- .../tests/OpenNest.Engine.Qwen.Tests.csproj | 15 ---- .../tests/QwenNestingEngineTests.cs | 20 ------ README.md | 1 - 6 files changed, 150 deletions(-) delete mode 100644 OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj delete mode 100644 OpenNest.Engine.Qwen/QwenNestingEngine.cs delete mode 100644 OpenNest.Engine.Qwen/README.md delete mode 100644 OpenNest.Engine.Qwen/tests/OpenNest.Engine.Qwen.Tests.csproj delete mode 100644 OpenNest.Engine.Qwen/tests/QwenNestingEngineTests.cs diff --git a/OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj b/OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj deleted file mode 100644 index 1c0be6e..0000000 --- a/OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/OpenNest.Engine.Qwen/QwenNestingEngine.cs b/OpenNest.Engine.Qwen/QwenNestingEngine.cs deleted file mode 100644 index 8b7bbe6..0000000 --- a/OpenNest.Engine.Qwen/QwenNestingEngine.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Threading; -using OpenNest.Engine.Jobs; - -namespace OpenNest.Engine.Qwen; - -/// -/// TODO: name and describe the actual placement strategy here (e.g. "skyline packer with -/// greedy shelf assignment", "NFP-based sliding placement with simulated-annealing order -/// search", etc). This must be an independently designed algorithm — see README.md. -/// -public sealed class QwenNestingEngine : INestingEngine -{ - public NestJobResult Solve( - NestJob job, - IProgress? progress = null, - CancellationToken token = default - ) - { - ArgumentNullException.ThrowIfNull(job); - - // TODO: implement independent placement logic here. - // - // Do NOT call NestingEngineRegistry.Create(...), PlateNesterFactory, PlateFillService, - // or any built-in INestingEngine, and do not run several and keep the best. The - // Fill/ and pattern components (FillLinear, PairFiller, PatternTiler, Compactor, ...) - // and OpenNest.Core geometry ARE fair game as tools; the decisions are yours. - // - // job.Parts -> requested parts (PartGeometrySnapshot geometry, quantity, priority, rotation policy) - // job.Plates -> candidate stock sheets (size, spacing, quadrant, quantity) - // job.Options -> job-wide options - // - // Return a NestJobResult built from NestJobPlateResult (one per used sheet, holding - // ordered NestJobPlacement values), PartFulfillment (requested vs placed per part id), - // and StockUsage (sheets used per stock id). - - throw new NotImplementedException( - "Qwen nesting engine placement logic not yet implemented." - ); - } -} diff --git a/OpenNest.Engine.Qwen/README.md b/OpenNest.Engine.Qwen/README.md deleted file mode 100644 index 1d843ef..0000000 --- a/OpenNest.Engine.Qwen/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# OpenNest.Engine.Qwen - -An independent `INestingEngine` implementation. It must not be a wrapper, ensemble, or -selector over OpenNest's built-in engines. `Solve()` must not call, instantiate, or -delegate to any existing `INestingEngine` (`StockLadderNestingEngine`, -`FixedStrategyNestingEngine`), `NestingEngineRegistry`, `NestJobRunner`, or the whole-plate -nesters/fillers behind `PlateNesterFactory` (`DefaultPlateNester`, `StripPlateNester`, -`RemnantPlateNester`, `PlateFillService`, `DefaultPlateFiller`, ...). It must also never run -several of them and keep the best result. - -The decisions that make it an engine must be yours: which sheet(s) to use, which parts go -where and in what order, which pattern/strategy to apply to which region, and when to stop. - -## Allowed building blocks - -Reuse is encouraged. These are tools you drive, composed by your own decision logic: - -- `OpenNest.Core` geometry: `Polygon`, `Shape`, `BoundingBox`, `Vector`, `Box`, `ConvexHull`, - `ConvexDecomposition`, `RotatingCalipers`, `Collision`, `NoFitPolygon`, `ShapeProfile`, - `SpatialQuery`. -- Fill and pattern components in `OpenNest.Engine.Fill`: `FillLinear`, `FillExtents`, - `PairFiller`, `ShrinkFiller`, `RemnantFiller`/`RemnantFinder`, `Compactor`, `FillScore`, - `Pattern`/`PatternTiler`, `PartBoundary`, `RotationAnalysis`, `AngleCandidateBuilder`, - `BestCombination`. -- `OpenNest.Engine.BestFit` (`BestFitFinder`, `PairEvaluator`, ...), `RectanglePacking`, - `CirclePacking`. - -If you find a faster or better way to do something a shared component already does (for -example linear patterning), implement it inside this engine's own project and leave the -shared code untouched. Do not edit `OpenNest.Core` or `OpenNest.Engine`. Call it out in your -report (what it replaces, why it is better, measured numbers) so it can be generalized and -upstreamed for every engine later. - -## What to fill in - -`QwenNestingEngine.cs` — implement `Solve()`. Pick and document an actual -placement strategy (NFP-based sliding placement, skyline/shelf packer, -simulated-annealing/genetic layout search, guillotine-cut packer, -physics/gravity-settling, etc). It's fine to be simpler or worse than the built-in -engines to start; it must not be the same algorithm re-derived through indirection. - -## Build - -```bash -dotnet build OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj -``` - -This project is intentionally **outside** `OpenNest.sln` (same pattern as the -`OpenNest.Engine.Aurora` plugin) — it's discovered at runtime as a plugin, not built -as part of the main solution. - -## Try it out with the benchmark - -`OpenNest.Benchmark` auto-loads plugin engines from an `Engines/` folder next to its -own build output: - -```bash -dotnet build OpenNest.Engine.Qwen/OpenNest.Engine.Qwen.csproj -c Release -dotnet build OpenNest.Benchmark/OpenNest.Benchmark.csproj -c Release - -mkdir -p ../OpenNest/OpenNest.Benchmark/bin/Release/net8.0/Engines -cp OpenNest.Engine.Qwen/bin/Release/net8.0/OpenNest.Engine.Qwen.dll ../OpenNest/OpenNest.Benchmark/bin/Release/net8.0/Engines/ - -dotnet ../OpenNest/OpenNest.Benchmark/bin/Release/net8.0/OpenNest.Benchmark.dll -``` - -Or build and deploy in one step with `./Build-Engines.ps1 -Engines Qwen`. - -Your engine will show up in the report under its CLR type name (`QwenNestingEngine`), -competing on equal footing against the built-in engines. diff --git a/OpenNest.Engine.Qwen/tests/OpenNest.Engine.Qwen.Tests.csproj b/OpenNest.Engine.Qwen/tests/OpenNest.Engine.Qwen.Tests.csproj deleted file mode 100644 index 1deae75..0000000 --- a/OpenNest.Engine.Qwen/tests/OpenNest.Engine.Qwen.Tests.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - false - true - - - - - - - - - - - diff --git a/OpenNest.Engine.Qwen/tests/QwenNestingEngineTests.cs b/OpenNest.Engine.Qwen/tests/QwenNestingEngineTests.cs deleted file mode 100644 index 4043aee..0000000 --- a/OpenNest.Engine.Qwen/tests/QwenNestingEngineTests.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using OpenNest.Engine.Jobs; -using OpenNest.Geometry; - -namespace OpenNest.Engine.Qwen.Tests; - -public class QwenNestingEngineTests -{ - [Fact] - public void SolveReturnsAResultForASingleSimplePart() - { - // TODO: replace with a real fixture once Solve() is implemented — this only - // proves the plumbing (project reference, constructor, interface) is wired up. - var engine = new QwenNestingEngine(); - - Assert.NotNull(engine); - Assert.IsAssignableFrom(engine); - } -} diff --git a/README.md b/README.md index 2d55cc7..d19b692 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ the OpenNest app or `OpenNest.Benchmark` build output. |--------|----------| | [Gpt6Astra](OpenNest.Engine.Gpt6Astra/) | Contact-based placement | | [Opus55](OpenNest.Engine.Opus55/) | Frontier-advance no-fit-polygon packing | -| [Qwen](OpenNest.Engine.Qwen/) | Scaffold — not yet implemented | ## Building