From 719395863d0c241f5fb85ade7ca5a6c146afc985 Mon Sep 17 00:00:00 2001 From: Yeicor <4929005+Yeicor@users.noreply.github.com> Date: Sun, 10 Mar 2024 15:34:39 +0100 Subject: [PATCH] big rewrite focusing on faster performance and selection improvements --- .github/workflows/build.yml | 1 - assets/.gitignore | 1 + assets/logo_build/base.glb | Bin 1531600 -> 0 bytes assets/logo_build/img.jpg.glb | Bin 17696 -> 0 bytes assets/logo_build/location.glb | Bin 3292 -> 0 bytes frontend/App.vue | 14 +- frontend/misc/distances.ts | 2 - frontend/misc/network.ts | 48 +- frontend/misc/scene.ts | 24 +- frontend/tools/OrientationGizmo.vue | 6 +- frontend/tools/Selection.vue | 72 ++- frontend/tools/Tools.vue | 2 +- frontend/viewer/ModelViewerWrapper.vue | 2 +- package.json | 2 +- poetry.lock | 763 +------------------------ pyproject.toml | 10 +- yacv_server/__init__.py | 39 +- yacv_server/cad.py | 18 +- yacv_server/logo.py | 62 +- yacv_server/myhttp.py | 143 +++++ yacv_server/plugin.py | 2 +- yacv_server/pubsub.py | 71 ++- yacv_server/server.py | 361 ------------ yacv_server/yacv.py | 286 +++++++++ 24 files changed, 663 insertions(+), 1266 deletions(-) create mode 100644 assets/.gitignore delete mode 100644 assets/logo_build/base.glb delete mode 100644 assets/logo_build/img.jpg.glb delete mode 100644 assets/logo_build/location.glb create mode 100644 yacv_server/myhttp.py delete mode 100644 yacv_server/server.py create mode 100644 yacv_server/yacv.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0d157c4..5b96d79 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,7 +49,6 @@ jobs: cache: "poetry" - run: "SKIP_BUILD_FRONTEND=true poetry install" - run: "poetry run python yacv_server/logo.py" - - run: "cp assets/fox.glb assets/logo_build/fox.glb" - uses: "actions/upload-artifact@v4" with: name: "logo" diff --git a/assets/.gitignore b/assets/.gitignore new file mode 100644 index 0000000..a7dbd25 --- /dev/null +++ b/assets/.gitignore @@ -0,0 +1 @@ +/logo_build/ \ No newline at end of file diff --git a/assets/logo_build/base.glb b/assets/logo_build/base.glb deleted file mode 100644 index 41f834f2cdf5052c5dc99fcd57398adce561016b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1531600 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°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

Ex2M#+EKm3)|gyUJj6 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

