inklet 3.1.0__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-3.1.0 → inklet-4.0.0.dev2}/.github/workflows/checks.yml +61 -1
  2. {inklet-3.1.0 → inklet-4.0.0.dev2}/.github/workflows/publish.yml +30 -4
  3. {inklet-3.1.0 → inklet-4.0.0.dev2}/CHANGELOG.md +165 -0
  4. {inklet-3.1.0 → inklet-4.0.0.dev2}/CONTRIBUTING.md +5 -0
  5. {inklet-3.1.0 → inklet-4.0.0.dev2}/PKG-INFO +28 -3
  6. {inklet-3.1.0 → inklet-4.0.0.dev2}/README.md +21 -0
  7. {inklet-3.1.0 → inklet-4.0.0.dev2}/THIRD_PARTY_NOTICES.md +13 -0
  8. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/api.md +10 -6
  9. inklet-4.0.0.dev2/docs/assets/guides/plot-quality-after.png +0 -0
  10. inklet-4.0.0.dev2/docs/assets/guides/plot-quality-before.png +0 -0
  11. inklet-4.0.0.dev2/docs/assets/research-preview/clipping-after.json +119 -0
  12. inklet-4.0.0.dev2/docs/assets/research-preview/clipping-before.json +119 -0
  13. inklet-4.0.0.dev2/docs/assets/research-preview/clipping-caption.tex +1 -0
  14. inklet-4.0.0.dev2/docs/assets/research-preview/clipping-lines-after.json +110 -0
  15. inklet-4.0.0.dev2/docs/assets/research-preview/clipping-lines-before.json +110 -0
  16. inklet-4.0.0.dev2/docs/assets/research-preview/compositing-after.json +143 -0
  17. inklet-4.0.0.dev2/docs/assets/research-preview/compositing-before.json +143 -0
  18. inklet-4.0.0.dev2/docs/assets/research-preview/compositing-caption.tex +1 -0
  19. inklet-4.0.0.dev2/docs/assets/research-preview/hatch-after.json +207 -0
  20. inklet-4.0.0.dev2/docs/assets/research-preview/hatch-before.json +207 -0
  21. inklet-4.0.0.dev2/docs/assets/research-preview/hatch-caption.tex +1 -0
  22. inklet-4.0.0.dev2/docs/assets/v4/after.json +749 -0
  23. inklet-4.0.0.dev2/docs/assets/v4/before.json +531 -0
  24. inklet-4.0.0.dev2/docs/assets/v4/browser-quality.json +21 -0
  25. inklet-4.0.0.dev2/docs/assets/v4/browser-scatter.html +404 -0
  26. inklet-4.0.0.dev2/docs/assets/v4/browser-scatter.png +0 -0
  27. inklet-4.0.0.dev2/docs/assets/v4/browser-study.json +200 -0
  28. inklet-4.0.0.dev2/docs/assets/v4/contours-streamlines-170mm.png +0 -0
  29. inklet-4.0.0.dev2/docs/assets/v4/contours-streamlines-masked.png +0 -0
  30. inklet-4.0.0.dev2/docs/assets/v4/contours-streamlines.html +404 -0
  31. inklet-4.0.0.dev2/docs/assets/v4/contours-streamlines.png +0 -0
  32. inklet-4.0.0.dev2/docs/assets/v4/engineering-report-170mm.png +0 -0
  33. inklet-4.0.0.dev2/docs/assets/v4/engineering-report.html +404 -0
  34. inklet-4.0.0.dev2/docs/assets/v4/engineering-report.png +0 -0
  35. inklet-4.0.0.dev2/docs/assets/v4/faceted-operations.html +404 -0
  36. inklet-4.0.0.dev2/docs/assets/v4/faceted-operations.png +0 -0
  37. inklet-4.0.0.dev2/docs/assets/v4/linked-dashboard.html +404 -0
  38. inklet-4.0.0.dev2/docs/assets/v4/linked-dashboard.png +0 -0
  39. inklet-4.0.0.dev2/docs/assets/v4/linked-selection.html +89 -0
  40. inklet-4.0.0.dev2/docs/assets/v4/linked-selection.png +0 -0
  41. inklet-4.0.0.dev2/docs/assets/v4/mesh-fields-170mm.png +0 -0
  42. inklet-4.0.0.dev2/docs/assets/v4/mesh-fields.html +404 -0
  43. inklet-4.0.0.dev2/docs/assets/v4/mesh-fields.png +0 -0
  44. inklet-4.0.0.dev2/docs/assets/v4/region-shapes.html +404 -0
  45. inklet-4.0.0.dev2/docs/assets/v4/region-shapes.png +0 -0
  46. inklet-4.0.0.dev2/docs/assets/v4/regional-analysis.html +404 -0
  47. inklet-4.0.0.dev2/docs/assets/v4/regional-analysis.png +0 -0
  48. inklet-4.0.0.dev2/docs/assets/v4/regional-report-160mm.png +0 -0
  49. inklet-4.0.0.dev2/docs/assets/v4/regional-report.html +404 -0
  50. inklet-4.0.0.dev2/docs/assets/v4/regional-report.png +0 -0
  51. inklet-4.0.0.dev2/docs/assets/v4/scientific-report-170mm.png +0 -0
  52. inklet-4.0.0.dev2/docs/assets/v4/scientific-report.html +404 -0
  53. inklet-4.0.0.dev2/docs/assets/v4/scientific-report.png +0 -0
  54. inklet-4.0.0.dev2/docs/assets/v4/statistical-views.html +404 -0
  55. inklet-4.0.0.dev2/docs/assets/v4/statistical-views.png +0 -0
  56. inklet-4.0.0.dev2/docs/assets/v4/table-inputs.html +404 -0
  57. inklet-4.0.0.dev2/docs/assets/v4/table-inputs.png +0 -0
  58. inklet-4.0.0.dev2/docs/assets/v4/time-series.html +404 -0
  59. inklet-4.0.0.dev2/docs/assets/v4/time-series.png +0 -0
  60. inklet-4.0.0.dev2/docs/assets/v4/world-population-2019.html +404 -0
  61. inklet-4.0.0.dev2/docs/assets/v4/world-population-2019.json +33 -0
  62. inklet-4.0.0.dev2/docs/assets/v4/world-population-2019.png +0 -0
  63. inklet-4.0.0.dev2/docs/assets/v4/world-population-revisions.html +404 -0
  64. inklet-4.0.0.dev2/docs/assets/v4/world-population-revisions.png +0 -0
  65. inklet-4.0.0.dev2/docs/assets/v4/world-population.html +404 -0
  66. inklet-4.0.0.dev2/docs/assets/v4/world-population.png +0 -0
  67. inklet-4.0.0.dev2/docs/browser-rendering.md +116 -0
  68. inklet-4.0.0.dev2/docs/clipping.md +109 -0
  69. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/compatibility.md +11 -0
  70. inklet-4.0.0.dev2/docs/compositing.md +112 -0
  71. inklet-4.0.0.dev2/docs/contours-streamlines.md +171 -0
  72. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/cookbook.md +4 -0
  73. inklet-4.0.0.dev2/docs/data-revisions.md +221 -0
  74. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/data.md +10 -0
  75. inklet-4.0.0.dev2/docs/design/browser-backends.md +133 -0
  76. inklet-4.0.0.dev2/docs/design/v4.md +220 -0
  77. inklet-4.0.0.dev2/docs/development-preview.md +103 -0
  78. inklet-4.0.0.dev2/docs/engineering-report.md +170 -0
  79. inklet-4.0.0.dev2/docs/hatching.md +112 -0
  80. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/index.md +1 -0
  81. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/installation.md +14 -1
  82. inklet-4.0.0.dev2/docs/linked-facets.md +133 -0
  83. inklet-4.0.0.dev2/docs/linked-maps.md +170 -0
  84. inklet-4.0.0.dev2/docs/linked-plots.md +121 -0
  85. inklet-4.0.0.dev2/docs/mesh-fields.md +140 -0
  86. inklet-4.0.0.dev2/docs/plot-quality.md +49 -0
  87. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/plot-types.md +4 -0
  88. inklet-4.0.0.dev2/docs/regional-report.md +143 -0
  89. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/release-checks.md +15 -2
  90. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/rendering-engine.md +10 -0
  91. inklet-4.0.0.dev2/docs/roadmap.md +266 -0
  92. inklet-4.0.0.dev2/docs/scientific-report.md +180 -0
  93. inklet-4.0.0.dev2/docs/statistical-views.md +131 -0
  94. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/stylesheets/inklet.css +1 -2
  95. inklet-4.0.0.dev2/docs/table-inputs.md +143 -0
  96. inklet-4.0.0.dev2/docs/time-series.md +162 -0
  97. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/v3.md +3 -0
  98. inklet-4.0.0.dev2/docs/v4-foundations.md +143 -0
  99. inklet-4.0.0.dev2/docs/world-map.md +95 -0
  100. inklet-4.0.0.dev2/examples/clipping_review.py +90 -0
  101. inklet-4.0.0.dev2/examples/compositing_review.py +93 -0
  102. inklet-4.0.0.dev2/examples/hatch_review.py +70 -0
  103. inklet-4.0.0.dev2/examples/plot_quality_review.py +54 -0
  104. inklet-4.0.0.dev2/examples/v4/README.md +299 -0
  105. inklet-4.0.0.dev2/examples/v4/browser_scatter.py +42 -0
  106. inklet-4.0.0.dev2/examples/v4/contours_streamlines.py +102 -0
  107. inklet-4.0.0.dev2/examples/v4/data/world-countries.geojson +1 -0
  108. inklet-4.0.0.dev2/examples/v4/data/world-map-source.json +30 -0
  109. inklet-4.0.0.dev2/examples/v4/data/world-population.csv +177 -0
  110. inklet-4.0.0.dev2/examples/v4/engineering_report.py +167 -0
  111. inklet-4.0.0.dev2/examples/v4/faceted_operations.py +86 -0
  112. inklet-4.0.0.dev2/examples/v4/fixtures/assembly.json +10 -0
  113. inklet-4.0.0.dev2/examples/v4/fixtures/manifest.json +21 -0
  114. inklet-4.0.0.dev2/examples/v4/fixtures/measurement.json +8 -0
  115. inklet-4.0.0.dev2/examples/v4/fixtures/region-shapes.geojson +1 -0
  116. inklet-4.0.0.dev2/examples/v4/fixtures/regions.csv +5 -0
  117. inklet-4.0.0.dev2/examples/v4/fixtures/regions.geojson +1 -0
  118. inklet-4.0.0.dev2/examples/v4/linked_dashboard.py +46 -0
  119. inklet-4.0.0.dev2/examples/v4/linked_selection.html +89 -0
  120. inklet-4.0.0.dev2/examples/v4/linked_selection.py +102 -0
  121. inklet-4.0.0.dev2/examples/v4/mesh_fields.py +115 -0
  122. inklet-4.0.0.dev2/examples/v4/region_shapes.py +28 -0
  123. inklet-4.0.0.dev2/examples/v4/regional_analysis.py +50 -0
  124. inklet-4.0.0.dev2/examples/v4/regional_report.py +162 -0
  125. inklet-4.0.0.dev2/examples/v4/scientific_report.py +110 -0
  126. inklet-4.0.0.dev2/examples/v4/statistical_views.py +61 -0
  127. inklet-4.0.0.dev2/examples/v4/table_inputs.py +82 -0
  128. inklet-4.0.0.dev2/examples/v4/time_series.py +78 -0
  129. inklet-4.0.0.dev2/examples/v4/world_population.py +154 -0
  130. inklet-4.0.0.dev2/gallery/clipping-review.png +0 -0
  131. inklet-4.0.0.dev2/gallery/compositing-pdf-after.png +0 -0
  132. inklet-4.0.0.dev2/gallery/compositing-pdf-before.png +0 -0
  133. inklet-4.0.0.dev2/gallery/compositing-review.png +0 -0
  134. inklet-4.0.0.dev2/gallery/hatch-pdf-after.png +0 -0
  135. inklet-4.0.0.dev2/gallery/hatch-pdf-before.png +0 -0
  136. inklet-4.0.0.dev2/gallery/hatch-review.png +0 -0
  137. inklet-4.0.0.dev2/gallery/hatch-svg-before.png +0 -0
  138. {inklet-3.1.0 → inklet-4.0.0.dev2}/mkdocs.yml +23 -0
  139. {inklet-3.1.0 → inklet-4.0.0.dev2}/pyproject.toml +7 -3
  140. inklet-4.0.0.dev2/requirements-tables.txt +28 -0
  141. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/__init__.py +3 -3
  142. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/core/diagram.py +35 -6
  143. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/rules.py +50 -2
  144. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/document/compiler.py +60 -19
  145. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/document/data.py +6 -1
  146. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/draw/__init__.py +2 -2
  147. inklet-4.0.0.dev2/src/inklet/draw/bezier_clip.py +127 -0
  148. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/draw/clip.py +79 -28
  149. inklet-4.0.0.dev2/src/inklet/experimental/_table_adapters.py +137 -0
  150. inklet-4.0.0.dev2/src/inklet/experimental/browser/__init__.py +747 -0
  151. inklet-4.0.0.dev2/src/inklet/experimental/browser/drawings.py +91 -0
  152. inklet-4.0.0.dev2/src/inklet/experimental/browser/fields.py +108 -0
  153. inklet-4.0.0.dev2/src/inklet/experimental/browser/grid.py +108 -0
  154. inklet-4.0.0.dev2/src/inklet/experimental/browser/images.py +122 -0
  155. inklet-4.0.0.dev2/src/inklet/experimental/browser/page.html +22 -0
  156. inklet-4.0.0.dev2/src/inklet/experimental/browser/regions.py +92 -0
  157. inklet-4.0.0.dev2/src/inklet/experimental/browser/runtime.js +382 -0
  158. inklet-4.0.0.dev2/src/inklet/experimental/browser/series.py +107 -0
  159. inklet-4.0.0.dev2/src/inklet/experimental/browser/timeaxis.py +109 -0
  160. inklet-4.0.0.dev2/src/inklet/experimental/engineering.py +99 -0
  161. inklet-4.0.0.dev2/src/inklet/experimental/fields.py +135 -0
  162. inklet-4.0.0.dev2/src/inklet/experimental/grid.py +294 -0
  163. inklet-4.0.0.dev2/src/inklet/experimental/measurement.py +112 -0
  164. inklet-4.0.0.dev2/src/inklet/experimental/selection.py +200 -0
  165. inklet-4.0.0.dev2/src/inklet/experimental/temporal.py +59 -0
  166. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/marks.py +2 -2
  167. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/panel.py +4 -1
  168. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/scale.py +32 -10
  169. inklet-4.0.0.dev2/src/inklet/render/analysis.py +58 -0
  170. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/bounds.py +19 -5
  171. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/brushes.py +5 -16
  172. inklet-4.0.0.dev2/src/inklet/render/hatching.py +49 -0
  173. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/pdf.py +78 -58
  174. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/preview.py +36 -0
  175. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/svg.py +74 -1
  176. inklet-4.0.0.dev2/tests/test_browser_facets.py +262 -0
  177. inklet-4.0.0.dev2/tests/test_browser_figure.py +167 -0
  178. inklet-4.0.0.dev2/tests/test_browser_regions.py +165 -0
  179. inklet-4.0.0.dev2/tests/test_browser_revision.py +196 -0
  180. inklet-4.0.0.dev2/tests/test_browser_scatter.py +115 -0
  181. inklet-4.0.0.dev2/tests/test_browser_series.py +134 -0
  182. inklet-4.0.0.dev2/tests/test_browser_statistics.py +467 -0
  183. inklet-4.0.0.dev2/tests/test_browser_switching.py +330 -0
  184. inklet-4.0.0.dev2/tests/test_browser_time.py +295 -0
  185. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_categories.py +9 -1
  186. inklet-4.0.0.dev2/tests/test_clip_engine.py +216 -0
  187. inklet-4.0.0.dev2/tests/test_compositing_engine.py +158 -0
  188. inklet-4.0.0.dev2/tests/test_engineering_report.py +190 -0
  189. inklet-4.0.0.dev2/tests/test_grid_fields.py +222 -0
  190. inklet-4.0.0.dev2/tests/test_hatch_engine.py +155 -0
  191. inklet-4.0.0.dev2/tests/test_mesh_fields.py +218 -0
  192. inklet-4.0.0.dev2/tests/test_plot_quality_review.py +108 -0
  193. inklet-4.0.0.dev2/tests/test_regional_report.py +172 -0
  194. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_style_fields.py +5 -4
  195. inklet-4.0.0.dev2/tests/test_scientific_report.py +204 -0
  196. inklet-4.0.0.dev2/tests/test_shared_plot_margins.py +219 -0
  197. inklet-4.0.0.dev2/tests/test_table_adapters.py +260 -0
  198. inklet-4.0.0.dev2/tests/test_temporal_adapters.py +141 -0
  199. inklet-4.0.0.dev2/tests/test_v4_selection.py +226 -0
  200. inklet-4.0.0.dev2/tests/test_world_map_example.py +77 -0
  201. inklet-4.0.0.dev2/tools/benchmark_clipping.py +62 -0
  202. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/benchmark_engine.py +29 -2
  203. inklet-4.0.0.dev2/tools/benchmark_v4.py +119 -0
  204. inklet-4.0.0.dev2/tools/browser_study.js +35 -0
  205. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/check_wheel.py +59 -0
  206. inklet-4.0.0.dev2/tools/prepare_world_map.py +69 -0
  207. inklet-4.0.0.dev2/tools/v4-budgets.json +9 -0
  208. {inklet-3.1.0 → inklet-4.0.0.dev2}/.gitattributes +0 -0
  209. {inklet-3.1.0 → inklet-4.0.0.dev2}/.gitignore +0 -0
  210. {inklet-3.1.0 → inklet-4.0.0.dev2}/.readthedocs.yaml +0 -0
  211. {inklet-3.1.0 → inklet-4.0.0.dev2}/CONTRACT.md +0 -0
  212. {inklet-3.1.0 → inklet-4.0.0.dev2}/LICENSE +0 -0
  213. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/brand/inklet-icon.svg +0 -0
  214. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/brand/inklet-logo-dark.svg +0 -0
  215. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/brand/inklet-logo-mono.svg +0 -0
  216. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/brand/inklet-logo.svg +0 -0
  217. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/brand/inklet-wordmark.svg +0 -0
  218. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/examples/quickstart.pdf +0 -0
  219. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/examples/quickstart.png +0 -0
  220. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/examples/quickstart.svg +0 -0
  221. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/axes-and-scales-1.png +0 -0
  222. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/calibrated-volumes-3.png +0 -0
  223. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/channels-and-contours-1.png +0 -0
  224. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-anchor.png +0 -0
  225. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-annotation.png +0 -0
  226. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-bars-histogram.png +0 -0
  227. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-branch.png +0 -0
  228. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-broken-axis.png +0 -0
  229. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-callout.png +0 -0
  230. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-clipping.png +0 -0
  231. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-creases.png +0 -0
  232. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-custom-key.png +0 -0
  233. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-cutout.png +0 -0
  234. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-dates.png +0 -0
  235. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-dense.png +0 -0
  236. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-elbows.png +0 -0
  237. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-equal-boxes.png +0 -0
  238. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-facets.png +0 -0
  239. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-fit-graph.png +0 -0
  240. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-flow-width.png +0 -0
  241. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-formula.png +0 -0
  242. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-graph.png +0 -0
  243. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-halo.png +0 -0
  244. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-heatmap.png +0 -0
  245. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-hole.png +0 -0
  246. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-inline-type.png +0 -0
  247. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-inset.png +0 -0
  248. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-labels.png +0 -0
  249. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-layers.png +0 -0
  250. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-letters.png +0 -0
  251. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-list.png +0 -0
  252. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-matrix.png +0 -0
  253. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-page-grid.png +0 -0
  254. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-polar.png +0 -0
  255. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-protein.png +0 -0
  256. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-routes.png +0 -0
  257. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-scene-overlay.png +0 -0
  258. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-scene.png +0 -0
  259. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-series-key.png +0 -0
  260. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-span.png +0 -0
  261. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-sparse-grid.png +0 -0
  262. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-swarm.png +0 -0
  263. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-text-path.png +0 -0
  264. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-toon.png +0 -0
  265. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-twin-axis.png +0 -0
  266. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-unequal-panels.png +0 -0
  267. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-violin.png +0 -0
  268. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/cookbook-wrapped-card.png +0 -0
  269. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/data-1.png +0 -0
  270. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/data-3.png +0 -0
  271. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/dense-data-1.png +0 -0
  272. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/diagram-components-1.png +0 -0
  273. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/diagrams-1.png +0 -0
  274. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/layout-3.png +0 -0
  275. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/oblique-sections-2.png +0 -0
  276. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/plot-types-1.png +0 -0
  277. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/plotting-1.png +0 -0
  278. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/plotting-2.png +0 -0
  279. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/publication-plots-1.png +0 -0
  280. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/publication-plots-2.png +0 -0
  281. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/publication-plots-3.png +0 -0
  282. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/publication-plots-4.png +0 -0
  283. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/slabs-and-regions-1.png +0 -0
  284. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/three-images-1.png +0 -0
  285. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/guides/three-images-2.png +0 -0
  286. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/biology.json +0 -0
  287. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/comparison.json +0 -0
  288. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/diagram-after.json +0 -0
  289. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/diagram-before.json +0 -0
  290. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/diagram-review-caption.tex +0 -0
  291. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/engine-after.json +0 -0
  292. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/engine-before.json +0 -0
  293. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/engine-review-caption.tex +0 -0
  294. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/fluorescence-biology.json +0 -0
  295. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/general-plots-caption.tex +0 -0
  296. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/general-plots.json +0 -0
  297. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/label-intensities-caption.tex +0 -0
  298. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/label-intensities-native.csv +0 -0
  299. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/label-intensities.json +0 -0
  300. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/lines-after.json +0 -0
  301. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/lines-before.json +0 -0
  302. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/oblique-biology.json +0 -0
  303. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/plot-engine-review-caption.tex +0 -0
  304. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/real-biology.json +0 -0
  305. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/revision.json +0 -0
  306. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/slab-biology.json +0 -0
  307. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/assets/research-preview/study.json +0 -0
  308. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/axes-and-scales.md +0 -0
  309. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/biology-panels.md +0 -0
  310. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/blender-scenes.md +0 -0
  311. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/brand.md +0 -0
  312. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/calibrated-volumes.md +0 -0
  313. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/channels-and-contours.md +0 -0
  314. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/cli.md +0 -0
  315. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/complex-scene.md +0 -0
  316. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/concepts.md +0 -0
  317. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/dense-data.md +0 -0
  318. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/design/page_grid.md +0 -0
  319. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/design/v2.md +0 -0
  320. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/diagram-components.md +0 -0
  321. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/diagram-engine.md +0 -0
  322. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/diagrams.md +0 -0
  323. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/example-library.md +0 -0
  324. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/examples.md +0 -0
  325. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/export-review.md +0 -0
  326. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/fluorescence-biology.md +0 -0
  327. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/general-plots.md +0 -0
  328. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/javascripts/inklet.js +0 -0
  329. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/label-intensities.md +0 -0
  330. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/label-measurements.md +0 -0
  331. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/layout.md +0 -0
  332. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/microscopy-tiff.md +0 -0
  333. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/migration.md +0 -0
  334. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/oblique-biology.md +0 -0
  335. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/oblique-sections.md +0 -0
  336. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/plotting-engine.md +0 -0
  337. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/plotting.md +0 -0
  338. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/presets.md +0 -0
  339. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/publication-plots.md +0 -0
  340. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/quickstart.md +0 -0
  341. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/real-biology.md +0 -0
  342. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/recipes/architecture-sketch.md +0 -0
  343. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/recipes/architecture.md +0 -0
  344. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/recipes/attractor.md +0 -0
  345. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/recipes/helix.md +0 -0
  346. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/recipes/interference.md +0 -0
  347. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/recipes/lattice.md +0 -0
  348. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/recipes/photonics.md +0 -0
  349. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/recipes/wave-packets.md +0 -0
  350. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/render-jobs.md +0 -0
  351. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/research-preview.md +0 -0
  352. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/research-revision.md +0 -0
  353. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/research-study.md +0 -0
  354. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/scene-annotations.md +0 -0
  355. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/scene-paths.md +0 -0
  356. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/scene-templates.md +0 -0
  357. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/showcase.md +0 -0
  358. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/slab-biology.md +0 -0
  359. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/slabs-and-regions.md +0 -0
  360. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/stress20.md +0 -0
  361. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/stylesheets/code.css +0 -0
  362. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/three-images.md +0 -0
  363. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/troubleshooting.md +0 -0
  364. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/v2.5.md +0 -0
  365. {inklet-3.1.0 → inklet-4.0.0.dev2}/docs/v2.md +0 -0
  366. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/biology/README.md +0 -0
  367. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/biology/cells3d.lock.json +0 -0
  368. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/biology/data.py +0 -0
  369. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/biology/fluorescence.py +0 -0
  370. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/biology/organelle.lock.json +0 -0
  371. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/biology/requirements.txt +0 -0
  372. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/biology_panels.py +0 -0
  373. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/blender/complex_lab_scene.py +0 -0
  374. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/blender/lab_scene.py +0 -0
  375. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/blender/occlusion_scene.py +0 -0
  376. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/blender/organelle_scene.py +0 -0
  377. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/blender/research_lab_views.py +0 -0
  378. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/broken_axis.py +0 -0
  379. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/data/general-plots/benchmark.csv +0 -0
  380. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/data/general-plots/learning.csv +0 -0
  381. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/data/general-plots/revenue.csv +0 -0
  382. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/data/general-plots/sensor.csv +0 -0
  383. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/diagram_review.py +0 -0
  384. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/engine_review.py +0 -0
  385. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/feature_flow.py +0 -0
  386. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/fluorescence_biology.py +0 -0
  387. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/gallery.py +0 -0
  388. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/general_plots.py +0 -0
  389. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/graph.py +0 -0
  390. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/hello_figure.py +0 -0
  391. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/label_intensities.py +0 -0
  392. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/oblique_biology.py +0 -0
  393. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/panels.py +0 -0
  394. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/plot_engine_review.py +0 -0
  395. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/polar.py +0 -0
  396. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/preset_formats.py +0 -0
  397. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/presets.py +0 -0
  398. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/real_biology.py +0 -0
  399. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/render_smoke.py +0 -0
  400. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/research_figure_planner.py +0 -0
  401. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/research_planner_study.py +0 -0
  402. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/research_revision.py +0 -0
  403. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/showcase/README.md +0 -0
  404. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/showcase/assets.lock.json +0 -0
  405. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/showcase/blender_scenes.py +0 -0
  406. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/showcase/figures.py +0 -0
  407. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/slab_biology.py +0 -0
  408. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/state_machine.py +0 -0
  409. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/stress20.py +0 -0
  410. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/v25_document.py +0 -0
  411. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/v2_cases.py +0 -0
  412. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/v2_document.py +0 -0
  413. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/v3_complex_scene.py +0 -0
  414. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/v3_render_jobs.py +0 -0
  415. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/v3_rendering.py +0 -0
  416. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/v3_scene_annotations.py +0 -0
  417. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/v3_scene_passes.py +0 -0
  418. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/v3_scene_paths.py +0 -0
  419. {inklet-3.1.0 → inklet-4.0.0.dev2}/examples/v3_scene_templates.py +0 -0
  420. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/annot.py +0 -0
  421. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/bio3d.py +0 -0
  422. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/cartoon.py +0 -0
  423. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/chem_data.py +0 -0
  424. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/chem_fingerprints.py +0 -0
  425. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/data/1m17-kinase.pdb +0 -0
  426. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/data/README.md +0 -0
  427. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/drug_discovery.py +0 -0
  428. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/mouse_brain_data.py +0 -0
  429. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/neural_activity.py +0 -0
  430. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/pdbfile.py +0 -0
  431. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/showcase_part.py +0 -0
  432. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/showcase_process.py +0 -0
  433. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/showcase_season.py +0 -0
  434. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/structure.py +0 -0
  435. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/structure_data.py +0 -0
  436. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/target.py +0 -0
  437. {inklet-3.1.0 → inklet-4.0.0.dev2}/figures/trial.py +0 -0
  438. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/README.md +0 -0
  439. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/biology-panels.png +0 -0
  440. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/chem_fingerprints.png +0 -0
  441. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/diagram-labels-after.png +0 -0
  442. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/diagram-labels-before.png +0 -0
  443. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/diagram-review.png +0 -0
  444. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/engine-review.png +0 -0
  445. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/engine-transparency-after.png +0 -0
  446. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/engine-transparency-before.png +0 -0
  447. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/flow.png +0 -0
  448. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/fluorescence-biology.png +0 -0
  449. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/general-plots-before.png +0 -0
  450. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/general-plots.png +0 -0
  451. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/label-intensities.png +0 -0
  452. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/oblique-biology.png +0 -0
  453. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/part.png +0 -0
  454. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/plot-axis-after.png +0 -0
  455. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/plot-axis-before.png +0 -0
  456. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/plot-engine-review.png +0 -0
  457. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/plots.png +0 -0
  458. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/polar.png +0 -0
  459. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/preset-formats.png +0 -0
  460. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/presets.png +0 -0
  461. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/process.png +0 -0
  462. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/real-biology.png +0 -0
  463. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/research-crossing-revision.png +0 -0
  464. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/research-figure-planner.png +0 -0
  465. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/research-planner-study.png +0 -0
  466. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/research-revision.png +0 -0
  467. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/season.png +0 -0
  468. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/showcase-architecture-sketch.png +0 -0
  469. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/showcase-architecture.png +0 -0
  470. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/showcase-attractor.png +0 -0
  471. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/showcase-helix.png +0 -0
  472. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/showcase-interference.png +0 -0
  473. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/showcase-lattice.png +0 -0
  474. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/showcase-photonics.png +0 -0
  475. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/showcase-wave-packets.png +0 -0
  476. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/slab-biology.png +0 -0
  477. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/stress20.png +0 -0
  478. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/structure.png +0 -0
  479. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/v3-complex-scene.png +0 -0
  480. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/v3-render-jobs.png +0 -0
  481. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/v3-rendering.png +0 -0
  482. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/v3-scene-annotations.png +0 -0
  483. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/v3-scene-passes.png +0 -0
  484. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/v3-scene-paths.png +0 -0
  485. {inklet-3.1.0 → inklet-4.0.0.dev2}/gallery/v3-scene-templates.png +0 -0
  486. {inklet-3.1.0 → inklet-4.0.0.dev2}/requirements-ci.txt +0 -0
  487. {inklet-3.1.0 → inklet-4.0.0.dev2}/requirements-docs.txt +0 -0
  488. {inklet-3.1.0 → inklet-4.0.0.dev2}/scripts/bench_svg.py +0 -0
  489. {inklet-3.1.0 → inklet-4.0.0.dev2}/scripts/rasterise.sh +0 -0
  490. {inklet-3.1.0 → inklet-4.0.0.dev2}/scripts/sanity_typeset.py +0 -0
  491. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/__main__.py +0 -0
  492. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/__init__.py +0 -0
  493. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/asset.py +0 -0
  494. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/cache.py +0 -0
  495. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/cutout.py +0 -0
  496. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/deps.py +0 -0
  497. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/harmonise.py +0 -0
  498. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/lineart.py +0 -0
  499. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/mask.py +0 -0
  500. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/provenance.py +0 -0
  501. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/raster.py +0 -0
  502. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/sidecar.py +0 -0
  503. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/assets/silhouette.py +0 -0
  504. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/cli.py +0 -0
  505. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/components.py +0 -0
  506. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/core/__init__.py +0 -0
  507. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/core/envelope.py +0 -0
  508. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/core/geom.py +0 -0
  509. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/core/prims.py +0 -0
  510. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/core/style.py +0 -0
  511. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/core/trace.py +0 -0
  512. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/core/units.py +0 -0
  513. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/__init__.py +0 -0
  514. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/abut.py +0 -0
  515. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/break_rules.py +0 -0
  516. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/color.py +0 -0
  517. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/cross.py +0 -0
  518. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/image.py +0 -0
  519. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/key_rules.py +0 -0
  520. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/link_rules.py +0 -0
  521. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/path_rules.py +0 -0
  522. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/plot_rules.py +0 -0
  523. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/report.py +0 -0
  524. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/diagnostics/three_rules.py +0 -0
  525. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/document/__init__.py +0 -0
  526. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/document/composition.py +0 -0
  527. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/document/data_io.py +0 -0
  528. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/document/module.py +0 -0
  529. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/document/presets.py +0 -0
  530. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/document/publication.py +0 -0
  531. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/document/spec.py +0 -0
  532. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/draw/annotate.py +0 -0
  533. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/draw/coords.py +0 -0
  534. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/draw/path.py +0 -0
  535. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/draw/place.py +0 -0
  536. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/draw/shapes.py +0 -0
  537. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/__init__.py +0 -0
  538. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/channels.py +0 -0
  539. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/contours.py +0 -0
  540. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/figure_planner.py +0 -0
  541. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/measurements.py +0 -0
  542. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/planner_geometry.py +0 -0
  543. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/regions.py +0 -0
  544. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/sections.py +0 -0
  545. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/slabs.py +0 -0
  546. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/tiff.py +0 -0
  547. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/experimental/volume.py +0 -0
  548. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/figure.py +0 -0
  549. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/layout/__init__.py +0 -0
  550. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/layout/fit.py +0 -0
  551. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/layout/flow.py +0 -0
  552. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/layout/graph.py +0 -0
  553. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/layout/graph_force.py +0 -0
  554. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/layout/graph_layered.py +0 -0
  555. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/layout/graph_tree.py +0 -0
  556. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/layout/labels.py +0 -0
  557. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/layout/sankey.py +0 -0
  558. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/links/__init__.py +0 -0
  559. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/links/curves.py +0 -0
  560. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/links/link.py +0 -0
  561. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/__init__.py +0 -0
  562. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/axis.py +0 -0
  563. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/breaks.py +0 -0
  564. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/categories.py +0 -0
  565. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/facets.py +0 -0
  566. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/inset.py +0 -0
  567. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/key.py +0 -0
  568. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/notes.py +0 -0
  569. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/png.py +0 -0
  570. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/polar.py +0 -0
  571. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/ramp.py +0 -0
  572. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/raster.py +0 -0
  573. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/ribbon.py +0 -0
  574. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/scatter_raster.py +0 -0
  575. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/series.py +0 -0
  576. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/simplify.py +0 -0
  577. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/plot/timescale.py +0 -0
  578. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/__init__.py +0 -0
  579. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/bundle.py +0 -0
  580. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/composite.py +0 -0
  581. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/fontembed.py +0 -0
  582. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/glyphs.py +0 -0
  583. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/outline.py +0 -0
  584. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/paint.py +0 -0
  585. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/pathdata.py +0 -0
  586. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/pdftext.py +0 -0
  587. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/raster.py +0 -0
  588. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/resources.py +0 -0
  589. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/review.py +0 -0
  590. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/render/revision.py +0 -0
  591. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/themes/__init__.py +0 -0
  592. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/themes/color.py +0 -0
  593. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/themes/palettes.py +0 -0
  594. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/themes/theme.py +0 -0
  595. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/__init__.py +0 -0
  596. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/api.py +0 -0
  597. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/backend.py +0 -0
  598. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender/__init__.py +0 -0
  599. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender/device_worker.py +0 -0
  600. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender/discover.py +0 -0
  601. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender/lineart.py +0 -0
  602. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender/options.py +0 -0
  603. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender/scene_worker.py +0 -0
  604. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender/script.py +0 -0
  605. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender/svgread.py +0 -0
  606. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender/template_worker.py +0 -0
  607. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender/tracing.py +0 -0
  608. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/blender_backend.py +0 -0
  609. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/camera.py +0 -0
  610. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/deps.py +0 -0
  611. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/depth.py +0 -0
  612. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/devices.py +0 -0
  613. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/drill.py +0 -0
  614. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/edges.py +0 -0
  615. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/hlr.py +0 -0
  616. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/linalg.py +0 -0
  617. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/mesh.py +0 -0
  618. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/occlude.py +0 -0
  619. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/order.py +0 -0
  620. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/parse.py +0 -0
  621. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/place.py +0 -0
  622. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/protein.py +0 -0
  623. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/quality.py +0 -0
  624. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/render_jobs.py +0 -0
  625. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/scene_annotations.py +0 -0
  626. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/scene_pass.py +0 -0
  627. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/scene_projection.py +0 -0
  628. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/scenes.py +0 -0
  629. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/shade.py +0 -0
  630. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/solids.py +0 -0
  631. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/templates.json +0 -0
  632. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/three/templates.py +0 -0
  633. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/typeset/__init__.py +0 -0
  634. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/typeset/fonts.py +0 -0
  635. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/typeset/markup.py +0 -0
  636. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/typeset/onpath.py +0 -0
  637. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/typeset/outline.py +0 -0
  638. {inklet-3.1.0 → inklet-4.0.0.dev2}/src/inklet/typeset/shaping.py +0 -0
  639. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/assets/mouse.inklet.json +0 -0
  640. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/assets/mouse.png +0 -0
  641. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/dense_graph.py +0 -0
  642. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/draw_probe.py +0 -0
  643. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/electro/assets/sem.png +0 -0
  644. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/electro/assets/tem.png +0 -0
  645. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/electro/cell.py +0 -0
  646. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/electro/common.py +0 -0
  647. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/electro/data.py +0 -0
  648. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/electro/imaging.py +0 -0
  649. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/electro/kinetics.py +0 -0
  650. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/electro/micrograph.py +0 -0
  651. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/electro/system.py +0 -0
  652. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/electro_figure.py +0 -0
  653. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/fidelity.py +0 -0
  654. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/flow.py +0 -0
  655. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/hard_figure.py +0 -0
  656. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/label_storm.py +0 -0
  657. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/mega_figure.py +0 -0
  658. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/meshes/README.md +0 -0
  659. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/meshes/brain-lh.obj +0 -0
  660. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/meshes/spot.obj +0 -0
  661. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/panels/apparatus.py +0 -0
  662. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/panels/graphs.py +0 -0
  663. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/panels/relations.py +0 -0
  664. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/panels/responses.py +0 -0
  665. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/panels/sections.py +0 -0
  666. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/probes.py +0 -0
  667. {inklet-3.1.0 → inklet-4.0.0.dev2}/stress/three_figure.py +0 -0
  668. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_alignment_contract.py +0 -0
  669. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_annotate.py +0 -0
  670. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_annotate_letters.py +0 -0
  671. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_assets.py +0 -0
  672. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_assets_provenance.py +0 -0
  673. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_biology_source.py +0 -0
  674. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_blend_scene.py +0 -0
  675. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_channels_contours.py +0 -0
  676. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_chem_figure.py +0 -0
  677. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_cli.py +0 -0
  678. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_components.py +0 -0
  679. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_contrast_and_labels.py +0 -0
  680. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_cookbook.py +0 -0
  681. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_core.py +0 -0
  682. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_core_amendments.py +0 -0
  683. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_csv_input.py +0 -0
  684. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics.py +0 -0
  685. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics_api.py +0 -0
  686. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics_artwork.py +0 -0
  687. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics_break_distorts.py +0 -0
  688. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics_crossing.py +0 -0
  689. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics_image_contrast.py +0 -0
  690. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics_ink.py +0 -0
  691. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics_keys.py +0 -0
  692. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics_links.py +0 -0
  693. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics_paths.py +0 -0
  694. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagnostics_plot_box.py +0 -0
  695. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_diagram_engine.py +0 -0
  696. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_docs.py +0 -0
  697. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_docs_site.py +0 -0
  698. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_document.py +0 -0
  699. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_document_data.py +0 -0
  700. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_document_v25.py +0 -0
  701. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_draw_clip.py +0 -0
  702. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_draw_path.py +0 -0
  703. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_draw_place.py +0 -0
  704. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_draw_shapes.py +0 -0
  705. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_engine_layout.py +0 -0
  706. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_engine_rendering.py +0 -0
  707. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_engine_scatter.py +0 -0
  708. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_export_bundle.py +0 -0
  709. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_figure.py +0 -0
  710. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_figure_planner.py +0 -0
  711. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_fit.py +0 -0
  712. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_guides.py +0 -0
  713. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_label_measurements.py +0 -0
  714. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_layout.py +0 -0
  715. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_layout_graph.py +0 -0
  716. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_layout_graph_fit.py +0 -0
  717. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_layout_origin.py +0 -0
  718. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_layout_sankey.py +0 -0
  719. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_links.py +0 -0
  720. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_links_avoid.py +0 -0
  721. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_links_shapes.py +0 -0
  722. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_microscopy_tiff.py +0 -0
  723. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_neural_activity.py +0 -0
  724. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_output_contract.py +0 -0
  725. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_paint_program.py +0 -0
  726. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_place_labels.py +0 -0
  727. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_axis.py +0 -0
  728. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_broken_axis.py +0 -0
  729. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_clip.py +0 -0
  730. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_engine.py +0 -0
  731. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_facets.py +0 -0
  732. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_inset.py +0 -0
  733. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_key.py +0 -0
  734. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_labels.py +0 -0
  735. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_legend.py +0 -0
  736. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_marks.py +0 -0
  737. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_notes.py +0 -0
  738. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_polar.py +0 -0
  739. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_publication.py +0 -0
  740. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_raster.py +0 -0
  741. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_ribbon.py +0 -0
  742. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_scale.py +0 -0
  743. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_swarm.py +0 -0
  744. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_plot_time.py +0 -0
  745. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_presets.py +0 -0
  746. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_publication_limits.py +0 -0
  747. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_release_adversarial.py +0 -0
  748. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_devices.py +0 -0
  749. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_embed.py +0 -0
  750. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_glyphs.py +0 -0
  751. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_jobs.py +0 -0
  752. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_outline.py +0 -0
  753. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_pdf.py +0 -0
  754. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_pdf_text.py +0 -0
  755. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_quality.py +0 -0
  756. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_svg_perf.py +0 -0
  757. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_render_v3.py +0 -0
  758. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_review_v25.py +0 -0
  759. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_round4_plot.py +0 -0
  760. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_routing_avoid.py +0 -0
  761. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_scatter_rendering.py +0 -0
  762. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_scene_annotations.py +0 -0
  763. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_scene_pass.py +0 -0
  764. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_scene_projection.py +0 -0
  765. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_scene_templates.py +0 -0
  766. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_sections.py +0 -0
  767. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_showcase_library.py +0 -0
  768. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_showcase_round3.py +0 -0
  769. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_slabs_regions.py +0 -0
  770. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_structure_figure.py +0 -0
  771. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_svg.py +0 -0
  772. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_target_pose.py +0 -0
  773. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_text_markup.py +0 -0
  774. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_text_on_path.py +0 -0
  775. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_theme_font_style.py +0 -0
  776. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_themes.py +0 -0
  777. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_anchor_pin.py +0 -0
  778. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_api.py +0 -0
  779. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_backend_blender.py +0 -0
  780. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_blender.py +0 -0
  781. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_depth_order.py +0 -0
  782. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_drill.py +0 -0
  783. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_hlr.py +0 -0
  784. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_mesh.py +0 -0
  785. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_order_vector.py +0 -0
  786. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_overlay.py +0 -0
  787. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_parse.py +0 -0
  788. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_patches.py +0 -0
  789. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_place.py +0 -0
  790. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_protein.py +0 -0
  791. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_ridges.py +0 -0
  792. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_sort.py +0 -0
  793. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_sort_budget.py +0 -0
  794. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_three_view.py +0 -0
  795. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_typeset.py +0 -0
  796. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_volume.py +0 -0
  797. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/test_watch_review.py +0 -0
  798. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/README.md +0 -0
  799. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/categories-pdf.png +0 -0
  800. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/categories-svg.png +0 -0
  801. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/components-pdf.png +0 -0
  802. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/components-svg.png +0 -0
  803. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/dense-pdf.png +0 -0
  804. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/dense-svg.png +0 -0
  805. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/fonts.json +0 -0
  806. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/inset-pdf.png +0 -0
  807. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/inset-svg.png +0 -0
  808. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/markers-pdf.png +0 -0
  809. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/markers-svg.png +0 -0
  810. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/renderers.json +0 -0
  811. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/type-opacity-pdf.png +0 -0
  812. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/type-opacity-svg.png +0 -0
  813. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
  814. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-category-subset-svg.png +0 -0
  815. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-dense-pdf.png +0 -0
  816. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-dense-svg.png +0 -0
  817. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
  818. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-late-inset-svg.png +0 -0
  819. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
  820. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
  821. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
  822. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
  823. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-workflow-pdf.png +0 -0
  824. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v2-workflow-svg.png +0 -0
  825. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v25-document-pdf.png +0 -0
  826. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/baseline/v25-document-svg.png +0 -0
  827. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/fixtures.py +0 -0
  828. {inklet-3.1.0 → inklet-4.0.0.dev2}/tests/visual/v2-budgets.json +0 -0
  829. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/benchmark_diagrams.py +0 -0
  830. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/benchmark_lines.py +0 -0
  831. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/benchmark_v2.py +0 -0
  832. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/check_render_wheel.py +0 -0
  833. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/dock_ligand.py +0 -0
  834. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/docs_gallery.json +0 -0
  835. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/docs_previews.json +0 -0
  836. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/docs_previews.py +0 -0
  837. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/docs_site.py +0 -0
  838. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/docs_theme/404.html +0 -0
  839. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/docs_theme/card.html +0 -0
  840. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/docs_theme/gallery.html +0 -0
  841. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/docs_theme/home.html +0 -0
  842. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/docs_theme/main.html +0 -0
  843. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/gen_api.py +0 -0
  844. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/preset_gallery.py +0 -0
  845. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/showcase_gallery.py +0 -0
  846. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/stress20.py +0 -0
  847. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/strip_pdb.py +0 -0
  848. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/v3_showcase.py +0 -0
  849. {inklet-3.1.0 → inklet-4.0.0.dev2}/tools/visual_check.py +0 -0
