inklet 4.0.0.dev1__tar.gz → 4.0.0.dev2__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 (849) hide show
  1. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/.github/workflows/checks.yml +3 -0
  2. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/.github/workflows/publish.yml +2 -2
  3. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/CHANGELOG.md +35 -0
  4. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/PKG-INFO +5 -4
  5. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/README.md +4 -3
  6. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/api.md +6 -2
  7. inklet-4.0.0.dev2/docs/assets/research-preview/clipping-after.json +119 -0
  8. inklet-4.0.0.dev2/docs/assets/research-preview/clipping-before.json +119 -0
  9. inklet-4.0.0.dev2/docs/assets/research-preview/clipping-caption.tex +1 -0
  10. inklet-4.0.0.dev2/docs/assets/research-preview/clipping-lines-after.json +110 -0
  11. inklet-4.0.0.dev2/docs/assets/research-preview/clipping-lines-before.json +110 -0
  12. inklet-4.0.0.dev2/docs/assets/research-preview/compositing-after.json +143 -0
  13. inklet-4.0.0.dev2/docs/assets/research-preview/compositing-before.json +143 -0
  14. inklet-4.0.0.dev2/docs/assets/research-preview/compositing-caption.tex +1 -0
  15. inklet-4.0.0.dev2/docs/assets/research-preview/hatch-after.json +207 -0
  16. inklet-4.0.0.dev2/docs/assets/research-preview/hatch-before.json +207 -0
  17. inklet-4.0.0.dev2/docs/assets/research-preview/hatch-caption.tex +1 -0
  18. inklet-4.0.0.dev2/docs/clipping.md +109 -0
  19. inklet-4.0.0.dev2/docs/compositing.md +112 -0
  20. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/cookbook.md +4 -0
  21. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/design/v4.md +13 -0
  22. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/development-preview.md +13 -6
  23. inklet-4.0.0.dev2/docs/hatching.md +112 -0
  24. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/rendering-engine.md +10 -0
  25. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/v3.md +3 -0
  26. inklet-4.0.0.dev2/examples/clipping_review.py +90 -0
  27. inklet-4.0.0.dev2/examples/compositing_review.py +93 -0
  28. inklet-4.0.0.dev2/examples/hatch_review.py +70 -0
  29. inklet-4.0.0.dev2/gallery/clipping-review.png +0 -0
  30. inklet-4.0.0.dev2/gallery/compositing-pdf-after.png +0 -0
  31. inklet-4.0.0.dev2/gallery/compositing-pdf-before.png +0 -0
  32. inklet-4.0.0.dev2/gallery/compositing-review.png +0 -0
  33. inklet-4.0.0.dev2/gallery/hatch-pdf-after.png +0 -0
  34. inklet-4.0.0.dev2/gallery/hatch-pdf-before.png +0 -0
  35. inklet-4.0.0.dev2/gallery/hatch-review.png +0 -0
  36. inklet-4.0.0.dev2/gallery/hatch-svg-before.png +0 -0
  37. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/mkdocs.yml +3 -0
  38. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/pyproject.toml +1 -1
  39. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/__init__.py +3 -3
  40. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/core/diagram.py +35 -6
  41. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/rules.py +50 -2
  42. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/draw/__init__.py +2 -2
  43. inklet-4.0.0.dev2/src/inklet/draw/bezier_clip.py +127 -0
  44. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/draw/clip.py +79 -28
  45. inklet-4.0.0.dev2/src/inklet/render/analysis.py +58 -0
  46. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/bounds.py +19 -5
  47. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/brushes.py +5 -16
  48. inklet-4.0.0.dev2/src/inklet/render/hatching.py +49 -0
  49. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/pdf.py +78 -58
  50. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/svg.py +74 -1
  51. inklet-4.0.0.dev2/tests/test_clip_engine.py +216 -0
  52. inklet-4.0.0.dev2/tests/test_compositing_engine.py +158 -0
  53. inklet-4.0.0.dev2/tests/test_hatch_engine.py +155 -0
  54. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_style_fields.py +5 -4
  55. inklet-4.0.0.dev2/tools/benchmark_clipping.py +62 -0
  56. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/benchmark_engine.py +29 -2
  57. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/.gitattributes +0 -0
  58. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/.gitignore +0 -0
  59. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/.readthedocs.yaml +0 -0
  60. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/CONTRACT.md +0 -0
  61. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/CONTRIBUTING.md +0 -0
  62. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/LICENSE +0 -0
  63. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/THIRD_PARTY_NOTICES.md +0 -0
  64. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/brand/inklet-icon.svg +0 -0
  65. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/brand/inklet-logo-dark.svg +0 -0
  66. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/brand/inklet-logo-mono.svg +0 -0
  67. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/brand/inklet-logo.svg +0 -0
  68. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/brand/inklet-wordmark.svg +0 -0
  69. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/examples/quickstart.pdf +0 -0
  70. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/examples/quickstart.png +0 -0
  71. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/examples/quickstart.svg +0 -0
  72. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/axes-and-scales-1.png +0 -0
  73. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/calibrated-volumes-3.png +0 -0
  74. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/channels-and-contours-1.png +0 -0
  75. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-anchor.png +0 -0
  76. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-annotation.png +0 -0
  77. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
  78. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-branch.png +0 -0
  79. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-broken-axis.png +0 -0
  80. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-callout.png +0 -0
  81. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-clipping.png +0 -0
  82. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-creases.png +0 -0
  83. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-custom-key.png +0 -0
  84. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-cutout.png +0 -0
  85. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-dates.png +0 -0
  86. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-dense.png +0 -0
  87. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-elbows.png +0 -0
  88. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
  89. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-facets.png +0 -0
  90. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-fit-graph.png +0 -0
  91. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-flow-width.png +0 -0
  92. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-formula.png +0 -0
  93. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-graph.png +0 -0
  94. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-halo.png +0 -0
  95. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-heatmap.png +0 -0
  96. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-hole.png +0 -0
  97. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-inline-type.png +0 -0
  98. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-inset.png +0 -0
  99. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-labels.png +0 -0
  100. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-layers.png +0 -0
  101. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-letters.png +0 -0
  102. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-list.png +0 -0
  103. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-matrix.png +0 -0
  104. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-page-grid.png +0 -0
  105. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-polar.png +0 -0
  106. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-protein.png +0 -0
  107. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-routes.png +0 -0
  108. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
  109. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-scene.png +0 -0
  110. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-series-key.png +0 -0
  111. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-span.png +0 -0
  112. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
  113. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-swarm.png +0 -0
  114. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-text-path.png +0 -0
  115. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-toon.png +0 -0
  116. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-twin-axis.png +0 -0
  117. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
  118. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-violin.png +0 -0
  119. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
  120. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/data-1.png +0 -0
  121. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/data-3.png +0 -0
  122. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/dense-data-1.png +0 -0
  123. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/diagram-components-1.png +0 -0
  124. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/diagrams-1.png +0 -0
  125. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/layout-3.png +0 -0
  126. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/oblique-sections-2.png +0 -0
  127. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/plot-quality-after.png +0 -0
  128. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/plot-quality-before.png +0 -0
  129. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/plot-types-1.png +0 -0
  130. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/plotting-1.png +0 -0
  131. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/plotting-2.png +0 -0
  132. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/publication-plots-1.png +0 -0
  133. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/publication-plots-2.png +0 -0
  134. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/publication-plots-3.png +0 -0
  135. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/publication-plots-4.png +0 -0
  136. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/slabs-and-regions-1.png +0 -0
  137. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/three-images-1.png +0 -0
  138. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/guides/three-images-2.png +0 -0
  139. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/biology.json +0 -0
  140. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/comparison.json +0 -0
  141. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/diagram-after.json +0 -0
  142. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/diagram-before.json +0 -0
  143. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
  144. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/engine-after.json +0 -0
  145. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/engine-before.json +0 -0
  146. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/engine-review-caption.tex +0 -0
  147. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/fluorescence-biology.json +0 -0
  148. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/general-plots-caption.tex +0 -0
  149. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/general-plots.json +0 -0
  150. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
  151. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/label-intensities-native.csv +0 -0
  152. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/label-intensities.json +0 -0
  153. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/lines-after.json +0 -0
  154. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/lines-before.json +0 -0
  155. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/oblique-biology.json +0 -0
  156. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
  157. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/real-biology.json +0 -0
  158. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/revision.json +0 -0
  159. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/slab-biology.json +0 -0
  160. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/research-preview/study.json +0 -0
  161. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/after.json +0 -0
  162. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/before.json +0 -0
  163. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/browser-quality.json +0 -0
  164. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/browser-scatter.html +0 -0
  165. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/browser-scatter.png +0 -0
  166. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/browser-study.json +0 -0
  167. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/contours-streamlines-170mm.png +0 -0
  168. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/contours-streamlines-masked.png +0 -0
  169. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/contours-streamlines.html +0 -0
  170. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/contours-streamlines.png +0 -0
  171. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/engineering-report-170mm.png +0 -0
  172. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/engineering-report.html +0 -0
  173. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/engineering-report.png +0 -0
  174. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/faceted-operations.html +0 -0
  175. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/faceted-operations.png +0 -0
  176. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/linked-dashboard.html +0 -0
  177. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/linked-dashboard.png +0 -0
  178. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/linked-selection.html +0 -0
  179. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/linked-selection.png +0 -0
  180. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/mesh-fields-170mm.png +0 -0
  181. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/mesh-fields.html +0 -0
  182. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/mesh-fields.png +0 -0
  183. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/region-shapes.html +0 -0
  184. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/region-shapes.png +0 -0
  185. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/regional-analysis.html +0 -0
  186. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/regional-analysis.png +0 -0
  187. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/regional-report-160mm.png +0 -0
  188. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/regional-report.html +0 -0
  189. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/regional-report.png +0 -0
  190. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/scientific-report-170mm.png +0 -0
  191. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/scientific-report.html +0 -0
  192. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/scientific-report.png +0 -0
  193. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/statistical-views.html +0 -0
  194. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/statistical-views.png +0 -0
  195. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/table-inputs.html +0 -0
  196. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/table-inputs.png +0 -0
  197. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/time-series.html +0 -0
  198. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/time-series.png +0 -0
  199. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/world-population-2019.html +0 -0
  200. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/world-population-2019.json +0 -0
  201. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/world-population-2019.png +0 -0
  202. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/world-population-revisions.html +0 -0
  203. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/world-population-revisions.png +0 -0
  204. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/world-population.html +0 -0
  205. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/assets/v4/world-population.png +0 -0
  206. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/axes-and-scales.md +0 -0
  207. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/biology-panels.md +0 -0
  208. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/blender-scenes.md +0 -0
  209. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/brand.md +0 -0
  210. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/browser-rendering.md +0 -0
  211. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/calibrated-volumes.md +0 -0
  212. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/channels-and-contours.md +0 -0
  213. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/cli.md +0 -0
  214. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/compatibility.md +0 -0
  215. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/complex-scene.md +0 -0
  216. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/concepts.md +0 -0
  217. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/contours-streamlines.md +0 -0
  218. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/data-revisions.md +0 -0
  219. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/data.md +0 -0
  220. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/dense-data.md +0 -0
  221. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/design/browser-backends.md +0 -0
  222. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/design/page_grid.md +0 -0
  223. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/design/v2.md +0 -0
  224. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/diagram-components.md +0 -0
  225. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/diagram-engine.md +0 -0
  226. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/diagrams.md +0 -0
  227. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/engineering-report.md +0 -0
  228. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/example-library.md +0 -0
  229. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/examples.md +0 -0
  230. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/export-review.md +0 -0
  231. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/fluorescence-biology.md +0 -0
  232. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/general-plots.md +0 -0
  233. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/index.md +0 -0
  234. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/installation.md +0 -0
  235. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/javascripts/inklet.js +0 -0
  236. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/label-intensities.md +0 -0
  237. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/label-measurements.md +0 -0
  238. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/layout.md +0 -0
  239. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/linked-facets.md +0 -0
  240. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/linked-maps.md +0 -0
  241. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/linked-plots.md +0 -0
  242. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/mesh-fields.md +0 -0
  243. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/microscopy-tiff.md +0 -0
  244. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/migration.md +0 -0
  245. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/oblique-biology.md +0 -0
  246. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/oblique-sections.md +0 -0
  247. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/plot-quality.md +0 -0
  248. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/plot-types.md +0 -0
  249. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/plotting-engine.md +0 -0
  250. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/plotting.md +0 -0
  251. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/presets.md +0 -0
  252. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/publication-plots.md +0 -0
  253. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/quickstart.md +0 -0
  254. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/real-biology.md +0 -0
  255. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/recipes/architecture-sketch.md +0 -0
  256. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/recipes/architecture.md +0 -0
  257. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/recipes/attractor.md +0 -0
  258. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/recipes/helix.md +0 -0
  259. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/recipes/interference.md +0 -0
  260. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/recipes/lattice.md +0 -0
  261. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/recipes/photonics.md +0 -0
  262. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/recipes/wave-packets.md +0 -0
  263. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/regional-report.md +0 -0
  264. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/release-checks.md +0 -0
  265. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/render-jobs.md +0 -0
  266. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/research-preview.md +0 -0
  267. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/research-revision.md +0 -0
  268. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/research-study.md +0 -0
  269. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/roadmap.md +0 -0
  270. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/scene-annotations.md +0 -0
  271. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/scene-paths.md +0 -0
  272. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/scene-templates.md +0 -0
  273. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/scientific-report.md +0 -0
  274. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/showcase.md +0 -0
  275. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/slab-biology.md +0 -0
  276. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/slabs-and-regions.md +0 -0
  277. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/statistical-views.md +0 -0
  278. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/stress20.md +0 -0
  279. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/stylesheets/code.css +0 -0
  280. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/stylesheets/inklet.css +0 -0
  281. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/table-inputs.md +0 -0
  282. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/three-images.md +0 -0
  283. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/time-series.md +0 -0
  284. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/troubleshooting.md +0 -0
  285. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/v2.5.md +0 -0
  286. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/v2.md +0 -0
  287. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/v4-foundations.md +0 -0
  288. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/docs/world-map.md +0 -0
  289. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/biology/README.md +0 -0
  290. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/biology/cells3d.lock.json +0 -0
  291. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/biology/data.py +0 -0
  292. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/biology/fluorescence.py +0 -0
  293. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/biology/organelle.lock.json +0 -0
  294. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/biology/requirements.txt +0 -0
  295. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/biology_panels.py +0 -0
  296. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/blender/complex_lab_scene.py +0 -0
  297. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/blender/lab_scene.py +0 -0
  298. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/blender/occlusion_scene.py +0 -0
  299. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/blender/organelle_scene.py +0 -0
  300. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/blender/research_lab_views.py +0 -0
  301. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/broken_axis.py +0 -0
  302. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/data/general-plots/benchmark.csv +0 -0
  303. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/data/general-plots/learning.csv +0 -0
  304. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/data/general-plots/revenue.csv +0 -0
  305. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/data/general-plots/sensor.csv +0 -0
  306. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/diagram_review.py +0 -0
  307. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/engine_review.py +0 -0
  308. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/feature_flow.py +0 -0
  309. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/fluorescence_biology.py +0 -0
  310. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/gallery.py +0 -0
  311. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/general_plots.py +0 -0
  312. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/graph.py +0 -0
  313. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/hello_figure.py +0 -0
  314. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/label_intensities.py +0 -0
  315. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/oblique_biology.py +0 -0
  316. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/panels.py +0 -0
  317. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/plot_engine_review.py +0 -0
  318. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/plot_quality_review.py +0 -0
  319. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/polar.py +0 -0
  320. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/preset_formats.py +0 -0
  321. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/presets.py +0 -0
  322. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/real_biology.py +0 -0
  323. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/render_smoke.py +0 -0
  324. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/research_figure_planner.py +0 -0
  325. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/research_planner_study.py +0 -0
  326. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/research_revision.py +0 -0
  327. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/showcase/README.md +0 -0
  328. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/showcase/assets.lock.json +0 -0
  329. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/showcase/blender_scenes.py +0 -0
  330. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/showcase/figures.py +0 -0
  331. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/slab_biology.py +0 -0
  332. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/state_machine.py +0 -0
  333. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/stress20.py +0 -0
  334. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v25_document.py +0 -0
  335. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v2_cases.py +0 -0
  336. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v2_document.py +0 -0
  337. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v3_complex_scene.py +0 -0
  338. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v3_render_jobs.py +0 -0
  339. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v3_rendering.py +0 -0
  340. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v3_scene_annotations.py +0 -0
  341. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v3_scene_passes.py +0 -0
  342. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v3_scene_paths.py +0 -0
  343. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v3_scene_templates.py +0 -0
  344. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/README.md +0 -0
  345. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/browser_scatter.py +0 -0
  346. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/contours_streamlines.py +0 -0
  347. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/data/world-countries.geojson +0 -0
  348. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/data/world-map-source.json +0 -0
  349. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/data/world-population.csv +0 -0
  350. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/engineering_report.py +0 -0
  351. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/faceted_operations.py +0 -0
  352. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/fixtures/assembly.json +0 -0
  353. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/fixtures/manifest.json +0 -0
  354. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/fixtures/measurement.json +0 -0
  355. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/fixtures/region-shapes.geojson +0 -0
  356. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/fixtures/regions.csv +0 -0
  357. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/fixtures/regions.geojson +0 -0
  358. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/linked_dashboard.py +0 -0
  359. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/linked_selection.html +0 -0
  360. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/linked_selection.py +0 -0
  361. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/mesh_fields.py +0 -0
  362. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/region_shapes.py +0 -0
  363. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/regional_analysis.py +0 -0
  364. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/regional_report.py +0 -0
  365. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/scientific_report.py +0 -0
  366. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/statistical_views.py +0 -0
  367. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/table_inputs.py +0 -0
  368. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/time_series.py +0 -0
  369. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/examples/v4/world_population.py +0 -0
  370. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/annot.py +0 -0
  371. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/bio3d.py +0 -0
  372. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/cartoon.py +0 -0
  373. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/chem_data.py +0 -0
  374. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/chem_fingerprints.py +0 -0
  375. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/data/1m17-kinase.pdb +0 -0
  376. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/data/README.md +0 -0
  377. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/drug_discovery.py +0 -0
  378. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/mouse_brain_data.py +0 -0
  379. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/neural_activity.py +0 -0
  380. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/pdbfile.py +0 -0
  381. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/showcase_part.py +0 -0
  382. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/showcase_process.py +0 -0
  383. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/showcase_season.py +0 -0
  384. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/structure.py +0 -0
  385. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/structure_data.py +0 -0
  386. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/target.py +0 -0
  387. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/figures/trial.py +0 -0
  388. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/README.md +0 -0
  389. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/biology-panels.png +0 -0
  390. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/chem_fingerprints.png +0 -0
  391. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/diagram-labels-after.png +0 -0
  392. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/diagram-labels-before.png +0 -0
  393. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/diagram-review.png +0 -0
  394. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/engine-review.png +0 -0
  395. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/engine-transparency-after.png +0 -0
  396. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/engine-transparency-before.png +0 -0
  397. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/flow.png +0 -0
  398. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/fluorescence-biology.png +0 -0
  399. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/general-plots-before.png +0 -0
  400. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/general-plots.png +0 -0
  401. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/label-intensities.png +0 -0
  402. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/oblique-biology.png +0 -0
  403. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/part.png +0 -0
  404. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/plot-axis-after.png +0 -0
  405. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/plot-axis-before.png +0 -0
  406. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/plot-engine-review.png +0 -0
  407. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/plots.png +0 -0
  408. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/polar.png +0 -0
  409. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/preset-formats.png +0 -0
  410. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/presets.png +0 -0
  411. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/process.png +0 -0
  412. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/real-biology.png +0 -0
  413. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/research-crossing-revision.png +0 -0
  414. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/research-figure-planner.png +0 -0
  415. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/research-planner-study.png +0 -0
  416. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/research-revision.png +0 -0
  417. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/season.png +0 -0
  418. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/showcase-architecture-sketch.png +0 -0
  419. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/showcase-architecture.png +0 -0
  420. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/showcase-attractor.png +0 -0
  421. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/showcase-helix.png +0 -0
  422. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/showcase-interference.png +0 -0
  423. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/showcase-lattice.png +0 -0
  424. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/showcase-photonics.png +0 -0
  425. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/showcase-wave-packets.png +0 -0
  426. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/slab-biology.png +0 -0
  427. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/stress20.png +0 -0
  428. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/structure.png +0 -0
  429. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/v3-complex-scene.png +0 -0
  430. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/v3-render-jobs.png +0 -0
  431. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/v3-rendering.png +0 -0
  432. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/v3-scene-annotations.png +0 -0
  433. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/v3-scene-passes.png +0 -0
  434. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/v3-scene-paths.png +0 -0
  435. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/gallery/v3-scene-templates.png +0 -0
  436. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/requirements-ci.txt +0 -0
  437. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/requirements-docs.txt +0 -0
  438. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/requirements-tables.txt +0 -0
  439. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/scripts/bench_svg.py +0 -0
  440. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/scripts/rasterise.sh +0 -0
  441. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/scripts/sanity_typeset.py +0 -0
  442. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/__main__.py +0 -0
  443. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/__init__.py +0 -0
  444. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/asset.py +0 -0
  445. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/cache.py +0 -0
  446. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/cutout.py +0 -0
  447. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/deps.py +0 -0
  448. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/harmonise.py +0 -0
  449. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/lineart.py +0 -0
  450. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/mask.py +0 -0
  451. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/provenance.py +0 -0
  452. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/raster.py +0 -0
  453. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/sidecar.py +0 -0
  454. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/assets/silhouette.py +0 -0
  455. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/cli.py +0 -0
  456. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/components.py +0 -0
  457. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/core/__init__.py +0 -0
  458. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/core/envelope.py +0 -0
  459. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/core/geom.py +0 -0
  460. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/core/prims.py +0 -0
  461. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/core/style.py +0 -0
  462. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/core/trace.py +0 -0
  463. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/core/units.py +0 -0
  464. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/__init__.py +0 -0
  465. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/abut.py +0 -0
  466. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/break_rules.py +0 -0
  467. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/color.py +0 -0
  468. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/cross.py +0 -0
  469. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/image.py +0 -0
  470. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/key_rules.py +0 -0
  471. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/link_rules.py +0 -0
  472. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/path_rules.py +0 -0
  473. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/plot_rules.py +0 -0
  474. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/report.py +0 -0
  475. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/diagnostics/three_rules.py +0 -0
  476. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/document/__init__.py +0 -0
  477. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/document/compiler.py +0 -0
  478. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/document/composition.py +0 -0
  479. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/document/data.py +0 -0
  480. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/document/data_io.py +0 -0
  481. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/document/module.py +0 -0
  482. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/document/presets.py +0 -0
  483. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/document/publication.py +0 -0
  484. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/document/spec.py +0 -0
  485. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/draw/annotate.py +0 -0
  486. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/draw/coords.py +0 -0
  487. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/draw/path.py +0 -0
  488. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/draw/place.py +0 -0
  489. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/draw/shapes.py +0 -0
  490. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/__init__.py +0 -0
  491. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/_table_adapters.py +0 -0
  492. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/browser/__init__.py +0 -0
  493. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/browser/drawings.py +0 -0
  494. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/browser/fields.py +0 -0
  495. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/browser/grid.py +0 -0
  496. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/browser/images.py +0 -0
  497. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/browser/page.html +0 -0
  498. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/browser/regions.py +0 -0
  499. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/browser/runtime.js +0 -0
  500. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/browser/series.py +0 -0
  501. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/browser/timeaxis.py +0 -0
  502. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/channels.py +0 -0
  503. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/contours.py +0 -0
  504. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/engineering.py +0 -0
  505. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/fields.py +0 -0
  506. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/figure_planner.py +0 -0
  507. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/grid.py +0 -0
  508. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/measurement.py +0 -0
  509. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/measurements.py +0 -0
  510. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/planner_geometry.py +0 -0
  511. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/regions.py +0 -0
  512. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/sections.py +0 -0
  513. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/selection.py +0 -0
  514. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/slabs.py +0 -0
  515. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/temporal.py +0 -0
  516. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/tiff.py +0 -0
  517. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/experimental/volume.py +0 -0
  518. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/figure.py +0 -0
  519. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/layout/__init__.py +0 -0
  520. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/layout/fit.py +0 -0
  521. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/layout/flow.py +0 -0
  522. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/layout/graph.py +0 -0
  523. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/layout/graph_force.py +0 -0
  524. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/layout/graph_layered.py +0 -0
  525. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/layout/graph_tree.py +0 -0
  526. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/layout/labels.py +0 -0
  527. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/layout/sankey.py +0 -0
  528. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/links/__init__.py +0 -0
  529. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/links/curves.py +0 -0
  530. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/links/link.py +0 -0
  531. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/__init__.py +0 -0
  532. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/axis.py +0 -0
  533. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/breaks.py +0 -0
  534. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/categories.py +0 -0
  535. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/facets.py +0 -0
  536. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/inset.py +0 -0
  537. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/key.py +0 -0
  538. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/marks.py +0 -0
  539. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/notes.py +0 -0
  540. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/panel.py +0 -0
  541. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/png.py +0 -0
  542. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/polar.py +0 -0
  543. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/ramp.py +0 -0
  544. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/raster.py +0 -0
  545. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/ribbon.py +0 -0
  546. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/scale.py +0 -0
  547. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/scatter_raster.py +0 -0
  548. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/series.py +0 -0
  549. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/simplify.py +0 -0
  550. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/plot/timescale.py +0 -0
  551. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/__init__.py +0 -0
  552. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/bundle.py +0 -0
  553. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/composite.py +0 -0
  554. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/fontembed.py +0 -0
  555. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/glyphs.py +0 -0
  556. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/outline.py +0 -0
  557. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/paint.py +0 -0
  558. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/pathdata.py +0 -0
  559. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/pdftext.py +0 -0
  560. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/preview.py +0 -0
  561. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/raster.py +0 -0
  562. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/resources.py +0 -0
  563. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/review.py +0 -0
  564. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/render/revision.py +0 -0
  565. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/themes/__init__.py +0 -0
  566. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/themes/color.py +0 -0
  567. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/themes/palettes.py +0 -0
  568. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/themes/theme.py +0 -0
  569. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/__init__.py +0 -0
  570. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/api.py +0 -0
  571. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/backend.py +0 -0
  572. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender/__init__.py +0 -0
  573. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender/device_worker.py +0 -0
  574. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender/discover.py +0 -0
  575. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender/lineart.py +0 -0
  576. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender/options.py +0 -0
  577. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender/scene_worker.py +0 -0
  578. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender/script.py +0 -0
  579. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender/svgread.py +0 -0
  580. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender/template_worker.py +0 -0
  581. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender/tracing.py +0 -0
  582. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/blender_backend.py +0 -0
  583. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/camera.py +0 -0
  584. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/deps.py +0 -0
  585. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/depth.py +0 -0
  586. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/devices.py +0 -0
  587. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/drill.py +0 -0
  588. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/edges.py +0 -0
  589. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/hlr.py +0 -0
  590. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/linalg.py +0 -0
  591. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/mesh.py +0 -0
  592. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/occlude.py +0 -0
  593. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/order.py +0 -0
  594. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/parse.py +0 -0
  595. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/place.py +0 -0
  596. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/protein.py +0 -0
  597. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/quality.py +0 -0
  598. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/render_jobs.py +0 -0
  599. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/scene_annotations.py +0 -0
  600. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/scene_pass.py +0 -0
  601. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/scene_projection.py +0 -0
  602. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/scenes.py +0 -0
  603. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/shade.py +0 -0
  604. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/solids.py +0 -0
  605. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/templates.json +0 -0
  606. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/three/templates.py +0 -0
  607. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/typeset/__init__.py +0 -0
  608. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/typeset/fonts.py +0 -0
  609. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/typeset/markup.py +0 -0
  610. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/typeset/onpath.py +0 -0
  611. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/typeset/outline.py +0 -0
  612. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/src/inklet/typeset/shaping.py +0 -0
  613. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/assets/mouse.inklet.json +0 -0
  614. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/assets/mouse.png +0 -0
  615. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/dense_graph.py +0 -0
  616. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/draw_probe.py +0 -0
  617. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/electro/assets/sem.png +0 -0
  618. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/electro/assets/tem.png +0 -0
  619. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/electro/cell.py +0 -0
  620. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/electro/common.py +0 -0
  621. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/electro/data.py +0 -0
  622. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/electro/imaging.py +0 -0
  623. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/electro/kinetics.py +0 -0
  624. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/electro/micrograph.py +0 -0
  625. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/electro/system.py +0 -0
  626. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/electro_figure.py +0 -0
  627. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/fidelity.py +0 -0
  628. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/flow.py +0 -0
  629. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/hard_figure.py +0 -0
  630. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/label_storm.py +0 -0
  631. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/mega_figure.py +0 -0
  632. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/meshes/README.md +0 -0
  633. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/meshes/brain-lh.obj +0 -0
  634. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/meshes/spot.obj +0 -0
  635. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/panels/apparatus.py +0 -0
  636. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/panels/graphs.py +0 -0
  637. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/panels/relations.py +0 -0
  638. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/panels/responses.py +0 -0
  639. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/panels/sections.py +0 -0
  640. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/probes.py +0 -0
  641. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/stress/three_figure.py +0 -0
  642. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_alignment_contract.py +0 -0
  643. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_annotate.py +0 -0
  644. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_annotate_letters.py +0 -0
  645. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_assets.py +0 -0
  646. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_assets_provenance.py +0 -0
  647. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_biology_source.py +0 -0
  648. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_blend_scene.py +0 -0
  649. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_browser_facets.py +0 -0
  650. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_browser_figure.py +0 -0
  651. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_browser_regions.py +0 -0
  652. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_browser_revision.py +0 -0
  653. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_browser_scatter.py +0 -0
  654. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_browser_series.py +0 -0
  655. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_browser_statistics.py +0 -0
  656. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_browser_switching.py +0 -0
  657. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_browser_time.py +0 -0
  658. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_categories.py +0 -0
  659. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_channels_contours.py +0 -0
  660. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_chem_figure.py +0 -0
  661. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_cli.py +0 -0
  662. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_components.py +0 -0
  663. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_contrast_and_labels.py +0 -0
  664. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_cookbook.py +0 -0
  665. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_core.py +0 -0
  666. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_core_amendments.py +0 -0
  667. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_csv_input.py +0 -0
  668. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics.py +0 -0
  669. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics_api.py +0 -0
  670. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics_artwork.py +0 -0
  671. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics_break_distorts.py +0 -0
  672. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics_crossing.py +0 -0
  673. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics_image_contrast.py +0 -0
  674. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics_ink.py +0 -0
  675. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics_keys.py +0 -0
  676. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics_links.py +0 -0
  677. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics_paths.py +0 -0
  678. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagnostics_plot_box.py +0 -0
  679. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_diagram_engine.py +0 -0
  680. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_docs.py +0 -0
  681. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_docs_site.py +0 -0
  682. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_document.py +0 -0
  683. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_document_data.py +0 -0
  684. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_document_v25.py +0 -0
  685. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_draw_clip.py +0 -0
  686. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_draw_path.py +0 -0
  687. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_draw_place.py +0 -0
  688. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_draw_shapes.py +0 -0
  689. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_engine_layout.py +0 -0
  690. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_engine_rendering.py +0 -0
  691. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_engine_scatter.py +0 -0
  692. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_engineering_report.py +0 -0
  693. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_export_bundle.py +0 -0
  694. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_figure.py +0 -0
  695. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_figure_planner.py +0 -0
  696. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_fit.py +0 -0
  697. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_grid_fields.py +0 -0
  698. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_guides.py +0 -0
  699. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_label_measurements.py +0 -0
  700. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_layout.py +0 -0
  701. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_layout_graph.py +0 -0
  702. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_layout_graph_fit.py +0 -0
  703. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_layout_origin.py +0 -0
  704. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_layout_sankey.py +0 -0
  705. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_links.py +0 -0
  706. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_links_avoid.py +0 -0
  707. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_links_shapes.py +0 -0
  708. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_mesh_fields.py +0 -0
  709. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_microscopy_tiff.py +0 -0
  710. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_neural_activity.py +0 -0
  711. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_output_contract.py +0 -0
  712. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_paint_program.py +0 -0
  713. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_place_labels.py +0 -0
  714. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_axis.py +0 -0
  715. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_broken_axis.py +0 -0
  716. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_clip.py +0 -0
  717. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_engine.py +0 -0
  718. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_facets.py +0 -0
  719. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_inset.py +0 -0
  720. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_key.py +0 -0
  721. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_labels.py +0 -0
  722. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_legend.py +0 -0
  723. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_marks.py +0 -0
  724. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_notes.py +0 -0
  725. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_polar.py +0 -0
  726. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_publication.py +0 -0
  727. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_quality_review.py +0 -0
  728. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_raster.py +0 -0
  729. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_ribbon.py +0 -0
  730. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_scale.py +0 -0
  731. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_swarm.py +0 -0
  732. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_plot_time.py +0 -0
  733. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_presets.py +0 -0
  734. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_publication_limits.py +0 -0
  735. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_regional_report.py +0 -0
  736. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_release_adversarial.py +0 -0
  737. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_devices.py +0 -0
  738. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_embed.py +0 -0
  739. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_glyphs.py +0 -0
  740. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_jobs.py +0 -0
  741. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_outline.py +0 -0
  742. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_pdf.py +0 -0
  743. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_pdf_text.py +0 -0
  744. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_quality.py +0 -0
  745. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_svg_perf.py +0 -0
  746. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_render_v3.py +0 -0
  747. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_review_v25.py +0 -0
  748. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_round4_plot.py +0 -0
  749. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_routing_avoid.py +0 -0
  750. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_scatter_rendering.py +0 -0
  751. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_scene_annotations.py +0 -0
  752. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_scene_pass.py +0 -0
  753. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_scene_projection.py +0 -0
  754. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_scene_templates.py +0 -0
  755. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_scientific_report.py +0 -0
  756. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_sections.py +0 -0
  757. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_shared_plot_margins.py +0 -0
  758. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_showcase_library.py +0 -0
  759. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_showcase_round3.py +0 -0
  760. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_slabs_regions.py +0 -0
  761. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_structure_figure.py +0 -0
  762. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_svg.py +0 -0
  763. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_table_adapters.py +0 -0
  764. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_target_pose.py +0 -0
  765. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_temporal_adapters.py +0 -0
  766. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_text_markup.py +0 -0
  767. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_text_on_path.py +0 -0
  768. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_theme_font_style.py +0 -0
  769. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_themes.py +0 -0
  770. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_anchor_pin.py +0 -0
  771. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_api.py +0 -0
  772. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_backend_blender.py +0 -0
  773. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_blender.py +0 -0
  774. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_depth_order.py +0 -0
  775. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_drill.py +0 -0
  776. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_hlr.py +0 -0
  777. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_mesh.py +0 -0
  778. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_order_vector.py +0 -0
  779. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_overlay.py +0 -0
  780. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_parse.py +0 -0
  781. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_patches.py +0 -0
  782. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_place.py +0 -0
  783. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_protein.py +0 -0
  784. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_ridges.py +0 -0
  785. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_sort.py +0 -0
  786. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_sort_budget.py +0 -0
  787. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_three_view.py +0 -0
  788. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_typeset.py +0 -0
  789. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_v4_selection.py +0 -0
  790. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_volume.py +0 -0
  791. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_watch_review.py +0 -0
  792. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/test_world_map_example.py +0 -0
  793. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/README.md +0 -0
  794. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/categories-pdf.png +0 -0
  795. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/categories-svg.png +0 -0
  796. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/components-pdf.png +0 -0
  797. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/components-svg.png +0 -0
  798. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/dense-pdf.png +0 -0
  799. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/dense-svg.png +0 -0
  800. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/fonts.json +0 -0
  801. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/inset-pdf.png +0 -0
  802. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/inset-svg.png +0 -0
  803. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/markers-pdf.png +0 -0
  804. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/markers-svg.png +0 -0
  805. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/renderers.json +0 -0
  806. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/type-opacity-pdf.png +0 -0
  807. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/type-opacity-svg.png +0 -0
  808. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
  809. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
  810. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-dense-pdf.png +0 -0
  811. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-dense-svg.png +0 -0
  812. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
  813. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
  814. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
  815. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
  816. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
  817. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
  818. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
  819. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-workflow-svg.png +0 -0
  820. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v25-document-pdf.png +0 -0
  821. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/baseline/v25-document-svg.png +0 -0
  822. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/fixtures.py +0 -0
  823. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tests/visual/v2-budgets.json +0 -0
  824. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/benchmark_diagrams.py +0 -0
  825. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/benchmark_lines.py +0 -0
  826. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/benchmark_v2.py +0 -0
  827. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/benchmark_v4.py +0 -0
  828. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/browser_study.js +0 -0
  829. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/check_render_wheel.py +0 -0
  830. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/check_wheel.py +0 -0
  831. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/dock_ligand.py +0 -0
  832. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/docs_gallery.json +0 -0
  833. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/docs_previews.json +0 -0
  834. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/docs_previews.py +0 -0
  835. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/docs_site.py +0 -0
  836. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/docs_theme/404.html +0 -0
  837. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/docs_theme/card.html +0 -0
  838. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/docs_theme/gallery.html +0 -0
  839. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/docs_theme/home.html +0 -0
  840. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/docs_theme/main.html +0 -0
  841. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/gen_api.py +0 -0
  842. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/prepare_world_map.py +0 -0
  843. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/preset_gallery.py +0 -0
  844. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/showcase_gallery.py +0 -0
  845. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/stress20.py +0 -0
  846. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/strip_pdb.py +0 -0
  847. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/v3_showcase.py +0 -0
  848. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/v4-budgets.json +0 -0
  849. {inklet-4.0.0.dev1 → inklet-4.0.0.dev2}/tools/visual_check.py +0 -0
