inklet 4.0.0.dev2__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.dev2 → inklet-4.0.0.dev3}/.github/workflows/checks.yml +5 -0
  2. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/.github/workflows/publish.yml +2 -2
  3. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/CHANGELOG.md +106 -0
  4. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/PKG-INFO +7 -9
  5. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/README.md +6 -8
  6. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/api.md +21 -4
  7. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-marker-shapes-caption.tex +1 -0
  8. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-marker-shapes.html +331 -0
  9. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-markers-display.json +13 -0
  10. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-markers-hardware.json +178 -0
  11. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-scene-viewer.html +331 -0
  12. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-viewer-display.json +12 -0
  13. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-viewer-export.json +12 -0
  14. inklet-4.0.0.dev3/docs/assets/research-preview/compiled-viewer-study.json +194 -0
  15. inklet-4.0.0.dev3/docs/assets/research-preview/dense-scatter-caption.tex +1 -0
  16. inklet-4.0.0.dev3/docs/assets/research-preview/marker-batches.json +144 -0
  17. inklet-4.0.0.dev3/docs/assets/research-preview/marker-index-after.json +231 -0
  18. inklet-4.0.0.dev3/docs/assets/research-preview/marker-index-before.json +231 -0
  19. inklet-4.0.0.dev3/docs/assets/research-preview/marker-index-browser-after.json +1693 -0
  20. inklet-4.0.0.dev3/docs/assets/research-preview/marker-index-browser-before.json +1693 -0
  21. inklet-4.0.0.dev3/docs/assets/research-preview/render-scene-caption.tex +1 -0
  22. inklet-4.0.0.dev3/docs/assets/research-preview/scenes-after.json +207 -0
  23. inklet-4.0.0.dev3/docs/assets/research-preview/scenes-before.json +207 -0
  24. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-culling-after.json +1649 -0
  25. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-culling-before.json +1429 -0
  26. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-culling-gpu-after.json +83 -0
  27. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-culling-gpu-before.json +78 -0
  28. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-redraw-after.json +885 -0
  29. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-redraw-before.json +789 -0
  30. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-redraw-display.json +12 -0
  31. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-redraw-profile.json +383 -0
  32. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-window-after.json +6275 -0
  33. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-window-before.json +3895 -0
  34. inklet-4.0.0.dev3/docs/assets/research-preview/viewer-window-display.json +12 -0
  35. inklet-4.0.0.dev3/docs/assets/v4/visual-overrides.png +0 -0
  36. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/browser-rendering.md +4 -0
  37. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/compatibility.md +1 -1
  38. inklet-4.0.0.dev3/docs/compiled-scenes.md +151 -0
  39. inklet-4.0.0.dev3/docs/compiled-viewer.md +302 -0
  40. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/design/v4.md +12 -0
  41. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/development-preview.md +23 -10
  42. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/installation.md +3 -3
  43. inklet-4.0.0.dev3/docs/marker-batches.md +132 -0
  44. inklet-4.0.0.dev3/docs/marker-culling.md +174 -0
  45. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/plotting.md +4 -0
  46. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/regional-report.md +42 -0
  47. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/rendering-engine.md +5 -0
  48. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/roadmap.md +6 -0
  49. inklet-4.0.0.dev3/docs/visual-editing.md +104 -0
  50. inklet-4.0.0.dev3/examples/compiled_marker_shapes.py +44 -0
  51. inklet-4.0.0.dev3/examples/compiled_scene_viewer.py +18 -0
  52. inklet-4.0.0.dev3/examples/dense_scatter_review.py +72 -0
  53. inklet-4.0.0.dev3/examples/render_scene_review.py +91 -0
  54. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/regional_report.py +19 -2
  55. inklet-4.0.0.dev3/gallery/compiled-marker-shapes.png +0 -0
  56. inklet-4.0.0.dev3/gallery/compiled-scene-viewer.png +0 -0
  57. inklet-4.0.0.dev3/gallery/compiled-viewer-culling.png +0 -0
  58. inklet-4.0.0.dev3/gallery/compiled-viewer-deep-zoom.png +0 -0
  59. inklet-4.0.0.dev3/gallery/dense-scatter-review.png +0 -0
  60. inklet-4.0.0.dev3/gallery/render-scene-data.png +0 -0
  61. inklet-4.0.0.dev3/gallery/render-scene-initial.png +0 -0
  62. inklet-4.0.0.dev3/gallery/render-scene-review.png +0 -0
  63. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/mkdocs.yml +5 -0
  64. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/pyproject.toml +1 -1
  65. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/__init__.py +3 -2
  66. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/core/__init__.py +2 -1
  67. inklet-4.0.0.dev3/src/inklet/core/batch.py +93 -0
  68. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/key_rules.py +15 -5
  69. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/rules.py +71 -11
  70. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/document/compiler.py +17 -3
  71. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/draw/clip.py +46 -1
  72. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/__init__.py +61 -7
  73. inklet-4.0.0.dev3/src/inklet/experimental/browser/compiled.js +53 -0
  74. inklet-4.0.0.dev3/src/inklet/experimental/browser/compiled.py +64 -0
  75. inklet-4.0.0.dev3/src/inklet/experimental/browser/editor.html +13 -0
  76. inklet-4.0.0.dev3/src/inklet/experimental/browser/editor.js +135 -0
  77. inklet-4.0.0.dev3/src/inklet/experimental/browser/overrides.py +96 -0
  78. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/page.html +1 -0
  79. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/runtime.js +33 -18
  80. inklet-4.0.0.dev3/src/inklet/experimental/scene_viewer/__init__.py +119 -0
  81. inklet-4.0.0.dev3/src/inklet/experimental/scene_viewer/controls.js +14 -0
  82. inklet-4.0.0.dev3/src/inklet/experimental/scene_viewer/page.html +4 -0
  83. inklet-4.0.0.dev3/src/inklet/experimental/scene_viewer/runtime.js +279 -0
  84. inklet-4.0.0.dev3/src/inklet/experimental/scene_viewer/spatial.js +52 -0
  85. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/figure.py +13 -3
  86. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/marks.py +7 -0
  87. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/panel.py +5 -1
  88. inklet-4.0.0.dev3/src/inklet/plot/scatter_batch.py +27 -0
  89. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/__init__.py +2 -1
  90. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/analysis.py +19 -14
  91. inklet-4.0.0.dev3/src/inklet/render/bounds.py +67 -0
  92. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/pdf.py +43 -48
  93. inklet-4.0.0.dev3/src/inklet/render/scene.py +312 -0
  94. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/svg.py +68 -48
  95. inklet-4.0.0.dev3/tests/test_browser_compiled.py +150 -0
  96. inklet-4.0.0.dev3/tests/test_browser_overrides.py +142 -0
  97. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_browser_switching.py +4 -3
  98. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_compositing_engine.py +8 -7
  99. inklet-4.0.0.dev3/tests/test_marker_batches.py +173 -0
  100. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_embed.py +4 -7
  101. inklet-4.0.0.dev3/tests/test_render_scene.py +199 -0
  102. inklet-4.0.0.dev3/tests/test_scene_culling.py +120 -0
  103. inklet-4.0.0.dev3/tests/test_scene_viewer.py +325 -0
  104. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_svg.py +4 -5
  105. inklet-4.0.0.dev3/tools/benchmark_batches.py +59 -0
  106. inklet-4.0.0.dev3/tools/benchmark_marker_index.mjs +26 -0
  107. inklet-4.0.0.dev3/tools/benchmark_scene_culling.js +20 -0
  108. inklet-4.0.0.dev3/tools/benchmark_scene_gpu.js +28 -0
  109. inklet-4.0.0.dev3/tools/benchmark_scene_redraw.js +21 -0
  110. inklet-4.0.0.dev3/tools/benchmark_scene_viewer.js +20 -0
  111. inklet-4.0.0.dev3/tools/benchmark_scene_zoom.js +17 -0
  112. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/check_wheel.py +14 -0
  113. inklet-4.0.0.dev3/tools/make_culling_review.py +33 -0
  114. inklet-4.0.0.dev3/tools/profile_scene_redraw.js +13 -0
  115. inklet-4.0.0.dev2/src/inklet/render/bounds.py +0 -58
  116. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/.gitattributes +0 -0
  117. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/.gitignore +0 -0
  118. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/.readthedocs.yaml +0 -0
  119. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/CONTRACT.md +0 -0
  120. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/CONTRIBUTING.md +0 -0
  121. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/LICENSE +0 -0
  122. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/THIRD_PARTY_NOTICES.md +0 -0
  123. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/brand/inklet-icon.svg +0 -0
  124. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/brand/inklet-logo-dark.svg +0 -0
  125. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/brand/inklet-logo-mono.svg +0 -0
  126. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/brand/inklet-logo.svg +0 -0
  127. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/brand/inklet-wordmark.svg +0 -0
  128. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/examples/quickstart.pdf +0 -0
  129. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/examples/quickstart.png +0 -0
  130. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/examples/quickstart.svg +0 -0
  131. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/axes-and-scales-1.png +0 -0
  132. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/calibrated-volumes-3.png +0 -0
  133. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/channels-and-contours-1.png +0 -0
  134. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-anchor.png +0 -0
  135. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-annotation.png +0 -0
  136. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
  137. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-branch.png +0 -0
  138. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-broken-axis.png +0 -0
  139. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-callout.png +0 -0
  140. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-clipping.png +0 -0
  141. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-creases.png +0 -0
  142. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-custom-key.png +0 -0
  143. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-cutout.png +0 -0
  144. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-dates.png +0 -0
  145. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-dense.png +0 -0
  146. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-elbows.png +0 -0
  147. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
  148. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-facets.png +0 -0
  149. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-fit-graph.png +0 -0
  150. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-flow-width.png +0 -0
  151. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-formula.png +0 -0
  152. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-graph.png +0 -0
  153. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-halo.png +0 -0
  154. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-heatmap.png +0 -0
  155. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-hole.png +0 -0
  156. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-inline-type.png +0 -0
  157. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-inset.png +0 -0
  158. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-labels.png +0 -0
  159. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-layers.png +0 -0
  160. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-letters.png +0 -0
  161. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-list.png +0 -0
  162. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-matrix.png +0 -0
  163. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-page-grid.png +0 -0
  164. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-polar.png +0 -0
  165. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-protein.png +0 -0
  166. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-routes.png +0 -0
  167. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
  168. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-scene.png +0 -0
  169. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-series-key.png +0 -0
  170. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-span.png +0 -0
  171. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
  172. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-swarm.png +0 -0
  173. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-text-path.png +0 -0
  174. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-toon.png +0 -0
  175. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-twin-axis.png +0 -0
  176. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
  177. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-violin.png +0 -0
  178. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
  179. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/data-1.png +0 -0
  180. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/data-3.png +0 -0
  181. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/dense-data-1.png +0 -0
  182. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/diagram-components-1.png +0 -0
  183. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/diagrams-1.png +0 -0
  184. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/layout-3.png +0 -0
  185. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/oblique-sections-2.png +0 -0
  186. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/plot-quality-after.png +0 -0
  187. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/plot-quality-before.png +0 -0
  188. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/plot-types-1.png +0 -0
  189. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/plotting-1.png +0 -0
  190. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/plotting-2.png +0 -0
  191. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/publication-plots-1.png +0 -0
  192. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/publication-plots-2.png +0 -0
  193. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/publication-plots-3.png +0 -0
  194. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/publication-plots-4.png +0 -0
  195. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/slabs-and-regions-1.png +0 -0
  196. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/three-images-1.png +0 -0
  197. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/guides/three-images-2.png +0 -0
  198. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/biology.json +0 -0
  199. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/clipping-after.json +0 -0
  200. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/clipping-before.json +0 -0
  201. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/clipping-caption.tex +0 -0
  202. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/clipping-lines-after.json +0 -0
  203. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/clipping-lines-before.json +0 -0
  204. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/comparison.json +0 -0
  205. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/compositing-after.json +0 -0
  206. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/compositing-before.json +0 -0
  207. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/compositing-caption.tex +0 -0
  208. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/diagram-after.json +0 -0
  209. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/diagram-before.json +0 -0
  210. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
  211. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/engine-after.json +0 -0
  212. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/engine-before.json +0 -0
  213. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/engine-review-caption.tex +0 -0
  214. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/fluorescence-biology.json +0 -0
  215. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/general-plots-caption.tex +0 -0
  216. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/general-plots.json +0 -0
  217. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/hatch-after.json +0 -0
  218. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/hatch-before.json +0 -0
  219. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/hatch-caption.tex +0 -0
  220. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
  221. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/label-intensities-native.csv +0 -0
  222. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/label-intensities.json +0 -0
  223. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/lines-after.json +0 -0
  224. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/lines-before.json +0 -0
  225. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/oblique-biology.json +0 -0
  226. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
  227. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/real-biology.json +0 -0
  228. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/revision.json +0 -0
  229. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/slab-biology.json +0 -0
  230. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/research-preview/study.json +0 -0
  231. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/after.json +0 -0
  232. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/before.json +0 -0
  233. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/browser-quality.json +0 -0
  234. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/browser-scatter.html +0 -0
  235. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/browser-scatter.png +0 -0
  236. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/browser-study.json +0 -0
  237. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/contours-streamlines-170mm.png +0 -0
  238. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/contours-streamlines-masked.png +0 -0
  239. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/contours-streamlines.html +0 -0
  240. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/contours-streamlines.png +0 -0
  241. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/engineering-report-170mm.png +0 -0
  242. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/engineering-report.html +0 -0
  243. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/engineering-report.png +0 -0
  244. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/faceted-operations.html +0 -0
  245. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/faceted-operations.png +0 -0
  246. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/linked-dashboard.html +0 -0
  247. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/linked-dashboard.png +0 -0
  248. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/linked-selection.html +0 -0
  249. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/linked-selection.png +0 -0
  250. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/mesh-fields-170mm.png +0 -0
  251. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/mesh-fields.html +0 -0
  252. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/mesh-fields.png +0 -0
  253. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/region-shapes.html +0 -0
  254. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/region-shapes.png +0 -0
  255. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/regional-analysis.html +0 -0
  256. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/regional-analysis.png +0 -0
  257. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/regional-report-160mm.png +0 -0
  258. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/regional-report.html +0 -0
  259. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/regional-report.png +0 -0
  260. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/scientific-report-170mm.png +0 -0
  261. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/scientific-report.html +0 -0
  262. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/scientific-report.png +0 -0
  263. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/statistical-views.html +0 -0
  264. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/statistical-views.png +0 -0
  265. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/table-inputs.html +0 -0
  266. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/table-inputs.png +0 -0
  267. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/time-series.html +0 -0
  268. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/time-series.png +0 -0
  269. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/world-population-2019.html +0 -0
  270. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/world-population-2019.json +0 -0
  271. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/world-population-2019.png +0 -0
  272. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/world-population-revisions.html +0 -0
  273. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/world-population-revisions.png +0 -0
  274. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/world-population.html +0 -0
  275. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/assets/v4/world-population.png +0 -0
  276. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/axes-and-scales.md +0 -0
  277. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/biology-panels.md +0 -0
  278. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/blender-scenes.md +0 -0
  279. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/brand.md +0 -0
  280. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/calibrated-volumes.md +0 -0
  281. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/channels-and-contours.md +0 -0
  282. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/cli.md +0 -0
  283. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/clipping.md +0 -0
  284. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/complex-scene.md +0 -0
  285. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/compositing.md +0 -0
  286. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/concepts.md +0 -0
  287. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/contours-streamlines.md +0 -0
  288. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/cookbook.md +0 -0
  289. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/data-revisions.md +0 -0
  290. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/data.md +0 -0
  291. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/dense-data.md +0 -0
  292. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/design/browser-backends.md +0 -0
  293. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/design/page_grid.md +0 -0
  294. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/design/v2.md +0 -0
  295. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/diagram-components.md +0 -0
  296. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/diagram-engine.md +0 -0
  297. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/diagrams.md +0 -0
  298. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/engineering-report.md +0 -0
  299. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/example-library.md +0 -0
  300. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/examples.md +0 -0
  301. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/export-review.md +0 -0
  302. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/fluorescence-biology.md +0 -0
  303. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/general-plots.md +0 -0
  304. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/hatching.md +0 -0
  305. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/index.md +0 -0
  306. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/javascripts/inklet.js +0 -0
  307. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/label-intensities.md +0 -0
  308. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/label-measurements.md +0 -0
  309. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/layout.md +0 -0
  310. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/linked-facets.md +0 -0
  311. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/linked-maps.md +0 -0
  312. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/linked-plots.md +0 -0
  313. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/mesh-fields.md +0 -0
  314. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/microscopy-tiff.md +0 -0
  315. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/migration.md +0 -0
  316. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/oblique-biology.md +0 -0
  317. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/oblique-sections.md +0 -0
  318. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/plot-quality.md +0 -0
  319. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/plot-types.md +0 -0
  320. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/plotting-engine.md +0 -0
  321. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/presets.md +0 -0
  322. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/publication-plots.md +0 -0
  323. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/quickstart.md +0 -0
  324. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/real-biology.md +0 -0
  325. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/recipes/architecture-sketch.md +0 -0
  326. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/recipes/architecture.md +0 -0
  327. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/recipes/attractor.md +0 -0
  328. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/recipes/helix.md +0 -0
  329. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/recipes/interference.md +0 -0
  330. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/recipes/lattice.md +0 -0
  331. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/recipes/photonics.md +0 -0
  332. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/recipes/wave-packets.md +0 -0
  333. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/release-checks.md +0 -0
  334. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/render-jobs.md +0 -0
  335. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/research-preview.md +0 -0
  336. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/research-revision.md +0 -0
  337. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/research-study.md +0 -0
  338. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/scene-annotations.md +0 -0
  339. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/scene-paths.md +0 -0
  340. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/scene-templates.md +0 -0
  341. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/scientific-report.md +0 -0
  342. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/showcase.md +0 -0
  343. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/slab-biology.md +0 -0
  344. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/slabs-and-regions.md +0 -0
  345. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/statistical-views.md +0 -0
  346. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/stress20.md +0 -0
  347. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/stylesheets/code.css +0 -0
  348. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/stylesheets/inklet.css +0 -0
  349. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/table-inputs.md +0 -0
  350. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/three-images.md +0 -0
  351. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/time-series.md +0 -0
  352. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/troubleshooting.md +0 -0
  353. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/v2.5.md +0 -0
  354. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/v2.md +0 -0
  355. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/v3.md +0 -0
  356. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/v4-foundations.md +0 -0
  357. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/docs/world-map.md +0 -0
  358. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/biology/README.md +0 -0
  359. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/biology/cells3d.lock.json +0 -0
  360. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/biology/data.py +0 -0
  361. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/biology/fluorescence.py +0 -0
  362. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/biology/organelle.lock.json +0 -0
  363. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/biology/requirements.txt +0 -0
  364. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/biology_panels.py +0 -0
  365. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/blender/complex_lab_scene.py +0 -0
  366. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/blender/lab_scene.py +0 -0
  367. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/blender/occlusion_scene.py +0 -0
  368. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/blender/organelle_scene.py +0 -0
  369. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/blender/research_lab_views.py +0 -0
  370. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/broken_axis.py +0 -0
  371. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/clipping_review.py +0 -0
  372. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/compositing_review.py +0 -0
  373. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/data/general-plots/benchmark.csv +0 -0
  374. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/data/general-plots/learning.csv +0 -0
  375. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/data/general-plots/revenue.csv +0 -0
  376. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/data/general-plots/sensor.csv +0 -0
  377. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/diagram_review.py +0 -0
  378. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/engine_review.py +0 -0
  379. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/feature_flow.py +0 -0
  380. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/fluorescence_biology.py +0 -0
  381. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/gallery.py +0 -0
  382. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/general_plots.py +0 -0
  383. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/graph.py +0 -0
  384. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/hatch_review.py +0 -0
  385. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/hello_figure.py +0 -0
  386. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/label_intensities.py +0 -0
  387. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/oblique_biology.py +0 -0
  388. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/panels.py +0 -0
  389. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/plot_engine_review.py +0 -0
  390. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/plot_quality_review.py +0 -0
  391. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/polar.py +0 -0
  392. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/preset_formats.py +0 -0
  393. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/presets.py +0 -0
  394. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/real_biology.py +0 -0
  395. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/render_smoke.py +0 -0
  396. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/research_figure_planner.py +0 -0
  397. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/research_planner_study.py +0 -0
  398. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/research_revision.py +0 -0
  399. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/showcase/README.md +0 -0
  400. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/showcase/assets.lock.json +0 -0
  401. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/showcase/blender_scenes.py +0 -0
  402. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/showcase/figures.py +0 -0
  403. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/slab_biology.py +0 -0
  404. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/state_machine.py +0 -0
  405. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/stress20.py +0 -0
  406. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v25_document.py +0 -0
  407. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v2_cases.py +0 -0
  408. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v2_document.py +0 -0
  409. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v3_complex_scene.py +0 -0
  410. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v3_render_jobs.py +0 -0
  411. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v3_rendering.py +0 -0
  412. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v3_scene_annotations.py +0 -0
  413. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v3_scene_passes.py +0 -0
  414. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v3_scene_paths.py +0 -0
  415. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v3_scene_templates.py +0 -0
  416. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/README.md +0 -0
  417. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/browser_scatter.py +0 -0
  418. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/contours_streamlines.py +0 -0
  419. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/data/world-countries.geojson +0 -0
  420. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/data/world-map-source.json +0 -0
  421. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/data/world-population.csv +0 -0
  422. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/engineering_report.py +0 -0
  423. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/faceted_operations.py +0 -0
  424. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/fixtures/assembly.json +0 -0
  425. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/fixtures/manifest.json +0 -0
  426. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/fixtures/measurement.json +0 -0
  427. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/fixtures/region-shapes.geojson +0 -0
  428. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/fixtures/regions.csv +0 -0
  429. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/fixtures/regions.geojson +0 -0
  430. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/linked_dashboard.py +0 -0
  431. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/linked_selection.html +0 -0
  432. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/linked_selection.py +0 -0
  433. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/mesh_fields.py +0 -0
  434. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/region_shapes.py +0 -0
  435. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/regional_analysis.py +0 -0
  436. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/scientific_report.py +0 -0
  437. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/statistical_views.py +0 -0
  438. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/table_inputs.py +0 -0
  439. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/time_series.py +0 -0
  440. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/examples/v4/world_population.py +0 -0
  441. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/annot.py +0 -0
  442. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/bio3d.py +0 -0
  443. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/cartoon.py +0 -0
  444. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/chem_data.py +0 -0
  445. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/chem_fingerprints.py +0 -0
  446. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/data/1m17-kinase.pdb +0 -0
  447. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/data/README.md +0 -0
  448. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/drug_discovery.py +0 -0
  449. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/mouse_brain_data.py +0 -0
  450. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/neural_activity.py +0 -0
  451. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/pdbfile.py +0 -0
  452. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/showcase_part.py +0 -0
  453. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/showcase_process.py +0 -0
  454. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/showcase_season.py +0 -0
  455. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/structure.py +0 -0
  456. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/structure_data.py +0 -0
  457. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/target.py +0 -0
  458. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/figures/trial.py +0 -0
  459. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/README.md +0 -0
  460. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/biology-panels.png +0 -0
  461. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/chem_fingerprints.png +0 -0
  462. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/clipping-review.png +0 -0
  463. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/compositing-pdf-after.png +0 -0
  464. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/compositing-pdf-before.png +0 -0
  465. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/compositing-review.png +0 -0
  466. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/diagram-labels-after.png +0 -0
  467. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/diagram-labels-before.png +0 -0
  468. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/diagram-review.png +0 -0
  469. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/engine-review.png +0 -0
  470. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/engine-transparency-after.png +0 -0
  471. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/engine-transparency-before.png +0 -0
  472. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/flow.png +0 -0
  473. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/fluorescence-biology.png +0 -0
  474. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/general-plots-before.png +0 -0
  475. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/general-plots.png +0 -0
  476. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/hatch-pdf-after.png +0 -0
  477. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/hatch-pdf-before.png +0 -0
  478. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/hatch-review.png +0 -0
  479. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/hatch-svg-before.png +0 -0
  480. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/label-intensities.png +0 -0
  481. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/oblique-biology.png +0 -0
  482. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/part.png +0 -0
  483. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/plot-axis-after.png +0 -0
  484. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/plot-axis-before.png +0 -0
  485. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/plot-engine-review.png +0 -0
  486. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/plots.png +0 -0
  487. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/polar.png +0 -0
  488. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/preset-formats.png +0 -0
  489. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/presets.png +0 -0
  490. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/process.png +0 -0
  491. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/real-biology.png +0 -0
  492. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/research-crossing-revision.png +0 -0
  493. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/research-figure-planner.png +0 -0
  494. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/research-planner-study.png +0 -0
  495. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/research-revision.png +0 -0
  496. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/season.png +0 -0
  497. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/showcase-architecture-sketch.png +0 -0
  498. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/showcase-architecture.png +0 -0
  499. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/showcase-attractor.png +0 -0
  500. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/showcase-helix.png +0 -0
  501. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/showcase-interference.png +0 -0
  502. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/showcase-lattice.png +0 -0
  503. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/showcase-photonics.png +0 -0
  504. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/showcase-wave-packets.png +0 -0
  505. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/slab-biology.png +0 -0
  506. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/stress20.png +0 -0
  507. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/structure.png +0 -0
  508. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/v3-complex-scene.png +0 -0
  509. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/v3-render-jobs.png +0 -0
  510. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/v3-rendering.png +0 -0
  511. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/v3-scene-annotations.png +0 -0
  512. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/v3-scene-passes.png +0 -0
  513. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/v3-scene-paths.png +0 -0
  514. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/gallery/v3-scene-templates.png +0 -0
  515. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/requirements-ci.txt +0 -0
  516. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/requirements-docs.txt +0 -0
  517. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/requirements-tables.txt +0 -0
  518. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/scripts/bench_svg.py +0 -0
  519. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/scripts/rasterise.sh +0 -0
  520. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/scripts/sanity_typeset.py +0 -0
  521. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/__main__.py +0 -0
  522. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/__init__.py +0 -0
  523. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/asset.py +0 -0
  524. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/cache.py +0 -0
  525. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/cutout.py +0 -0
  526. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/deps.py +0 -0
  527. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/harmonise.py +0 -0
  528. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/lineart.py +0 -0
  529. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/mask.py +0 -0
  530. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/provenance.py +0 -0
  531. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/raster.py +0 -0
  532. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/sidecar.py +0 -0
  533. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/assets/silhouette.py +0 -0
  534. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/cli.py +0 -0
  535. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/components.py +0 -0
  536. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/core/diagram.py +0 -0
  537. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/core/envelope.py +0 -0
  538. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/core/geom.py +0 -0
  539. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/core/prims.py +0 -0
  540. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/core/style.py +0 -0
  541. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/core/trace.py +0 -0
  542. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/core/units.py +0 -0
  543. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/__init__.py +0 -0
  544. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/abut.py +0 -0
  545. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/break_rules.py +0 -0
  546. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/color.py +0 -0
  547. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/cross.py +0 -0
  548. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/image.py +0 -0
  549. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/link_rules.py +0 -0
  550. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/path_rules.py +0 -0
  551. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/plot_rules.py +0 -0
  552. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/report.py +0 -0
  553. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/diagnostics/three_rules.py +0 -0
  554. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/document/__init__.py +0 -0
  555. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/document/composition.py +0 -0
  556. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/document/data.py +0 -0
  557. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/document/data_io.py +0 -0
  558. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/document/module.py +0 -0
  559. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/document/presets.py +0 -0
  560. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/document/publication.py +0 -0
  561. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/document/spec.py +0 -0
  562. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/draw/__init__.py +0 -0
  563. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/draw/annotate.py +0 -0
  564. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/draw/bezier_clip.py +0 -0
  565. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/draw/coords.py +0 -0
  566. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/draw/path.py +0 -0
  567. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/draw/place.py +0 -0
  568. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/draw/shapes.py +0 -0
  569. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/__init__.py +0 -0
  570. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/_table_adapters.py +0 -0
  571. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/drawings.py +0 -0
  572. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/fields.py +0 -0
  573. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/grid.py +0 -0
  574. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/images.py +0 -0
  575. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/regions.py +0 -0
  576. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/series.py +0 -0
  577. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/browser/timeaxis.py +0 -0
  578. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/channels.py +0 -0
  579. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/contours.py +0 -0
  580. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/engineering.py +0 -0
  581. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/fields.py +0 -0
  582. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/figure_planner.py +0 -0
  583. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/grid.py +0 -0
  584. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/measurement.py +0 -0
  585. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/measurements.py +0 -0
  586. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/planner_geometry.py +0 -0
  587. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/regions.py +0 -0
  588. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/sections.py +0 -0
  589. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/selection.py +0 -0
  590. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/slabs.py +0 -0
  591. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/temporal.py +0 -0
  592. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/tiff.py +0 -0
  593. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/experimental/volume.py +0 -0
  594. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/layout/__init__.py +0 -0
  595. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/layout/fit.py +0 -0
  596. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/layout/flow.py +0 -0
  597. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/layout/graph.py +0 -0
  598. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/layout/graph_force.py +0 -0
  599. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/layout/graph_layered.py +0 -0
  600. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/layout/graph_tree.py +0 -0
  601. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/layout/labels.py +0 -0
  602. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/layout/sankey.py +0 -0
  603. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/links/__init__.py +0 -0
  604. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/links/curves.py +0 -0
  605. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/links/link.py +0 -0
  606. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/__init__.py +0 -0
  607. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/axis.py +0 -0
  608. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/breaks.py +0 -0
  609. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/categories.py +0 -0
  610. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/facets.py +0 -0
  611. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/inset.py +0 -0
  612. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/key.py +0 -0
  613. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/notes.py +0 -0
  614. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/png.py +0 -0
  615. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/polar.py +0 -0
  616. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/ramp.py +0 -0
  617. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/raster.py +0 -0
  618. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/ribbon.py +0 -0
  619. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/scale.py +0 -0
  620. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/scatter_raster.py +0 -0
  621. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/series.py +0 -0
  622. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/simplify.py +0 -0
  623. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/plot/timescale.py +0 -0
  624. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/brushes.py +0 -0
  625. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/bundle.py +0 -0
  626. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/composite.py +0 -0
  627. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/fontembed.py +0 -0
  628. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/glyphs.py +0 -0
  629. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/hatching.py +0 -0
  630. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/outline.py +0 -0
  631. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/paint.py +0 -0
  632. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/pathdata.py +0 -0
  633. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/pdftext.py +0 -0
  634. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/preview.py +0 -0
  635. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/raster.py +0 -0
  636. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/resources.py +0 -0
  637. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/review.py +0 -0
  638. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/render/revision.py +0 -0
  639. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/themes/__init__.py +0 -0
  640. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/themes/color.py +0 -0
  641. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/themes/palettes.py +0 -0
  642. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/themes/theme.py +0 -0
  643. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/__init__.py +0 -0
  644. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/api.py +0 -0
  645. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/backend.py +0 -0
  646. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender/__init__.py +0 -0
  647. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender/device_worker.py +0 -0
  648. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender/discover.py +0 -0
  649. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender/lineart.py +0 -0
  650. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender/options.py +0 -0
  651. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender/scene_worker.py +0 -0
  652. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender/script.py +0 -0
  653. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender/svgread.py +0 -0
  654. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender/template_worker.py +0 -0
  655. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender/tracing.py +0 -0
  656. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/blender_backend.py +0 -0
  657. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/camera.py +0 -0
  658. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/deps.py +0 -0
  659. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/depth.py +0 -0
  660. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/devices.py +0 -0
  661. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/drill.py +0 -0
  662. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/edges.py +0 -0
  663. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/hlr.py +0 -0
  664. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/linalg.py +0 -0
  665. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/mesh.py +0 -0
  666. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/occlude.py +0 -0
  667. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/order.py +0 -0
  668. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/parse.py +0 -0
  669. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/place.py +0 -0
  670. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/protein.py +0 -0
  671. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/quality.py +0 -0
  672. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/render_jobs.py +0 -0
  673. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/scene_annotations.py +0 -0
  674. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/scene_pass.py +0 -0
  675. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/scene_projection.py +0 -0
  676. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/scenes.py +0 -0
  677. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/shade.py +0 -0
  678. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/solids.py +0 -0
  679. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/templates.json +0 -0
  680. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/three/templates.py +0 -0
  681. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/typeset/__init__.py +0 -0
  682. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/typeset/fonts.py +0 -0
  683. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/typeset/markup.py +0 -0
  684. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/typeset/onpath.py +0 -0
  685. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/typeset/outline.py +0 -0
  686. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/src/inklet/typeset/shaping.py +0 -0
  687. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/assets/mouse.inklet.json +0 -0
  688. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/assets/mouse.png +0 -0
  689. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/dense_graph.py +0 -0
  690. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/draw_probe.py +0 -0
  691. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/electro/assets/sem.png +0 -0
  692. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/electro/assets/tem.png +0 -0
  693. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/electro/cell.py +0 -0
  694. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/electro/common.py +0 -0
  695. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/electro/data.py +0 -0
  696. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/electro/imaging.py +0 -0
  697. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/electro/kinetics.py +0 -0
  698. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/electro/micrograph.py +0 -0
  699. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/electro/system.py +0 -0
  700. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/electro_figure.py +0 -0
  701. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/fidelity.py +0 -0
  702. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/flow.py +0 -0
  703. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/hard_figure.py +0 -0
  704. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/label_storm.py +0 -0
  705. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/mega_figure.py +0 -0
  706. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/meshes/README.md +0 -0
  707. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/meshes/brain-lh.obj +0 -0
  708. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/meshes/spot.obj +0 -0
  709. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/panels/apparatus.py +0 -0
  710. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/panels/graphs.py +0 -0
  711. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/panels/relations.py +0 -0
  712. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/panels/responses.py +0 -0
  713. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/panels/sections.py +0 -0
  714. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/probes.py +0 -0
  715. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/stress/three_figure.py +0 -0
  716. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_alignment_contract.py +0 -0
  717. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_annotate.py +0 -0
  718. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_annotate_letters.py +0 -0
  719. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_assets.py +0 -0
  720. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_assets_provenance.py +0 -0
  721. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_biology_source.py +0 -0
  722. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_blend_scene.py +0 -0
  723. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_browser_facets.py +0 -0
  724. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_browser_figure.py +0 -0
  725. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_browser_regions.py +0 -0
  726. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_browser_revision.py +0 -0
  727. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_browser_scatter.py +0 -0
  728. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_browser_series.py +0 -0
  729. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_browser_statistics.py +0 -0
  730. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_browser_time.py +0 -0
  731. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_categories.py +0 -0
  732. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_channels_contours.py +0 -0
  733. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_chem_figure.py +0 -0
  734. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_cli.py +0 -0
  735. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_clip_engine.py +0 -0
  736. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_components.py +0 -0
  737. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_contrast_and_labels.py +0 -0
  738. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_cookbook.py +0 -0
  739. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_core.py +0 -0
  740. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_core_amendments.py +0 -0
  741. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_csv_input.py +0 -0
  742. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics.py +0 -0
  743. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics_api.py +0 -0
  744. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics_artwork.py +0 -0
  745. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics_break_distorts.py +0 -0
  746. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics_crossing.py +0 -0
  747. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics_image_contrast.py +0 -0
  748. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics_ink.py +0 -0
  749. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics_keys.py +0 -0
  750. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics_links.py +0 -0
  751. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics_paths.py +0 -0
  752. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagnostics_plot_box.py +0 -0
  753. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_diagram_engine.py +0 -0
  754. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_docs.py +0 -0
  755. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_docs_site.py +0 -0
  756. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_document.py +0 -0
  757. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_document_data.py +0 -0
  758. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_document_v25.py +0 -0
  759. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_draw_clip.py +0 -0
  760. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_draw_path.py +0 -0
  761. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_draw_place.py +0 -0
  762. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_draw_shapes.py +0 -0
  763. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_engine_layout.py +0 -0
  764. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_engine_rendering.py +0 -0
  765. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_engine_scatter.py +0 -0
  766. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_engineering_report.py +0 -0
  767. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_export_bundle.py +0 -0
  768. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_figure.py +0 -0
  769. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_figure_planner.py +0 -0
  770. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_fit.py +0 -0
  771. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_grid_fields.py +0 -0
  772. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_guides.py +0 -0
  773. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_hatch_engine.py +0 -0
  774. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_label_measurements.py +0 -0
  775. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_layout.py +0 -0
  776. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_layout_graph.py +0 -0
  777. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_layout_graph_fit.py +0 -0
  778. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_layout_origin.py +0 -0
  779. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_layout_sankey.py +0 -0
  780. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_links.py +0 -0
  781. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_links_avoid.py +0 -0
  782. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_links_shapes.py +0 -0
  783. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_mesh_fields.py +0 -0
  784. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_microscopy_tiff.py +0 -0
  785. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_neural_activity.py +0 -0
  786. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_output_contract.py +0 -0
  787. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_paint_program.py +0 -0
  788. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_place_labels.py +0 -0
  789. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_axis.py +0 -0
  790. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_broken_axis.py +0 -0
  791. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_clip.py +0 -0
  792. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_engine.py +0 -0
  793. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_facets.py +0 -0
  794. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_inset.py +0 -0
  795. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_key.py +0 -0
  796. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_labels.py +0 -0
  797. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_legend.py +0 -0
  798. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_marks.py +0 -0
  799. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_notes.py +0 -0
  800. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_polar.py +0 -0
  801. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_publication.py +0 -0
  802. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_quality_review.py +0 -0
  803. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_raster.py +0 -0
  804. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_ribbon.py +0 -0
  805. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_scale.py +0 -0
  806. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_swarm.py +0 -0
  807. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_plot_time.py +0 -0
  808. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_presets.py +0 -0
  809. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_publication_limits.py +0 -0
  810. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_regional_report.py +0 -0
  811. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_release_adversarial.py +0 -0
  812. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_devices.py +0 -0
  813. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_glyphs.py +0 -0
  814. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_jobs.py +0 -0
  815. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_outline.py +0 -0
  816. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_pdf.py +0 -0
  817. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_pdf_text.py +0 -0
  818. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_quality.py +0 -0
  819. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_style_fields.py +0 -0
  820. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_svg_perf.py +0 -0
  821. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_render_v3.py +0 -0
  822. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_review_v25.py +0 -0
  823. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_round4_plot.py +0 -0
  824. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_routing_avoid.py +0 -0
  825. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_scatter_rendering.py +0 -0
  826. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_scene_annotations.py +0 -0
  827. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_scene_pass.py +0 -0
  828. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_scene_projection.py +0 -0
  829. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_scene_templates.py +0 -0
  830. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_scientific_report.py +0 -0
  831. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_sections.py +0 -0
  832. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_shared_plot_margins.py +0 -0
  833. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_showcase_library.py +0 -0
  834. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_showcase_round3.py +0 -0
  835. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_slabs_regions.py +0 -0
  836. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_structure_figure.py +0 -0
  837. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_table_adapters.py +0 -0
  838. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_target_pose.py +0 -0
  839. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_temporal_adapters.py +0 -0
  840. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_text_markup.py +0 -0
  841. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_text_on_path.py +0 -0
  842. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_theme_font_style.py +0 -0
  843. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_themes.py +0 -0
  844. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_anchor_pin.py +0 -0
  845. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_api.py +0 -0
  846. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_backend_blender.py +0 -0
  847. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_blender.py +0 -0
  848. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_depth_order.py +0 -0
  849. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_drill.py +0 -0
  850. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_hlr.py +0 -0
  851. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_mesh.py +0 -0
  852. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_order_vector.py +0 -0
  853. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_overlay.py +0 -0
  854. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_parse.py +0 -0
  855. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_patches.py +0 -0
  856. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_place.py +0 -0
  857. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_protein.py +0 -0
  858. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_ridges.py +0 -0
  859. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_sort.py +0 -0
  860. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_sort_budget.py +0 -0
  861. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_three_view.py +0 -0
  862. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_typeset.py +0 -0
  863. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_v4_selection.py +0 -0
  864. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_volume.py +0 -0
  865. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_watch_review.py +0 -0
  866. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/test_world_map_example.py +0 -0
  867. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/README.md +0 -0
  868. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/categories-pdf.png +0 -0
  869. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/categories-svg.png +0 -0
  870. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/components-pdf.png +0 -0
  871. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/components-svg.png +0 -0
  872. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/dense-pdf.png +0 -0
  873. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/dense-svg.png +0 -0
  874. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/fonts.json +0 -0
  875. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/inset-pdf.png +0 -0
  876. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/inset-svg.png +0 -0
  877. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/markers-pdf.png +0 -0
  878. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/markers-svg.png +0 -0
  879. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/renderers.json +0 -0
  880. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/type-opacity-pdf.png +0 -0
  881. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/type-opacity-svg.png +0 -0
  882. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
  883. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
  884. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-dense-pdf.png +0 -0
  885. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-dense-svg.png +0 -0
  886. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
  887. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
  888. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
  889. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
  890. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
  891. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
  892. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
  893. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v2-workflow-svg.png +0 -0
  894. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v25-document-pdf.png +0 -0
  895. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/baseline/v25-document-svg.png +0 -0
  896. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/fixtures.py +0 -0
  897. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tests/visual/v2-budgets.json +0 -0
  898. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/benchmark_clipping.py +0 -0
  899. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/benchmark_diagrams.py +0 -0
  900. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/benchmark_engine.py +0 -0
  901. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/benchmark_lines.py +0 -0
  902. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/benchmark_v2.py +0 -0
  903. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/benchmark_v4.py +0 -0
  904. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/browser_study.js +0 -0
  905. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/check_render_wheel.py +0 -0
  906. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/dock_ligand.py +0 -0
  907. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/docs_gallery.json +0 -0
  908. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/docs_previews.json +0 -0
  909. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/docs_previews.py +0 -0
  910. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/docs_site.py +0 -0
  911. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/docs_theme/404.html +0 -0
  912. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/docs_theme/card.html +0 -0
  913. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/docs_theme/gallery.html +0 -0
  914. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/docs_theme/home.html +0 -0
  915. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/docs_theme/main.html +0 -0
  916. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/gen_api.py +0 -0
  917. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/prepare_world_map.py +0 -0
  918. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/preset_gallery.py +0 -0
  919. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/showcase_gallery.py +0 -0
  920. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/stress20.py +0 -0
  921. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/strip_pdb.py +0 -0
  922. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/v3_showcase.py +0 -0
  923. {inklet-4.0.0.dev2 → inklet-4.0.0.dev3}/tools/v4-budgets.json +0 -0
  924. {inklet-4.0.0.dev2 → 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
@@ -95,6 +96,10 @@ jobs:
95
96
  .venv/bin/python examples/compositing_review.py --output out/compositing-review
96
97
  .venv/bin/python examples/hatch_review.py --output out/hatch-review
97
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
98
103
  - name: Diagram routing and label review
99
104
  run: |
100
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.dev2
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.dev2' >&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,111 @@
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
+
3
109
  ## 4.0.0.dev2 — 2026-09-08
4
110
 
5
111
  Second development preview. Install explicitly with
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: inklet
3
- Version: 4.0.0.dev2
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,19 +81,17 @@ their signatures and report schemas may change.
81
81
 
82
82
  ## 4.0 development preview
83
83
 
84
- **4.0.0.dev2** adds curve-preserving clipping, painted windows, improved PDF
85
- compositing and hatching, alongside offline linked charts, maps, calibrated images, mesh fields,
86
- contours and streamlines, with saved selections and reproducible exports.
87
- It also includes date/UTC axes, facets, pandas/Polars adapters and shared
88
- plotting-quality improvements.
89
-
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.
90
88
  ```sh
91
- python -m pip install "inklet==4.0.0.dev2"
89
+ python -m pip install "inklet==4.0.0.dev3"
92
90
  ```
93
91
 
94
92
  [Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
95
93
  [4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
96
- [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev2)
94
+ [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev3)
97
95
 
98
96
  This is an opt-in development release. Experimental APIs and saved-state schemas
99
97
  may change; 3.1.0 remains the stable release. General browser editing,
@@ -31,19 +31,17 @@ their signatures and report schemas may change.
31
31
 
32
32
  ## 4.0 development preview
33
33
 
34
- **4.0.0.dev2** adds curve-preserving clipping, painted windows, improved PDF
35
- compositing and hatching, alongside offline linked charts, maps, calibrated images, mesh fields,
36
- contours and streamlines, with saved selections and reproducible exports.
37
- It also includes date/UTC axes, facets, pandas/Polars adapters and shared
38
- plotting-quality improvements.
39
-
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.
40
38
  ```sh
41
- python -m pip install "inklet==4.0.0.dev2"
39
+ python -m pip install "inklet==4.0.0.dev3"
42
40
  ```
43
41
 
44
42
  [Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
45
43
  [4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
46
- [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev2)
44
+ [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev3)
47
45
 
48
46
  This is an opt-in development release. Experimental APIs and saved-state schemas
49
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.
@@ -1023,19 +1040,19 @@ One actionable finding. `where` is figure-space, in millimetres.
1023
1040
 
1024
1041
  Compact report. Returns a single string with no trailing newline.
1025
1042
 
1026
- #### `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'`
1027
1044
 
1028
1045
  Render a diagram tree to a self-contained SVG document.
1029
1046
 
1030
- #### `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'`
1031
1048
 
1032
1049
  Write `root` to `path` as SVG. `to_svg` is the same thing as a string.
1033
1050
 
1034
- #### `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'`
1035
1052
 
1036
1053
  Render one diagram tree, or a sequence of them, to a PDF document.
1037
1054
 
1038
- #### `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'`
1039
1056
 
1040
1057
  Write `root` to `path` as PDF. `to_pdf` is the same thing as bytes.
1041
1058
 
@@ -0,0 +1 @@
1
+ \caption{Five filled marker shapes with simulated observations. Each panel contains 2,500 points with varying sizes and two overlapping colour groups. The browser uses packed WebGL2 or Canvas layers; SVG and PDF retain vector markers. Marker order, transparency and panel clipping are shared by all modes. MIT, Mark Marosi.}