inklet 4.0.0.dev1__tar.gz → 4.0.0.dev3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (924) hide show
  1. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/.github/workflows/checks.yml +8 -0
  2. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/.github/workflows/publish.yml +2 -2
  3. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/CHANGELOG.md +141 -0
  4. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/PKG-INFO +7 -8
  5. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/README.md +6 -7
  6. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/api.md +27 -6
  7. inklet-4.0.0.dev3/docs/assets/research-preview/clipping-after.json +119 -0
  8. inklet-4.0.0.dev3/docs/assets/research-preview/clipping-before.json +119 -0
  9. inklet-4.0.0.dev3/docs/assets/research-preview/clipping-caption.tex +1 -0
  10. inklet-4.0.0.dev3/docs/assets/research-preview/clipping-lines-after.json +110 -0
  11. inklet-4.0.0.dev3/docs/assets/research-preview/clipping-lines-before.json +110 -0
  12. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-marker-shapes-caption.tex +1 -0
  13. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-marker-shapes.html +331 -0
  14. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-markers-display.json +13 -0
  15. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-markers-hardware.json +178 -0
  16. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-scene-viewer.html +331 -0
  17. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-viewer-display.json +12 -0
  18. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-viewer-export.json +12 -0
  19. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-viewer-study.json +194 -0
  20. inklet-4.0.0.dev3/docs/assets/research-preview/compositing-after.json +143 -0
  21. inklet-4.0.0.dev3/docs/assets/research-preview/compositing-before.json +143 -0
  22. inklet-4.0.0.dev3/docs/assets/research-preview/compositing-caption.tex +1 -0
  23. inklet-4.0.0.dev3/docs/assets/research-preview/dense-scatter-caption.tex +1 -0
  24. inklet-4.0.0.dev3/docs/assets/research-preview/hatch-after.json +207 -0
  25. inklet-4.0.0.dev3/docs/assets/research-preview/hatch-before.json +207 -0
  26. inklet-4.0.0.dev3/docs/assets/research-preview/hatch-caption.tex +1 -0
  27. inklet-4.0.0.dev3/docs/assets/research-preview/marker-batches.json +144 -0
  28. inklet-4.0.0.dev3/docs/assets/research-preview/marker-index-after.json +231 -0
  29. inklet-4.0.0.dev3/docs/assets/research-preview/marker-index-before.json +231 -0
  30. inklet-4.0.0.dev3/docs/assets/research-preview/marker-index-browser-after.json +1693 -0
  31. inklet-4.0.0.dev3/docs/assets/research-preview/marker-index-browser-before.json +1693 -0
  32. inklet-4.0.0.dev3/docs/assets/research-preview/render-scene-caption.tex +1 -0
  33. inklet-4.0.0.dev3/docs/assets/research-preview/scenes-after.json +207 -0
  34. inklet-4.0.0.dev3/docs/assets/research-preview/scenes-before.json +207 -0
  35. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-culling-after.json +1649 -0
  36. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-culling-before.json +1429 -0
  37. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-culling-gpu-after.json +83 -0
  38. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-culling-gpu-before.json +78 -0
  39. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-redraw-after.json +885 -0
  40. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-redraw-before.json +789 -0
  41. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-redraw-display.json +12 -0
  42. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-redraw-profile.json +383 -0
  43. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-window-after.json +6275 -0
  44. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-window-before.json +3895 -0
  45. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-window-display.json +12 -0
  46. inklet-4.0.0.dev3/docs/assets/v4/visual-overrides.png +0 -0
  47. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/browser-rendering.md +4 -0
  48. inklet-4.0.0.dev3/docs/clipping.md +109 -0
  49. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/compatibility.md +1 -1
  50. inklet-4.0.0.dev3/docs/compiled-scenes.md +151 -0
  51. inklet-4.0.0.dev3/docs/compiled-viewer.md +302 -0
  52. inklet-4.0.0.dev3/docs/compositing.md +112 -0
  53. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/cookbook.md +4 -0
  54. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/design/v4.md +25 -0
  55. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/development-preview.md +28 -8
  56. inklet-4.0.0.dev3/docs/hatching.md +112 -0
  57. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/installation.md +3 -3
  58. inklet-4.0.0.dev3/docs/marker-batches.md +132 -0
  59. inklet-4.0.0.dev3/docs/marker-culling.md +174 -0
  60. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/plotting.md +4 -0
  61. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/regional-report.md +42 -0
  62. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/rendering-engine.md +15 -0
  63. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/roadmap.md +6 -0
  64. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/v3.md +3 -0
  65. inklet-4.0.0.dev3/docs/visual-editing.md +104 -0
  66. inklet-4.0.0.dev3/examples/clipping_review.py +90 -0
  67. inklet-4.0.0.dev3/examples/compiled_marker_shapes.py +44 -0
  68. inklet-4.0.0.dev3/examples/compiled_scene_viewer.py +18 -0
  69. inklet-4.0.0.dev3/examples/compositing_review.py +93 -0
  70. inklet-4.0.0.dev3/examples/dense_scatter_review.py +72 -0
  71. inklet-4.0.0.dev3/examples/hatch_review.py +70 -0
  72. inklet-4.0.0.dev3/examples/render_scene_review.py +91 -0
  73. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/regional_report.py +19 -2
  74. inklet-4.0.0.dev3/gallery/clipping-review.png +0 -0
  75. inklet-4.0.0.dev3/gallery/compiled-marker-shapes.png +0 -0
  76. inklet-4.0.0.dev3/gallery/compiled-scene-viewer.png +0 -0
  77. inklet-4.0.0.dev3/gallery/compiled-viewer-culling.png +0 -0
  78. inklet-4.0.0.dev3/gallery/compiled-viewer-deep-zoom.png +0 -0
  79. inklet-4.0.0.dev3/gallery/compositing-pdf-after.png +0 -0
  80. inklet-4.0.0.dev3/gallery/compositing-pdf-before.png +0 -0
  81. inklet-4.0.0.dev3/gallery/compositing-review.png +0 -0
  82. inklet-4.0.0.dev3/gallery/dense-scatter-review.png +0 -0
  83. inklet-4.0.0.dev3/gallery/hatch-pdf-after.png +0 -0
  84. inklet-4.0.0.dev3/gallery/hatch-pdf-before.png +0 -0
  85. inklet-4.0.0.dev3/gallery/hatch-review.png +0 -0
  86. inklet-4.0.0.dev3/gallery/hatch-svg-before.png +0 -0
  87. inklet-4.0.0.dev3/gallery/render-scene-data.png +0 -0
  88. inklet-4.0.0.dev3/gallery/render-scene-initial.png +0 -0
  89. inklet-4.0.0.dev3/gallery/render-scene-review.png +0 -0
  90. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/mkdocs.yml +8 -0
  91. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/pyproject.toml +1 -1
  92. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/__init__.py +5 -4
  93. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/core/__init__.py +2 -1
  94. inklet-4.0.0.dev3/src/inklet/core/batch.py +93 -0
  95. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/core/diagram.py +35 -6
  96. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/key_rules.py +15 -5
  97. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/rules.py +121 -13
  98. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/document/compiler.py +17 -3
  99. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/draw/__init__.py +2 -2
  100. inklet-4.0.0.dev3/src/inklet/draw/bezier_clip.py +127 -0
  101. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/draw/clip.py +124 -28
  102. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/__init__.py +61 -7
  103. inklet-4.0.0.dev3/src/inklet/experimental/browser/compiled.js +53 -0
  104. inklet-4.0.0.dev3/src/inklet/experimental/browser/compiled.py +64 -0
  105. inklet-4.0.0.dev3/src/inklet/experimental/browser/editor.html +13 -0
  106. inklet-4.0.0.dev3/src/inklet/experimental/browser/editor.js +135 -0
  107. inklet-4.0.0.dev3/src/inklet/experimental/browser/overrides.py +96 -0
  108. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/page.html +1 -0
  109. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/runtime.js +33 -18
  110. inklet-4.0.0.dev3/src/inklet/experimental/scene_viewer/__init__.py +119 -0
  111. inklet-4.0.0.dev3/src/inklet/experimental/scene_viewer/controls.js +14 -0
  112. inklet-4.0.0.dev3/src/inklet/experimental/scene_viewer/page.html +4 -0
  113. inklet-4.0.0.dev3/src/inklet/experimental/scene_viewer/runtime.js +279 -0
  114. inklet-4.0.0.dev3/src/inklet/experimental/scene_viewer/spatial.js +52 -0
  115. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/figure.py +13 -3
  116. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/marks.py +7 -0
  117. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/panel.py +5 -1
  118. inklet-4.0.0.dev3/src/inklet/plot/scatter_batch.py +27 -0
  119. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/__init__.py +2 -1
  120. inklet-4.0.0.dev3/src/inklet/render/analysis.py +63 -0
  121. inklet-4.0.0.dev3/src/inklet/render/bounds.py +67 -0
  122. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/brushes.py +5 -16
  123. inklet-4.0.0.dev3/src/inklet/render/hatching.py +49 -0
  124. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/pdf.py +106 -91
  125. inklet-4.0.0.dev3/src/inklet/render/scene.py +312 -0
  126. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/svg.py +142 -49
  127. inklet-4.0.0.dev3/tests/test_browser_compiled.py +150 -0
  128. inklet-4.0.0.dev3/tests/test_browser_overrides.py +142 -0
  129. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_browser_switching.py +4 -3
  130. inklet-4.0.0.dev3/tests/test_clip_engine.py +216 -0
  131. inklet-4.0.0.dev3/tests/test_compositing_engine.py +159 -0
  132. inklet-4.0.0.dev3/tests/test_hatch_engine.py +155 -0
  133. inklet-4.0.0.dev3/tests/test_marker_batches.py +173 -0
  134. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_embed.py +4 -7
  135. inklet-4.0.0.dev3/tests/test_render_scene.py +199 -0
  136. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_style_fields.py +5 -4
  137. inklet-4.0.0.dev3/tests/test_scene_culling.py +120 -0
  138. inklet-4.0.0.dev3/tests/test_scene_viewer.py +325 -0
  139. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_svg.py +4 -5
  140. inklet-4.0.0.dev3/tools/benchmark_batches.py +59 -0
  141. inklet-4.0.0.dev3/tools/benchmark_clipping.py +62 -0
  142. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/benchmark_engine.py +29 -2
  143. inklet-4.0.0.dev3/tools/benchmark_marker_index.mjs +26 -0
  144. inklet-4.0.0.dev3/tools/benchmark_scene_culling.js +20 -0
  145. inklet-4.0.0.dev3/tools/benchmark_scene_gpu.js +28 -0
  146. inklet-4.0.0.dev3/tools/benchmark_scene_redraw.js +21 -0
  147. inklet-4.0.0.dev3/tools/benchmark_scene_viewer.js +20 -0
  148. inklet-4.0.0.dev3/tools/benchmark_scene_zoom.js +17 -0
  149. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/check_wheel.py +14 -0
  150. inklet-4.0.0.dev3/tools/make_culling_review.py +33 -0
  151. inklet-4.0.0.dev3/tools/profile_scene_redraw.js +13 -0
  152. inklet-4.0.0.dev1/src/inklet/render/bounds.py +0 -44
  153. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/.gitattributes +0 -0
  154. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/.gitignore +0 -0
  155. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/.readthedocs.yaml +0 -0
  156. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/CONTRACT.md +0 -0
  157. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/CONTRIBUTING.md +0 -0
  158. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/LICENSE +0 -0
  159. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/THIRD_PARTY_NOTICES.md +0 -0
  160. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/brand/inklet-icon.svg +0 -0
  161. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/brand/inklet-logo-dark.svg +0 -0
  162. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/brand/inklet-logo-mono.svg +0 -0
  163. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/brand/inklet-logo.svg +0 -0
  164. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/brand/inklet-wordmark.svg +0 -0
  165. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/examples/quickstart.pdf +0 -0
  166. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/examples/quickstart.png +0 -0
  167. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/examples/quickstart.svg +0 -0
  168. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/axes-and-scales-1.png +0 -0
  169. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/calibrated-volumes-3.png +0 -0
  170. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/channels-and-contours-1.png +0 -0
  171. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-anchor.png +0 -0
  172. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-annotation.png +0 -0
  173. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
  174. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-branch.png +0 -0
  175. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-broken-axis.png +0 -0
  176. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-callout.png +0 -0
  177. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-clipping.png +0 -0
  178. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-creases.png +0 -0
  179. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-custom-key.png +0 -0
  180. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-cutout.png +0 -0
  181. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-dates.png +0 -0
  182. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-dense.png +0 -0
  183. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-elbows.png +0 -0
  184. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
  185. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-facets.png +0 -0
  186. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-fit-graph.png +0 -0
  187. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-flow-width.png +0 -0
  188. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-formula.png +0 -0
  189. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-graph.png +0 -0
  190. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-halo.png +0 -0
  191. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-heatmap.png +0 -0
  192. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-hole.png +0 -0
  193. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-inline-type.png +0 -0
  194. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-inset.png +0 -0
  195. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-labels.png +0 -0
  196. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-layers.png +0 -0
  197. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-letters.png +0 -0
  198. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-list.png +0 -0
  199. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-matrix.png +0 -0
  200. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-page-grid.png +0 -0
  201. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-polar.png +0 -0
  202. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-protein.png +0 -0
  203. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-routes.png +0 -0
  204. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
  205. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-scene.png +0 -0
  206. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-series-key.png +0 -0
  207. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-span.png +0 -0
  208. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
  209. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-swarm.png +0 -0
  210. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-text-path.png +0 -0
  211. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-toon.png +0 -0
  212. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-twin-axis.png +0 -0
  213. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
  214. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-violin.png +0 -0
  215. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
  216. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/data-1.png +0 -0
  217. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/data-3.png +0 -0
  218. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/dense-data-1.png +0 -0
  219. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/diagram-components-1.png +0 -0
  220. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/diagrams-1.png +0 -0
  221. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/layout-3.png +0 -0
  222. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/oblique-sections-2.png +0 -0
  223. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/plot-quality-after.png +0 -0
  224. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/plot-quality-before.png +0 -0
  225. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/plot-types-1.png +0 -0
  226. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/plotting-1.png +0 -0
  227. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/plotting-2.png +0 -0
  228. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/publication-plots-1.png +0 -0
  229. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/publication-plots-2.png +0 -0
  230. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/publication-plots-3.png +0 -0
  231. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/publication-plots-4.png +0 -0
  232. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/slabs-and-regions-1.png +0 -0
  233. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/three-images-1.png +0 -0
  234. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/guides/three-images-2.png +0 -0
  235. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/biology.json +0 -0
  236. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/comparison.json +0 -0
  237. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/diagram-after.json +0 -0
  238. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/diagram-before.json +0 -0
  239. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
  240. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/engine-after.json +0 -0
  241. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/engine-before.json +0 -0
  242. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/engine-review-caption.tex +0 -0
  243. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/fluorescence-biology.json +0 -0
  244. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/general-plots-caption.tex +0 -0
  245. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/general-plots.json +0 -0
  246. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
  247. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/label-intensities-native.csv +0 -0
  248. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/label-intensities.json +0 -0
  249. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/lines-after.json +0 -0
  250. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/lines-before.json +0 -0
  251. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/oblique-biology.json +0 -0
  252. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
  253. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/real-biology.json +0 -0
  254. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/revision.json +0 -0
  255. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/slab-biology.json +0 -0
  256. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/research-preview/study.json +0 -0
  257. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/after.json +0 -0
  258. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/before.json +0 -0
  259. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/browser-quality.json +0 -0
  260. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/browser-scatter.html +0 -0
  261. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/browser-scatter.png +0 -0
  262. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/browser-study.json +0 -0
  263. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/contours-streamlines-170mm.png +0 -0
  264. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/contours-streamlines-masked.png +0 -0
  265. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/contours-streamlines.html +0 -0
  266. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/contours-streamlines.png +0 -0
  267. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/engineering-report-170mm.png +0 -0
  268. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/engineering-report.html +0 -0
  269. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/engineering-report.png +0 -0
  270. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/faceted-operations.html +0 -0
  271. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/faceted-operations.png +0 -0
  272. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/linked-dashboard.html +0 -0
  273. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/linked-dashboard.png +0 -0
  274. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/linked-selection.html +0 -0
  275. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/linked-selection.png +0 -0
  276. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/mesh-fields-170mm.png +0 -0
  277. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/mesh-fields.html +0 -0
  278. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/mesh-fields.png +0 -0
  279. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/region-shapes.html +0 -0
  280. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/region-shapes.png +0 -0
  281. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/regional-analysis.html +0 -0
  282. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/regional-analysis.png +0 -0
  283. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/regional-report-160mm.png +0 -0
  284. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/regional-report.html +0 -0
  285. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/regional-report.png +0 -0
  286. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/scientific-report-170mm.png +0 -0
  287. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/scientific-report.html +0 -0
  288. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/scientific-report.png +0 -0
  289. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/statistical-views.html +0 -0
  290. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/statistical-views.png +0 -0
  291. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/table-inputs.html +0 -0
  292. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/table-inputs.png +0 -0
  293. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/time-series.html +0 -0
  294. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/time-series.png +0 -0
  295. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/world-population-2019.html +0 -0
  296. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/world-population-2019.json +0 -0
  297. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/world-population-2019.png +0 -0
  298. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/world-population-revisions.html +0 -0
  299. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/world-population-revisions.png +0 -0
  300. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/world-population.html +0 -0
  301. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/assets/v4/world-population.png +0 -0
  302. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/axes-and-scales.md +0 -0
  303. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/biology-panels.md +0 -0
  304. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/blender-scenes.md +0 -0
  305. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/brand.md +0 -0
  306. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/calibrated-volumes.md +0 -0
  307. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/channels-and-contours.md +0 -0
  308. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/cli.md +0 -0
  309. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/complex-scene.md +0 -0
  310. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/concepts.md +0 -0
  311. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/contours-streamlines.md +0 -0
  312. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/data-revisions.md +0 -0
  313. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/data.md +0 -0
  314. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/dense-data.md +0 -0
  315. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/design/browser-backends.md +0 -0
  316. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/design/page_grid.md +0 -0
  317. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/design/v2.md +0 -0
  318. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/diagram-components.md +0 -0
  319. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/diagram-engine.md +0 -0
  320. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/diagrams.md +0 -0
  321. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/engineering-report.md +0 -0
  322. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/example-library.md +0 -0
  323. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/examples.md +0 -0
  324. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/export-review.md +0 -0
  325. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/fluorescence-biology.md +0 -0
  326. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/general-plots.md +0 -0
  327. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/index.md +0 -0
  328. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/javascripts/inklet.js +0 -0
  329. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/label-intensities.md +0 -0
  330. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/label-measurements.md +0 -0
  331. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/layout.md +0 -0
  332. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/linked-facets.md +0 -0
  333. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/linked-maps.md +0 -0
  334. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/linked-plots.md +0 -0
  335. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/mesh-fields.md +0 -0
  336. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/microscopy-tiff.md +0 -0
  337. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/migration.md +0 -0
  338. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/oblique-biology.md +0 -0
  339. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/oblique-sections.md +0 -0
  340. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/plot-quality.md +0 -0
  341. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/plot-types.md +0 -0
  342. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/plotting-engine.md +0 -0
  343. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/presets.md +0 -0
  344. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/publication-plots.md +0 -0
  345. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/quickstart.md +0 -0
  346. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/real-biology.md +0 -0
  347. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/recipes/architecture-sketch.md +0 -0
  348. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/recipes/architecture.md +0 -0
  349. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/recipes/attractor.md +0 -0
  350. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/recipes/helix.md +0 -0
  351. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/recipes/interference.md +0 -0
  352. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/recipes/lattice.md +0 -0
  353. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/recipes/photonics.md +0 -0
  354. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/recipes/wave-packets.md +0 -0
  355. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/release-checks.md +0 -0
  356. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/render-jobs.md +0 -0
  357. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/research-preview.md +0 -0
  358. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/research-revision.md +0 -0
  359. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/research-study.md +0 -0
  360. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/scene-annotations.md +0 -0
  361. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/scene-paths.md +0 -0
  362. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/scene-templates.md +0 -0
  363. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/scientific-report.md +0 -0
  364. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/showcase.md +0 -0
  365. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/slab-biology.md +0 -0
  366. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/slabs-and-regions.md +0 -0
  367. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/statistical-views.md +0 -0
  368. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/stress20.md +0 -0
  369. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/stylesheets/code.css +0 -0
  370. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/stylesheets/inklet.css +0 -0
  371. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/table-inputs.md +0 -0
  372. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/three-images.md +0 -0
  373. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/time-series.md +0 -0
  374. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/troubleshooting.md +0 -0
  375. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/v2.5.md +0 -0
  376. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/v2.md +0 -0
  377. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/v4-foundations.md +0 -0
  378. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/docs/world-map.md +0 -0
  379. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/biology/README.md +0 -0
  380. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/biology/cells3d.lock.json +0 -0
  381. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/biology/data.py +0 -0
  382. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/biology/fluorescence.py +0 -0
  383. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/biology/organelle.lock.json +0 -0
  384. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/biology/requirements.txt +0 -0
  385. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/biology_panels.py +0 -0
  386. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/blender/complex_lab_scene.py +0 -0
  387. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/blender/lab_scene.py +0 -0
  388. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/blender/occlusion_scene.py +0 -0
  389. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/blender/organelle_scene.py +0 -0
  390. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/blender/research_lab_views.py +0 -0
  391. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/broken_axis.py +0 -0
  392. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/data/general-plots/benchmark.csv +0 -0
  393. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/data/general-plots/learning.csv +0 -0
  394. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/data/general-plots/revenue.csv +0 -0
  395. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/data/general-plots/sensor.csv +0 -0
  396. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/diagram_review.py +0 -0
  397. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/engine_review.py +0 -0
  398. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/feature_flow.py +0 -0
  399. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/fluorescence_biology.py +0 -0
  400. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/gallery.py +0 -0
  401. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/general_plots.py +0 -0
  402. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/graph.py +0 -0
  403. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/hello_figure.py +0 -0
  404. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/label_intensities.py +0 -0
  405. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/oblique_biology.py +0 -0
  406. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/panels.py +0 -0
  407. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/plot_engine_review.py +0 -0
  408. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/plot_quality_review.py +0 -0
  409. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/polar.py +0 -0
  410. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/preset_formats.py +0 -0
  411. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/presets.py +0 -0
  412. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/real_biology.py +0 -0
  413. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/render_smoke.py +0 -0
  414. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/research_figure_planner.py +0 -0
  415. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/research_planner_study.py +0 -0
  416. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/research_revision.py +0 -0
  417. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/showcase/README.md +0 -0
  418. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/showcase/assets.lock.json +0 -0
  419. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/showcase/blender_scenes.py +0 -0
  420. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/showcase/figures.py +0 -0
  421. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/slab_biology.py +0 -0
  422. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/state_machine.py +0 -0
  423. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/stress20.py +0 -0
  424. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v25_document.py +0 -0
  425. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v2_cases.py +0 -0
  426. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v2_document.py +0 -0
  427. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v3_complex_scene.py +0 -0
  428. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v3_render_jobs.py +0 -0
  429. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v3_rendering.py +0 -0
  430. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v3_scene_annotations.py +0 -0
  431. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v3_scene_passes.py +0 -0
  432. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v3_scene_paths.py +0 -0
  433. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v3_scene_templates.py +0 -0
  434. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/README.md +0 -0
  435. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/browser_scatter.py +0 -0
  436. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/contours_streamlines.py +0 -0
  437. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/data/world-countries.geojson +0 -0
  438. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/data/world-map-source.json +0 -0
  439. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/data/world-population.csv +0 -0
  440. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/engineering_report.py +0 -0
  441. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/faceted_operations.py +0 -0
  442. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/fixtures/assembly.json +0 -0
  443. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/fixtures/manifest.json +0 -0
  444. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/fixtures/measurement.json +0 -0
  445. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/fixtures/region-shapes.geojson +0 -0
  446. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/fixtures/regions.csv +0 -0
  447. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/fixtures/regions.geojson +0 -0
  448. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/linked_dashboard.py +0 -0
  449. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/linked_selection.html +0 -0
  450. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/linked_selection.py +0 -0
  451. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/mesh_fields.py +0 -0
  452. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/region_shapes.py +0 -0
  453. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/regional_analysis.py +0 -0
  454. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/scientific_report.py +0 -0
  455. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/statistical_views.py +0 -0
  456. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/table_inputs.py +0 -0
  457. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/time_series.py +0 -0
  458. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/examples/v4/world_population.py +0 -0
  459. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/annot.py +0 -0
  460. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/bio3d.py +0 -0
  461. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/cartoon.py +0 -0
  462. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/chem_data.py +0 -0
  463. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/chem_fingerprints.py +0 -0
  464. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/data/1m17-kinase.pdb +0 -0
  465. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/data/README.md +0 -0
  466. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/drug_discovery.py +0 -0
  467. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/mouse_brain_data.py +0 -0
  468. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/neural_activity.py +0 -0
  469. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/pdbfile.py +0 -0
  470. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/showcase_part.py +0 -0
  471. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/showcase_process.py +0 -0
  472. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/showcase_season.py +0 -0
  473. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/structure.py +0 -0
  474. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/structure_data.py +0 -0
  475. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/target.py +0 -0
  476. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/figures/trial.py +0 -0
  477. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/README.md +0 -0
  478. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/biology-panels.png +0 -0
  479. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/chem_fingerprints.png +0 -0
  480. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/diagram-labels-after.png +0 -0
  481. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/diagram-labels-before.png +0 -0
  482. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/diagram-review.png +0 -0
  483. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/engine-review.png +0 -0
  484. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/engine-transparency-after.png +0 -0
  485. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/engine-transparency-before.png +0 -0
  486. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/flow.png +0 -0
  487. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/fluorescence-biology.png +0 -0
  488. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/general-plots-before.png +0 -0
  489. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/general-plots.png +0 -0
  490. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/label-intensities.png +0 -0
  491. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/oblique-biology.png +0 -0
  492. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/part.png +0 -0
  493. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/plot-axis-after.png +0 -0
  494. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/plot-axis-before.png +0 -0
  495. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/plot-engine-review.png +0 -0
  496. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/plots.png +0 -0
  497. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/polar.png +0 -0
  498. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/preset-formats.png +0 -0
  499. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/presets.png +0 -0
  500. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/process.png +0 -0
  501. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/real-biology.png +0 -0
  502. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/research-crossing-revision.png +0 -0
  503. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/research-figure-planner.png +0 -0
  504. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/research-planner-study.png +0 -0
  505. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/research-revision.png +0 -0
  506. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/season.png +0 -0
  507. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/showcase-architecture-sketch.png +0 -0
  508. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/showcase-architecture.png +0 -0
  509. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/showcase-attractor.png +0 -0
  510. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/showcase-helix.png +0 -0
  511. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/showcase-interference.png +0 -0
  512. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/showcase-lattice.png +0 -0
  513. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/showcase-photonics.png +0 -0
  514. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/showcase-wave-packets.png +0 -0
  515. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/slab-biology.png +0 -0
  516. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/stress20.png +0 -0
  517. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/structure.png +0 -0
  518. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/v3-complex-scene.png +0 -0
  519. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/v3-render-jobs.png +0 -0
  520. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/v3-rendering.png +0 -0
  521. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/v3-scene-annotations.png +0 -0
  522. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/v3-scene-passes.png +0 -0
  523. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/v3-scene-paths.png +0 -0
  524. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/gallery/v3-scene-templates.png +0 -0
  525. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/requirements-ci.txt +0 -0
  526. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/requirements-docs.txt +0 -0
  527. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/requirements-tables.txt +0 -0
  528. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/scripts/bench_svg.py +0 -0
  529. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/scripts/rasterise.sh +0 -0
  530. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/scripts/sanity_typeset.py +0 -0
  531. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/__main__.py +0 -0
  532. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/__init__.py +0 -0
  533. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/asset.py +0 -0
  534. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/cache.py +0 -0
  535. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/cutout.py +0 -0
  536. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/deps.py +0 -0
  537. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/harmonise.py +0 -0
  538. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/lineart.py +0 -0
  539. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/mask.py +0 -0
  540. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/provenance.py +0 -0
  541. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/raster.py +0 -0
  542. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/sidecar.py +0 -0
  543. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/assets/silhouette.py +0 -0
  544. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/cli.py +0 -0
  545. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/components.py +0 -0
  546. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/core/envelope.py +0 -0
  547. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/core/geom.py +0 -0
  548. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/core/prims.py +0 -0
  549. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/core/style.py +0 -0
  550. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/core/trace.py +0 -0
  551. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/core/units.py +0 -0
  552. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/__init__.py +0 -0
  553. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/abut.py +0 -0
  554. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/break_rules.py +0 -0
  555. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/color.py +0 -0
  556. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/cross.py +0 -0
  557. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/image.py +0 -0
  558. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/link_rules.py +0 -0
  559. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/path_rules.py +0 -0
  560. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/plot_rules.py +0 -0
  561. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/report.py +0 -0
  562. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/diagnostics/three_rules.py +0 -0
  563. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/document/__init__.py +0 -0
  564. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/document/composition.py +0 -0
  565. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/document/data.py +0 -0
  566. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/document/data_io.py +0 -0
  567. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/document/module.py +0 -0
  568. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/document/presets.py +0 -0
  569. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/document/publication.py +0 -0
  570. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/document/spec.py +0 -0
  571. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/draw/annotate.py +0 -0
  572. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/draw/coords.py +0 -0
  573. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/draw/path.py +0 -0
  574. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/draw/place.py +0 -0
  575. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/draw/shapes.py +0 -0
  576. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/__init__.py +0 -0
  577. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/_table_adapters.py +0 -0
  578. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/drawings.py +0 -0
  579. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/fields.py +0 -0
  580. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/grid.py +0 -0
  581. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/images.py +0 -0
  582. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/regions.py +0 -0
  583. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/series.py +0 -0
  584. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/timeaxis.py +0 -0
  585. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/channels.py +0 -0
  586. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/contours.py +0 -0
  587. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/engineering.py +0 -0
  588. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/fields.py +0 -0
  589. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/figure_planner.py +0 -0
  590. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/grid.py +0 -0
  591. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/measurement.py +0 -0
  592. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/measurements.py +0 -0
  593. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/planner_geometry.py +0 -0
  594. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/regions.py +0 -0
  595. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/sections.py +0 -0
  596. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/selection.py +0 -0
  597. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/slabs.py +0 -0
  598. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/temporal.py +0 -0
  599. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/tiff.py +0 -0
  600. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/experimental/volume.py +0 -0
  601. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/layout/__init__.py +0 -0
  602. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/layout/fit.py +0 -0
  603. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/layout/flow.py +0 -0
  604. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/layout/graph.py +0 -0
  605. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/layout/graph_force.py +0 -0
  606. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/layout/graph_layered.py +0 -0
  607. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/layout/graph_tree.py +0 -0
  608. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/layout/labels.py +0 -0
  609. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/layout/sankey.py +0 -0
  610. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/links/__init__.py +0 -0
  611. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/links/curves.py +0 -0
  612. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/links/link.py +0 -0
  613. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/__init__.py +0 -0
  614. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/axis.py +0 -0
  615. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/breaks.py +0 -0
  616. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/categories.py +0 -0
  617. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/facets.py +0 -0
  618. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/inset.py +0 -0
  619. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/key.py +0 -0
  620. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/notes.py +0 -0
  621. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/png.py +0 -0
  622. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/polar.py +0 -0
  623. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/ramp.py +0 -0
  624. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/raster.py +0 -0
  625. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/ribbon.py +0 -0
  626. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/scale.py +0 -0
  627. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/scatter_raster.py +0 -0
  628. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/series.py +0 -0
  629. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/simplify.py +0 -0
  630. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/plot/timescale.py +0 -0
  631. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/bundle.py +0 -0
  632. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/composite.py +0 -0
  633. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/fontembed.py +0 -0
  634. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/glyphs.py +0 -0
  635. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/outline.py +0 -0
  636. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/paint.py +0 -0
  637. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/pathdata.py +0 -0
  638. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/pdftext.py +0 -0
  639. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/preview.py +0 -0
  640. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/raster.py +0 -0
  641. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/resources.py +0 -0
  642. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/review.py +0 -0
  643. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/render/revision.py +0 -0
  644. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/themes/__init__.py +0 -0
  645. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/themes/color.py +0 -0
  646. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/themes/palettes.py +0 -0
  647. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/themes/theme.py +0 -0
  648. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/__init__.py +0 -0
  649. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/api.py +0 -0
  650. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/backend.py +0 -0
  651. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender/__init__.py +0 -0
  652. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender/device_worker.py +0 -0
  653. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender/discover.py +0 -0
  654. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender/lineart.py +0 -0
  655. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender/options.py +0 -0
  656. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender/scene_worker.py +0 -0
  657. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender/script.py +0 -0
  658. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender/svgread.py +0 -0
  659. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender/template_worker.py +0 -0
  660. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender/tracing.py +0 -0
  661. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/blender_backend.py +0 -0
  662. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/camera.py +0 -0
  663. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/deps.py +0 -0
  664. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/depth.py +0 -0
  665. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/devices.py +0 -0
  666. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/drill.py +0 -0
  667. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/edges.py +0 -0
  668. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/hlr.py +0 -0
  669. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/linalg.py +0 -0
  670. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/mesh.py +0 -0
  671. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/occlude.py +0 -0
  672. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/order.py +0 -0
  673. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/parse.py +0 -0
  674. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/place.py +0 -0
  675. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/protein.py +0 -0
  676. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/quality.py +0 -0
  677. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/render_jobs.py +0 -0
  678. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/scene_annotations.py +0 -0
  679. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/scene_pass.py +0 -0
  680. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/scene_projection.py +0 -0
  681. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/scenes.py +0 -0
  682. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/shade.py +0 -0
  683. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/solids.py +0 -0
  684. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/templates.json +0 -0
  685. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/three/templates.py +0 -0
  686. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/typeset/__init__.py +0 -0
  687. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/typeset/fonts.py +0 -0
  688. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/typeset/markup.py +0 -0
  689. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/typeset/onpath.py +0 -0
  690. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/typeset/outline.py +0 -0
  691. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/src/inklet/typeset/shaping.py +0 -0
  692. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/assets/mouse.inklet.json +0 -0
  693. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/assets/mouse.png +0 -0
  694. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/dense_graph.py +0 -0
  695. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/draw_probe.py +0 -0
  696. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/electro/assets/sem.png +0 -0
  697. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/electro/assets/tem.png +0 -0
  698. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/electro/cell.py +0 -0
  699. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/electro/common.py +0 -0
  700. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/electro/data.py +0 -0
  701. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/electro/imaging.py +0 -0
  702. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/electro/kinetics.py +0 -0
  703. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/electro/micrograph.py +0 -0
  704. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/electro/system.py +0 -0
  705. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/electro_figure.py +0 -0
  706. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/fidelity.py +0 -0
  707. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/flow.py +0 -0
  708. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/hard_figure.py +0 -0
  709. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/label_storm.py +0 -0
  710. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/mega_figure.py +0 -0
  711. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/meshes/README.md +0 -0
  712. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/meshes/brain-lh.obj +0 -0
  713. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/meshes/spot.obj +0 -0
  714. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/panels/apparatus.py +0 -0
  715. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/panels/graphs.py +0 -0
  716. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/panels/relations.py +0 -0
  717. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/panels/responses.py +0 -0
  718. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/panels/sections.py +0 -0
  719. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/probes.py +0 -0
  720. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/stress/three_figure.py +0 -0
  721. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_alignment_contract.py +0 -0
  722. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_annotate.py +0 -0
  723. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_annotate_letters.py +0 -0
  724. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_assets.py +0 -0
  725. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_assets_provenance.py +0 -0
  726. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_biology_source.py +0 -0
  727. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_blend_scene.py +0 -0
  728. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_browser_facets.py +0 -0
  729. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_browser_figure.py +0 -0
  730. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_browser_regions.py +0 -0
  731. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_browser_revision.py +0 -0
  732. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_browser_scatter.py +0 -0
  733. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_browser_series.py +0 -0
  734. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_browser_statistics.py +0 -0
  735. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_browser_time.py +0 -0
  736. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_categories.py +0 -0
  737. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_channels_contours.py +0 -0
  738. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_chem_figure.py +0 -0
  739. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_cli.py +0 -0
  740. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_components.py +0 -0
  741. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_contrast_and_labels.py +0 -0
  742. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_cookbook.py +0 -0
  743. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_core.py +0 -0
  744. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_core_amendments.py +0 -0
  745. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_csv_input.py +0 -0
  746. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics.py +0 -0
  747. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics_api.py +0 -0
  748. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics_artwork.py +0 -0
  749. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics_break_distorts.py +0 -0
  750. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics_crossing.py +0 -0
  751. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics_image_contrast.py +0 -0
  752. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics_ink.py +0 -0
  753. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics_keys.py +0 -0
  754. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics_links.py +0 -0
  755. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics_paths.py +0 -0
  756. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagnostics_plot_box.py +0 -0
  757. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_diagram_engine.py +0 -0
  758. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_docs.py +0 -0
  759. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_docs_site.py +0 -0
  760. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_document.py +0 -0
  761. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_document_data.py +0 -0
  762. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_document_v25.py +0 -0
  763. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_draw_clip.py +0 -0
  764. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_draw_path.py +0 -0
  765. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_draw_place.py +0 -0
  766. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_draw_shapes.py +0 -0
  767. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_engine_layout.py +0 -0
  768. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_engine_rendering.py +0 -0
  769. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_engine_scatter.py +0 -0
  770. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_engineering_report.py +0 -0
  771. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_export_bundle.py +0 -0
  772. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_figure.py +0 -0
  773. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_figure_planner.py +0 -0
  774. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_fit.py +0 -0
  775. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_grid_fields.py +0 -0
  776. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_guides.py +0 -0
  777. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_label_measurements.py +0 -0
  778. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_layout.py +0 -0
  779. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_layout_graph.py +0 -0
  780. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_layout_graph_fit.py +0 -0
  781. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_layout_origin.py +0 -0
  782. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_layout_sankey.py +0 -0
  783. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_links.py +0 -0
  784. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_links_avoid.py +0 -0
  785. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_links_shapes.py +0 -0
  786. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_mesh_fields.py +0 -0
  787. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_microscopy_tiff.py +0 -0
  788. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_neural_activity.py +0 -0
  789. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_output_contract.py +0 -0
  790. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_paint_program.py +0 -0
  791. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_place_labels.py +0 -0
  792. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_axis.py +0 -0
  793. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_broken_axis.py +0 -0
  794. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_clip.py +0 -0
  795. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_engine.py +0 -0
  796. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_facets.py +0 -0
  797. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_inset.py +0 -0
  798. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_key.py +0 -0
  799. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_labels.py +0 -0
  800. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_legend.py +0 -0
  801. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_marks.py +0 -0
  802. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_notes.py +0 -0
  803. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_polar.py +0 -0
  804. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_publication.py +0 -0
  805. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_quality_review.py +0 -0
  806. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_raster.py +0 -0
  807. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_ribbon.py +0 -0
  808. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_scale.py +0 -0
  809. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_swarm.py +0 -0
  810. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_plot_time.py +0 -0
  811. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_presets.py +0 -0
  812. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_publication_limits.py +0 -0
  813. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_regional_report.py +0 -0
  814. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_release_adversarial.py +0 -0
  815. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_devices.py +0 -0
  816. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_glyphs.py +0 -0
  817. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_jobs.py +0 -0
  818. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_outline.py +0 -0
  819. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_pdf.py +0 -0
  820. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_pdf_text.py +0 -0
  821. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_quality.py +0 -0
  822. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_svg_perf.py +0 -0
  823. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_render_v3.py +0 -0
  824. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_review_v25.py +0 -0
  825. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_round4_plot.py +0 -0
  826. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_routing_avoid.py +0 -0
  827. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_scatter_rendering.py +0 -0
  828. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_scene_annotations.py +0 -0
  829. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_scene_pass.py +0 -0
  830. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_scene_projection.py +0 -0
  831. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_scene_templates.py +0 -0
  832. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_scientific_report.py +0 -0
  833. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_sections.py +0 -0
  834. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_shared_plot_margins.py +0 -0
  835. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_showcase_library.py +0 -0
  836. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_showcase_round3.py +0 -0
  837. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_slabs_regions.py +0 -0
  838. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_structure_figure.py +0 -0
  839. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_table_adapters.py +0 -0
  840. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_target_pose.py +0 -0
  841. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_temporal_adapters.py +0 -0
  842. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_text_markup.py +0 -0
  843. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_text_on_path.py +0 -0
  844. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_theme_font_style.py +0 -0
  845. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_themes.py +0 -0
  846. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_anchor_pin.py +0 -0
  847. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_api.py +0 -0
  848. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_backend_blender.py +0 -0
  849. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_blender.py +0 -0
  850. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_depth_order.py +0 -0
  851. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_drill.py +0 -0
  852. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_hlr.py +0 -0
  853. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_mesh.py +0 -0
  854. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_order_vector.py +0 -0
  855. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_overlay.py +0 -0
  856. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_parse.py +0 -0
  857. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_patches.py +0 -0
  858. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_place.py +0 -0
  859. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_protein.py +0 -0
  860. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_ridges.py +0 -0
  861. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_sort.py +0 -0
  862. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_sort_budget.py +0 -0
  863. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_three_view.py +0 -0
  864. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_typeset.py +0 -0
  865. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_v4_selection.py +0 -0
  866. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_volume.py +0 -0
  867. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_watch_review.py +0 -0
  868. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/test_world_map_example.py +0 -0
  869. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/README.md +0 -0
  870. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/categories-pdf.png +0 -0
  871. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/categories-svg.png +0 -0
  872. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/components-pdf.png +0 -0
  873. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/components-svg.png +0 -0
  874. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/dense-pdf.png +0 -0
  875. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/dense-svg.png +0 -0
  876. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/fonts.json +0 -0
  877. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/inset-pdf.png +0 -0
  878. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/inset-svg.png +0 -0
  879. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/markers-pdf.png +0 -0
  880. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/markers-svg.png +0 -0
  881. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/renderers.json +0 -0
  882. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/type-opacity-pdf.png +0 -0
  883. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/type-opacity-svg.png +0 -0
  884. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
  885. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
  886. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-dense-pdf.png +0 -0
  887. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-dense-svg.png +0 -0
  888. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
  889. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
  890. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
  891. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
  892. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
  893. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
  894. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
  895. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-workflow-svg.png +0 -0
  896. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v25-document-pdf.png +0 -0
  897. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/baseline/v25-document-svg.png +0 -0
  898. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/fixtures.py +0 -0
  899. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tests/visual/v2-budgets.json +0 -0
  900. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/benchmark_diagrams.py +0 -0
  901. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/benchmark_lines.py +0 -0
  902. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/benchmark_v2.py +0 -0
  903. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/benchmark_v4.py +0 -0
  904. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/browser_study.js +0 -0
  905. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/check_render_wheel.py +0 -0
  906. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/dock_ligand.py +0 -0
  907. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/docs_gallery.json +0 -0
  908. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/docs_previews.json +0 -0
  909. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/docs_previews.py +0 -0
  910. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/docs_site.py +0 -0
  911. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/docs_theme/404.html +0 -0
  912. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/docs_theme/card.html +0 -0
  913. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/docs_theme/gallery.html +0 -0
  914. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/docs_theme/home.html +0 -0
  915. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/docs_theme/main.html +0 -0
  916. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/gen_api.py +0 -0
  917. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/prepare_world_map.py +0 -0
  918. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/preset_gallery.py +0 -0
  919. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/showcase_gallery.py +0 -0
  920. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/stress20.py +0 -0
  921. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/strip_pdb.py +0 -0
  922. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/v3_showcase.py +0 -0
  923. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/v4-budgets.json +0 -0
  924. {inklet-4.0.0.dev1 → inklet-4.0.0.dev3}/tools/visual_check.py +0 -0