@@ -92,6 +92,9 @@ jobs:
92
92
  run: |
93
93
  .venv/bin/python tools/benchmark_engine.py --repeat 1 --output out/engine-benchmark.json
94
94
  .venv/bin/python examples/engine_review.py --output out/engine-review
95
+ .venv/bin/python examples/compositing_review.py --output out/compositing-review
96
+ .venv/bin/python examples/hatch_review.py --output out/hatch-review
97
+ .venv/bin/python examples/clipping_review.py --output out/clipping-review
95
98
  - name: Diagram routing and label review
96
99
  run: |
97
100
  .venv/bin/python tools/benchmark_diagrams.py --repeat 1 --output out/diagram-benchmark.json
@@ -6,7 +6,7 @@ on:
6
6
  tag:
7
7
  description: Published GitHub release tag
8
8
  required: true
9
- default: v4.0.0.dev1
9
+ default: v4.0.0.dev2
10
10
  type: string
11
11
  dry_run:
12
12
  description: Validate release files without uploading to PyPI
@@ -43,7 +43,7 @@ jobs:
43
43
  RELEASE_TAG: ${{ inputs.tag }}
44
44
  run: |
45
45
  [[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(\.dev[0-9]+)?$ ]] || {
46
- echo 'Expected a stable or development tag such as v3.1.0 or v4.0.0.dev1' >&2
46
+ echo 'Expected a stable or development tag such as v3.1.0 or v4.0.0.dev2' >&2
47
47
  exit 1
48
48
  }