@@ -58,7 +58,28 @@ jobs:
58
58
  - name: Build the preset comparison gallery
59
59
  run: .venv/bin/python tools/preset_gallery.py --output out/presets
60
60
  - name: Common CSV plotting example
61
- run: .venv/bin/python examples/general_plots.py --output out/general-plots
61
+ run: |
62
+ .venv/bin/python examples/general_plots.py --output out/general-plots
63
+ .venv/bin/python examples/plot_quality_review.py --output out/plot-quality
64
+ - name: Experimental selection and revision baseline
65
+ run: |
66
+ .venv/bin/python examples/v4/linked_selection.py --output out/v4-linked
67
+ .venv/bin/python examples/v4/browser_scatter.py --count 3000 --output out/v4-browser
68
+ .venv/bin/python examples/v4/linked_dashboard.py --output out/v4-dashboard
69
+ .venv/bin/python examples/v4/faceted_operations.py --output out/v4-facets
70
+ .venv/bin/python examples/v4/time_series.py --output out/v4-time
71
+ .venv/bin/python examples/v4/statistical_views.py --output out/v4-statistics
72
+ .venv/bin/python examples/v4/regional_report.py --render --output out/v4-regional-report
73
+ .venv/bin/python examples/v4/engineering_report.py --render --output out/v4-engineering
74
+ .venv/bin/python examples/v4/scientific_report.py --render --output out/v4-scientific
75
+ .venv/bin/python examples/v4/mesh_fields.py --render --output out/v4-mesh-fields
76
+ .venv/bin/python examples/v4/contours_streamlines.py --render --output out/v4-contours-streamlines
77
+ .venv/bin/python examples/v4/regional_analysis.py --output out/v4-regions
78
+ .venv/bin/python examples/v4/region_shapes.py --output out/v4-region-shapes
79
+ .venv/bin/python examples/v4/world_population.py --output out/v4-world
80
+ .venv/bin/python examples/v4/world_population.py --year 2019 --output out/v4-revision
81
+ .venv/bin/python examples/v4/world_population.py --switchable --output out/v4-switchable
82
+ .venv/bin/python tools/benchmark_v4.py --repeat 1 --label ci --output out/v4-baseline.json
62
83
  - name: Build the mathematical showcase library