@@ -70,6 +70,7 @@ jobs:
70
70
  .venv/bin/python examples/v4/time_series.py --output out/v4-time
71
71
  .venv/bin/python examples/v4/statistical_views.py --output out/v4-statistics
72
72
  .venv/bin/python examples/v4/regional_report.py --render --output out/v4-regional-report
73
+ .venv/bin/python examples/v4/regional_report.py --renderer compiled --editor --render --output out/v4-compiled-regional
73
74
  .venv/bin/python examples/v4/engineering_report.py --render --output out/v4-engineering
74
75
  .venv/bin/python examples/v4/scientific_report.py --render --output out/v4-scientific
75
76
  .venv/bin/python examples/v4/mesh_fields.py --render --output out/v4-mesh-fields
@@ -92,6 +93,13 @@ jobs:
92
93
  run: |
93
94
  .venv/bin/python tools/benchmark_engine.py --repeat 1 --output out/engine-benchmark.json
94
95
  .venv/bin/python examples/engine_review.py --output out/engine-review
96
+ .venv/bin/python examples/compositing_review.py --output out/compositing-review
97
+ .venv/bin/python examples/hatch_review.py --output out/hatch-review
98
+ .venv/bin/python examples/clipping_review.py --output out/clipping-review
99
+ .venv/bin/python examples/render_scene_review.py --output out/render-scene-review
100
+ .venv/bin/python examples/dense_scatter_review.py --output out/dense-scatter-review
101
+ .venv/bin/python examples/compiled_marker_shapes.py --output out/compiled-marker-shapes
102
+ .venv/bin/python examples/compiled_scene_viewer.py --output out/compiled-scene-viewer
95
103
  - name: Diagram routing and label review