49
49
  gh release view "$RELEASE_TAG" --json isDraft,isPrerelease > "$RUNNER_TEMP/release.json"
@@ -1,5 +1,40 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.0.0.dev2 — 2026-09-08
4
+
5
+ Second development preview. Install explicitly with
6
+ `python -m pip install "inklet==4.0.0.dev2"`; 3.1.0 remains stable.
7
+
8
+ - Preserve open cubic segments through geometric clipping, using parameter
9
+ subdivision and bounded adaptive measurement sampling in the clip frame.
10
+ - Add `window()` for nested, transformed visual clipping of all SVG/PDF/PNG
11
+ paint, including glyphs, images, markers, filled curves and rounded corners.
12
+ Keep window layout, painted bounds and authored child geometry distinct;
13
+ expose inherited clip regions and visibility filtering through resolution.
14
+ - Preserve windows through document compilation/copying and account for hidden
15
+ content in page-bound and path-crossing diagnostics.
16
+ - Reduce allocation in dense-line clipping; add an eight-panel rendering
17
+ review, independent backend checks and reproducible clipping/line benchmarks.
18
+
19
+
20
+ - Share exact hatch-line geometry between SVG and PDF, with reusable local
21
+ coverage resources and independent shape clips. Preserve holes, transforms,
22
+ border styles and fill opacity without periodic tile seams or inherited
23
+ border settings affecting the fill.
24
+ - Reuse hatch coverage across nearby shape sizes, retain explicit work limits,
25
+ and add an illustrated review plus repeated/distinct-size export benchmarks.
26
+
27
+ - Correct PDF compositing for individual filled-and-stroked shapes, text halos
28
+ and vector brushes: group opacity fades their combined paint once.
29
+ - Preserve palette and color-key PNG transparency in PDF, including partial
30
+ palette alpha and file-backed images.
31
+ - Reuse subtree painted bounds and paint-count analysis within each PDF page
32
+ export; nested transparency groups no longer remeasure the same glyphs for
33
+ every ancestor. Keep inherited style/transform contexts separate and discard
34
+ the caches after export.
35
+ - Add an illustrated compositing review, independent SVG/Poppler comparisons
36
+ and a nested-group workload to the rendering benchmark and CI checks.
37
+
3
38
  ## 4.0.0.dev1 — 2026-09-08