@YUHr%Y8lb3m$eMOQ6PM$N; z@X=r=-}~3_@(NDwUfJwtmU+qX@;Ji>GC6t39m7B6x%*St?3Zdj58*^nhId~I;R8Di zTk#?6_-XjsvJj4{V)k#N;zGD>FT*vWLpbXO!^Ing@Zd*=Jyi%V&t~?GCGv-GY@p%V z$wRnccf;eJ1#`?S!*@;u^Yp!j16K!g`}>9uj}GQ9e+)O0&%h{;a(a2D2$FMvWenfQ z7R(i^8NMp7WiwkFKDs=J=SLfM^bF$m0}K<(>)>F+`gIU|zYDpv&q+Gof3vLK+Aie% z#EW7IbfLfA@||L>JJaXpWhl|WNV>MYA}t=+i6Uw{=y>YxH=VG(26>~s7WPUb1JZ=KD}De zl=iP~NHIy8(Cev<>1|jeTGOE^RT|QO(iLt_O_tOn$CVb;cvCo4?%I;dt*=eVzP6&L z(`(X#$Trk7vO1+W-JI};W4rQTz@(2{mls7{lvbbn$+`kkX2eOq3RdY$M-FIJVN_}1Mi!^Gm$SH8C~ z^kgA=w6h0wyOE!omyM#K@ww^6uqcY@fxBCa;}J=W0|I^oXzXgvC>mikAt>bw%Udds|Hg$0_fLvhrpGt_ zP*FLjt0ietl3&COwK;7j`c!(BDzeOt&NiQ;&SlC&UysgHONM(d|E0gT8-dUk)MUb#D}WQ-=rG6chK^% zt;*xLMVx(yN)}7xn`F1jP?qUv=Dn);X@7bgctEwU6G(IC9#;F02hsCv$5q*4A#{4n zDRpR|lY)AkQ(fajsea>2s^ZHq`rGQ7%9)}X`A)p0a%HMcneX3IKB;QZpgNCK^xGN~ z^WvF0d8j72FMF*VBWsa!*avm0LT$=0;;ZU)r8Y&b{-u0d)}f8xT`2FJI`nx%63QDC zPRaTtC&#>S%HvE;y&YTqbB%FNH<)tKj z!)adC{N(bf4z21?kP23>L(AO@)492|DP!lN)bmL#`A)y$G|8hD)jD62@>Q-$h3}Up zxl=ZMUQw31*Q!oa%ao@F9jZ~}`U+Ggx+)FKQHh#$3!|fbD^vSsp%ikW3e~Wjlq9u- zTr-ByS07*6dMSvKwXo<{Y#=4>t!Pup0D2okbp05U+!L9))bgVlo#k}eX+^bb`qQ&Y z7X2;|Kxd{qXvUiW%J-xS}j|*0&Sq*~7yt!=y0h=)w#u|yxi$1Ws2>TN7_o$? zg$RCl!I?$KtBT-*2aH%!6d}qaf)9+?LKG%~51y8yj3W5Ji13Dr;DZN@SW47NltF|Z zFe3U|i%>_+DMAnYV8qg*Hlp+*_`rzh3lU+wjLqml-d2=OgdQ*=`tZLnyk%`hKk{}W z_~C6YN^9p})G;0;LO*&th~U9^pa^5AgAvQwj96aOQItl69xx*2=p;fNwL~_f79c`j z1)DK1a(}y4(PsGIVG(MTY(}hXGkP%QXV*rUD-L%!AV5;Nh|`RW`5+j#tHc!uhFgj zvX=Vo|4RR1UHANB>hhUym;cKN{$w@&psTPlpZ9?4$Ti;gfpKeian+9K+3iTing{l&+6FYVq~C zhI7oY*z!KD>n?JA@2(AoTgr99!~M_bx?f(4=RPnz@24*(iaV?8y{^l(NqkQ8>21PE z%-^^`E^iWUC4$htAw&oe~KX&fScQm&fA)Z2aHJ9oyy+QXhf0S#+=5@NSd1D9pT{HhR{+14I zeENZAwwUg>)JQWkd| zXO_dsau$~u`$E@WSFyP6B(toR`B{8=+cRBXBiE~|uV#79scG?ehvDAxICqYGqCKjW z#rv6U z#lJ_I=Y7US`Fnqv^ZT36Sg99fJ)Y&7=52TEkh&D}J@mtYam@ z6vz1(&e~G(*4t)1Jl|O^Kz!r8;oRZGyVn|ai6Zu#V0go1;*5O^7u`!7-OBLVo5W3<2;ZNr zTw?3UdqRo$j#w90(mCS(uBM(4S5A>ygmOWQ@lq~%qe(uE

  • Ljft2C^@MnSw91mV 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≫8=t0it!Orxf4}E!@)Ou7#ZG4#V@E?;g2Yk4< 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 diff --git a/assets/logo_build/img.jpg.glb b/assets/logo_build/img.jpg.glb deleted file mode 100644 index 62948c90a559df7fce44b682eb8f97428d07916d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17696 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 Ve_aRr{_7J8y7zG(-10x`{}0Xim(>6O diff --git a/assets/logo_build/location.glb b/assets/logo_build/location.glb deleted file mode 100644 index 9f2e84604a0eca21cd38abd3b64f08fb73ea2cb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3292 zcmd5<%Z}4X6b(p7s2SEHShZ?xGJfRg&CpK>kEH2jT0nz_ic?9K2@ar2rQLdW!I^5>-yY#?Sb1_KU*ji{`mnX zv>WYKb4;k?urLfnNbKz~>5lq+Cbl?xOl(6V-TjEQ`u&ha#MU+91l}<4nICobhm6=| z!z^pW4}?cu{)F|2-KTEI3N*OLP5$tsd_mBga3b8CY}u zGi5#9Kb6n%5BC0f`k7jq(NCU#u=i70znFh!*3T6KD$5F}I)kZSUO=@OSiho!N+(C* z0c1}@m2Adjz4|#wbLQISgu&JZel}=?UZ)F4_ zhqstNh<1ow)2DCclesnIy!2$mUPQ$}W<#q~uUL7|Bu*zhh7@xOYvy3bOS-EPm>7 zkHzIJzWdYAA3$zXbwMQ(;?al+j(Vr+=CCVnvxvGbcQ%93V8=&IB{nJ>4cSWI24bB$ zO3T}_;8?1uES7*KkD+aih{+16yAU|@co_0sHo3cv$|b8;Qo*P@+@ZIF9ttyQZ7kjS zWesNcf>GCHZQe^&XPGy$U|~Se?G{7TmzOJNE`kCTy>v8D;I; z+kbCv`}I0(FPCwum%f7y+$Sm;Sh$k}&`@xXN6={;88nIn?~Wol9FvV!yU}U1n)o<` zqPgGW`1(|N*Hg-c`X_-U;|$t736Cr|#Ur`Kczlyh@t`;vUrytZB#*(XTzL|IHH}B^ zI|gqZJe0oiv9s709=w#KkC1vp7bQ$(4`iQp?joNMyIz$^__3hFHhiR)5N>MJNk($P z&_QifPE);jjR^}rGcW~_9gRdnn{dU5U?dy~hHZ#Li%%3p=E=jHjs-+zX<{McAs>YRV$?7e^c`tb1Z658Rv@0>#G+=ZL39=!Y+Qwoi> q=IYbsN59Mdo4+<*6bhwf*_X!|wDi5WUpwWw#Q*l}c>JTI^*;hyqW1j& diff --git a/frontend/App.vue b/frontend/App.vue index 4852c14..38eb0b9 100644 --- a/frontend/App.vue +++ b/frontend/App.vue @@ -32,8 +32,18 @@ const disableTap = ref(false); const setDisableTap = (val: boolean) => disableTap.value = val; provide('disableTap', {disableTap, setDisableTap}); -async function onModelLoadRequest(model: NetworkUpdateEvent) { - sceneDocument.value = await SceneMgr.loadModel(sceneUrl, sceneDocument.value, model.name, model.url); +async function onModelLoadRequest(event: NetworkUpdateEvent) { + // Load a new batch of models to optimize rendering time + let doc = sceneDocument.value; + for (let model of event.models) { + let isLast = event.models[event.models.length - 1].url == model.url; + if (!model.isRemove) { + doc = await SceneMgr.loadModel(sceneUrl, doc, model.name, model.url, isLast, isLast); + } else { + doc = await SceneMgr.removeModel(sceneUrl, doc, model.name, isLast); + } + } + sceneDocument.value = doc triggerRef(sceneDocument); // Why not triggered automatically? } diff --git a/frontend/misc/distances.ts b/frontend/misc/distances.ts index 0bc2a90..60eef3b 100644 --- a/frontend/misc/distances.ts +++ b/frontend/misc/distances.ts @@ -26,7 +26,6 @@ function getCenterAndVertexList(obj: MObject3D, scene: ModelScene): { vertices.push(vertex); } center = center.divideScalar(ind.count); - console.log("center", center) return {center, vertices}; } @@ -46,7 +45,6 @@ export function distances(a: MObject3D, b: MObject3D, scene: ModelScene): { // Find the closest and farthest vertices. // TODO: Compute actual min and max distances between the two objects. - // FIXME: Working for points and lines, but not triangles... // FIXME: Really slow... (use a BVH or something) let minDistance = Infinity; let minDistanceVertices = [new Vector3(), new Vector3()]; diff --git a/frontend/misc/network.ts b/frontend/misc/network.ts index 2d03a3d..b6c6afe 100644 --- a/frontend/misc/network.ts +++ b/frontend/misc/network.ts @@ -1,19 +1,36 @@ import {settings} from "./settings"; -export class NetworkUpdateEvent extends Event { +const batchTimeout = 250; // ms + +class NetworkUpdateEventModel { name: string; url: string; + // TODO: Detect and manage instances of the same object (same hash, different name) + hash: string | null; + isRemove: boolean; - constructor(name: string, url: string) { - super("update"); + constructor(name: string, url: string, hash: string | null, isDelete: boolean) { this.name = name; this.url = url; + this.hash = hash; + this.isRemove = isDelete; + } +} + +export class NetworkUpdateEvent extends Event { + models: NetworkUpdateEventModel[]; + + constructor(models: NetworkUpdateEventModel[]) { + super("update"); + this.models = models; } } /** Listens for updates and emits events when a model changes */ export class NetworkManager extends EventTarget { private knownObjectHashes: { [name: string]: string | null } = {}; + private bufferedUpdates: NetworkUpdateEventModel[] = []; + private batchTimeout: number | null = null; /** * Tries to load a new model (.glb) from the given URL. @@ -36,7 +53,7 @@ export class NetworkManager extends EventTarget { let response = await fetch(url, {method: "HEAD"}); let hash = response.headers.get("etag"); // Only trigger an update if the hash has changed - this.foundModel(name, hash, url); + this.foundModel(name, hash, url, false); } } @@ -44,17 +61,17 @@ export class NetworkManager extends EventTarget { try { // WARNING: This will spam the console logs with failed requests when the server is down let response = await fetch(url.toString()); - console.log("Monitoring", url.toString(), response); + // console.log("Monitoring", url.toString(), response); if (response.status === 200) { let lines = readLinesStreamings(response.body!.getReader()); for await (let line of lines) { if (!line || !line.startsWith("data:")) continue; let data = JSON.parse(line.slice(5)); - console.debug("WebSocket message", data); + // console.debug("WebSocket message", data); let urlObj = new URL(url); urlObj.searchParams.delete("api_updates"); urlObj.searchParams.set("api_object", data.name); - this.foundModel(data.name, data.hash, urlObj.toString()); + this.foundModel(data.name, data.hash, urlObj.toString(), data.is_remove); } } } catch (e) { // Ignore errors (retry very soon) @@ -63,12 +80,21 @@ export class NetworkManager extends EventTarget { return; } - private foundModel(name: string, hash: string | null, url: string) { + private foundModel(name: string, hash: string | null, url: string, isRemove: boolean) { let prevHash = this.knownObjectHashes[name]; - // TODO: Detect and manage instances of the same object (same hash, different name) - if (!hash || hash !== prevHash) { + let hashToCheck = hash + (isRemove ? "-remove" : ""); + // console.debug("Found model", name, "with hash", hash, "and previous hash", prevHash); + if (!hash || hashToCheck !== prevHash) { this.knownObjectHashes[name] = hash; - this.dispatchEvent(new NetworkUpdateEvent(name, url)); + let newModel = new NetworkUpdateEventModel(name, url, hash, isRemove); + this.bufferedUpdates.push(newModel); + + // Optimization: try to batch updates automatically for faster rendering + if (this.batchTimeout !== null) clearTimeout(this.batchTimeout); + this.batchTimeout = setTimeout(() => { + this.dispatchEvent(new NetworkUpdateEvent(this.bufferedUpdates)); + this.bufferedUpdates = []; + }, batchTimeout); } } } diff --git a/frontend/misc/scene.ts b/frontend/misc/scene.ts index 4d66fd5..cde87aa 100644 --- a/frontend/misc/scene.ts +++ b/frontend/misc/scene.ts @@ -9,7 +9,7 @@ import {Matrix4} from "three/src/math/Matrix4.js" /** This class helps manage SceneManagerData. All methods are static to support reactivity... */ export class SceneMgr { /** Loads a GLB model from a URL and adds it to the viewer or replaces it if the names match */ - static async loadModel(sceneUrl: Ref, document: Document, name: string, url: string): Promise { + static async loadModel(sceneUrl: Ref, document: Document, name: string, url: string, updateHelpers: boolean = true, reloadScene: boolean = true): Promise { let loadStart = performance.now(); // Start merging into the current document, replacing or adding as needed @@ -17,11 +17,13 @@ export class SceneMgr { console.log("Model", name, "loaded in", performance.now() - loadStart, "ms"); - if (name !== extrasNameValueHelpers) { + if (updateHelpers) { // Reload the helpers to fit the new model - // TODO: Only reload the helpers after a few milliseconds of no more models being added/removed - await this.reloadHelpers(sceneUrl, document); - } else { + await this.reloadHelpers(sceneUrl, document, reloadScene); + reloadScene = false; + } + + if (reloadScene) { // Display the final fully loaded model let displayStart = performance.now(); document = await this.showCurrentDoc(sceneUrl, document); @@ -31,7 +33,7 @@ export class SceneMgr { return document; } - private static async reloadHelpers(sceneUrl: Ref, document: Document): Promise { + private static async reloadHelpers(sceneUrl: Ref, document: Document, reloadScene: boolean): Promise { let bb = SceneMgr.getBoundingBox(document); // Create the helper axes and grid box @@ -40,7 +42,7 @@ export class SceneMgr { newAxes(helpersDoc, bb.getSize(new Vector3()).multiplyScalar(0.5), transform); newGridBox(helpersDoc, bb.getSize(new Vector3()), transform); let helpersUrl = URL.createObjectURL(new Blob([await toBuffer(helpersDoc)])); - return await SceneMgr.loadModel(sceneUrl, document, extrasNameValueHelpers, helpersUrl); + return await SceneMgr.loadModel(sceneUrl, document, extrasNameValueHelpers, helpersUrl, false, reloadScene); } static getBoundingBox(document: Document): Box3 { @@ -67,7 +69,7 @@ export class SceneMgr { } /** Removes a model from the viewer */ - static async removeModel(sceneUrl: Ref, document: Document, name: string): Promise { + static async removeModel(sceneUrl: Ref, document: Document, name: string, updateHelpers: boolean = true, reloadScene: boolean = true): Promise { let loadStart = performance.now(); // Remove the model from the document @@ -75,8 +77,10 @@ export class SceneMgr { console.log("Model", name, "removed in", performance.now() - loadStart, "ms"); - // Reload the helpers to fit the new model (will also show the document) - document = await this.reloadHelpers(sceneUrl, document); + if (updateHelpers) { + // Reload the helpers to fit the new model (will also show the document) + document = await this.reloadHelpers(sceneUrl, document, reloadScene); + } return document; } diff --git a/frontend/tools/OrientationGizmo.vue b/frontend/tools/OrientationGizmo.vue index 4fe166c..d953723 100644 --- a/frontend/tools/OrientationGizmo.vue +++ b/frontend/tools/OrientationGizmo.vue @@ -47,7 +47,7 @@ function createGizmo(expectedParent: HTMLElement, scene: ModelScene): HTMLElemen } scene.queueRender(); requestIdleCallback(() => props.elem?.dispatchEvent( - new CustomEvent('camera-change', {detail: {source: 'none'}}))) + new CustomEvent('camera-change', {detail: {source: 'none'}})), {timeout: 100}) } return gizmo; } @@ -60,7 +60,7 @@ let gizmo: HTMLElement & { update: () => void } function updateGizmo() { if (gizmo.isConnected) { gizmo.update(); - requestIdleCallback(updateGizmo); + requestIdleCallback(updateGizmo, {timeout: 250}); } } @@ -69,7 +69,7 @@ let reinstall = () => { if (gizmo) container.value.removeChild(gizmo); gizmo = createGizmo(container.value, props.scene as ModelScene) as typeof gizmo; container.value.appendChild(gizmo); - requestIdleCallback(updateGizmo); // Low priority updates + requestIdleCallback(updateGizmo, {timeout: 250}); // Low priority updates } onMounted(reinstall) onUpdated(reinstall); diff --git a/frontend/tools/Selection.vue b/frontend/tools/Selection.vue index f6b21cd..6f346dd 100644 --- a/frontend/tools/Selection.vue +++ b/frontend/tools/Selection.vue @@ -54,15 +54,22 @@ let selectionListener = (event: MouseEvent) => { } // Set raycaster parameters + let paramScale = 1; // Make it easier to select vertices/edges based on camera distance + if (props.viewer?.scene) { + let scene = props.viewer.scene; + let lookAtCenter = scene.getTarget().clone().add(scene.target.position); + paramScale = scene.camera.position.distanceTo(lookAtCenter) / 150; + // console.log('paramScale', paramScale) + } if (selectFilter.value === 'Any (S)') { - raycaster.params.Line.threshold = 0.2; - raycaster.params.Points.threshold = 0.8; + raycaster.params.Line.threshold = paramScale; + raycaster.params.Points.threshold = paramScale * 2; // Make vertices easier to select than edges } else if (selectFilter.value === '(E)dges') { - raycaster.params.Line.threshold = 0.8; + raycaster.params.Line.threshold = paramScale; raycaster.params.Points.threshold = 0.0; } else if (selectFilter.value === '(V)ertices') { raycaster.params.Line.threshold = 0.0; - raycaster.params.Points.threshold = 0.8; + raycaster.params.Points.threshold = paramScale; } else if (selectFilter.value === '(F)aces') { raycaster.params.Line.threshold = 0.0; raycaster.params.Points.threshold = 0.0; @@ -74,7 +81,7 @@ let selectionListener = (event: MouseEvent) => { const ndcCoords = scene.getNDC(event.clientX, event.clientY); raycaster.setFromCamera(ndcCoords, scene.camera); if (!scene.camera.isPerspectiveCamera) { - // Need to fix the ray direction for ortho camera FIXME: Still buggy... + // Need to fix the ray direction for ortho camera FIXME: Still buggy for off-center clicks raycaster.ray.direction.copy(scene.camera.getWorldDirection(new Vector3())); } //console.log('Ray', raycaster.ray); @@ -87,19 +94,36 @@ let selectionListener = (event: MouseEvent) => { // Find all hit objects and select the wanted one based on the filter const hits = raycaster.intersectObject(scene, true); - let hit = hits.find((hit: Intersection) => { - if (!hit.object) return false; - const kind = hit.object.type - let isFace = kind === 'Mesh' || kind === 'SkinnedMesh'; - let isEdge = kind === 'Line' || kind === 'LineSegments'; - let isVertex = kind === 'Points'; - const kindOk = (selectFilter.value === 'Any (S)') || - (isFace && selectFilter.value === '(F)aces') || - (isEdge && selectFilter.value === '(E)dges') || - (isVertex && selectFilter.value === '(V)ertices'); - return hit.object.visible && !hit.object.userData.noHit && kindOk; - }) as Intersection | undefined; - //console.log('Hit', hit) + let hit = hits + // Check feasibility + .filter((hit: Intersection) => { + if (!hit.object) return false; + const kind = hit.object.type + let isFace = kind === 'Mesh' || kind === 'SkinnedMesh'; + let isEdge = kind === 'Line' || kind === 'LineSegments'; + let isVertex = kind === 'Points'; + const kindOk = (selectFilter.value === 'Any (S)') || + (isFace && selectFilter.value === '(F)aces') || + (isEdge && selectFilter.value === '(E)dges') || + (isVertex && selectFilter.value === '(V)ertices'); + return (!isFace || hit.object.visible) && !hit.object.userData.noHit && kindOk; + }) + // Sort for highlighting partially hidden edges/vertices + .sort((a, b) => { + function lowerIsBetter(hit: Intersection) { + let score = hit.distance; + // Faces are easier to hit than 0-width edges/vertices, so we need to adjust scores + if (hit.object.type === 'Mesh' || hit.object.type === 'SkinnedMesh') score += paramScale; + // Edges are easier to hit than vertices, so we need to adjust scores + if (hit.object.type === 'Line' || hit.object.type === 'LineSegments') score += paramScale / 2; + return score; + } + + return lowerIsBetter(a) - lowerIsBetter(b); + }) + // Return the best hit + [0] as Intersection | undefined; + // console.log('Hit', hit) if (!highlightNextSelection.value[0]) { // If we are selecting, toggle the selection or deselect all if no hit @@ -126,7 +150,7 @@ let selectionListener = (event: MouseEvent) => { } function select(hit: Intersection) { - console.log('Selecting', hit.object.name) + // console.log('Selecting', hit.object.name) if (selected.value.find((m) => m.object.name === hit.object.name) === undefined) { selected.value.push(hit); } @@ -141,7 +165,7 @@ function select(hit: Intersection) { } function deselect(hit: Intersection, alsoRemove = true) { - console.log('Deselecting', hit.object.name) + // console.log('Deselecting', hit.object.name) if (alsoRemove) { // Remove the matching object from the selection let toRemove = selected.value.findIndex((m) => m.object.name === hit.object.name); @@ -293,6 +317,8 @@ function updateBoundingBox() { } let from = new Vector3(...corners[edge[0]]); let to = new Vector3(...corners[edge[1]]); + let length = to.clone().sub(from).length(); + if (length < 0.05) continue; // Skip very small edges (e.g. a single point) let color = [AxesColors.x, AxesColors.y, AxesColors.z][edgeI][1]; // Secondary colors let lineCacheKey = JSON.stringify([from, to]); let matchingLine = boundingBoxLines[lineCacheKey]; @@ -300,7 +326,7 @@ function updateBoundingBox() { boundingBoxLinesToRemove = boundingBoxLinesToRemove.filter((l) => l !== lineCacheKey); } else { let newLineId = props.viewer?.addLine3D(from, to, - to.clone().sub(from).length().toFixed(1) + "mm", { + length.toFixed(1) + "mm", { "stroke": "rgb(" + color.join(',') + ")", "stroke-width": "2" }); @@ -337,7 +363,7 @@ function updateDistances() { let distanceLinesToRemove = Object.keys(distanceLines); function ensureLine(from: Vector3, to: Vector3, text: string, color: string) { - console.log('ensureLine', from, to, text, color) + // console.log('ensureLine', from, to, text, color) let lineCacheKey = JSON.stringify([from, to]); let matchingLine = distanceLines[lineCacheKey]; if (matchingLine) { @@ -444,7 +470,7 @@ window.addEventListener('keydown', (event) => { .select-parent .v-btn { position: relative; - top: -42px; + top: -20px; } .select-only { diff --git a/frontend/tools/Tools.vue b/frontend/tools/Tools.vue index 3a15a4b..2fc8a95 100644 --- a/frontend/tools/Tools.vue +++ b/frontend/tools/Tools.vue @@ -81,7 +81,7 @@ function toggleProjection() { toggleProjectionText.value = wasPerspectiveCamera ? 'ORTHO' : 'PERSP'; // The camera change may take a few frames to take effect, dispatch the event after a delay requestIdleCallback(() => props.viewer?.elem?.dispatchEvent( - new CustomEvent('camera-change', {detail: {source: 'none'}}))) + new CustomEvent('camera-change', {detail: {source: 'none'}})), {timeout: 100}) } async function centerCamera() { diff --git a/frontend/viewer/ModelViewerWrapper.vue b/frontend/viewer/ModelViewerWrapper.vue index e59164b..fcfa65f 100644 --- a/frontend/viewer/ModelViewerWrapper.vue +++ b/frontend/viewer/ModelViewerWrapper.vue @@ -73,7 +73,7 @@ function addLine3D(p1: Vector3, p2: Vector3, centerText?: string, lineAttrs: { [ lineAttrs: lineAttrs }; scene.value.queueRender() // Needed to update the hotspots - requestIdleCallback(() => onCameraChangeLine(id)); + requestIdleCallback(() => onCameraChangeLine(id), {timeout: 100}); return id; } diff --git a/package.json b/package.json index f9e9b98..c3e3dd0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "yet-another-cad-viewer", - "version": "0.4.3", + "version": "0.5.0", "description": "", "license": "MIT", "author": "Yeicor <4929005+Yeicor@users.noreply.github.com>", diff --git a/poetry.lock b/poetry.lock index fa5d4eb..68fda51 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,182 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. - -[[package]] -name = "aiohttp" -version = "3.9.3" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:939677b61f9d72a4fa2a042a5eee2a99a24001a67c13da113b2e30396567db54"}, - {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f5cd333fcf7590a18334c90f8c9147c837a6ec8a178e88d90a9b96ea03194cc"}, - {file = "aiohttp-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82e6aa28dd46374f72093eda8bcd142f7771ee1eb9d1e223ff0fa7177a96b4a5"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f56455b0c2c7cc3b0c584815264461d07b177f903a04481dfc33e08a89f0c26b"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bca77a198bb6e69795ef2f09a5f4c12758487f83f33d63acde5f0d4919815768"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e083c285857b78ee21a96ba1eb1b5339733c3563f72980728ca2b08b53826ca5"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab40e6251c3873d86ea9b30a1ac6d7478c09277b32e14745d0d3c6e76e3c7e29"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df822ee7feaaeffb99c1a9e5e608800bd8eda6e5f18f5cfb0dc7eeb2eaa6bbec"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:acef0899fea7492145d2bbaaaec7b345c87753168589cc7faf0afec9afe9b747"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cd73265a9e5ea618014802ab01babf1940cecb90c9762d8b9e7d2cc1e1969ec6"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a78ed8a53a1221393d9637c01870248a6f4ea5b214a59a92a36f18151739452c"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6b0e029353361f1746bac2e4cc19b32f972ec03f0f943b390c4ab3371840aabf"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7cf5c9458e1e90e3c390c2639f1017a0379a99a94fdfad3a1fd966a2874bba52"}, - {file = "aiohttp-3.9.3-cp310-cp310-win32.whl", hash = "sha256:3e59c23c52765951b69ec45ddbbc9403a8761ee6f57253250c6e1536cacc758b"}, - {file = "aiohttp-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:055ce4f74b82551678291473f66dc9fb9048a50d8324278751926ff0ae7715e5"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6b88f9386ff1ad91ace19d2a1c0225896e28815ee09fc6a8932fded8cda97c3d"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c46956ed82961e31557b6857a5ca153c67e5476972e5f7190015018760938da2"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07b837ef0d2f252f96009e9b8435ec1fef68ef8b1461933253d318748ec1acdc"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad46e6f620574b3b4801c68255492e0159d1712271cc99d8bdf35f2043ec266"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ed3e046ea7b14938112ccd53d91c1539af3e6679b222f9469981e3dac7ba1ce"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:039df344b45ae0b34ac885ab5b53940b174530d4dd8a14ed8b0e2155b9dddccb"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7943c414d3a8d9235f5f15c22ace69787c140c80b718dcd57caaade95f7cd93b"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84871a243359bb42c12728f04d181a389718710129b36b6aad0fc4655a7647d4"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5eafe2c065df5401ba06821b9a054d9cb2848867f3c59801b5d07a0be3a380ae"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9d3c9b50f19704552f23b4eaea1fc082fdd82c63429a6506446cbd8737823da3"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:f033d80bc6283092613882dfe40419c6a6a1527e04fc69350e87a9df02bbc283"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2c895a656dd7e061b2fd6bb77d971cc38f2afc277229ce7dd3552de8313a483e"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f5a71d25cd8106eab05f8704cd9167b6e5187bcdf8f090a66c6d88b634802b4"}, - {file = "aiohttp-3.9.3-cp311-cp311-win32.whl", hash = "sha256:50fca156d718f8ced687a373f9e140c1bb765ca16e3d6f4fe116e3df7c05b2c5"}, - {file = "aiohttp-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:5fe9ce6c09668063b8447f85d43b8d1c4e5d3d7e92c63173e6180b2ac5d46dd8"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:38a19bc3b686ad55804ae931012f78f7a534cce165d089a2059f658f6c91fa60"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:770d015888c2a598b377bd2f663adfd947d78c0124cfe7b959e1ef39f5b13869"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee43080e75fc92bf36219926c8e6de497f9b247301bbf88c5c7593d931426679"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52df73f14ed99cee84865b95a3d9e044f226320a87af208f068ecc33e0c35b96"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc9b311743a78043b26ffaeeb9715dc360335e5517832f5a8e339f8a43581e4d"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b955ed993491f1a5da7f92e98d5dad3c1e14dc175f74517c4e610b1f2456fb11"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:504b6981675ace64c28bf4a05a508af5cde526e36492c98916127f5a02354d53"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6fe5571784af92b6bc2fda8d1925cccdf24642d49546d3144948a6a1ed58ca5"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ba39e9c8627edc56544c8628cc180d88605df3892beeb2b94c9bc857774848ca"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e5e46b578c0e9db71d04c4b506a2121c0cb371dd89af17a0586ff6769d4c58c1"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:938a9653e1e0c592053f815f7028e41a3062e902095e5a7dc84617c87267ebd5"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:c3452ea726c76e92f3b9fae4b34a151981a9ec0a4847a627c43d71a15ac32aa6"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ff30218887e62209942f91ac1be902cc80cddb86bf00fbc6783b7a43b2bea26f"}, - {file = "aiohttp-3.9.3-cp312-cp312-win32.whl", hash = "sha256:38f307b41e0bea3294a9a2a87833191e4bcf89bb0365e83a8be3a58b31fb7f38"}, - {file = "aiohttp-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:b791a3143681a520c0a17e26ae7465f1b6f99461a28019d1a2f425236e6eedb5"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0ed621426d961df79aa3b963ac7af0d40392956ffa9be022024cd16297b30c8c"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f46acd6a194287b7e41e87957bfe2ad1ad88318d447caf5b090012f2c5bb528"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feeb18a801aacb098220e2c3eea59a512362eb408d4afd0c242044c33ad6d542"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f734e38fd8666f53da904c52a23ce517f1b07722118d750405af7e4123933511"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b40670ec7e2156d8e57f70aec34a7216407848dfe6c693ef131ddf6e76feb672"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdd215b7b7fd4a53994f238d0f46b7ba4ac4c0adb12452beee724ddd0743ae5d"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:017a21b0df49039c8f46ca0971b3a7fdc1f56741ab1240cb90ca408049766168"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99abf0bba688259a496f966211c49a514e65afa9b3073a1fcee08856e04425b"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:648056db9a9fa565d3fa851880f99f45e3f9a771dd3ff3bb0c048ea83fb28194"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8aacb477dc26797ee089721536a292a664846489c49d3ef9725f992449eda5a8"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:522a11c934ea660ff8953eda090dcd2154d367dec1ae3c540aff9f8a5c109ab4"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5bce0dc147ca85caa5d33debc4f4d65e8e8b5c97c7f9f660f215fa74fc49a321"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b4af9f25b49a7be47c0972139e59ec0e8285c371049df1a63b6ca81fdd216a2"}, - {file = "aiohttp-3.9.3-cp38-cp38-win32.whl", hash = "sha256:298abd678033b8571995650ccee753d9458dfa0377be4dba91e4491da3f2be63"}, - {file = "aiohttp-3.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:69361bfdca5468c0488d7017b9b1e5ce769d40b46a9f4a2eed26b78619e9396c"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0fa43c32d1643f518491d9d3a730f85f5bbaedcbd7fbcae27435bb8b7a061b29"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:835a55b7ca49468aaaac0b217092dfdff370e6c215c9224c52f30daaa735c1c1"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06a9b2c8837d9a94fae16c6223acc14b4dfdff216ab9b7202e07a9a09541168f"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abf151955990d23f84205286938796c55ff11bbfb4ccfada8c9c83ae6b3c89a3"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59c26c95975f26e662ca78fdf543d4eeaef70e533a672b4113dd888bd2423caa"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f95511dd5d0e05fd9728bac4096319f80615aaef4acbecb35a990afebe953b0e"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:595f105710293e76b9dc09f52e0dd896bd064a79346234b521f6b968ffdd8e58"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7c8b816c2b5af5c8a436df44ca08258fc1a13b449393a91484225fcb7545533"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f1088fa100bf46e7b398ffd9904f4808a0612e1d966b4aa43baa535d1b6341eb"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f59dfe57bb1ec82ac0698ebfcdb7bcd0e99c255bd637ff613760d5f33e7c81b3"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:361a1026c9dd4aba0109e4040e2aecf9884f5cfe1b1b1bd3d09419c205e2e53d"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:363afe77cfcbe3a36353d8ea133e904b108feea505aa4792dad6585a8192c55a"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e2c45c208c62e955e8256949eb225bd8b66a4c9b6865729a786f2aa79b72e9d"}, - {file = "aiohttp-3.9.3-cp39-cp39-win32.whl", hash = "sha256:f7217af2e14da0856e082e96ff637f14ae45c10a5714b63c77f26d8884cf1051"}, - {file = "aiohttp-3.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:27468897f628c627230dba07ec65dc8d0db566923c48f29e084ce382119802bc"}, - {file = "aiohttp-3.9.3.tar.gz", hash = "sha256:90842933e5d1ff760fae6caca4b2b3edba53ba8f4b71e95dacf2818a2aca06f7"}, -] - -[package.dependencies] -aiosignal = ">=1.1.2" -async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} -attrs = ">=17.3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] - -[[package]] -name = "aiohttp-cors" -version = "0.7.0" -description = "CORS support for aiohttp" -optional = false -python-versions = "*" -files = [ - {file = "aiohttp-cors-0.7.0.tar.gz", hash = "sha256:4d39c6d7100fd9764ed1caf8cebf0eb01bf5e3f24e2e073fda6234bc48b19f5d"}, - {file = "aiohttp_cors-0.7.0-py3-none-any.whl", hash = "sha256:0451ba59fdf6909d0e2cd21e4c0a43752bc0703d33fc78ae94d9d9321710193e"}, -] - -[package.dependencies] -aiohttp = ">=1.1" - -[[package]] -name = "aiohttp-devtools" -version = "1.1.2" -description = "Dev tools for aiohttp" -optional = false -python-versions = ">=3.8" -files = [ - {file = "aiohttp-devtools-1.1.2.tar.gz", hash = "sha256:aae66fc9dd36b6c13e1ca381004dfaa4db6ba0dd50764c8ae3a49c1ed43f9587"}, - {file = "aiohttp_devtools-1.1.2-py38.py39.py310.py311-none-any.whl", hash = "sha256:d8545e217146df97459b3765fd786c98d0851c79d56162ad8d4145f719ab0391"}, -] - -[package.dependencies] -aiohttp = ">=3.9" -click = ">=6.6" -devtools = ">=0.6" -Pygments = ">=2.2.0" -watchfiles = ">=0.10" - -[[package]] -name = "aiohttp-sse" -version = "2.2.0" -description = "Server-sent events support for aiohttp." -optional = false -python-versions = ">=3.8" -files = [ - {file = "aiohttp-sse-2.2.0.tar.gz", hash = "sha256:a48dd5774031d3f41a29e159ebdbb93e89c8f37c1e9e83e196296be51885a5c2"}, - {file = "aiohttp_sse-2.2.0-py3-none-any.whl", hash = "sha256:339f9803bcf4682a2060e75548760d86abe4424a0d92ba66ff4985de3bd743dc"}, -] - -[package.dependencies] -aiohttp = ">=3.0" - -[[package]] -name = "aiosignal" -version = "1.3.1" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" - -[[package]] -name = "anyio" -version = "4.3.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.8" -files = [ - {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, - {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, -] - -[package.dependencies] -exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} - -[package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "anytree" @@ -210,36 +32,6 @@ six = ">=1.12.0" astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, -] - -[[package]] -name = "attrs" -version = "23.2.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] - [[package]] name = "build123d" version = "0.4.0" @@ -263,17 +55,6 @@ svgpathtools = ">=1.5.1,<2" trianglesolver = "*" typing-extensions = ">=4.6.0,<5" -[[package]] -name = "cachetools" -version = "5.2.1" -description = "Extensible memoizing collections and decorators" -optional = false -python-versions = "~=3.7" -files = [ - {file = "cachetools-5.2.1-py3-none-any.whl", hash = "sha256:8462eebf3a6c15d25430a8c27c56ac61340b2ecf60c9ce57afc2b97e450e47da"}, - {file = "cachetools-5.2.1.tar.gz", hash = "sha256:5991bc0e08a1319bb618d3195ca5b6bc76646a49c21d55962977197b301cc1fe"}, -] - [[package]] name = "cadquery-ocp" version = "7.7.2" @@ -298,20 +79,6 @@ files = [ {file = "cadquery_ocp-7.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:feea223eaa2dfa33684f568b5ba2b02c35e96b5d894014f98927b5c08041a6be"}, ] -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - [[package]] name = "colorama" version = "0.4.6" @@ -366,22 +133,6 @@ wrapt = ">=1.10,<2" [package.extras] dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] -[[package]] -name = "devtools" -version = "0.12.2" -description = "Python's missing debug print command, and more." -optional = false -python-versions = ">=3.7" -files = [ - {file = "devtools-0.12.2-py3-none-any.whl", hash = "sha256:c366e3de1df4cdd635f1ad8cbcd3af01a384d7abda71900e68d43b04eb6aaca7"}, - {file = "devtools-0.12.2.tar.gz", hash = "sha256:efceab184cb35e3a11fa8e602cc4fadacaa2e859e920fc6f87bf130b69885507"}, -] - -[package.dependencies] -asttokens = ">=2.0.0,<3.0.0" -executing = ">=1.1.1" -pygments = ">=2.15.0" - [[package]] name = "exceptiongroup" version = "1.2.0" @@ -530,103 +281,6 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] -[[package]] -name = "frozenlist" -version = "1.4.1" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.8" -files = [ - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, - {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, - {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, - {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, - {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, - {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, - {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, - {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, - {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, - {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, - {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, - {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, - {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, -] - -[[package]] -name = "idna" -version = "3.6" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, -] - [[package]] name = "ipython" version = "8.18.1" @@ -664,6 +318,17 @@ qtconsole = ["qtconsole"] test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] +[[package]] +name = "iterators" +version = "0.2.0" +description = "Iterator utility classes and functions" +optional = false +python-versions = ">=3.6" +files = [ + {file = "iterators-0.2.0-py3-none-any.whl", hash = "sha256:1d7ff03f576c9de0e01bac66209556c066d6b1fc45583a99cfc9f4645be7900e"}, + {file = "iterators-0.2.0.tar.gz", hash = "sha256:e9927a1ea1ef081830fd1512f3916857c36bd4b37272819a6cd29d0f44431b97"}, +] + [[package]] name = "jedi" version = "0.19.1" @@ -716,105 +381,6 @@ files = [ [package.dependencies] traitlets = "*" -[[package]] -name = "multidict" -version = "6.0.5" -description = "multidict implementation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, - {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, - {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, - {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, - {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, - {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, - {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, - {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, - {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, - {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, - {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, - {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, - {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, - {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, - {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, - {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, -] - [[package]] name = "mypy-extensions" version = "1.0.0" @@ -871,73 +437,6 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] -[[package]] -name = "numpy-quaternion" -version = "2023.0.2" -description = "Add a quaternion dtype to NumPy" -optional = false -python-versions = "*" -files = [ - {file = "numpy-quaternion-2023.0.2.tar.gz", hash = "sha256:37f73d7f84c645bd9be95cb4862bd900b7f99bd2f801232006dde00641bf2fd7"}, - {file = "numpy_quaternion-2023.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cf487d6b56883895ddf22307a0cf8e9949604465154d0cd9b78250d800d07a0d"}, - {file = "numpy_quaternion-2023.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac5e37ed57c0e2ff938c88d4462a126b16c98581dde0c003eba05741188b7f38"}, - {file = "numpy_quaternion-2023.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b144be3dca3330f8ad5866c561cebbfe3273a5b228ece058c014cdbf8916630d"}, - {file = "numpy_quaternion-2023.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48bb1fc03b580a9bb89da9d4f8916f87101bc75682611c423bafa031b6d96176"}, - {file = "numpy_quaternion-2023.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:713e4357868ebd8e4f3500435fcb49a997a8a9a5f8514e3a79d51f46abcdf2ae"}, - {file = "numpy_quaternion-2023.0.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c829f58ebc908f07487d3351a13ba99c3e39eb5e04aea389ca5175642cfdab15"}, - {file = "numpy_quaternion-2023.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5dd15141aecbf32cdb6bf96bdc13df7dd2f31833011a7f0ef51ecc86872cf8f0"}, - {file = "numpy_quaternion-2023.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0560b12235aaab7aee56e94c2df2f7879e0c965b8aea3c6bccaad7f2b4fb031a"}, - {file = "numpy_quaternion-2023.0.2-cp310-cp310-win32.whl", hash = "sha256:e033eef943a904b9c34c1d9e66570a07fa2c3d4a311a357d1aeb305493092c08"}, - {file = "numpy_quaternion-2023.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6c7e82014a51c93fe76322654d9c59f03b2e5cd19d0d6535d606bf7a119d4394"}, - {file = "numpy_quaternion-2023.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:86d46c5f220ed2289d7d53c918b0e2432d6ddeae20c5ca232f3dab6fafe6c340"}, - {file = "numpy_quaternion-2023.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c2ddf7e16a611f1c07a170d9464d69291eeb734ade2ce50b7f4eb38d9620f007"}, - {file = "numpy_quaternion-2023.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:57d99cee91c7356c62d70817d32432db3da58f4d5f3bd29757c5696f56fa2e86"}, - {file = "numpy_quaternion-2023.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04c4536fdb7f22733631b7953e2db82b27964d96f97423901e749c971cb7f6f2"}, - {file = "numpy_quaternion-2023.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fdbc31fdac812ed2ff0287a2d51e1b87d5ec6d2aeea4a667adb14f4b6198bc5"}, - {file = "numpy_quaternion-2023.0.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f994628b10bf29461fb50cf3ce022d0a610e173068414942a9efd746b35b38b"}, - {file = "numpy_quaternion-2023.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:32e34d2ebeeed25b238df22eba0030ba8db4a4e82a7eb6f5e32fda45768990ee"}, - {file = "numpy_quaternion-2023.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:98bfb77597ea56462be3f94e002640ebc6ecf9d2eeea140f5d1c13145af56a31"}, - {file = "numpy_quaternion-2023.0.2-cp311-cp311-win32.whl", hash = "sha256:e6dcfec4c7f615e6c46411c2034631e0a1934ffc3509e7bd61c3aacce4ecb181"}, - {file = "numpy_quaternion-2023.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:86f931da5893db57c4da4142045b605cc99d469fb3e6238ae487e080dcd7227e"}, - {file = "numpy_quaternion-2023.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:bca80ceef24364eb4dc07026e3d5c7cc9932b844888a3a15f27941f0ee6ba5c3"}, - {file = "numpy_quaternion-2023.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bf6a99191d1d0b3289eb256c1eaf7e290d80d4a306bb31d04121bf9a7eb88701"}, - {file = "numpy_quaternion-2023.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9b26f4961fef053d552f5dcea0957b1eb34c99fea92efe1544044013d04e1407"}, - {file = "numpy_quaternion-2023.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c5b7dfb7412b582101ae4e576f15bc6af904f66b24b832aa1fafa3a846c71da"}, - {file = "numpy_quaternion-2023.0.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c058ee103024dc15b3232e57204934a53be080d5c75246cdec9eb92e9f56c5f"}, - {file = "numpy_quaternion-2023.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:02b93874723c38ad1e684d0862899d9266bf9855fd5a5bdcba8793169e672c31"}, - {file = "numpy_quaternion-2023.0.2-cp312-cp312-win32.whl", hash = "sha256:449ba07ec505dd757aa4ba6df8ef086bdd06c85f4681529ddaecd4ce7d62e792"}, - {file = "numpy_quaternion-2023.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e218a5207be1a983d3fd54d710067a6638d324015ba695c0509082a29086284"}, - {file = "numpy_quaternion-2023.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:333dea61c9628707223dc062e4a6e0a72bbb4fffd58a84231ea24b959e694bde"}, - {file = "numpy_quaternion-2023.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b343649600eb9f30275380b47ee4430f4393ed3370e5fa3fbb1db0ebbd908228"}, - {file = "numpy_quaternion-2023.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b4df8ffdcab6f773eec518ed09abb81e233afd9a38534e3a1db0cb0bfc54b370"}, - {file = "numpy_quaternion-2023.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04671ea098c0fe879eb07a24ec80dc09efc674e178f9b58a427f9d2368b2c009"}, - {file = "numpy_quaternion-2023.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d11f6f030d1cc7b58afe83fa849422a1c8c3a742b7af30232b98acbe32cd2be6"}, - {file = "numpy_quaternion-2023.0.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60c1e9f9997205949c770702307451eeffd96f3a2824f4dc49ed42336bd698e2"}, - {file = "numpy_quaternion-2023.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6dd56641fddad6c35d86a6d9f3cee4a786d0a4c6b41ed74d60dad97741835280"}, - {file = "numpy_quaternion-2023.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:681aaa2cf4d59fc412ee00188dcdc551c8ff91ea63d54d06f37ec66dd383633d"}, - {file = "numpy_quaternion-2023.0.2-cp38-cp38-win32.whl", hash = "sha256:e6b4dd4797e6e77fcdd8b3487893f8af3fe934f1f26839d1605f771f700dded6"}, - {file = "numpy_quaternion-2023.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4b9421d46d56fbec0dd625c9909550c66bb81265a76efaecc5621166f18069bf"}, - {file = "numpy_quaternion-2023.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:41968027811fa81157c9bc9f2bf00cc22dc8865d7fb5834f9f83bafc5995b6ec"}, - {file = "numpy_quaternion-2023.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eeffe622c5cec8396e61c266f65c75ec54fa4c21688a9633e8737276dc7fcc4b"}, - {file = "numpy_quaternion-2023.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b0f8517c268d748cbfe686214bd53ac7064e85106c90e22bd7cf04940a17323e"}, - {file = "numpy_quaternion-2023.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec65adaac6bf15f31951e25bf5fe908135db6e223cf2df0112c93afe432d5de"}, - {file = "numpy_quaternion-2023.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb3ab05505ccb5c835a6f0401811d64f23c843e622751956ba77734f7dc20493"}, - {file = "numpy_quaternion-2023.0.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13958c8628b17f9bc725bb54e910c384e211e54b057cbe069f1615aebae8735d"}, - {file = "numpy_quaternion-2023.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eeeb8a6004a649b4a411fb25fb94a6da8e937de25b7c409c62528c937d1bb47d"}, - {file = "numpy_quaternion-2023.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d725796e9f21eb703ae19448ceea0ab34e850c903ab01fef3de06f7217ae17f5"}, - {file = "numpy_quaternion-2023.0.2-cp39-cp39-win32.whl", hash = "sha256:3f89e11f89ded410fb34e6f997d4c7f4cf7c31c3eb9537c035756a5d2a6cc4e3"}, - {file = "numpy_quaternion-2023.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:cab8b1626c6d719639360a6af920c25df3f0248ab04635b72919aa1a05cb575f"}, -] - -[package.dependencies] -numpy = ">=1.13" - -[package.extras] -docs = ["mkdocs", "mktheapidocs[plugin]", "pymdown-extensions"] -numba = ["llvmlite (<0.32.0)", "numba", "numba (<0.49.0)"] -scipy = ["scipy"] -testing = ["pytest", "pytest-cov"] - [[package]] name = "numpy-stl" version = "3.1.1" @@ -953,26 +452,6 @@ files = [ numpy = "*" python-utils = ">=3.4.5" -[[package]] -name = "ocp-tessellate" -version = "2.0.6" -description = "Tessellate OCP objects" -optional = false -python-versions = ">=3.9" -files = [ - {file = "ocp_tessellate-2.0.6-py3-none-any.whl", hash = "sha256:a3c50c9f83b47565a5fca2c63448fe7ab9cf2a06af803eb695d165b6d960d2b3"}, - {file = "ocp_tessellate-2.0.6.tar.gz", hash = "sha256:7c3e0f09f684085e50c4af7a1f8ffd839d6821ae11aa0e693b2bad5cabe5270c"}, -] - -[package.dependencies] -cachetools = ">=5.2.0,<5.3.0" -numpy = "*" -numpy-quaternion = "*" -webcolors = ">=1.12,<2.0" - -[package.extras] -dev = ["black", "bumpversion", "pyYaml", "pylint", "twine"] - [[package]] name = "ocpsvg" version = "0.2.0" @@ -1281,17 +760,6 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - [[package]] name = "stack-data" version = "0.6.3" @@ -1401,93 +869,6 @@ files = [ mypy-extensions = ">=0.3.0" typing-extensions = ">=3.7.4" -[[package]] -name = "watchfiles" -version = "0.21.0" -description = "Simple, modern and high performance file watching and code reload in python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, - {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, - {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, - {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, - {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, - {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, - {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, - {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, - {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, - {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, - {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, - {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, - {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, - {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, - {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, - {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, - {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, - {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, - {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, - {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, - {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, - {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, - {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, - {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, - {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, - {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, - {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, - {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, - {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, - {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, - {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, - {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, - {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, -] - -[package.dependencies] -anyio = ">=3.0.0" - [[package]] name = "wcwidth" version = "0.2.13" @@ -1499,21 +880,6 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] -[[package]] -name = "webcolors" -version = "1.13" -description = "A library for working with the color formats defined by HTML and CSS." -optional = false -python-versions = ">=3.7" -files = [ - {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, - {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, -] - -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["pytest", "pytest-cov"] - [[package]] name = "wrapt" version = "1.16.0" @@ -1593,110 +959,7 @@ files = [ {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] -[[package]] -name = "yarl" -version = "1.9.4" -description = "Yet another URL library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" - [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "734e26c5b174a1b5d0942e9b67d6fff679e1e7e06c5f2fd9978911befc9aec3c" +content-hash = "d9746e99dd8861758730e68d12dc72d9ec5fb0101b3c070a7d7a373439c658a0" diff --git a/pyproject.toml b/pyproject.toml index eabdc9a..94c1233 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "yacv-server" -version = "0.4.4" # TODO: Update automatically by CI on release (also for package.json!) +version = "0.5.0" # TODO: Update automatically by CI on release (also for package.json!) description = "Yet Another CAD Viewer (server)" authors = ["Yeicor <4929005+Yeicor@users.noreply.github.com>"] license = "MIT" @@ -15,17 +15,11 @@ python = "^3.9" # CAD build123d = "^0.4.0" -ocp-tessellate = "^2.0.6" - -# Web -aiohttp = "^3.9.3" -aiohttp-sse = "^2.2.0" -aiohttp-cors = "^0.7.0" -aiohttp-devtools = "^1.1.2" # Misc pygltflib = "^1.16.2" pillow = "^10.2.0" +iterators = "^0.2.0" [tool.poetry.build] generate-setup-file = false diff --git a/yacv_server/__init__.py b/yacv_server/__init__.py index 9e58af8..4e3b64b 100644 --- a/yacv_server/__init__.py +++ b/yacv_server/__init__.py @@ -1,42 +1,21 @@ -import logging import os -import time -from aiohttp import web +from yacv_server.yacv import YACV -from yacv_server.server import Server - -server = Server() +yacv = YACV() """The server instance. This is the main entry point to serve CAD objects and other data to the frontend.""" if 'YACV_DISABLE_SERVER' not in os.environ: # Start a new server ASAP to let the polling client connect while still building CAD objects # This is a bit of a hack, but it is seamless to the user. This behavior can be disabled by setting # the environment variable YACV_DISABLE_SERVER to a non-empty value - server.start() + yacv.start() # Expose some nice aliases using the default server instance -show = server.show +show = yacv.show show_object = show -show_image = server.show_image -show_all = server.show_cad_all -export_all = server.export_all - - -def _get_app() -> web.Application: - """Required by aiohttp-devtools""" - logging.basicConfig(level=logging.DEBUG) - from logo import build_logo, ASSETS_DIR - logo, img_location, img_path = build_logo() - server.show_cad(logo, 'logo') - server.show_cad(img_location, 'location') - server.show_image(img_path, img_location, 20) - server.show_gltf(open(os.path.join(ASSETS_DIR, 'fox.glb'), 'rb').read(), 'fox') - return server.app - - -if __name__ == '__main__': - # Publish the logo to the server (reusing code from the aiohttp-devtools) - _get_app() - # Keep the server running for testing - time.sleep(60) +show_image = yacv.show_image +show_all = yacv.show_cad_all +export_all = yacv.export_all +remove = yacv.remove +clear = yacv.clear diff --git a/yacv_server/cad.py b/yacv_server/cad.py index b3003d8..e590659 100644 --- a/yacv_server/cad.py +++ b/yacv_server/cad.py @@ -58,8 +58,8 @@ def grab_all_cad() -> List[Tuple[str, CADLike]]: return shapes -def image_to_gltf(source: str | bytes, center: any, ppmm: int, name: Optional[str] = None, - save_mime: str = 'image/jpeg') -> Tuple[bytes, str]: +def image_to_gltf(source: str | bytes, center: any, width: Optional[float] = None, height: Optional[float] = None, + name: Optional[str] = None, save_mime: str = 'image/jpeg') -> Tuple[bytes, str]: """Convert an image to a GLTF CAD object, indicating the center location and pixels per millimeter.""" from PIL import Image import io @@ -105,11 +105,17 @@ def image_to_gltf(source: str | bytes, center: any, ppmm: int, name: Optional[st # Build the gltf mgr = GLTFMgr(image=(img_buf, save_mime)) + if width is None and height is None: + raise ValueError('At least one of width or height must be specified') # Fallback to pixels == mm? + elif width is None: + width = img.width / img.height * height + elif height is None: + height = height or img.height / img.width * width # Apply default aspect ratio if unspecified mgr.add_face([ - vert(plane.origin - plane.x_dir * img.width / (2 * ppmm) - plane.y_dir * img.height / (2 * ppmm)), - vert(plane.origin + plane.x_dir * img.width / (2 * ppmm) - plane.y_dir * img.height / (2 * ppmm)), - vert(plane.origin + plane.x_dir * img.width / (2 * ppmm) + plane.y_dir * img.height / (2 * ppmm)), - vert(plane.origin - plane.x_dir * img.width / (2 * ppmm) + plane.y_dir * img.height / (2 * ppmm)), + vert(plane.origin - plane.x_dir * width / 2 - plane.y_dir * height / 2), + vert(plane.origin + plane.x_dir * width / 2 - plane.y_dir * height / 2), + vert(plane.origin + plane.x_dir * width / 2 + plane.y_dir * height / 2), + vert(plane.origin - plane.x_dir * width / 2 + plane.y_dir * height / 2), ], [ (0, 2, 1), (0, 3, 2), diff --git a/yacv_server/logo.py b/yacv_server/logo.py index 5e9870e..70ee228 100644 --- a/yacv_server/logo.py +++ b/yacv_server/logo.py @@ -1,14 +1,12 @@ -import asyncio -import logging import os -from typing import Tuple +from typing import Union, Dict from build123d import * ASSETS_DIR = os.getenv('ASSETS_DIR', os.path.join(os.path.dirname(__file__), '..', 'assets')) -def build_logo(text: bool = True) -> Tuple[Part, Location, str]: +def build_logo(text: bool = True) -> Dict[str, Union[Part, Location, str]]: """Builds the CAD part of the logo""" with BuildPart(Plane.XY.offset(50)) as logo_obj: Box(22, 40, 30) @@ -25,34 +23,44 @@ def build_logo(text: bool = True) -> Tuple[Part, Location, str]: logo_img_location.position = Vector(logo_img_location.position.X - 4e-2, logo_img_location.position.Y, logo_img_location.position.Z) logo_img_path = os.path.join(ASSETS_DIR, 'img.jpg') - return logo_obj.part, logo_img_location, logo_img_path + + fox_glb_bytes = open(os.path.join(ASSETS_DIR, 'fox.glb'), 'rb').read() + + return {'fox': fox_glb_bytes, 'logo': logo_obj, 'location': logo_img_location, 'img_path': logo_img_path} + + +def show_logo(parts: Dict[str, Union[Part, Location, str]]) -> None: + """Shows the prebuilt logo parts""" + from yacv_server import show_image, show_object + for name, part in parts.items(): + if isinstance(part, str): + show_image(source=part, center=parts['location'], height=18, auto_clear=False) + else: + show_object(part, name, auto_clear=False) if __name__ == "__main__": + from yacv_server import export_all, remove + import logging + logging.basicConfig(level=logging.DEBUG) - # Start an offline server to export the CAD part of the logo in a way compatible with the frontend - # If this is not set, the server will auto-start on import and show_* calls will provide live updates - os.environ['YACV_DISABLE_SERVER'] = '1' - from yacv_server import show, show_image + testing_server = bool(os.getenv('TESTING_SERVER', 'False')) + + if not testing_server: + # Start an offline server to export the CAD part of the logo in a way compatible with the frontend + # If this is not set, the server will auto-start on import and show_* calls will provide live updates + os.environ['YACV_DISABLE_SERVER'] = 'True' + + # Build the CAD part of the logo + logo = build_logo() # Add the CAD part of the logo to the server - logo, img_location, img_path = build_logo() - show(logo, 'base') - show(img_location, 'location') - show_image(img_path, img_location, 20) + show_logo(logo) - - async def exporter(): - # We need access to the actual server object for advanced features like exporting to file - from yacv_server import server - for name in server.shown_object_names(): - print(f'Exporting {name} to GLB...') - with open(os.path.join(ASSETS_DIR, 'logo_build', f'{name}.glb'), 'wb') as f: - f.write(await server.export(name)) - - - # Save the complete logo to multiple GLB files (async required) - asyncio.run(exporter()) - - print('Logo saved!') + if testing_server: + remove('location') # Test removing a part + else: + # Save the complete logo to multiple GLB files + export_all(os.path.join(ASSETS_DIR, 'logo_build')) + print('Logo saved!') diff --git a/yacv_server/myhttp.py b/yacv_server/myhttp.py new file mode 100644 index 0000000..b887d88 --- /dev/null +++ b/yacv_server/myhttp.py @@ -0,0 +1,143 @@ +import io +import os +import threading +import urllib.parse +from http import HTTPStatus +from http.server import SimpleHTTPRequestHandler + +from iterators import TimeoutIterator + +from mylogger import logger + +# Find the frontend folder (optional, but recommended) +FILE_DIR = os.path.dirname(__file__) +FRONTEND_BASE_PATH = os.getenv('FRONTEND_BASE_PATH', os.path.join(FILE_DIR, 'frontend')) +if not os.path.exists(FRONTEND_BASE_PATH): + if os.path.exists(os.path.join(FILE_DIR, '..', 'dist')): # Fallback to dev build + FRONTEND_BASE_PATH = os.path.join(FILE_DIR, '..', 'dist') + else: + logger.warning('Frontend not found at %s', FRONTEND_BASE_PATH) + FRONTEND_BASE_PATH = None + +# Define the API paths (also available at the root path for simplicity) +UPDATES_API_PATH = '/api/updates' +OBJECTS_API_PATH = '/api/object' # /{name} + + +class HTTPHandler(SimpleHTTPRequestHandler): + yacv: 'yacv.YACV' + frontend_lock: threading.Lock # To avoid exiting too early while frontend makes requests + at_least_one_client: threading.Event + + def __init__(self, *args, yacv: 'yacv.YACV', **kwargs): + self.yacv = yacv + self.frontend_lock = threading.Lock() + self.at_least_one_client = threading.Event() + super().__init__(*args, **kwargs, directory=FRONTEND_BASE_PATH) + + def log_message(self, fmt, *args): + logger.debug(fmt, *args) + + def end_headers(self): + # Add CORS headers to the response + self.send_header('Access-Control-Allow-Origin', '*') + self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS') + super().end_headers() + + def translate_path(self, path: str) -> str: + """Translate a path to the local filesystem, adds some basic security checks""" + path = super().translate_path(path) + path = os.path.realpath(path) # Avoid symlink hacks + if self.directory: # Ensure proper subdirectory + base = os.path.abspath(self.directory) + if not os.path.abspath(path).startswith(base): + self.send_error(HTTPStatus.FORBIDDEN, "Path is not in the frontend directory") + return '' + return path + + def send_head(self): + path_parts = self.path.split('?', 1) + if len(path_parts) == 1: + path_parts.append('') + [path, query_str] = path_parts + query = urllib.parse.parse_qs(query_str) + if path == UPDATES_API_PATH or path == '/' and query.get('api_updates') is not None: + return self._api_updates() + elif path.startswith(OBJECTS_API_PATH) or path == '/' and query.get('api_object') is not None: + if path.startswith(OBJECTS_API_PATH): + obj_name = self.path[len(OBJECTS_API_PATH) + 1:] + else: + obj_name = query.get('api_object').pop() + return self._api_object(obj_name) + elif path.endswith('/'): # Frontend index.html + self.path += 'index.html' + return super().send_head() + else: # Normal frontend file + return super().send_head() + + def _api_updates(self): + """Handles a publish-only websocket connection that send show_object events along with their hashes and URLs""" + self.send_response(HTTPStatus.OK) + self.send_header("Content-Type", "text/event-stream") + self.send_header("Cache-Control", "no-cache") + # Chunked transfer encoding! + self.send_header("Transfer-Encoding", "chunked") + self.end_headers() + self.at_least_one_client.set() + logger.debug('Updates client connected') + + def write_chunk(_chunk_data: str): + self.wfile.write(hex(len(_chunk_data))[2:].encode('utf-8')) + self.wfile.write(b'\r\n') + self.wfile.write(_chunk_data.encode('utf-8')) + self.wfile.write(b'\r\n') + self.wfile.flush() + + write_chunk('retry: 100\n\n') + + # Send buffered events first, while keeping a lock + with self.frontend_lock: + for data in self.yacv.show_events.buffer(): + logger.debug('Sending info about %s: %s', data.name, data) + # noinspection PyUnresolvedReferences + to_send = data.to_json() + write_chunk(f'data: {to_send}\n\n') + + # Send future events over the same connection + # Also send keep-alive to know if the client is still connected + subscription = self.yacv.show_events.subscribe(include_buffered=False) + it = TimeoutIterator(subscription, sentinel=None, reset_on_next=True, timeout=5.0) # Keep-alive interval + try: + for data in it: + if data is None: + write_chunk(':keep-alive\n\n') + else: + logger.debug('Sending info about %s: %s', data.name, data) + # noinspection PyUnresolvedReferences + to_send = data.to_json() + write_chunk(f'data: {to_send}\n\n') + for i in range(200): # Need to fill browser buffers for instant updates! + write_chunk(':flush\n\n') + except BrokenPipeError: # Client disconnected normally + pass + finally: + it.interrupt() + subscription.close() + logger.debug('Updates client disconnected') + + def _api_object(self, obj_name: str): + """Returns the object file with the matching name, building it if necessary.""" + with self.frontend_lock: + # Export the object (or fail if not found) + exported_glb = self.yacv.export(obj_name) + if exported_glb is None: + self.send_error(HTTPStatus.NOT_FOUND, f'Object {obj_name} not found') + return io.BytesIO() + + # Wrap the GLB in a response and return it + self.send_response(HTTPStatus.OK) + self.send_header('Content-Type', 'model/gltf-binary') + self.send_header('Content-Length', str(len(exported_glb))) + self.send_header('Content-Disposition', f'attachment; filename="{obj_name}.glb"') + self.end_headers() + self.wfile.write(exported_glb) diff --git a/yacv_server/plugin.py b/yacv_server/plugin.py index 8e03648..2581f8e 100644 --- a/yacv_server/plugin.py +++ b/yacv_server/plugin.py @@ -1 +1 @@ -# TODO: Plugins that can freely modify the GLTF file as it is being built +# TODO(if there is interest): Plugins that can freely modify the GLTF file as it is being built diff --git a/yacv_server/pubsub.py b/yacv_server/pubsub.py index 60e6a60..42b1891 100644 --- a/yacv_server/pubsub.py +++ b/yacv_server/pubsub.py @@ -1,6 +1,8 @@ -import asyncio +import threading +import queue +import threading from typing import List, TypeVar, \ - Generic, AsyncGenerator + Generic, Generator from yacv_server.mylogger import logger @@ -8,61 +10,74 @@ T = TypeVar('T') class BufferedPubSub(Generic[T]): - """A simple implementation of publish-subscribe pattern using asyncio and buffering all previous events""" + """A simple implementation of publish-subscribe pattern using threading and buffering all previous events""" _buffer: List[T] - _subscribers: List[asyncio.Queue[T]] - _lock = asyncio.Lock() - max_buffer_size = 1000 + _buffer_lock: threading.Lock + _subscribers: List[queue.Queue[T]] + _subscribers_lock: threading.Lock + max_buffer_size: int - def __init__(self): + def __init__(self, max_buffer_size: int = 100): self._buffer = [] + self._buffer_lock = threading.Lock() self._subscribers = [] + self._subscribers_lock = threading.Lock() + self.max_buffer_size = max_buffer_size - def publish_nowait(self, event: T): + def publish(self, event: T): """Publishes an event without blocking (synchronous API does not require locking)""" - self._buffer.append(event) - if len(self._buffer) > self.max_buffer_size: - self._buffer.pop(0) - for q in self._subscribers: - q.put_nowait(event) + with self._buffer_lock: + self._buffer.append(event) + if len(self._buffer) > self.max_buffer_size: + self._buffer.pop(0) + for q in self._subscribers: + q.put(event) - async def _subscribe(self, include_buffered: bool = True, include_future: bool = True) -> asyncio.Queue[T]: + def _subscribe(self, include_buffered: bool = True, include_future: bool = True) -> queue.Queue[T]: """Subscribes to events""" - q = asyncio.Queue() - async with self._lock: + q = queue.Queue() + with self._subscribers_lock: self._subscribers.append(q) logger.debug(f"Subscribed to %s (%d subscribers)", self, len(self._subscribers)) if include_buffered: - for event in self._buffer: - await q.put(event) + with self._buffer_lock: + for event in self._buffer: + q.put(event) if not include_future: - await q.put(None) + q.put(None) return q - async def _unsubscribe(self, q: asyncio.Queue[T]): + def _unsubscribe(self, q: queue.Queue[T]): """Unsubscribes from events""" - async with self._lock: + with self._subscribers_lock: self._subscribers.remove(q) logger.debug(f"Unsubscribed from %s (%d subscribers)", self, len(self._subscribers)) - async def subscribe(self, include_buffered: bool = True, include_future: bool = True) -> AsyncGenerator[T, None]: - """Subscribes to events as an async generator that yields events and automatically unsubscribes""" - q = await self._subscribe(include_buffered, include_future) + def subscribe(self, include_buffered: bool = True, include_future: bool = True) -> Generator[T, None, None]: + """Subscribes to events as an generator that yields events and automatically unsubscribes""" + q = self._subscribe(include_buffered, include_future) try: while True: - v = await q.get() + v = q.get() # include_future is incompatible with None values as they are used to signal the end of the stream if v is None and not include_future: break yield v finally: # When aclose() is called - await self._unsubscribe(q) + self._unsubscribe(q) def buffer(self) -> List[T]: """Returns a shallow copy of the list of buffered events""" - return self._buffer[:] + with self._buffer_lock: + return self._buffer[:] def delete(self, event: T): """Deletes an event from the buffer""" - self._buffer.remove(event) \ No newline at end of file + with self._buffer_lock: + self._buffer.remove(event) + + def clear(self): + """Clears the buffer""" + with self._buffer_lock: + self._buffer.clear() \ No newline at end of file diff --git a/yacv_server/server.py b/yacv_server/server.py deleted file mode 100644 index 280a0b5..0000000 --- a/yacv_server/server.py +++ /dev/null @@ -1,361 +0,0 @@ -import asyncio -import atexit -import os -import signal -import sys -import time -from dataclasses import dataclass -from threading import Thread -from typing import Optional, Dict, Union, Callable - -import aiohttp_cors -from OCP.TopLoc import TopLoc_Location -from OCP.TopoDS import TopoDS_Shape -from aiohttp import web -from aiohttp_sse import sse_response -from build123d import Shape, Axis, Location, Vector -from dataclasses_json import dataclass_json - -from yacv_server.cad import get_shape, grab_all_cad, image_to_gltf, CADLike -from yacv_server.mylogger import logger -from yacv_server.pubsub import BufferedPubSub -from yacv_server.tessellate import _hashcode, tessellate - -# Find the frontend folder (optional, but recommended) -FILE_DIR = os.path.dirname(__file__) -FRONTEND_BASE_PATH = os.getenv('FRONTEND_BASE_PATH', os.path.join(FILE_DIR, 'frontend')) -if not os.path.exists(FRONTEND_BASE_PATH): - if os.path.exists(os.path.join(FILE_DIR, '..', 'dist')): # Fallback to dev build - FRONTEND_BASE_PATH = os.path.join(FILE_DIR, '..', 'dist') - else: - logger.warning('Frontend not found at %s', FRONTEND_BASE_PATH) - FRONTEND_BASE_PATH = None - -# Define the API paths (also available at the root path for simplicity) -UPDATES_API_PATH = '/api/updates' -OBJECTS_API_PATH = '/api/object' # /{name} - - -@dataclass_json -@dataclass -class UpdatesApiData: - """Data sent to the client through the updates API""" - name: str - """Name of the object. Should be unique unless you want to overwrite the previous object""" - hash: str - """Hash of the object, to detect changes without rebuilding the object""" - - -class UpdatesApiFullData(UpdatesApiData): - obj: Optional[CADLike] - """The OCCT object, if any (not serialized)""" - kwargs: Optional[Dict[str, any]] - """The show_object options, if any (not serialized)""" - - def __init__(self, name: str, hash: str, obj: Optional[CADLike] = None, - kwargs: Optional[Dict[str, any]] = None): - self.name = name - self.hash = hash - self.obj = obj - self.kwargs = kwargs - - def to_json(self) -> str: - # noinspection PyUnresolvedReferences - return super().to_json() - - -# noinspection PyUnusedLocal -async def _index_handler(request: web.Request) -> web.Response: - return web.HTTPTemporaryRedirect(location='index.html') - - -class Server: - app = web.Application() - runner: web.AppRunner - thread: Optional[Thread] = None - startup_complete = asyncio.Event() - do_shutdown = asyncio.Event() - at_least_one_client = asyncio.Event() - show_events = BufferedPubSub[UpdatesApiFullData]() - object_events: Dict[str, BufferedPubSub[bytes]] = {} - object_events_lock = asyncio.Lock() - frontend_lock = asyncio.Lock() # To avoid exiting too early while frontend makes requests - - def __init__(self, *args, **kwargs): - # --- Routes --- - # - APIs - self.app.router.add_route('GET', f'{UPDATES_API_PATH}', self._api_updates) - self.app.router.add_route('GET', f'{OBJECTS_API_PATH}/{{name}}', self._api_object) - # - Single websocket/objects/frontend entrypoint to ease client configuration - self.app.router.add_get('/', self._entrypoint) - # - Static files from the frontend - self.app.router.add_get('/{path:(.*/|)}', _index_handler) # Any folder -> index.html - if FRONTEND_BASE_PATH is not None: - self.app.router.add_static('/', path=FRONTEND_BASE_PATH, name='static_frontend') - # --- CORS --- - cors = aiohttp_cors.setup(self.app, defaults={ - "*": aiohttp_cors.ResourceOptions( - allow_credentials=True, - expose_headers="*", - allow_headers="*", - ) - }) - for route in list(self.app.router.routes()): - cors.add(route) - # --- Misc --- - self.loop = asyncio.new_event_loop() - - def start(self): - """Starts the web server in the background""" - assert self.thread is None, "Server currently running, cannot start another one" - # Start the server in a separate daemon thread - self.thread = Thread(target=self._run_server, name='yacv_server', daemon=True) - signal.signal(signal.SIGINT | signal.SIGTERM, self.stop) - atexit.register(self.stop) - self.thread.start() - logger.info('Server started (requested)...') - # Wait for the server to be ready before returning - while not self.startup_complete.is_set(): - time.sleep(0.01) - logger.info('Server started (received)...') - - # noinspection PyUnusedLocal - def stop(self, *args): - """Stops the web server""" - if self.thread is None: - print('Cannot stop server because it is not running') - return - - graceful_secs_connect = float(os.getenv('YACV_GRACEFUL_SECS_CONNECT', 12.0)) - graceful_secs_request = float(os.getenv('YACV_GRACEFUL_SECS_REQUEST', 5.0)) - # Make sure we can hold the lock for more than 100ms (to avoid exiting too early) - logger.info('Stopping server (waiting for at least one frontend request first, cancel with CTRL+C)...') - start = time.time() - try: - while not self.at_least_one_client.is_set() and time.time() - start < graceful_secs_connect: - time.sleep(0.01) - except KeyboardInterrupt: - pass - - logger.info('Stopping server (waiting for no more frontend requests)...') - start = time.time() - while time.time() - start < graceful_secs_request: - if self.frontend_lock.locked(): - start = time.time() - time.sleep(0.01) - - # Stop the server in the background - self.loop.call_soon_threadsafe(lambda *a: self.do_shutdown.set()) - logger.info('Stopping server (sent)...') - - # Wait for the server to stop gracefully - self.thread.join(timeout=30) - self.thread = None - logger.info('Stopping server (confirmed)...') - if len(args) >= 1 and args[0] in (signal.SIGINT, signal.SIGTERM): - sys.exit(0) # Exit with success - - def _run_server(self): - """Runs the web server""" - asyncio.set_event_loop(self.loop) - self.loop.run_until_complete(self._run_server_async()) - self.loop.stop() - self.loop.close() - - async def _run_server_async(self): - """Runs the web server (async)""" - runner = web.AppRunner(self.app) - await runner.setup() - site = web.TCPSite(runner, os.getenv('YACV_HOST', 'localhost'), int(os.getenv('YACV_PORT', 32323))) - await site.start() - logger.info('Server started (sent)...') - self.startup_complete.set() - # Wait for a signal to stop the server while running - await self.do_shutdown.wait() - logger.info('Stopping server (received)...') - await runner.shutdown() - # await runner.cleanup() # Gets stuck? - logger.info('Stopping server (done)...') - - async def _entrypoint(self, request: web.Request) -> web.StreamResponse: - """Main entrypoint to the server, which automatically serves the frontend/updates/objects""" - if request.query.get('api_updates', '') != '': # ?api_updates -> updates API - return await self._api_updates(request) - elif request.query.get('api_object', '') != '': # ?api_object={name} -> object API - request.match_info['name'] = request.query['api_object'] - return await self._api_object(request) - else: # Anything else -> frontend index.html - return await _index_handler(request) - - async def _api_updates(self, request: web.Request) -> web.StreamResponse: - """Handles a publish-only websocket connection that send show_object events along with their hashes and URLs""" - self.at_least_one_client.set() - async with sse_response(request) as resp: - resp.ping_interval = 0.1 # HACK: Browsers don't receive instant updates without this - logger.debug('Client connected: %s', request.remote) - - # Send buffered events first, while keeping a lock - async with self.frontend_lock: - for data in self.show_events.buffer(): - logger.debug('Sending info about %s to %s: %s', data.name, request.remote, data) - # noinspection PyUnresolvedReferences - await resp.send(data.to_json()) - - # Send future events over the same connection - subscription = self.show_events.subscribe(include_buffered=False) - try: - async for data in subscription: - logger.debug('Sending info about %s to %s: %s', data.name, request.remote, data) - # noinspection PyUnresolvedReferences - await resp.send(data.to_json()) - finally: - await subscription.aclose() - logger.debug('Client disconnected: %s', request.remote) - - return resp - - obj_counter = 0 - - def _show_common(self, name: Optional[str], hash: str, start: float, obj: Optional[CADLike] = None, - kwargs=None): - name = name or f'object_{self.obj_counter}' - self.obj_counter += 1 - # Remove a previous object with the same name - for old_event in self.show_events.buffer(): - if old_event.name == name: - self.show_events.delete(old_event) - if name in self.object_events: - del self.object_events[name] - break - precomputed_info = UpdatesApiFullData(name=name, hash=hash, obj=obj, kwargs=kwargs or {}) - self.show_events.publish_nowait(precomputed_info) - logger.info('show_object(%s, %s) took %.3f seconds', name, hash, time.time() - start) - return precomputed_info - - def show(self, any_object: Union[bytes, CADLike, any], name: Optional[str] = None, **kwargs): - """Publishes "any" object to the server""" - if isinstance(any_object, bytes): - self.show_gltf(any_object, name, **kwargs) - else: - self.show_cad(any_object, name, **kwargs) - - def show_gltf(self, gltf: bytes, name: Optional[str] = None, **kwargs): - """Publishes any single-file GLTF object to the server.""" - start = time.time() - # Precompute the info and send it to the client as if it was a CAD object - precomputed_info = self._show_common(name, _hashcode(gltf, **kwargs), start, kwargs=kwargs) - # Also pre-populate the GLTF data for the object API - publish_to = BufferedPubSub[bytes]() - publish_to.publish_nowait(gltf) - publish_to.publish_nowait(b'') # Signal the end of the stream - self.object_events[precomputed_info.name] = publish_to - - def show_image(self, source: str | bytes, center: any, ppmm: int, name: Optional[str] = None, - save_mime: str = 'image/jpeg', **kwargs): - """Publishes an image as a quad GLTF object, indicating the center location and pixels per millimeter.""" - # Convert the image to a GLTF CAD object - gltf, name = image_to_gltf(source, center, ppmm, name, save_mime) - # Publish it like any other GLTF object - self.show_gltf(gltf, name, **kwargs) - - def show_cad(self, obj: Union[CADLike, any], name: Optional[str] = None, **kwargs): - """Publishes a CAD object to the server""" - start = time.time() - - # Get the shape of a CAD-like object - obj = get_shape(obj) - - # Convert Z-up (OCCT convention) to Y-up (GLTF convention) - if isinstance(obj, TopoDS_Shape): - obj = Shape(obj).rotate(Axis.X, -90).wrapped - elif isinstance(obj, TopLoc_Location): - tmp_location = Location(obj) - tmp_location.position = Vector(tmp_location.position.X, tmp_location.position.Z, -tmp_location.position.Y) - tmp_location.orientation = Vector(tmp_location.orientation.X - 90, tmp_location.orientation.Y, - tmp_location.orientation.Z) - obj = tmp_location.wrapped - - self._show_common(name, _hashcode(obj, **kwargs), start, obj, kwargs) - - def show_cad_all(self, **kwargs): - """Publishes all CAD objects to the server""" - for name, obj in grab_all_cad(): - self.show_cad(obj, name, **kwargs) - - async def _api_object(self, request: web.Request) -> web.Response: - """Returns the object file with the matching name, building it if necessary.""" - async with self.frontend_lock: - # Export the object (or fail if not found) - exported_glb = await self.export(request.match_info['name']) - - # Wrap the GLB in a response and return it - response = web.Response(body=exported_glb) - response.content_type = 'model/gltf-binary' - response.headers['Content-Disposition'] = f'attachment; filename="{request.match_info["name"]}.glb"' - return response - - def shown_object_names(self) -> list[str]: - """Returns the names of all objects that have been shown""" - return list([obj.name for obj in self.show_events.buffer()]) - - def _shown_object(self, name: str) -> Optional[UpdatesApiFullData]: - """Returns the object with the given name, if it exists""" - for obj in self.show_events.buffer(): - if obj.name == name: - return obj - return None - - async def export(self, name: str) -> bytes: - """Export the given previously-shown object to a single GLB file, building it if necessary.""" - start = time.time() - - # Check that the object to build exists and grab it if it does - event = self._shown_object(name) - if not event: - raise web.HTTPNotFound(text=f'No object named {name} was previously shown') - - # Use the lock to ensure that we don't build the object twice - async with self.object_events_lock: - # If there are no object events for this name, we need to build the object - if name not in self.object_events: - # Prepare the pubsub for the object - publish_to = BufferedPubSub[bytes]() - self.object_events[name] = publish_to - - def _build_object(): - # Build and publish the object (once) - gltf = tessellate(event.obj, tolerance=event.kwargs.get('tolerance', 0.1), - angular_tolerance=event.kwargs.get('angular_tolerance', 0.1), - faces=event.kwargs.get('faces', True), - edges=event.kwargs.get('edges', True), - vertices=event.kwargs.get('vertices', True)) - glb_list_of_bytes = gltf.save_to_bytes() - publish_to.publish_nowait(b''.join(glb_list_of_bytes)) - logger.info('export(%s) took %.3f seconds, %d parts', name, time.time() - start, - len(gltf.meshes[0].primitives)) - - # await asyncio.get_running_loop().run_in_executor(None, _build_object) - # The previous line has problems with auto-closed loop on script exit - # and is cancellable, so instead run blocking code in async context :( - logger.debug('Building object %s... %s', name, event.obj) - _build_object() - - # In either case return the elements of a subscription to the async generator - subscription = self.object_events[name].subscribe() - try: - return await anext(subscription) - finally: - await subscription.aclose() - - def export_all(self, folder: str, export_filter: Callable[[str, Optional[CADLike]], bool] = lambda name, obj: True): - """Export all previously-shown objects to GLB files in the given folder""" - import asyncio - - async def _export_all(): - os.makedirs(folder, exist_ok=True) - for name in self.shown_object_names(): - if export_filter(name, self._shown_object(name).obj): - with open(os.path.join(folder, f'{name}.glb'), 'wb') as f: - f.write(await self.export(name)) - - asyncio.run(_export_all()) diff --git a/yacv_server/yacv.py b/yacv_server/yacv.py new file mode 100644 index 0000000..285367a --- /dev/null +++ b/yacv_server/yacv.py @@ -0,0 +1,286 @@ +import atexit +import inspect +import os +import signal +import sys +import threading +import time +from dataclasses import dataclass +from http.server import ThreadingHTTPServer +from threading import Thread +from typing import Optional, Dict, Union, Callable + +from OCP.TopLoc import TopLoc_Location +from OCP.TopoDS import TopoDS_Shape +# noinspection PyProtectedMember +from build123d import Shape, Axis, Location, Vector +from dataclasses_json import dataclass_json + +from myhttp import HTTPHandler +from yacv_server.cad import get_shape, grab_all_cad, image_to_gltf, CADLike +from yacv_server.mylogger import logger +from yacv_server.pubsub import BufferedPubSub +from yacv_server.tessellate import _hashcode, tessellate + + +@dataclass_json +@dataclass +class UpdatesApiData: + """Data sent to the client through the updates API""" + name: str + """Name of the object. Should be unique unless you want to overwrite the previous object""" + hash: str + """Hash of the object, to detect changes without rebuilding the object""" + is_remove: bool + """Whether to remove the object from the scene""" + + +class UpdatesApiFullData(UpdatesApiData): + obj: Optional[CADLike] + """The OCCT object, if any (not serialized)""" + kwargs: Optional[Dict[str, any]] + """The show_object options, if any (not serialized)""" + + def __init__(self, name: str, _hash: str, is_remove: bool = False, obj: Optional[CADLike] = None, + kwargs: Optional[Dict[str, any]] = None): + self.name = name + self.hash = _hash + self.is_remove = is_remove + self.obj = obj + self.kwargs = kwargs + + def to_json(self) -> str: + # noinspection PyUnresolvedReferences + return super().to_json() + + +class YACV: + server_thread: Optional[Thread] + server: Optional[ThreadingHTTPServer] + startup_complete: threading.Event + show_events: BufferedPubSub[UpdatesApiFullData] + object_events: Dict[str, BufferedPubSub[bytes]] + object_events_lock: threading.Lock + + def __init__(self): + self.server_thread = None + self.server = None + self.startup_complete = threading.Event() + self.at_least_one_client = threading.Event() + self.show_events = BufferedPubSub() + self.object_events = {} + self.object_events_lock = threading.Lock() + self.frontend_lock = threading.Lock() + + def start(self): + """Starts the web server in the background""" + print('yacv>start') + assert self.server_thread is None, "Server currently running, cannot start another one" + assert self.startup_complete.is_set() is False, "Server already started" + # Start the server in a separate daemon thread + self.server_thread = Thread(target=self._run_server, name='yacv_server', daemon=True) + signal.signal(signal.SIGINT | signal.SIGTERM, self.stop) + atexit.register(self.stop) + self.server_thread.start() + logger.info('Server started (requested)...') + # Wait for the server to be ready before returning + while not self.startup_complete.wait(): + time.sleep(0.01) + logger.info('Server started (received)...') + + # noinspection PyUnusedLocal + def stop(self, *args): + """Stops the web server""" + if self.server_thread is None: + print('Cannot stop server because it is not running') + return + + graceful_secs_connect = float(os.getenv('YACV_GRACEFUL_SECS_CONNECT', 12.0)) + graceful_secs_request = float(os.getenv('YACV_GRACEFUL_SECS_REQUEST', 5.0)) + # Make sure we can hold the lock for more than 100ms (to avoid exiting too early) + logger.info('Stopping server (waiting for at least one frontend request first, cancel with CTRL+C)...') + start = time.time() + try: + while not self.at_least_one_client.wait( + graceful_secs_connect / 10) and time.time() - start < graceful_secs_connect: + time.sleep(0.01) + except KeyboardInterrupt: + pass + + logger.info('Stopping server (waiting for no more frontend requests)...') + start = time.time() + try: + while time.time() - start < graceful_secs_request: + if self.frontend_lock.locked(): + start = time.time() + time.sleep(0.01) + except KeyboardInterrupt: + pass + + # Stop the server in the background + self.server.shutdown() + logger.info('Stopping server (sent)...') + + # Wait for the server to stop gracefully + self.server_thread.join(timeout=30) + self.server_thread = None + logger.info('Stopping server (confirmed)...') + if len(args) >= 1 and args[0] in (signal.SIGINT, signal.SIGTERM): + sys.exit(0) # Exit with success + + def _run_server(self): + """Runs the web server""" + print('yacv>run_server', inspect.stack()) + logger.info('Starting server...') + self.server = ThreadingHTTPServer( + (os.getenv('YACV_HOST', 'localhost'), int(os.getenv('YACV_PORT', 32323))), + lambda a, b, c: HTTPHandler(a, b, c, yacv=self)) + # noinspection HttpUrlsUsage + logger.info(f'Serving at http://{self.server.server_name}:{self.server.server_port}') + self.startup_complete.set() + self.server.serve_forever() + + def _show_common(self, name: Optional[str], _hash: str, start: float, obj: Optional[CADLike] = None, + kwargs=None): + if kwargs.get('auto_clear', True): + self.clear() + name = name or f'object_{len(self.show_events.buffer())}' + # Remove a previous object with the same name + for old_event in self.show_events.buffer(): + if old_event.name == name: + self.show_events.delete(old_event) + if name in self.object_events: + del self.object_events[name] + break + precomputed_info = UpdatesApiFullData(name=name, _hash=_hash, obj=obj, kwargs=kwargs or {}) + self.show_events.publish(precomputed_info) + logger.info('show_object(%s, %s) took %.3f seconds', name, _hash, time.time() - start) + return precomputed_info + + def show(self, any_object: Union[bytes, CADLike, any], name: Optional[str] = None, **kwargs): + """Publishes "any" object to the server""" + if isinstance(any_object, bytes): + self.show_gltf(any_object, name, **kwargs) + else: + self.show_cad(any_object, name, **kwargs) + + def show_gltf(self, gltf: bytes, name: Optional[str] = None, **kwargs): + """Publishes any single-file GLTF object to the server.""" + start = time.time() + # Precompute the info and send it to the client as if it was a CAD object + precomputed_info = self._show_common(name, _hashcode(gltf, **kwargs), start, kwargs=kwargs) + # Also pre-populate the GLTF data for the object API + publish_to = BufferedPubSub[bytes]() + publish_to.publish(gltf) + publish_to.publish(b'') # Signal the end of the stream + self.object_events[precomputed_info.name] = publish_to + + def show_image(self, source: str | bytes, center: any, width: Optional[float] = None, + height: Optional[float] = None, name: Optional[str] = None, save_mime: str = 'image/jpeg', **kwargs): + """Publishes an image as a quad GLTF object, indicating the center location and pixels per millimeter.""" + # Convert the image to a GLTF CAD object + gltf, name = image_to_gltf(source, center, width, height, name, save_mime) + # Publish it like any other GLTF object + self.show_gltf(gltf, name, **kwargs) + + def show_cad(self, obj: Union[CADLike, any], name: Optional[str] = None, **kwargs): + """Publishes a CAD object to the server""" + start = time.time() + + # Get the shape of a CAD-like object + obj = get_shape(obj) + + # Convert Z-up (OCCT convention) to Y-up (GLTF convention) + if isinstance(obj, TopoDS_Shape): + obj = Shape(obj).rotate(Axis.X, -90).wrapped + elif isinstance(obj, TopLoc_Location): + tmp_location = Location(obj) + tmp_location.position = Vector(tmp_location.position.X, tmp_location.position.Z, + -tmp_location.position.Y) + tmp_location.orientation = Vector(tmp_location.orientation.X - 90, tmp_location.orientation.Y, + tmp_location.orientation.Z) + obj = tmp_location.wrapped + + self._show_common(name, _hashcode(obj, **kwargs), start, obj, kwargs) + + def show_cad_all(self, **kwargs): + """Publishes all CAD objects in the current scope to the server""" + for name, obj in grab_all_cad(): + self.show_cad(obj, name, **kwargs) + + def remove(self, name: str): + """Removes a previously-shown object from the scene""" + shown_object = self._shown_object(name) + if shown_object: + shown_object.is_remove = True + with self.object_events_lock: + if name in self.object_events: + del self.object_events[name] + self.show_events.publish(shown_object) + + def clear(self): + """Clears all previously-shown objects from the scene""" + for event in self.show_events.buffer(): + self.remove(event.name) + + def shown_object_names(self) -> list[str]: + """Returns the names of all objects that have been shown""" + return list([obj.name for obj in self.show_events.buffer()]) + + def _shown_object(self, name: str) -> Optional[UpdatesApiFullData]: + """Returns the object with the given name, if it exists""" + for obj in self.show_events.buffer(): + if obj.name == name: + return obj + return None + + def export(self, name: str) -> Optional[bytes]: + """Export the given previously-shown object to a single GLB file, building it if necessary.""" + start = time.time() + + # Check that the object to build exists and grab it if it does + event = self._shown_object(name) + if event is None: + return None + + # Use the lock to ensure that we don't build the object twice + with self.object_events_lock: + # If there are no object events for this name, we need to build the object + if name not in self.object_events: + # Prepare the pubsub for the object + publish_to = BufferedPubSub[bytes]() + self.object_events[name] = publish_to + + def _build_object(): + # Build and publish the object (once) + gltf = tessellate(event.obj, tolerance=event.kwargs.get('tolerance', 0.1), + angular_tolerance=event.kwargs.get('angular_tolerance', 0.1), + faces=event.kwargs.get('faces', True), + edges=event.kwargs.get('edges', True), + vertices=event.kwargs.get('vertices', True)) + glb_list_of_bytes = gltf.save_to_bytes() + publish_to.publish(b''.join(glb_list_of_bytes)) + logger.info('export(%s) took %.3f seconds, %d parts', name, time.time() - start, + len(gltf.meshes[0].primitives)) + + # await asyncio.get_running_loop().run_in_executor(None, _build_object) + # The previous line has problems with auto-closed loop on script exit + # and is cancellable, so instead run blocking code in async context :( + logger.debug('Building object %s... %s', name, event.obj) + _build_object() + + # In either case return the elements of a subscription to the async generator + subscription = self.object_events[name].subscribe() + try: + return next(subscription) + finally: + subscription.close() + + def export_all(self, folder: str, + export_filter: Callable[[str, Optional[CADLike]], bool] = lambda name, obj: True): + """Export all previously-shown objects to GLB files in the given folder""" + os.makedirs(folder, exist_ok=True) + for name in self.shown_object_names(): + if export_filter(name, self._shown_object(name).obj): + with open(os.path.join(folder, f'{name}.glb'), 'wb') as f: + f.write(self.export(name))