96
104
  run: |
97
105
  .venv/bin/python tools/benchmark_diagrams.py --repeat 1 --output out/diagram-benchmark.json
@@ -6,7 +6,7 @@ on:
6
6
  tag:
7
7
  description: Published GitHub release tag
8
8
  required: true
9
- default: v4.0.0.dev1
9
+ default: v4.0.0.dev3
10
10
  type: string
11
11
  dry_run:
12
12
  description: Validate release files without uploading to PyPI
@@ -43,7 +43,7 @@ jobs:
43
43
  RELEASE_TAG: ${{ inputs.tag }}
44
44
  run: |
45
45
  [[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(\.dev[0-9]+)?$ ]] || {
46
- echo 'Expected a stable or development tag such as v3.1.0 or v4.0.0.dev1' >&2
46
+ echo 'Expected a stable or development tag such as v3.1.0 or v4.0.0.dev3' >&2
47
47
  exit 1
48
48
  }
49
49
  gh release view "$RELEASE_TAG" --json isDraft,isPrerelease > "$RUNNER_TEMP/release.json"
@@ -1,5 +1,146 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 4.0.0.dev3 — 2026-09-12
6
+
7
+ Third development preview: shared scene execution, dense marker rendering,
8
+ linked compiled reports and the first reproducible plot-style editor. Install
9
+ explicitly with `python -m pip install "inklet==4.0.0.dev3"`; 3.1.0 remains stable.
10
+
11
+ - Add an offline inspector for named plot colours, marker radii and line widths,
12
+ with bounded undo/redo and separate versioned overrides. Preserve compatible
13
+ choices across source revisions and page widths; reject or explicitly report
14
+ orphaned targets. Reproduce edited views through Python SVG/PDF/PNG exports.
15
+ - Prepare style commands atomically, preserve selection and view state, and
16
+ prevent file/command/revision races. Add edited full-report visual comparisons,
17
+ failure cases, browser/Python agreement and installed-wheel checks.
18
+
19
+ - Add opt-in compiled execution to linked browser figures, preserving keyed
20
+ selection, filtering, saved states, revision policies and vector exports.
21
+ Pack contiguous circle runs without reordering paint, retain native SVG for
22
+ other marks, and intersect visibility masks with spatial candidates.
23
+ - Share the compiled viewer runtime with the linked report instead of duplicating
24
+ GPU execution. Retain immutable records during filtering and release surfaces
25
+ on revision replacement. Add a runnable regional report mode, complete-figure
26
+ display comparisons and state/revision/export regressions across backends.
27
+
28
+ - Build ordered marker candidates with a reusable bitmap instead of temporary
29
+ JavaScript result arrays and comparison sorting. Accept fully contained grid
30
+ cells without rechecking each footprint, preserving source paint order and
31
+ independently owned result arrays.
32
+ - Measure 250,000- and million-point index queries and browser submission.
33
+ The million-point zoom query falls from 5.253 to 0.629 ms in the standalone
34
+ study; tiny queries are slightly slower. Retained bitmap storage adds one bit
35
+ per row. Add word-boundary and query-result ownership regressions.
36
+
37
+ - Cull individual packed markers with a shared spatial index of full marker
38
+ footprints. Preserve source order, antialiasing margins and vector exports.
39
+ Canvas paints candidates; WebGL2 fetches immutable records using compact
40
+ row-index uploads. Report candidate counts, uploads and index storage.
41
+ - Add a 250,000-point stress recipe, brute-force and visual fidelity checks,
42
+ and separate submission/GPU timer studies. Canvas window submission improves
43
+ from 88.5 to 10.8 ms in the recorded workload; GPU draw time falls from 0.325
44
+ to 0.042 ms while CPU submission rises from 0.9 to 2.2 ms. Document memory costs.
45
+
46
+ - Size compiled-viewer surfaces around the visible region with a retained pan
47
+ margin; skip painting offscreen layers and reuse their immutable buffers on
48
+ return. Preserve native clipping, marker order and complete vector export.
49
+ - Keep deep-zoom resolution within the existing per-surface pixel limits. In
50
+ the five-panel RTX 5090 study, 8× zoom uses about 3.05 million backing pixels
51
+ instead of 20 million, and median WebGL submission falls from 49.0 to 13.8 ms.
52
+ Add normal/deep-zoom fidelity, visibility and re-entry checks with raw studies.
53
+
54
+ - Retain compiled-viewer backing surfaces across pans and small zoom changes,
55
+ repaint only when resolution changes, and shrink after large zoom-outs.
56
+ Read all SVG transforms before changing canvas dimensions. Preserve the
57
+ existing pixel budgets, native compositing, vector export and error fallback.
58
+ - Report surface paints, resizes, reuse and allocated pixel counts. Add hardware
59
+ before/after profiles and regressions for reuse, resolution growth, shrinking
60
+ and context loss. Warm small-zoom submission falls from 47.8 ms to 0.5 ms in
61
+ the measured five-panel RTX 5090 workload; startup and growth are excluded.
62
+
63
+ - Accelerate filled square, triangle, diamond and star marker batches in the
64
+ compiled-scene viewer. Preserve exact polygon geometry, per-point sizes and
65
+ colours, winding rules, paint order, clipping and vector SVG download.
66
+ - Add a five-panel interactive marker comparison and test complete composited
67
+ screenshots against SVG at two display resolutions, including concave
68
+ polygons. Self-intersections, open, outlined and curved markers stay native.
69
+ - Validate the five-panel viewer on an RTX 5090 Laptop GPU through WSL/D3D12.
70
+ Publish timings and display comparisons; Canvas remains faster for this
71
+ measured workload, so hardware availability is not presented as a speedup.
72
+
73
+ - Add `RenderScene.to_html()` for offline native-scene viewing, with instanced
74
+ WebGL2 circle layers, Canvas fallback and native SVG artwork in paint order.
75
+ Automatic selection avoids recognized software WebGL renderers. Report
76
+ backend decisions, context loss, display limits and buffer uploads.
77
+ - Keep packed source buffers shared and immutable across browser view changes;
78
+ reconstruct vector SVG from 64-bit records, including exact source indices.
79
+ - Add a complete interactive figure, shader/fallback/resource tests and native
80
+ export comparisons. Keyed-row interaction migration and broader GPU geometry
81
+ remain open; hardware performance is not inferred from software WebGL tests.
82
+
83
+ - Store dense vector scatter in immutable 36-byte marker records, preserving
84
+ source order, per-point size/colour, physical strokes and native vector output.
85
+ Series with at least 256 points use batches unless placement anchors or
86
+ broken axes require individual nodes. Dense point handles become batch
87
+ handles; source indices remain inspectable in buffers and SVG elements.
88
+ - Stream batches through SVG/PDF with bounded prototype caches, preserve
89
+ geometric clipping and painted windows, and retain batch geometry on revisions.
90
+ - Check packed palettes against colour keys and inspect individual marker
91
+ footprints for text overlaps, avoiding false collisions over empty cloud space.
92
+ - Add a 38,300-marker four-panel review, native-backend fidelity tests and
93
+ reproducible construction/export/memory measurements, including a separate
94
+ million-point construction test.
95
+
96
+ - Compile a shared native render scene for SVG, PDF and PNG, resolving styles,
97
+ transforms, clipping and compositing once. Retain it across document exports.
98
+ - Reuse unchanged scene nodes and geometry across revisions; share small shapes
99
+ and shaped labels by value, expose invalidation reasons and conservative
100
+ redraw coverage, and report render-compilation work separately from layout.
101
+ - Reject missing image and font resources before native export; SVG no longer
102
+ silently emits broken image links or substitutes an unavailable font file.
103
+ - Snapshot file-backed image bytes so completed figures survive source changes;
104
+ detect updated image inputs on subsequent document compilation and reject
105
+ exports using changed or missing font files.
106
+ - Add a complete six-panel scene/revision review and repeated-export benchmarks.
107
+ Browser/GPU execution and finer layout invalidation remain open.
108
+
109
+ ## 4.0.0.dev2 — 2026-09-08
110
+
111
+ Second development preview. Install explicitly with
112
+ `python -m pip install "inklet==4.0.0.dev2"`; 3.1.0 remains stable.
113
+
114
+ - Preserve open cubic segments through geometric clipping, using parameter
115
+ subdivision and bounded adaptive measurement sampling in the clip frame.
116
+ - Add `window()` for nested, transformed visual clipping of all SVG/PDF/PNG
117
+ paint, including glyphs, images, markers, filled curves and rounded corners.
118
+ Keep window layout, painted bounds and authored child geometry distinct;
119
+ expose inherited clip regions and visibility filtering through resolution.
120
+ - Preserve windows through document compilation/copying and account for hidden
121
+ content in page-bound and path-crossing diagnostics.
122
+ - Reduce allocation in dense-line clipping; add an eight-panel rendering
123
+ review, independent backend checks and reproducible clipping/line benchmarks.
124
+
125
+
126
+ - Share exact hatch-line geometry between SVG and PDF, with reusable local
127
+ coverage resources and independent shape clips. Preserve holes, transforms,
128
+ border styles and fill opacity without periodic tile seams or inherited
129
+ border settings affecting the fill.
130
+ - Reuse hatch coverage across nearby shape sizes, retain explicit work limits,
131
+ and add an illustrated review plus repeated/distinct-size export benchmarks.
132
+
133
+ - Correct PDF compositing for individual filled-and-stroked shapes, text halos
134
+ and vector brushes: group opacity fades their combined paint once.
135
+ - Preserve palette and color-key PNG transparency in PDF, including partial
136
+ palette alpha and file-backed images.
137
+ - Reuse subtree painted bounds and paint-count analysis within each PDF page
138
+ export; nested transparency groups no longer remeasure the same glyphs for
139
+ every ancestor. Keep inherited style/transform contexts separate and discard
140
+ the caches after export.
141
+ - Add an illustrated compositing review, independent SVG/Poppler comparisons
142
+ and a nested-group workload to the rendering benchmark and CI checks.
143
+
3
144
  ## 4.0.0.dev1 — 2026-09-08