4
39
 
5
40
  First installable 4.0 development preview. This collects the linked-document,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: inklet
3
- Version: 4.0.0.dev1
3
+ Version: 4.0.0.dev2
4
4
  Summary: Scientific figures with live data, measured layout, and consistent vector exports.
5
5
  Project-URL: Repository, https://github.com/Mapika/inklet
6
6
  Project-URL: Documentation, https://inklet.readthedocs.io/en/latest/
@@ -81,18 +81,19 @@ their signatures and report schemas may change.
81
81
 
82
82
  ## 4.0 development preview
83
83
 
84
- **4.0.0.dev1** adds offline linked charts, maps, calibrated images, mesh fields,
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,
85
86
  contours and streamlines, with saved selections and reproducible exports.
86
87
  It also includes date/UTC axes, facets, pandas/Polars adapters and shared
87
88
  plotting-quality improvements.
88
89
 
89
90
  ```sh
90
- python -m pip install "inklet==4.0.0.dev1"
91
+ python -m pip install "inklet==4.0.0.dev2"
91
92
  ```
92
93
 
93
94
  [Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
94
95
  [4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
95
- [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev1)
96
+ [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev2)
96
97
 
97
98
  This is an opt-in development release. Experimental APIs and saved-state schemas
98
99
  may change; 3.1.0 remains the stable release. General browser editing,
@@ -31,18 +31,19 @@ their signatures and report schemas may change.
31
31
 
32
32
  ## 4.0 development preview
33
33
 
34
- **4.0.0.dev1** adds offline linked charts, maps, calibrated images, mesh fields,
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,
35
36
  contours and streamlines, with saved selections and reproducible exports.
36
37
  It also includes date/UTC axes, facets, pandas/Polars adapters and shared
37
38
  plotting-quality improvements.
38
39
 
39
40
  ```sh
40
- python -m pip install "inklet==4.0.0.dev1"
41
+ python -m pip install "inklet==4.0.0.dev2"
41
42
  ```
42
43
 
43
44
  [Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
44
45
  [4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
45
- [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev1)
46
+ [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev2)
46
47
 
47
48
  This is an opt-in development release. Experimental APIs and saved-state schemas
48
49
  may change; 3.1.0 remains the stable release. General browser editing,
@@ -457,6 +457,10 @@ One data glyph, centred on its own origin so `place()` lands it on the point it
457
457
 
458
458
  Put children at explicit coordinates, in millimetres.
459
459
 
460
+ #### `window(items: 'Diagram | Iterable[Diagram]', region: 'Rect | Sequence[Point]', *, kind: 'str' = 'window', **style) -> 'Diagram'`
461
+
462
+ Crop painted content to a fixed convex window, in local millimetres.
463
+
460
464
  #### `clip(items: 'Diagram | Iterable[Diagram]', region: 'Rect | Sequence[Point]', *, kind: 'str' = 'clip', strict: 'bool' = False, **style) -> 'Diagram'`
461
465
 
462
466
  Cut `items` down to `region`, in the coordinate frame you pass it in.
@@ -1058,9 +1062,9 @@ Flatten the tree into world transforms, keyed by node id.
1058
1062
 
1059
1063
  ## Core types and units
1060
1064
 
1061
- #### `class Diagram(prim: 'Prim | None' = None, children: "tuple['Diagram', ...]" = (), transform: 'Affine' = Affine(a=1.0, b=0.0, c=0.0, d=1.0, e=0.0, f=0.0), style: 'Style' = Style(fill=None, stroke=None, stroke_width=None, stroke_dash=None, stroke_linecap=None, stroke_linejoin=None, opacity=None, fill_opacity=None, stroke_opacity=None, corner_radius=None, font_family=None, font_size=None, font_weight=None, font_style=None, text_fill=None, line_height=None, halo=None, halo_color=None), kind: 'str' = 'g', name: 'str | None' = None, id: 'str' = '', envelope_override: 'Envelope | None' = None, attached_to: 'tuple[str, ...]' = (), anchors: 'dict[str, Vec2]' = <factory>, notes: 'dict[str, object]' = <factory>, _cache: 'dict' = <factory>) -> None`
1065
+ #### `class Diagram(prim: 'Prim | None' = None, children: "tuple['Diagram', ...]" = (), transform: 'Affine' = Affine(a=1.0, b=0.0, c=0.0, d=1.0, e=0.0, f=0.0), style: 'Style' = Style(fill=None, stroke=None, stroke_width=None, stroke_dash=None, stroke_linecap=None, stroke_linejoin=None, opacity=None, fill_opacity=None, stroke_opacity=None, corner_radius=None, font_family=None, font_size=None, font_weight=None, font_style=None, text_fill=None, line_height=None, halo=None, halo_color=None), kind: 'str' = 'g', name: 'str | None' = None, id: 'str' = '', envelope_override: 'Envelope | None' = None, attached_to: 'tuple[str, ...]' = (), anchors: 'dict[str, Vec2]' = <factory>, notes: 'dict[str, object]' = <factory>, clip_region: 'tuple[Vec2, ...]' = (), _cache: 'dict' = <factory>) -> None`
1062
1066
 
1063
- Diagram(prim: 'Prim | None' = None, children: "tuple['Diagram', ...]" = (), transform: 'Affine' = Affine(a=1.0, b=0.0, c=0.0, d=1.0, e=0.0, f=0.0), style: 'Style' = Style(fill=None, stroke=None, stroke_width=None, stroke_dash=None, stroke_linecap=None, stroke_linejoin=None, opacity=None, fill_opacity=None, stroke_opacity=None, corner_radius=None, font_family=None, font_size=None, font_weight=None, font_style=None, text_fill=None, line_height=None, halo=None, halo_color=None), kind: 'str' = 'g', name: 'str | None' = None, id: 'str' = '', envelope_override: 'Envelope | None' = None, attached_to: 'tuple[str, ...]' = (), anchors: 'dict[str, Vec2]' = <factory>, notes: 'dict[str, object]' = <factory>, _cache: 'dict' = <factory>)
1067
+ Diagram(prim: 'Prim | None' = None, children: "tuple['Diagram', ...]" = (), transform: 'Affine' = Affine(a=1.0, b=0.0, c=0.0, d=1.0, e=0.0, f=0.0), style: 'Style' = Style(fill=None, stroke=None, stroke_width=None, stroke_dash=None, stroke_linecap=None, stroke_linejoin=None, opacity=None, fill_opacity=None, stroke_opacity=None, corner_radius=None, font_family=None, font_size=None, font_weight=None, font_style=None, text_fill=None, line_height=None, halo=None, halo_color=None), kind: 'str' = 'g', name: 'str | None' = None, id: 'str' = '', envelope_override: 'Envelope | None' = None, attached_to: 'tuple[str, ...]' = (), anchors: 'dict[str, Vec2]' = <factory>, notes: 'dict[str, object]' = <factory>, clip_region: 'tuple[Vec2, ...]' = (), _cache: 'dict' = <factory>)
1064
1068
 
1065
1069
  * `extent(direction: 'Vec2') -> 'float'` -- How far this reaches along a direction, in the parent's frame. This is what stacking asks, and why a rotated shape packs tighter than its bbox.
1066
1070
  * `anchor(name: 'str', at: 'tuple[float, float] | Vec2') -> "'Diagram'"` -- Register a named point. A tuple is read as fractions of the local bounding box, (0, 0) being its top-left corner -- the natural way to point at an ear in a photograph.
@@ -0,0 +1,119 @@
1
+ {
2
+ "schema": "inklet.clipping-benchmark/1",
3
+ "python": "3.12.3",
4
+ "platform": "Linux-6.6.87.2-microsoft-standard-WSL2-x86_64-with-glibc2.39",
5
+ "source_sha256": "b4ded74e40916e536713f7589469a20bb25677587c03e83942cf6aeb7ecf0bd5",
6
+ "cases": [
7
+ {
8
+ "case": "line",
9
+ "runs": [
10
+ {
11
+ "clip_seconds": 0.09736313400208019,
12
+ "svg_seconds": 0.010083654022309929,
13
+ "pdf_seconds": 0.01944988899049349,
14
+ "total_seconds": 0.1268966770148836,
15
+ "svg_bytes": 76870,
16
+ "pdf_bytes": 36176
17
+ },
18
+ {
19
+ "clip_seconds": 0.09901987100602128,
20
+ "svg_seconds": 0.010495024005649611,
21
+ "pdf_seconds": 0.0206202779954765,
22
+ "total_seconds": 0.1301351730071474,
23
+ "svg_bytes": 76870,
24
+ "pdf_bytes": 36176
25
+ },
26
+ {
27
+ "clip_seconds": 0.10801237399573438,
28
+ "svg_seconds": 0.01182610000250861,
29
+ "pdf_seconds": 0.022811452014138922,
30
+ "total_seconds": 0.1426499260123819,
31
+ "svg_bytes": 76870,
32
+ "pdf_bytes": 36176
33
+ }
34
+ ],
35
+ "median": {
36
+ "clip_seconds": 0.09901987100602128,
37
+ "svg_seconds": 0.010495024005649611,
38
+ "pdf_seconds": 0.0206202779954765,
39
+ "total_seconds": 0.1301351730071474,
40
+ "svg_bytes": 76870,
41
+ "pdf_bytes": 36176
42
+ }
43
+ },
44
+ {
45
+ "case": "band",
46
+ "runs": [
47
+ {
48
+ "clip_seconds": 0.6217630119936075,
49
+ "svg_seconds": 0.05115153800579719,
50
+ "pdf_seconds": 0.10317503899568692,
51
+ "total_seconds": 0.7760895889950916,
52
+ "svg_bytes": 316513,
53
+ "pdf_bytes": 145203
54
+ },
55
+ {
56
+ "clip_seconds": 0.626939455018146,
57
+ "svg_seconds": 0.06268787098815665,
58
+ "pdf_seconds": 0.09176701598335057,
59
+ "total_seconds": 0.7813943419896532,
60
+ "svg_bytes": 316513,
61
+ "pdf_bytes": 145203
62
+ },
63
+ {
64
+ "clip_seconds": 0.6646606319991406,
65
+ "svg_seconds": 0.05158257801667787,
66
+ "pdf_seconds": 0.09825415699742734,
67
+ "total_seconds": 0.8144973670132458,
68
+ "svg_bytes": 316513,
69
+ "pdf_bytes": 145203
70
+ }
71
+ ],
72
+ "median": {
73
+ "clip_seconds": 0.626939455018146,
74
+ "svg_seconds": 0.05158257801667787,
75
+ "pdf_seconds": 0.09825415699742734,
76
+ "total_seconds": 0.7813943419896532,
77
+ "svg_bytes": 316513,
78
+ "pdf_bytes": 145203
79
+ }
80
+ },
81
+ {
82
+ "case": "curves",
83
+ "runs": [
84
+ {
85
+ "clip_seconds": 0.02900044500711374,
86
+ "svg_seconds": 0.0009433439990971237,
87
+ "pdf_seconds": 0.0009197680046781898,
88
+ "total_seconds": 0.030863557010889053,
89
+ "svg_bytes": 5248,
90
+ "pdf_bytes": 3319
91
+ },
92
+ {
93
+ "clip_seconds": 0.030080602009547874,
94
+ "svg_seconds": 0.0012863579904660583,
95
+ "pdf_seconds": 0.0010805090132635087,
96
+ "total_seconds": 0.03244746901327744,
97
+ "svg_bytes": 5248,
98
+ "pdf_bytes": 3319
99
+ },
100
+ {
101
+ "clip_seconds": 0.029620053013786674,
102
+ "svg_seconds": 0.0009497819992247969,
103
+ "pdf_seconds": 0.0013156150234863162,
104
+ "total_seconds": 0.03188545003649779,
105
+ "svg_bytes": 5248,
106
+ "pdf_bytes": 3319
107
+ }
108
+ ],
109
+ "median": {
110
+ "clip_seconds": 0.029620053013786674,
111
+ "svg_seconds": 0.0009497819992247969,
112
+ "pdf_seconds": 0.0010805090132635087,
113
+ "total_seconds": 0.03188545003649779,
114
+ "svg_bytes": 5248,
115
+ "pdf_bytes": 3319
116
+ }
117
+ }
118
+ ]
119
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ "schema": "inklet.clipping-benchmark/1",
3
+ "python": "3.12.3",
4
+ "platform": "Linux-6.6.87.2-microsoft-standard-WSL2-x86_64-with-glibc2.39",
5
+ "source_sha256": "f323b9e3b780d44cc5ea1b286512bc9d3ec019a1387e814803964d8cc9d27d13",
6
+ "cases": [
7
+ {
8
+ "case": "line",
9
+ "runs": [
10
+ {
11
+ "clip_seconds": 0.2047820259758737,
12
+ "svg_seconds": 0.010102088999701664,
13
+ "pdf_seconds": 0.02015214299899526,
14
+ "total_seconds": 0.23503625797457062,
15
+ "svg_bytes": 76870,
16
+ "pdf_bytes": 36176
17
+ },
18
+ {
19
+ "clip_seconds": 0.20985267401556484,
20
+ "svg_seconds": 0.010210584994638339,
21
+ "pdf_seconds": 0.02010145699023269,
22
+ "total_seconds": 0.24016471600043587,
23
+ "svg_bytes": 76870,
24
+ "pdf_bytes": 36176
25
+ },
26
+ {
27
+ "clip_seconds": 0.20240381799521856,
28
+ "svg_seconds": 0.010233473003609106,
29
+ "pdf_seconds": 0.02053205599077046,
30
+ "total_seconds": 0.23316934698959813,
31
+ "svg_bytes": 76870,
32
+ "pdf_bytes": 36176
33
+ }
34
+ ],
35
+ "median": {
36
+ "clip_seconds": 0.2047820259758737,
37
+ "svg_seconds": 0.010210584994638339,
38
+ "pdf_seconds": 0.02015214299899526,
39
+ "total_seconds": 0.23503625797457062,
40
+ "svg_bytes": 76870,
41
+ "pdf_bytes": 36176
42
+ }
43
+ },
44
+ {
45
+ "case": "band",
46
+ "runs": [
47
+ {
48
+ "clip_seconds": 0.6113144700066186,
49
+ "svg_seconds": 0.05068271100753918,
50
+ "pdf_seconds": 0.0926879330072552,
51
+ "total_seconds": 0.754685114021413,
52
+ "svg_bytes": 316513,
53
+ "pdf_bytes": 145203
54
+ },
55
+ {
56
+ "clip_seconds": 0.5794899000029545,
57
+ "svg_seconds": 0.0481099919998087,
58
+ "pdf_seconds": 0.08913570898585021,
59
+ "total_seconds": 0.7167356009886134,
60
+ "svg_bytes": 316513,
61
+ "pdf_bytes": 145203
62
+ },
63
+ {
64
+ "clip_seconds": 0.5717577220057137,
65
+ "svg_seconds": 0.047267758985981345,
66
+ "pdf_seconds": 0.09365696899476461,
67
+ "total_seconds": 0.7126824499864597,
68
+ "svg_bytes": 316513,
69
+ "pdf_bytes": 145203
70
+ }
71
+ ],
72
+ "median": {
73
+ "clip_seconds": 0.5794899000029545,
74
+ "svg_seconds": 0.0481099919998087,
75
+ "pdf_seconds": 0.0926879330072552,
76
+ "total_seconds": 0.7167356009886134,
77
+ "svg_bytes": 316513,
78
+ "pdf_bytes": 145203
79
+ }
80
+ },
81
+ {
82
+ "case": "curves",
83
+ "runs": [
84
+ {
85
+ "clip_seconds": 0.03832915498060174,
86
+ "svg_seconds": 0.0019394969858694822,
87
+ "pdf_seconds": 0.002644603024236858,
88
+ "total_seconds": 0.04291325499070808,
89
+ "svg_bytes": 13575,
90
+ "pdf_bytes": 7041
91
+ },
92
+ {
93
+ "clip_seconds": 0.03621691299485974,
94
+ "svg_seconds": 0.0019186209829058498,
95
+ "pdf_seconds": 0.0025379790167789906,
96
+ "total_seconds": 0.04067351299454458,
97
+ "svg_bytes": 13575,
98
+ "pdf_bytes": 7041
99
+ },
100
+ {
101
+ "clip_seconds": 0.038817927008494735,
102
+ "svg_seconds": 0.0018433219811413437,
103
+ "pdf_seconds": 0.0024352470063604414,
104
+ "total_seconds": 0.04309649599599652,
105
+ "svg_bytes": 13575,
106
+ "pdf_bytes": 7041
107
+ }
108
+ ],
109
+ "median": {
110
+ "clip_seconds": 0.03832915498060174,
111
+ "svg_seconds": 0.0019186209829058498,
112
+ "pdf_seconds": 0.0025379790167789906,
113
+ "total_seconds": 0.04291325499070808,
114
+ "svg_bytes": 13575,
115
+ "pdf_bytes": 7041
116
+ }
117
+ }
118
+ ]
119
+ }
@@ -0,0 +1 @@
1
+ \caption{Clipping checks using original simulated data and artwork. (a) Geometrically clipped smooth response curves, retaining cubic segments. (b) A dense signal with a narrow peak and an explicit missing-data gap; physical simplification tolerance 0.02 mm. (c) Filled uncertainty-like bands representing supplied simulated intervals, cropped with their outlines. (d) Large boundary markers and thick strokes cropped by a painted window. (e) A synthetic scalar image under a rotated convex window. (f) Glyphs and halos cropped together. (g) Rounded rectangles and an even-odd hole, cropped without changing their source geometry. (h) Nested windows with group opacity beside an unclipped sibling. Letter labels identify checks; the artwork contains no panel titles. Recipe and artwork: MIT, Mark Marosi. No measured data or inferred uncertainty.}
@@ -0,0 +1,110 @@
1
+ {
2
+ "schema": "inklet.line-benchmark/1",
3
+ "python": "3.12.3",
4
+ "platform": "Linux-6.6.87.2-microsoft-standard-WSL2-x86_64-with-glibc2.39",
5
+ "source_sha256": "4d568547de3dd27236cad313c0ba4b2ea86c9b236c14e21265d28158f16f2dcb",
6
+ "cases": [
7
+ {
8
+ "mode": "exact",
9
+ "runs": [
10
+ {
11
+ "version": "4.0.0.dev1",
12
+ "mode": "exact",
13
+ "compile_seconds": 2.3698998230102006,
14
+ "svg_seconds": 0.20285959899774753,
15
+ "pdf_seconds": 0.29312898899661377,
16
+ "total_seconds": 2.865888411004562,
17
+ "svg_bytes": 980481,
18
+ "pdf_bytes": 461067,
19
+ "input_points": 100001,
20
+ "output_points": 100001
21
+ },
22
+ {
23
+ "version": "4.0.0.dev1",
24
+ "mode": "exact",
25
+ "compile_seconds": 2.295190052012913,
26
+ "svg_seconds": 0.18526515999110416,
27
+ "pdf_seconds": 0.28874259899021126,
28
+ "total_seconds": 2.7691978109942283,
29
+ "svg_bytes": 980481,
30
+ "pdf_bytes": 461067,
31
+ "input_points": 100001,
32
+ "output_points": 100001
33
+ },
34
+ {
35
+ "version": "4.0.0.dev1",
36
+ "mode": "exact",
37
+ "compile_seconds": 2.101868526020553,
38
+ "svg_seconds": 0.17295101800118573,
39
+ "pdf_seconds": 0.2843762160046026,
40
+ "total_seconds": 2.5591957600263413,
41
+ "svg_bytes": 980481,
42
+ "pdf_bytes": 461067,
43
+ "input_points": 100001,
44
+ "output_points": 100001
45
+ }
46
+ ],
47
+ "median": {
48
+ "compile_seconds": 2.295190052012913,
49
+ "svg_seconds": 0.18526515999110416,
50
+ "pdf_seconds": 0.28874259899021126,
51
+ "total_seconds": 2.7691978109942283,
52
+ "svg_bytes": 980481,
53
+ "pdf_bytes": 461067,
54
+ "input_points": 100001,
55
+ "output_points": 100001
56
+ }
57
+ },
58
+ {
59
+ "mode": "reduced",
60
+ "runs": [
61
+ {
62
+ "version": "4.0.0.dev1",
63
+ "mode": "reduced",
64
+ "compile_seconds": 1.4471595000068191,
65
+ "svg_seconds": 0.09697175401379354,
66
+ "pdf_seconds": 0.01362504600547254,
67
+ "total_seconds": 1.5577563000260852,
68
+ "svg_bytes": 27002,
69
+ "pdf_bytes": 6491,
70
+ "input_points": 100001,
71
+ "output_points": 347
72
+ },
73
+ {
74
+ "version": "4.0.0.dev1",
75
+ "mode": "reduced",
76
+ "compile_seconds": 1.4402156580181327,
77
+ "svg_seconds": 0.09827578099793755,
78
+ "pdf_seconds": 0.011242231994401664,
79
+ "total_seconds": 1.5497336710104719,
80
+ "svg_bytes": 27002,
81
+ "pdf_bytes": 6491,
82
+ "input_points": 100001,
83
+ "output_points": 347
84
+ },
85
+ {
86
+ "version": "4.0.0.dev1",
87
+ "mode": "reduced",
88
+ "compile_seconds": 1.4540170399995986,
89
+ "svg_seconds": 0.10391180001897737,
90
+ "pdf_seconds": 0.012621197005501017,
91
+ "total_seconds": 1.570550037024077,
92
+ "svg_bytes": 27002,
93
+ "pdf_bytes": 6491,
94
+ "input_points": 100001,
95
+ "output_points": 347
96
+ }
97
+ ],
98
+ "median": {
99
+ "compile_seconds": 1.4471595000068191,
100
+ "svg_seconds": 0.09827578099793755,
101
+ "pdf_seconds": 0.012621197005501017,
102
+ "total_seconds": 1.5577563000260852,
103
+ "svg_bytes": 27002,
104
+ "pdf_bytes": 6491,
105
+ "input_points": 100001,
106
+ "output_points": 347
107
+ }
108
+ }
109
+ ]
110
+ }
@@ -0,0 +1,110 @@
1
+ {
2
+ "schema": "inklet.line-benchmark/1",
3
+ "python": "3.12.3",
4
+ "platform": "Linux-6.6.87.2-microsoft-standard-WSL2-x86_64-with-glibc2.39",
5
+ "source_sha256": "7432547a3062befe9e771ae3eeebf198dd2ab45a95df9f9a283ba9704e56511d",
6
+ "cases": [
7
+ {
8
+ "mode": "exact",
9
+ "runs": [
10
+ {
11
+ "version": "4.0.0.dev1",
12
+ "mode": "exact",
13
+ "compile_seconds": 2.10556289597298,
14
+ "svg_seconds": 0.1684394869953394,
15
+ "pdf_seconds": 0.28911288201925345,
16
+ "total_seconds": 2.563115264987573,
17
+ "svg_bytes": 980481,
18
+ "pdf_bytes": 461067,
19
+ "input_points": 100001,
20
+ "output_points": 100001
21
+ },
22
+ {
23
+ "version": "4.0.0.dev1",
24
+ "mode": "exact",
25
+ "compile_seconds": 2.19811100102379,
26
+ "svg_seconds": 0.18239081799401902,
27
+ "pdf_seconds": 0.2914214770135004,
28
+ "total_seconds": 2.6719232960313093,
29
+ "svg_bytes": 980481,
30
+ "pdf_bytes": 461067,
31
+ "input_points": 100001,
32
+ "output_points": 100001
33
+ },
34
+ {
35
+ "version": "4.0.0.dev1",
36
+ "mode": "exact",
37
+ "compile_seconds": 2.135802510980284,
38
+ "svg_seconds": 0.18170851399190724,
39
+ "pdf_seconds": 0.2970958370133303,
40
+ "total_seconds": 2.6146068619855214,
41
+ "svg_bytes": 980481,
42
+ "pdf_bytes": 461067,
43
+ "input_points": 100001,
44
+ "output_points": 100001
45
+ }
46
+ ],
47
+ "median": {
48
+ "compile_seconds": 2.135802510980284,
49
+ "svg_seconds": 0.18170851399190724,
50
+ "pdf_seconds": 0.2914214770135004,
51
+ "total_seconds": 2.6146068619855214,
52
+ "svg_bytes": 980481,
53
+ "pdf_bytes": 461067,
54
+ "input_points": 100001,
55
+ "output_points": 100001
56
+ }
57
+ },
58
+ {
59
+ "mode": "reduced",
60
+ "runs": [
61
+ {
62
+ "version": "4.0.0.dev1",
63
+ "mode": "reduced",
64
+ "compile_seconds": 1.6233859639905859,
65
+ "svg_seconds": 0.12080392800271511,
66
+ "pdf_seconds": 0.013257821992738172,
67
+ "total_seconds": 1.7574477139860392,
68
+ "svg_bytes": 27002,
69
+ "pdf_bytes": 6491,
70
+ "input_points": 100001,
71
+ "output_points": 347
72
+ },
73
+ {
74
+ "version": "4.0.0.dev1",
75
+ "mode": "reduced",
76
+ "compile_seconds": 1.6253068319929298,
77
+ "svg_seconds": 0.13291000598110259,
78
+ "pdf_seconds": 0.013203223003074527,
79
+ "total_seconds": 1.771420060977107,
80
+ "svg_bytes": 27002,
81
+ "pdf_bytes": 6491,
82
+ "input_points": 100001,
83
+ "output_points": 347
84
+ },
85
+ {
86
+ "version": "4.0.0.dev1",
87
+ "mode": "reduced",
88
+ "compile_seconds": 1.5204979050031397,
89
+ "svg_seconds": 0.11567337001906708,
90
+ "pdf_seconds": 0.014040762995136902,
91
+ "total_seconds": 1.6502120380173437,
92
+ "svg_bytes": 27002,
93
+ "pdf_bytes": 6491,
94
+ "input_points": 100001,
95
+ "output_points": 347
96
+ }
97
+ ],
98
+ "median": {
99
+ "compile_seconds": 1.6233859639905859,
100
+ "svg_seconds": 0.12080392800271511,
101
+ "pdf_seconds": 0.013257821992738172,
102
+ "total_seconds": 1.7574477139860392,
103
+ "svg_bytes": 27002,
104
+ "pdf_bytes": 6491,
105
+ "input_points": 100001,
106
+ "output_points": 347
107
+ }
108
+ }
109
+ ]
110
+ }