63
84
  run: .venv/bin/python tools/showcase_gallery.py --plots-only --quality preview
64
85
  - name: Coordinated biology figure and data export
@@ -71,6 +92,9 @@ jobs:
71
92
  run: |
72
93
  .venv/bin/python tools/benchmark_engine.py --repeat 1 --output out/engine-benchmark.json
73
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
74
98
  - name: Diagram routing and label review
75
99
  run: |
76
100
  .venv/bin/python tools/benchmark_diagrams.py --repeat 1 --output out/diagram-benchmark.json
@@ -90,6 +114,42 @@ jobs:
90
114
  retention-days: 7
91
115
  if-no-files-found: ignore
92
116
 
117
+ tables:
118
+ name: Table adapters (${{ matrix.dependencies }})
119
+ runs-on: ubuntu-24.04
120
+ timeout-minutes: 10
121
+ strategy:
122
+ fail-fast: false
123
+ matrix:
124
+ dependencies: [minimum, current]
125
+ steps:
126
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
127
+ - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
128
+ with:
129
+ python-version: '3.12'
130
+ - name: Install current locked adapters
131
+ if: matrix.dependencies == 'current'
132
+ run: |
133
+ uv venv
134
+ uv pip install -r requirements-tables.txt -e .
135
+ - name: Install minimum supported adapters
136
+ if: matrix.dependencies == 'minimum'
137
+ run: |
138
+ uv venv
139
+ uv pip install -e '.[dev]' 'pandas==2.2.0' 'polars==1.0.0' 'numpy==1.26.4'
140
+ - name: Table contracts and cross-library figure reconstruction
141
+ run: |
142
+ .venv/bin/python -m pytest -q tests/test_table_adapters.py tests/test_temporal_adapters.py tests/test_v4_selection.py
143
+ .venv/bin/python examples/v4/table_inputs.py --backend pandas --output out/pandas
144
+ .venv/bin/python examples/v4/table_inputs.py --backend polars --state out/pandas/view.json --output out/polars
145
+ cmp out/pandas/figure.svg out/polars/figure.svg
146
+ .venv/bin/python examples/v4/table_inputs.py --backend pandas --revised --output out/pandas-revised
147
+ .venv/bin/python examples/v4/table_inputs.py --backend polars --revised --state out/pandas-revised/view.json --output out/polars-revised
148
+ cmp out/pandas-revised/figure.svg out/polars-revised/figure.svg
149
+ .venv/bin/python examples/v4/time_series.py --backend pandas --output out/time-pandas
150
+ .venv/bin/python examples/v4/time_series.py --backend polars --state out/time-pandas/view.json --output out/time-polars
151
+ cmp out/time-pandas/figure.svg out/time-polars/figure.svg
152
+
93
153
  wheel:
94
154
  runs-on: ${{ matrix.os }}
95
155
  timeout-minutes: 10
@@ -6,7 +6,7 @@ on:
6
6
  tag:
7
7
  description: Published GitHub release tag
8
8
  required: true
9
- default: v3.1.0
9
+ default: v4.0.0.dev2
10
10
  type: string
11
11
  dry_run:
12
12
  description: Validate release files without uploading to PyPI
@@ -42,11 +42,20 @@ jobs:
42
42
  GH_REPO: ${{ github.repository }}
43
43
  RELEASE_TAG: ${{ inputs.tag }}
44
44
  run: |
45
- [[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || {
46
- echo 'Expected a stable release tag such as v3.1.0' >&2
45
+ [[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(\.dev[0-9]+)?$ ]] || {
46
+ echo 'Expected a stable or development tag such as v3.1.0 or v4.0.0.dev2' >&2
47
47
  exit 1
48
48
  }
49
- gh release view "$RELEASE_TAG" --json isDraft --jq '.isDraft' | grep -qx false
49
+ gh release view "$RELEASE_TAG" --json isDraft,isPrerelease > "$RUNNER_TEMP/release.json"
50
+ python - <<'PYCODE'
51
+ import json, os
52
+ from pathlib import Path
53
+ release = json.loads((Path(os.environ['RUNNER_TEMP']) / 'release.json').read_text())
54
+ if release['isDraft']:
55
+ raise SystemExit('Publish the GitHub release before uploading its assets')
56
+ if release['isPrerelease'] != ('.dev' in os.environ['RELEASE_TAG']):
57
+ raise SystemExit('Development tags must be GitHub prereleases; stable tags must not')
58
+ PYCODE
50
59
  version="${RELEASE_TAG#v}"
51
60
  gh release download "$RELEASE_TAG" --dir dist \
52
61
  --pattern "inklet-${version}-py3-none-any.whl" \
@@ -59,6 +68,9 @@ jobs:
59
68
  python - <<'PY'
60
69
  import hashlib
61
70
  import os
71
+ import tarfile
72
+ import zipfile
73
+ from email.parser import BytesParser
62
74
  from pathlib import Path
63
75
 
64
76
  dist = Path('dist')
@@ -74,6 +86,20 @@ jobs:
74
86
  if hashlib.sha256((dist / name).read_bytes()).hexdigest() != digest:
75
87
  raise SystemExit(f'Checksum mismatch: {name}')
76
88
  print(f'Verified {name}')
89
+ wheel = dist / f'inklet-{version}-py3-none-any.whl'
90
+ with zipfile.ZipFile(wheel) as archive:
91
+ metadata_files = [n for n in archive.namelist() if n.endswith('.dist-info/METADATA')]
92
+ if len(metadata_files) != 1:
93
+ raise SystemExit('Expected exactly one wheel metadata file')
94
+ wheel_metadata = BytesParser().parsebytes(archive.read(metadata_files[0]))
95
+ with tarfile.open(dist / f'inklet-{version}.tar.gz') as archive:
96
+ metadata = archive.extractfile(f'inklet-{version}/PKG-INFO')
97
+ if metadata is None:
98
+ raise SystemExit('Missing source archive metadata')
99
+ source_metadata = BytesParser().parsebytes(metadata.read())
100
+ for metadata in (wheel_metadata, source_metadata):
101
+ if metadata['Name'] != 'inklet' or metadata['Version'] != version:
102
+ raise SystemExit('Distribution metadata does not match the requested release')
77
103
  (dist / 'SHA256SUMS').unlink()
78
104
  PY
79
105
  uvx --from twine==7.0.0 twine check --strict dist/*
@@ -1,5 +1,170 @@
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
+
38
+ ## 4.0.0.dev1 — 2026-09-08
39
+
40
+ First installable 4.0 development preview. This collects the linked-document,
41
+ data, map, engineering and scientific work since 3.1.0. APIs under
42
+ `inklet.experimental` and saved-state schemas may change between previews.
43
+ 3.1.0 remains the stable release; the full 4.0 roadmap is not complete.
44
+
45
+ Install explicitly with `python -m pip install "inklet==4.0.0.dev1"`.
46
+ See the [preview guide](docs/development-preview.md) for examples and boundaries.
47
+
48
+ - Add immutable rectilinear nodal fields with explicit triangle interpolation,
49
+ linear contours, normalized-vector RK4 streamlines and cell-linked selections.
50
+ Preserve scalar/vector masks independently and report tracing termination.
51
+ - Add a complete contour/streamline report with analytic fixtures, source
52
+ revisions, JSON replacement, saved states and two-width vector exports.
53
+ Keep corner summaries distinct from interpolated field values.
54
+
55
+ - Add immutable triangle meshes with supplied scalar/vector face fields, units,
56
+ source digests, geometric measurements and strict table correspondence.
57
+ Link equal-scale plan views, triangle picking and calibrated vector arrows
58
+ to plots, with fixed bins and explicit missing/zero-vector behavior.
59
+ - Add a mesh-field report with a native vector 3D reference, geometry/value/removal
60
+ revisions, JSON replacement, saved states and exports at two physical widths.
61
+ Preserve scalar colors by disabling lighting modulation in the 3D data view.
62
+
63
+ - Add calibrated label-image measurements with explicit region correspondence,
64
+ missing-intensity semantics, immutable source snapshots and source digests.
65
+ Link lossless reference images to pixel-accurate region selection and plots,
66
+ including holes, disconnected regions and non-square pixel calibration.
67
+ - Add a scientific report with calibration, intensity and label revisions,
68
+ saved-state reconstruction, JSON replacement, visible measurement methods and
69
+ two-width exports. Improve canvas resolution for embedded vector labels.
70
+ Preserve vector boundaries and labels over raster imagery;
71
+ bound browser pixel/outline work without implicit approximation.
72
+
73
+ - Link native Inklet drawings to experimental browser tables with measured
74
+ panel layouts, outlined vector assets, stable paint IDs, rectangular picking
75
+ targets and per-item selection behavior across SVG/canvas/hybrid display.
76
+ - Add immutable axis-aligned box assemblies with explicit units, dimensions and
77
+ zero-thickness sections. Add a linked engineering report with geometry
78
+ revisions, preserved label offsets, supplied response curves, removed-ID
79
+ reconciliation and reproducible exports at two physical widths.
80
+
81
+ - Add experimental entity-linked wide-table series with explicit numeric/date/UTC
82
+ samples, missing-data gaps, sample-aware picking and facets. Add a complete
83
+ real-map regional report with simulated monthly values, distributions, group
84
+ comparisons, CSV replacement, saved-state reconstruction and two-width exports.
85
+ - Add optional Chrome/Chromium SVG-to-PDF conversion for browser scenes, with
86
+ physical page sizing and vector-content checks. Document this separately from
87
+ the native Diagram PDF backend.
88
+
89
+ - Add experimental linked empirical distributions and supplied interval views,
90
+ including facets, explicit methods/populations, fixed reference curves during
91
+ filtering and reproducible revised exports. Keep reference curves unpickable
92
+ and honor per-mark colors across all browser backends.
93
+ - Fix timestamp hover formatting and expose ECDF fractions in tooltips and the
94
+ accessible table without changing source columns.
95
+ - Improve shared numeric ticks: preserve scientific-label precision, very small
96
+ values and narrow representable ranges; reject duplicate or out-of-domain
97
+ positions. Add a four-panel before/after plotting-quality review.
98
+
99
+ - Add experimental calendar-date and UTC axes to linked plots, with measured
100
+ calendar/millisecond ticks, explicit offset and precision rules, temporal bar
101
+ widths and optional elapsed-time line gaps. Add opt-in temporal DataFrame
102
+ columns, exact millisecond geometry and a simulated daily-batch revision
103
+ workflow with browser/Python export parity checks.
104
+
105
+ - Add optional experimental pandas and Polars adapters for keyed tables, with
106
+ explicit string IDs, column selection, immutable scalar snapshots and missing
107
+ value normalization. Reject unsupported cells with column/row diagnostics.
108
+ Add an illustrated workshop revision example with equivalent exports from
109
+ both libraries and optional-dependency compatibility checks.
110
+
111
+ - Add experimental linked category panels for lines, bars and scatter, with
112
+ explicit category order, empty panels, shared scales, within-category line
113
+ adjacency and visible diagnostics for unassigned rows. Add a six-panel
114
+ operations example with saved-state and data-revision workflows.
115
+ - Add opt-in shared plot margins to documents and nested grids. Faceted browser
116
+ figures use them to preserve equal physical data scales despite differences
117
+ in panel letters and labels; ordinary document layouts retain their defaults.
118
+
119
+ - Switch between named, Python-compiled data revisions in an offline browser
120
+ document, with atomic preparation, explicit removed-ID policies, per-revision
121
+ source credits and downloadable change reports. Dispose replaced renderers,
122
+ guard in-flight operations and preserve strict saved-state validation. Add a
123
+ real-map revision demo and browser/Python parity checks, including Unicode IDs.
124
+
125
+ - Add explicit experimental figure data replacement with preserved row identity,
126
+ selected/filtered ID reconciliation, viewport policy and a revision report.
127
+ Rebuild geometry and exports without mutating the old figure. Extend the real
128
+ world map with a source-year cohort and user-supplied CSV replacement workflow.
129
+
130
+ - Make a real Natural Earth country/population map the main geographic example,
131
+ with linked world/Europe views, pinned public-domain inputs and source years.
132
+ Add country/continent search, explicit HTML attribution and exact integer
133
+ table display; retain the invented region shapes as regression fixtures.
134
+
135
+ - Add experimental GeoJSON polygon/multipolygon joins and linked region maps,
136
+ including holes, shared row identities, fixed color bins, missing values and
137
+ clipped picking across SVG/canvas/hybrid modes. Preserve physical map aspect
138
+ and reserve its measured layout area. Add regional analysis and geometry
139
+ review examples, native browser fill checks and vector/raster export agreement.
140
+
141
+ - Extend the experimental browser runtime to linked lines, scatter and signed
142
+ vertical/horizontal bars. Preserve missing/filter gaps, support reversed axes
143
+ and nonzero baselines, and share clipped geometry with static SVG exports.
144
+ Add a four-panel monthly operations example, directly restored HTML state,
145
+ deterministic picking ties and a fix for pointer focus scrolling tall plots.
146
+
147
+ - Add an experimental offline scatter renderer with SVG, Canvas 2D and hybrid
148
+ modes, clipped point picking, linked selection, filtering, page pan/zoom and
149
+ saved-view reconstruction in Python. Preserve measured axes and outlined
150
+ text, namespace live SVG IDs, and test browser geometry at pixel ratios 1/2.
151
+ Publish the runnable example and a bounded backend timing/fidelity study.
152
+
153
+ - Start 4.0 phase A with experimental keyed tables and versioned selection
154
+ state, explicit rebasing for changed data, three attributed reference
155
+ fixtures and a finite offline linked-plot example with reproducible exports.
156
+ - Snapshot nested dataset array cells so external mutation cannot silently
157
+ change values without invalidating compiled figures.
158
+ - Allow all-baseline bar series to retain axes and legends without drawing
159
+ rectangles or aborting compilation.
160
+ - Add dependency/fitting/metadata compiler timings and fresh-process edit,
161
+ resize and export benchmarks with explicit local regression ceilings.
162
+ - Keep documentation navigation against the left viewport edge on wide
163
+ displays; remove the centered shell's 380 px outer gap at 2560 px width.
164
+
165
+ - Document the proposed 4.0 product and engine roadmap, delivery phases and
166
+ acceptance criteria. Reserve animation and presentation authoring for 5.0.
167
+
3
168
  ## 3.1.0 — 2026-09-07
4
169
 
5
170
  Improved plotting, rendering speed, diagram layout and illustrated documentation.
@@ -4,6 +4,11 @@ Use a focused change with a runnable example or minimal reproducer. Describe
4
4
  the resulting behavior and how it was checked. Keep numerical inputs and
5
5
  expected results explicit; use simulated data when source data cannot be shared.
6
6
 
7
+ The [4.0 roadmap](docs/roadmap.md) connects planned user workflows to delivery
8
+ phases and acceptance criteria. Read the [proposed engine plan](docs/design/v4.md)
9
+ when developing new rendering, interaction or authoring capabilities. These are
10
+ planning documents; current contracts continue to apply until changed explicitly.
11
+
7
12
  ## Development environment
8
13
 
9
14
  From a checkout with Python 3.12 and `uv` installed:
@@ -1,16 +1,16 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: inklet
3
- Version: 3.1.0
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
- Project-URL: Documentation, https://inklet.readthedocs.io/en/stable/
6
+ Project-URL: Documentation, https://inklet.readthedocs.io/en/latest/
7
7
  Project-URL: Issues, https://github.com/Mapika/inklet/issues
8
8
  Author: Mark Marosi
9
9
  License-Expression: MIT
10
10
  License-File: LICENSE
11
11
  License-File: THIRD_PARTY_NOTICES.md
12
12
  Keywords: diagrams,pdf,plotting,scientific-visualization,svg
13
- Classifier: Development Status :: 4 - Beta
13
+ Classifier: Development Status :: 3 - Alpha
14
14
  Classifier: Intended Audience :: Education
15
15
  Classifier: Intended Audience :: Science/Research
16
16
  Classifier: Programming Language :: Python :: 3
@@ -30,6 +30,10 @@ Requires-Dist: pygments<3,>=2.18; extra == 'docs'
30
30
  Provides-Extra: images
31
31
  Requires-Dist: numpy>=1.24; extra == 'images'
32
32
  Requires-Dist: pillow>=10.0; extra == 'images'
33
+ Provides-Extra: pandas
34
+ Requires-Dist: pandas<4,>=2.2; extra == 'pandas'
35
+ Provides-Extra: polars
36
+ Requires-Dist: polars<2,>=1; extra == 'polars'
33
37
  Provides-Extra: render
34
38
  Requires-Dist: pillow>=10.0; extra == 'render'
35
39
  Requires-Dist: resvg-py<0.4,>=0.3.3; extra == 'render'
@@ -75,6 +79,27 @@ then cover axes, dense data, page layout and exports. Figure planning and micros
75
79
  ship under `inklet.experimental` as a [research preview](https://inklet.readthedocs.io/en/stable/research-preview/):
76
80
  their signatures and report schemas may change.
77
81
 
82
+ ## 4.0 development preview
83
+
84
+ **4.0.0.dev2** adds curve-preserving clipping, painted windows, improved PDF
85
+ compositing and hatching, alongside offline linked charts, maps, calibrated images, mesh fields,
86
+ contours and streamlines, with saved selections and reproducible exports.
87
+ It also includes date/UTC axes, facets, pandas/Polars adapters and shared
88
+ plotting-quality improvements.
89
+
90
+ ```sh
91
+ python -m pip install "inklet==4.0.0.dev2"
92
+ ```
93
+
94
+ [Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
95
+ [4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
96
+ [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev2)
97
+
98
+ This is an opt-in development release. Experimental APIs and saved-state schemas
99
+ may change; 3.1.0 remains the stable release. General browser editing,
100
+ depth-aware 3D selection and the remaining 4.0 release gates are still open.
101
+ Animation and presentation authoring remain in the 5.0 direction.
102
+
78
103
  ## Install
79
104
 
80
105
  Python **3.11 or later** is required. Install from [PyPI](https://pypi.org/project/inklet/):
@@ -29,6 +29,27 @@ then cover axes, dense data, page layout and exports. Figure planning and micros
29
29
  ship under `inklet.experimental` as a [research preview](https://inklet.readthedocs.io/en/stable/research-preview/):
30
30
  their signatures and report schemas may change.
31
31
 
32
+ ## 4.0 development preview
33
+
34
+ **4.0.0.dev2** adds curve-preserving clipping, painted windows, improved PDF
35
+ compositing and hatching, alongside offline linked charts, maps, calibrated images, mesh fields,
36
+ contours and streamlines, with saved selections and reproducible exports.
37
+ It also includes date/UTC axes, facets, pandas/Polars adapters and shared
38
+ plotting-quality improvements.
39
+
40
+ ```sh
41
+ python -m pip install "inklet==4.0.0.dev2"
42
+ ```
43
+
44
+ [Preview guide and examples](https://inklet.readthedocs.io/en/latest/development-preview/) ·
45
+ [4.0 roadmap](https://inklet.readthedocs.io/en/latest/roadmap/) ·
46
+ [Release notes](https://github.com/Mapika/inklet/releases/tag/v4.0.0.dev2)
47
+
48
+ This is an opt-in development release. Experimental APIs and saved-state schemas
49
+ may change; 3.1.0 remains the stable release. General browser editing,
50
+ depth-aware 3D selection and the remaining 4.0 release gates are still open.
51
+ Animation and presentation authoring remain in the 5.0 direction.
52
+
32
53
  ## Install
33
54
 
34
55
  Python **3.11 or later** is required. Install from [PyPI](https://pypi.org/project/inklet/):
@@ -130,3 +130,16 @@ Accessed 7 September 2026. No endorsement by the Allen Institute is implied.
130
130
  and recipe are MIT, Mark Marosi. They add native, sampled-section and region
131
131
  intensity tables, population spread and CSV exports using the generated
132
132
  components above; no additional segmentation validation is implied.
133
+
134
+ ## Natural Earth country maps
135
+
136
+ `examples/v4/data/world-countries.geojson` and `world-population.csv` are derived
137
+ from Natural Earth's Admin 0 countries at 1:110m. Made with Natural Earth. The
138
+ map data are [public domain](https://www.naturalearthdata.com/about/terms-of-use/).
139
+ The [source manifest](examples/v4/data/world-map-source.json) pins repository
140
+ commit `9380cca83db5f9aef52d5e762765100745f84b27`, the input checksum and all
141
+ transformations. Antarctica is excluded; retained geometry is not simplified
142
+ further. Population estimates and their individual years come from the source
143
+ snapshot and are not current estimates. The original example code is MIT.
144
+
145
+ Source and terms checked on 2026-09-08.
@@ -191,7 +191,7 @@ List built-in presets, optionally restricted to one family.
191
191
 
192
192
  List built-in physical formats accepted by preset().
193
193
 
194
- #### `subfigure(*, width=180, height=None, columns=1, margin=0, gap=6, row_gap=None)`
194
+ #### `subfigure(*, width=180, height=None, columns=1, margin=0, gap=6, row_gap=None, share_plot_margins=False)`
195
195
 
196
196
  Create a nested grid. Children inherit the enclosing document theme.
197
197
 
@@ -229,7 +229,7 @@ A label-sized module. Port coordinates are fractions of its box.
229
229
 
230
230
  Create a measured module with fractional ports.
231
231
 
232
- #### `class Document(width: 'float' = 180, height: 'float | None' = None, columns: 'object' = 1, margin: 'float' = 4, gap: 'float' = 6, row_gap: 'float | None' = None, theme: 'object' = 'nature', publication: 'object' = None, preset: 'object' = None, _preset_overrides: 'dict' = <factory>, _cells: 'list' = <factory>, _links: 'list' = <factory>, _letters: 'dict' = <factory>, _cache: 'dict' = <factory>, _last: 'object' = None) -> None`
232
+ #### `class Document(width: 'float' = 180, height: 'float | None' = None, columns: 'object' = 1, margin: 'float' = 4, gap: 'float' = 6, row_gap: 'float | None' = None, theme: 'object' = 'nature', publication: 'object' = None, preset: 'object' = None, share_plot_margins: 'bool' = False, _preset_overrides: 'dict' = <factory>, _cells: 'list' = <factory>, _links: 'list' = <factory>, _letters: 'dict' = <factory>, _cache: 'dict' = <factory>, _last: 'object' = None) -> None`
233
233
 
234
234
  A physical page containing named, live figure definitions.
235
235
 
@@ -262,9 +262,9 @@ A resolved snapshot; later authoring changes cannot alter its exports.
262
262
 
263
263
  A document cannot satisfy its declared physical layout constraints.
264
264
 
265
- #### `document(*, width=180, height=None, columns=1, margin=4, gap=6, row_gap=None, theme='nature', publication=None)`
265
+ #### `document(*, width=180, height=None, columns=1, margin=4, gap=6, row_gap=None, theme='nature', publication=None, share_plot_margins=False)`
266
266
 
267
- Create a live scientific document with a constrained physical page layout.
267
+ Create a live document; optionally share plot furniture across the grid.
268
268
 
269
269
  #### `class PlotSpec(width: 'float' = 40, height: 'float' = 30, options: 'dict' = <factory>, _steps: 'list' = <factory>) -> None`
270
270
 
@@ -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
+ }