4
145
 
5
146
  First installable 4.0 development preview. This collects the linked-document,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: inklet
3
- Version: 4.0.0.dev1
3
+ Version: 4.0.0.dev3
4
4
  Summary: Scientific figures with live data, measured layout, and consistent vector exports.
5
5
  Project-URL: Repository, https://github.com/Mapika/inklet
6
6
  Project-URL: Documentation, https://inklet.readthedocs.io/en/latest/
@@ -81,18 +81,17 @@ their signatures and report schemas may change.
81
81
 
82
82
  ## 4.0 development preview
83
83
 
84
- **4.0.0.dev1** adds offline linked charts, maps, calibrated images, mesh fields,
85
- contours and streamlines, with saved selections and reproducible exports.
86
- It also includes date/UTC axes, facets, pandas/Polars adapters and shared
87
- plotting-quality improvements.
88
-
84
+ **4.0.0.dev3** adds shared compiled rendering, packed dense markers, offline
85
+ WebGL2/Canvas viewing, and a plot-style inspector with undo/redo and saved
86
+ visual overrides. Linked charts, maps and scientific reports preserve selections,
87
+ source revisions and reproducible vector exports.
89
88
  ```sh
90
- python -m pip install "inklet==4.0.0.dev1"
89
+ python -m pip install "inklet==4.0.0.dev3"
91
90
  ```
