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