92
91
 
93
92
  [Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
94
93
  [4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
95
- [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev1)
94
+ [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev3)
96
95
 
97
96
  This is an opt-in development release. Experimental APIs and saved-state schemas
98
97
  may change; 3.1.0 remains the stable release. General browser editing,
@@ -31,18 +31,17 @@ their signatures and report schemas may change.
31
31
 
32
32
  ## 4.0 development preview
33
33
 
34
- **4.0.0.dev1** adds offline linked charts, maps, calibrated images, mesh fields,
35
- contours and streamlines, with saved selections and reproducible exports.
36
- It also includes date/UTC axes, facets, pandas/Polars adapters and shared
37
- plotting-quality improvements.
38
-
34
+ **4.0.0.dev3** adds shared compiled rendering, packed dense markers, offline
35
+ WebGL2/Canvas viewing, and a plot-style inspector with undo/redo and saved
36
+ visual overrides. Linked charts, maps and scientific reports preserve selections,
37
+ source revisions and reproducible vector exports.
39
38
  ```sh
40
- python -m pip install "inklet==4.0.0.dev1"
39
+ python -m pip install "inklet==4.0.0.dev3"
41
40
  ```
42
41
 
43
42
  [Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
44
43
  [4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
45
- [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev1)
44
+ [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev3)
46
45
 
47
46
  This is an opt-in development release. Experimental APIs and saved-state schemas
48
47
  may change; 3.1.0 remains the stable release. General browser editing,
@@ -18,6 +18,23 @@ took before layout still resolves inside the finished figure.
18
18
 
19
19
  Declared format support; no renderer is selected implicitly.
20
20
 
21
+ #### `class RenderScene(root: 'SceneNode', bbox: 'Rect', stats: 'Mapping', changes: 'tuple[SceneChange, ...]', _nodes: 'Mapping', _resources: 'Mapping', _images: 'Mapping', _fonts: 'Mapping') -> None`
22
+
23
+ A compiled native scene shared by SVG, PDF and PNG exports.
24
+
25
+ * `walk()`
26
+ * `validate_fonts()`
27
+ * `sources_current()` -- Check external inputs when a document considers reusing a snapshot.
28
+ * `to_svg(**options)`
29
+ * `to_pdf(**options)`
30
+ * `to_png(**options)`
31
+ * `to_html(*, title='Inklet figure', backend='auto', **options)` -- Offline experimental viewer; WebGL2 filled markers, Canvas fallback, SVG art.
32
+ * `damage_bounds(previous: 'RenderScene')` -- Conservative old/new ink union for changed placements, in page mm.
33
+
34
+ #### `compile_scene(root: 'Diagram | RenderScene', *, previous: 'RenderScene | None' = None) -> 'RenderScene'`
35
+
36
+ Resolve a drawing for all native backends, reusing an optional revision.
37
+
21
38
  #### `blend(node, mode='multiply')`
22
39
 
23
40
  Blend an isolated group with the artwork behind it, natively in SVG/PDF.
@@ -457,6 +474,10 @@ One data glyph, centred on its own origin so `place()` lands it on the point it
457
474
 
458
475
  Put children at explicit coordinates, in millimetres.
459
476
 
477
+ #### `window(items: 'Diagram | Iterable[Diagram]', region: 'Rect | Sequence[Point]', *, kind: 'str' = 'window', **style) -> 'Diagram'`
478
+
479
+ Crop painted content to a fixed convex window, in local millimetres.
480
+
460
481
  #### `clip(items: 'Diagram | Iterable[Diagram]', region: 'Rect | Sequence[Point]', *, kind: 'str' = 'clip', strict: 'bool' = False, **style) -> 'Diagram'`
461
482
 
462
483
  Cut `items` down to `region`, in the coordinate frame you pass it in.
@@ -1019,19 +1040,19 @@ One actionable finding. `where` is figure-space, in millimetres.
1019
1040
 
1020
1041
  Compact report. Returns a single string with no trailing newline.
1021
1042
 
1022
- #### `to_svg(root: 'Diagram', *, width: 'float | str | None' = None, height: 'float | str | None' = None, margin: 'float' = 0.0, background: 'str | None' = None, precision: 'int' = 3, title: 'str | None' = None, compact: 'bool | str' = 'auto', text: 'str' = 'names') -> 'str'`
1043
+ #### `to_svg(root: 'Diagram | RenderScene', *, width: 'float | str | None' = None, height: 'float | str | None' = None, margin: 'float' = 0.0, background: 'str | None' = None, precision: 'int' = 3, title: 'str | None' = None, compact: 'bool | str' = 'auto', text: 'str' = 'names') -> 'str'`
1023
1044
 
1024
1045
  Render a diagram tree to a self-contained SVG document.
1025
1046
 
1026
- #### `save_svg(root: 'Diagram', path: 'str', *, width: 'float | str | None' = None, height: 'float | str | None' = None, margin: 'float' = 0.0, background: 'str | None' = None, precision: 'int' = 3, title: 'str | None' = None, compact: 'bool | str' = 'auto', text: 'str' = 'names') -> 'None'`
1047
+ #### `save_svg(root: 'Diagram | RenderScene', path: 'str', *, width: 'float | str | None' = None, height: 'float | str | None' = None, margin: 'float' = 0.0, background: 'str | None' = None, precision: 'int' = 3, title: 'str | None' = None, compact: 'bool | str' = 'auto', text: 'str' = 'names') -> 'None'`
1027
1048
 
1028
1049
  Write `root` to `path` as SVG. `to_svg` is the same thing as a string.
1029
1050
 
1030
- #### `to_pdf(root: 'Diagram | Sequence[Diagram]', *, width: 'float | str | None' = None, height: 'float | str | None' = None, margin: 'float' = 0.0, background: 'str | None' = None, precision: 'int' = 3, title: 'str | None' = None, compress: 'bool' = True, text: 'str' = 'outline') -> 'bytes'`
1051
+ #### `to_pdf(root: 'Diagram | RenderScene | Sequence[Diagram | RenderScene]', *, width: 'float | str | None' = None, height: 'float | str | None' = None, margin: 'float' = 0.0, background: 'str | None' = None, precision: 'int' = 3, title: 'str | None' = None, compress: 'bool' = True, text: 'str' = 'outline') -> 'bytes'`
1031
1052
 
1032
1053
  Render one diagram tree, or a sequence of them, to a PDF document.
1033
1054
 
1034
- #### `save_pdf(root: 'Diagram | Sequence[Diagram]', path: 'str | Path', **kwargs) -> 'None'`
1055
+ #### `save_pdf(root: 'Diagram | RenderScene | Sequence[Diagram | RenderScene]', path: 'str | Path', **kwargs) -> 'None'`
1035
1056
 
1036
1057
  Write `root` to `path` as PDF. `to_pdf` is the same thing as bytes.
1037
1058
 
@@ -1058,9 +1079,9 @@ Flatten the tree into world transforms, keyed by node id.
1058
1079
 
1059
1080
  ## Core types and units
1060
1081
 
1061
- #### `class Diagram(prim: 'Prim | None' = None, children: "tuple['Diagram', ...]" = (), transform: 'Affine' = Affine(a=1.0, b=0.0, c=0.0, d=1.0, e=0.0, f=0.0), style: 'Style' = Style(fill=None, stroke=None, stroke_width=None, stroke_dash=None, stroke_linecap=None, stroke_linejoin=None, opacity=None, fill_opacity=None, stroke_opacity=None, corner_radius=None, font_family=None, font_size=None, font_weight=None, font_style=None, text_fill=None, line_height=None, halo=None, halo_color=None), kind: 'str' = 'g', name: 'str | None' = None, id: 'str' = '', envelope_override: 'Envelope | None' = None, attached_to: 'tuple[str, ...]' = (), anchors: 'dict[str, Vec2]' = <factory>, notes: 'dict[str, object]' = <factory>, _cache: 'dict' = <factory>) -> None`
1082
+ #### `class Diagram(prim: 'Prim | None' = None, children: "tuple['Diagram', ...]" = (), transform: 'Affine' = Affine(a=1.0, b=0.0, c=0.0, d=1.0, e=0.0, f=0.0), style: 'Style' = Style(fill=None, stroke=None, stroke_width=None, stroke_dash=None, stroke_linecap=None, stroke_linejoin=None, opacity=None, fill_opacity=None, stroke_opacity=None, corner_radius=None, font_family=None, font_size=None, font_weight=None, font_style=None, text_fill=None, line_height=None, halo=None, halo_color=None), kind: 'str' = 'g', name: 'str | None' = None, id: 'str' = '', envelope_override: 'Envelope | None' = None, attached_to: 'tuple[str, ...]' = (), anchors: 'dict[str, Vec2]' = <factory>, notes: 'dict[str, object]' = <factory>, clip_region: 'tuple[Vec2, ...]' = (), _cache: 'dict' = <factory>) -> None`
1062
1083
 
1063
- Diagram(prim: 'Prim | None' = None, children: "tuple['Diagram', ...]" = (), transform: 'Affine' = Affine(a=1.0, b=0.0, c=0.0, d=1.0, e=0.0, f=0.0), style: 'Style' = Style(fill=None, stroke=None, stroke_width=None, stroke_dash=None, stroke_linecap=None, stroke_linejoin=None, opacity=None, fill_opacity=None, stroke_opacity=None, corner_radius=None, font_family=None, font_size=None, font_weight=None, font_style=None, text_fill=None, line_height=None, halo=None, halo_color=None), kind: 'str' = 'g', name: 'str | None' = None, id: 'str' = '', envelope_override: 'Envelope | None' = None, attached_to: 'tuple[str, ...]' = (), anchors: 'dict[str, Vec2]' = <factory>, notes: 'dict[str, object]' = <factory>, _cache: 'dict' = <factory>)
1084
+ Diagram(prim: 'Prim | None' = None, children: "tuple['Diagram', ...]" = (), transform: 'Affine' = Affine(a=1.0, b=0.0, c=0.0, d=1.0, e=0.0, f=0.0), style: 'Style' = Style(fill=None, stroke=None, stroke_width=None, stroke_dash=None, stroke_linecap=None, stroke_linejoin=None, opacity=None, fill_opacity=None, stroke_opacity=None, corner_radius=None, font_family=None, font_size=None, font_weight=None, font_style=None, text_fill=None, line_height=None, halo=None, halo_color=None), kind: 'str' = 'g', name: 'str | None' = None, id: 'str' = '', envelope_override: 'Envelope | None' = None, attached_to: 'tuple[str, ...]' = (), anchors: 'dict[str, Vec2]' = <factory>, notes: 'dict[str, object]' = <factory>, clip_region: 'tuple[Vec2, ...]' = (), _cache: 'dict' = <factory>)
1064
1085
 
1065
1086
  * `extent(direction: 'Vec2') -> 'float'` -- How far this reaches along a direction, in the parent's frame. This is what stacking asks, and why a rotated shape packs tighter than its bbox.
1066
1087
  * `anchor(name: 'str', at: 'tuple[float, float] | Vec2') -> "'Diagram'"` -- Register a named point. A tuple is read as fractions of the local bounding box, (0, 0) being its top-left corner -- the natural way to point at an ear in a photograph.
@@ -0,0 +1,119 @@
1
+ {
2
+ "schema": "inklet.clipping-benchmark/1",
3
+ "python": "3.12.3",
4
+ "platform": "Linux-6.6.87.2-microsoft-standard-WSL2-x86_64-with-glibc2.39",
5
+ "source_sha256": "b4ded74e40916e536713f7589469a20bb25677587c03e83942cf6aeb7ecf0bd5",
6
+ "cases": [
7
+ {
8
+ "case": "line",
9
+ "runs": [
10
+ {
11
+ "clip_seconds": 0.09736313400208019,
12
+ "svg_seconds": 0.010083654022309929,
13
+ "pdf_seconds": 0.01944988899049349,
14
+ "total_seconds": 0.1268966770148836,
15
+ "svg_bytes": 76870,
16
+ "pdf_bytes": 36176
17
+ },
18
+ {
19
+ "clip_seconds": 0.09901987100602128,
20
+ "svg_seconds": 0.010495024005649611,
21
+ "pdf_seconds": 0.0206202779954765,
22
+ "total_seconds": 0.1301351730071474,
23
+ "svg_bytes": 76870,
24
+ "pdf_bytes": 36176
25
+ },
26
+ {
27
+ "clip_seconds": 0.10801237399573438,
28
+ "svg_seconds": 0.01182610000250861,
29
+ "pdf_seconds": 0.022811452014138922,
30
+ "total_seconds": 0.1426499260123819,
31
+ "svg_bytes": 76870,
32
+ "pdf_bytes": 36176
33
+ }
34
+ ],
35
+ "median": {
36
+ "clip_seconds": 0.09901987100602128,
37
+ "svg_seconds": 0.010495024005649611,
38
+ "pdf_seconds": 0.0206202779954765,
39
+ "total_seconds": 0.1301351730071474,
40
+ "svg_bytes": 76870,
41
+ "pdf_bytes": 36176
42
+ }
43
+ },
44
+ {
45
+ "case": "band",
46
+ "runs": [
47
+ {
48
+ "clip_seconds": 0.6217630119936075,
49
+ "svg_seconds": 0.05115153800579719,
50
+ "pdf_seconds": 0.10317503899568692,
51
+ "total_seconds": 0.7760895889950916,
52
+ "svg_bytes": 316513,
53
+ "pdf_bytes": 145203
54
+ },
55
+ {
56
+ "clip_seconds": 0.626939455018146,
57
+ "svg_seconds": 0.06268787098815665,
58
+ "pdf_seconds": 0.09176701598335057,
59
+ "total_seconds": 0.7813943419896532,
60
+ "svg_bytes": 316513,
61
+ "pdf_bytes": 145203
62
+ },
63
+ {
64
+ "clip_seconds": 0.6646606319991406,
65
+ "svg_seconds": 0.05158257801667787,
66
+ "pdf_seconds": 0.09825415699742734,
67
+ "total_seconds": 0.8144973670132458,
68
+ "svg_bytes": 316513,
69
+ "pdf_bytes": 145203
70
+ }
71
+ ],
72
+ "median": {
73
+ "clip_seconds": 0.626939455018146,
74
+ "svg_seconds": 0.05158257801667787,
75
+ "pdf_seconds": 0.09825415699742734,
76
+ "total_seconds": 0.7813943419896532,
77
+ "svg_bytes": 316513,
78
+ "pdf_bytes": 145203
79
+ }
80
+ },
81
+ {
82
+ "case": "curves",
83
+ "runs": [
84
+ {
85
+ "clip_seconds": 0.02900044500711374,
86
+ "svg_seconds": 0.0009433439990971237,
87
+ "pdf_seconds": 0.0009197680046781898,
88
+ "total_seconds": 0.030863557010889053,
89
+ "svg_bytes": 5248,
90
+ "pdf_bytes": 3319
91
+ },
92
+ {
93
+ "clip_seconds": 0.030080602009547874,
94
+ "svg_seconds": 0.0012863579904660583,
95
+ "pdf_seconds": 0.0010805090132635087,
96
+ "total_seconds": 0.03244746901327744,
97
+ "svg_bytes": 5248,
98
+ "pdf_bytes": 3319
99
+ },
100
+ {
101
+ "clip_seconds": 0.029620053013786674,
102
+ "svg_seconds": 0.0009497819992247969,
103
+ "pdf_seconds": 0.0013156150234863162,
104
+ "total_seconds": 0.03188545003649779,
105
+ "svg_bytes": 5248,
106
+ "pdf_bytes": 3319
107
+ }
108
+ ],
109
+ "median": {
110
+ "clip_seconds": 0.029620053013786674,
111
+ "svg_seconds": 0.0009497819992247969,
112
+ "pdf_seconds": 0.0010805090132635087,
113
+ "total_seconds": 0.03188545003649779,
114
+ "svg_bytes": 5248,
115
+ "pdf_bytes": 3319
116
+ }
117
+ }
118
+ ]
119
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ "schema": "inklet.clipping-benchmark/1",
3
+ "python": "3.12.3",
4
+ "platform": "Linux-6.6.87.2-microsoft-standard-WSL2-x86_64-with-glibc2.39",
5
+ "source_sha256": "f323b9e3b780d44cc5ea1b286512bc9d3ec019a1387e814803964d8cc9d27d13",
6
+ "cases": [
7
+ {
8
+ "case": "line",
9
+ "runs": [
10
+ {
11
+ "clip_seconds": 0.2047820259758737,
12
+ "svg_seconds": 0.010102088999701664,
13
+ "pdf_seconds": 0.02015214299899526,
14
+ "total_seconds": 0.23503625797457062,
15
+ "svg_bytes": 76870,
16
+ "pdf_bytes": 36176
17
+ },
18
+ {
19
+ "clip_seconds": 0.20985267401556484,
20
+ "svg_seconds": 0.010210584994638339,
21
+ "pdf_seconds": 0.02010145699023269,
22
+ "total_seconds": 0.24016471600043587,
23
+ "svg_bytes": 76870,
24
+ "pdf_bytes": 36176
25
+ },
26
+ {
27
+ "clip_seconds": 0.20240381799521856,
28
+ "svg_seconds": 0.010233473003609106,
29
+ "pdf_seconds": 0.02053205599077046,
30
+ "total_seconds": 0.23316934698959813,
31
+ "svg_bytes": 76870,
32
+ "pdf_bytes": 36176
33
+ }
34
+ ],
35
+ "median": {
36
+ "clip_seconds": 0.2047820259758737,
37
+ "svg_seconds": 0.010210584994638339,
38
+ "pdf_seconds": 0.02015214299899526,
39
+ "total_seconds": 0.23503625797457062,
40
+ "svg_bytes": 76870,
41
+ "pdf_bytes": 36176
42
+ }
43
+ },
44
+ {
45
+ "case": "band",
46
+ "runs": [
47
+ {
48
+ "clip_seconds": 0.6113144700066186,
49
+ "svg_seconds": 0.05068271100753918,
50
+ "pdf_seconds": 0.0926879330072552,
51
+ "total_seconds": 0.754685114021413,
52
+ "svg_bytes": 316513,
53
+ "pdf_bytes": 145203
54
+ },
55
+ {
56
+ "clip_seconds": 0.5794899000029545,
57
+ "svg_seconds": 0.0481099919998087,
58
+ "pdf_seconds": 0.08913570898585021,
59
+ "total_seconds": 0.7167356009886134,
60
+ "svg_bytes": 316513,
61
+ "pdf_bytes": 145203
62
+ },
63
+ {
64
+ "clip_seconds": 0.5717577220057137,
65
+ "svg_seconds": 0.047267758985981345,
66
+ "pdf_seconds": 0.09365696899476461,
67
+ "total_seconds": 0.7126824499864597,
68
+ "svg_bytes": 316513,
69
+ "pdf_bytes": 145203
70
+ }
71
+ ],
72
+ "median": {
73
+ "clip_seconds": 0.5794899000029545,
74
+ "svg_seconds": 0.0481099919998087,
75
+ "pdf_seconds": 0.0926879330072552,
76
+ "total_seconds": 0.7167356009886134,
77
+ "svg_bytes": 316513,
78
+ "pdf_bytes": 145203
79
+ }
80
+ },
81
+ {
82
+ "case": "curves",
83
+ "runs": [
84
+ {
85
+ "clip_seconds": 0.03832915498060174,
86
+ "svg_seconds": 0.0019394969858694822,
87
+ "pdf_seconds": 0.002644603024236858,
88
+ "total_seconds": 0.04291325499070808,
89
+ "svg_bytes": 13575,
90
+ "pdf_bytes": 7041
91
+ },
92
+ {
93
+ "clip_seconds": 0.03621691299485974,
94
+ "svg_seconds": 0.0019186209829058498,
95
+ "pdf_seconds": 0.0025379790167789906,
96
+ "total_seconds": 0.04067351299454458,
97
+ "svg_bytes": 13575,
98
+ "pdf_bytes": 7041
99
+ },
100
+ {
101
+ "clip_seconds": 0.038817927008494735,
102
+ "svg_seconds": 0.0018433219811413437,
103
+ "pdf_seconds": 0.0024352470063604414,
104
+ "total_seconds": 0.04309649599599652,
105
+ "svg_bytes": 13575,
106
+ "pdf_bytes": 7041
107
+ }
108
+ ],
109
+ "median": {
110
+ "clip_seconds": 0.03832915498060174,
111
+ "svg_seconds": 0.0019186209829058498,
112
+ "pdf_seconds": 0.0025379790167789906,
113
+ "total_seconds": 0.04291325499070808,
114
+ "svg_bytes": 13575,
115
+ "pdf_bytes": 7041
116
+ }
117
+ }
118
+ ]
119
+ }
@@ -0,0 +1 @@
1
+ \caption{Clipping checks using original simulated data and artwork. (a) Geometrically clipped smooth response curves, retaining cubic segments. (b) A dense signal with a narrow peak and an explicit missing-data gap; physical simplification tolerance 0.02 mm. (c) Filled uncertainty-like bands representing supplied simulated intervals, cropped with their outlines. (d) Large boundary markers and thick strokes cropped by a painted window. (e) A synthetic scalar image under a rotated convex window. (f) Glyphs and halos cropped together. (g) Rounded rectangles and an even-odd hole, cropped without changing their source geometry. (h) Nested windows with group opacity beside an unclipped sibling. Letter labels identify checks; the artwork contains no panel titles. Recipe and artwork: MIT, Mark Marosi. No measured data or inferred uncertainty.}