inklet 3.0.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.
- inklet-4.0.0.dev1/.gitattributes +4 -0
- inklet-4.0.0.dev1/.github/workflows/checks.yml +233 -0
- inklet-4.0.0.dev1/.github/workflows/publish.yml +113 -0
- inklet-4.0.0.dev1/CHANGELOG.md +348 -0
- inklet-4.0.0.dev1/CONTRIBUTING.md +111 -0
- inklet-4.0.0.dev1/PKG-INFO +257 -0
- inklet-4.0.0.dev1/README.md +207 -0
- inklet-4.0.0.dev1/THIRD_PARTY_NOTICES.md +145 -0
- inklet-4.0.0.dev1/docs/api.md +1267 -0
- inklet-4.0.0.dev1/docs/assets/guides/axes-and-scales-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/calibrated-volumes-3.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/channels-and-contours-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-anchor.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-annotation.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-bars-histogram.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-branch.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-broken-axis.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-callout.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-clipping.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-creases.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-custom-key.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-cutout.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-dates.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-dense.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-elbows.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-equal-boxes.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-facets.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-fit-graph.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-flow-width.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-formula.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-graph.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-halo.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-heatmap.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-hole.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-inline-type.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-inset.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-labels.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-layers.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-letters.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-list.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-matrix.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-page-grid.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-polar.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-protein.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-routes.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-scene-overlay.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-scene.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-series-key.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-span.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-sparse-grid.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-swarm.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-text-path.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-toon.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-twin-axis.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-unequal-panels.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-violin.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/cookbook-wrapped-card.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/data-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/data-3.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/dense-data-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/diagram-components-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/diagrams-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/layout-3.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/oblique-sections-2.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/plot-quality-after.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/plot-quality-before.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/plot-types-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/plotting-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/plotting-2.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/publication-plots-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/publication-plots-2.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/publication-plots-3.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/publication-plots-4.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/slabs-and-regions-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/three-images-1.png +0 -0
- inklet-4.0.0.dev1/docs/assets/guides/three-images-2.png +0 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/biology.json +420 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/comparison.json +3833 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/diagram-after.json +54 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/diagram-before.json +60 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/diagram-review-caption.tex +1 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/engine-after.json +207 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/engine-before.json +207 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/engine-review-caption.tex +1 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/fluorescence-biology.json +4879 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/general-plots-caption.tex +1 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/general-plots.json +716 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/label-intensities-caption.tex +24 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/label-intensities-native.csv +35 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/label-intensities.json +5434 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/lines-after.json +110 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/lines-before.json +59 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/oblique-biology.json +2189 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/plot-engine-review-caption.tex +1 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/real-biology.json +535 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/revision.json +1514 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/slab-biology.json +2123 -0
- inklet-4.0.0.dev1/docs/assets/research-preview/study.json +19645 -0
- inklet-4.0.0.dev1/docs/assets/v4/after.json +749 -0
- inklet-4.0.0.dev1/docs/assets/v4/before.json +531 -0
- inklet-4.0.0.dev1/docs/assets/v4/browser-quality.json +21 -0
- inklet-4.0.0.dev1/docs/assets/v4/browser-scatter.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/browser-scatter.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/browser-study.json +200 -0
- inklet-4.0.0.dev1/docs/assets/v4/contours-streamlines-170mm.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/contours-streamlines-masked.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/contours-streamlines.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/contours-streamlines.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/engineering-report-170mm.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/engineering-report.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/engineering-report.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/faceted-operations.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/faceted-operations.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/linked-dashboard.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/linked-dashboard.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/linked-selection.html +89 -0
- inklet-4.0.0.dev1/docs/assets/v4/linked-selection.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/mesh-fields-170mm.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/mesh-fields.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/mesh-fields.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/region-shapes.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/region-shapes.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/regional-analysis.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/regional-analysis.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/regional-report-160mm.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/regional-report.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/regional-report.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/scientific-report-170mm.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/scientific-report.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/scientific-report.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/statistical-views.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/statistical-views.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/table-inputs.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/table-inputs.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/time-series.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/time-series.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/world-population-2019.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/world-population-2019.json +33 -0
- inklet-4.0.0.dev1/docs/assets/v4/world-population-2019.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/world-population-revisions.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/world-population-revisions.png +0 -0
- inklet-4.0.0.dev1/docs/assets/v4/world-population.html +404 -0
- inklet-4.0.0.dev1/docs/assets/v4/world-population.png +0 -0
- inklet-4.0.0.dev1/docs/axes-and-scales.md +77 -0
- inklet-4.0.0.dev1/docs/biology-panels.md +72 -0
- inklet-4.0.0.dev1/docs/browser-rendering.md +116 -0
- inklet-4.0.0.dev1/docs/calibrated-volumes.md +110 -0
- inklet-4.0.0.dev1/docs/channels-and-contours.md +134 -0
- inklet-4.0.0.dev1/docs/compatibility.md +95 -0
- inklet-4.0.0.dev1/docs/complex-scene.md +59 -0
- inklet-4.0.0.dev1/docs/concepts.md +96 -0
- inklet-4.0.0.dev1/docs/contours-streamlines.md +171 -0
- inklet-4.0.0.dev1/docs/cookbook.md +2903 -0
- inklet-4.0.0.dev1/docs/data-revisions.md +221 -0
- inklet-4.0.0.dev1/docs/data.md +162 -0
- inklet-4.0.0.dev1/docs/dense-data.md +61 -0
- inklet-4.0.0.dev1/docs/design/browser-backends.md +133 -0
- inklet-4.0.0.dev1/docs/design/v4.md +207 -0
- inklet-4.0.0.dev1/docs/development-preview.md +96 -0
- inklet-4.0.0.dev1/docs/diagram-components.md +29 -0
- inklet-4.0.0.dev1/docs/diagram-engine.md +135 -0
- inklet-4.0.0.dev1/docs/diagrams.md +100 -0
- inklet-4.0.0.dev1/docs/engineering-report.md +170 -0
- inklet-4.0.0.dev1/docs/export-review.md +142 -0
- inklet-4.0.0.dev1/docs/fluorescence-biology.md +115 -0
- inklet-4.0.0.dev1/docs/general-plots.md +91 -0
- inklet-4.0.0.dev1/docs/index.md +67 -0
- inklet-4.0.0.dev1/docs/installation.md +148 -0
- inklet-4.0.0.dev1/docs/javascripts/inklet.js +140 -0
- inklet-4.0.0.dev1/docs/label-intensities.md +107 -0
- inklet-4.0.0.dev1/docs/label-measurements.md +104 -0
- inklet-4.0.0.dev1/docs/layout.md +121 -0
- inklet-4.0.0.dev1/docs/linked-facets.md +133 -0
- inklet-4.0.0.dev1/docs/linked-maps.md +170 -0
- inklet-4.0.0.dev1/docs/linked-plots.md +121 -0
- inklet-4.0.0.dev1/docs/mesh-fields.md +140 -0
- inklet-4.0.0.dev1/docs/microscopy-tiff.md +76 -0
- inklet-4.0.0.dev1/docs/migration.md +198 -0
- inklet-4.0.0.dev1/docs/oblique-biology.md +77 -0
- inklet-4.0.0.dev1/docs/oblique-sections.md +119 -0
- inklet-4.0.0.dev1/docs/plot-quality.md +49 -0
- inklet-4.0.0.dev1/docs/plot-types.md +55 -0
- inklet-4.0.0.dev1/docs/plotting-engine.md +107 -0
- inklet-4.0.0.dev1/docs/plotting.md +127 -0
- inklet-4.0.0.dev1/docs/presets.md +188 -0
- inklet-4.0.0.dev1/docs/publication-plots.md +95 -0
- inklet-4.0.0.dev1/docs/real-biology.md +104 -0
- inklet-4.0.0.dev1/docs/recipes/architecture-sketch.md +28 -0
- inklet-4.0.0.dev1/docs/recipes/architecture.md +28 -0
- inklet-4.0.0.dev1/docs/recipes/attractor.md +28 -0
- inklet-4.0.0.dev1/docs/recipes/helix.md +26 -0
- inklet-4.0.0.dev1/docs/recipes/interference.md +28 -0
- inklet-4.0.0.dev1/docs/recipes/lattice.md +26 -0
- inklet-4.0.0.dev1/docs/recipes/photonics.md +26 -0
- inklet-4.0.0.dev1/docs/recipes/wave-packets.md +28 -0
- inklet-4.0.0.dev1/docs/regional-report.md +143 -0
- inklet-4.0.0.dev1/docs/release-checks.md +148 -0
- inklet-4.0.0.dev1/docs/rendering-engine.md +114 -0
- inklet-4.0.0.dev1/docs/research-preview.md +236 -0
- inklet-4.0.0.dev1/docs/research-revision.md +100 -0
- inklet-4.0.0.dev1/docs/research-study.md +175 -0
- inklet-4.0.0.dev1/docs/roadmap.md +266 -0
- inklet-4.0.0.dev1/docs/scene-paths.md +125 -0
- inklet-4.0.0.dev1/docs/scene-templates.md +123 -0
- inklet-4.0.0.dev1/docs/scientific-report.md +180 -0
- inklet-4.0.0.dev1/docs/slab-biology.md +77 -0
- inklet-4.0.0.dev1/docs/slabs-and-regions.md +113 -0
- inklet-4.0.0.dev1/docs/statistical-views.md +131 -0
- inklet-4.0.0.dev1/docs/stylesheets/inklet.css +1561 -0
- inklet-4.0.0.dev1/docs/table-inputs.md +143 -0
- inklet-4.0.0.dev1/docs/three-images.md +96 -0
- inklet-4.0.0.dev1/docs/time-series.md +162 -0
- inklet-4.0.0.dev1/docs/v4-foundations.md +143 -0
- inklet-4.0.0.dev1/docs/world-map.md +95 -0
- inklet-4.0.0.dev1/examples/biology/README.md +21 -0
- inklet-4.0.0.dev1/examples/biology/cells3d.lock.json +41 -0
- inklet-4.0.0.dev1/examples/biology/data.py +50 -0
- inklet-4.0.0.dev1/examples/biology/fluorescence.py +21 -0
- inklet-4.0.0.dev1/examples/biology/organelle.lock.json +1002 -0
- inklet-4.0.0.dev1/examples/biology/requirements.txt +5 -0
- inklet-4.0.0.dev1/examples/biology_panels.py +144 -0
- inklet-4.0.0.dev1/examples/blender/organelle_scene.py +74 -0
- inklet-4.0.0.dev1/examples/blender/research_lab_views.py +38 -0
- inklet-4.0.0.dev1/examples/data/general-plots/benchmark.csv +4 -0
- inklet-4.0.0.dev1/examples/data/general-plots/learning.csv +32 -0
- inklet-4.0.0.dev1/examples/data/general-plots/revenue.csv +5 -0
- inklet-4.0.0.dev1/examples/data/general-plots/sensor.csv +122 -0
- inklet-4.0.0.dev1/examples/diagram_review.py +80 -0
- inklet-4.0.0.dev1/examples/engine_review.py +76 -0
- inklet-4.0.0.dev1/examples/fluorescence_biology.py +178 -0
- inklet-4.0.0.dev1/examples/general_plots.py +102 -0
- inklet-4.0.0.dev1/examples/label_intensities.py +146 -0
- inklet-4.0.0.dev1/examples/oblique_biology.py +140 -0
- inklet-4.0.0.dev1/examples/plot_engine_review.py +81 -0
- inklet-4.0.0.dev1/examples/plot_quality_review.py +54 -0
- inklet-4.0.0.dev1/examples/preset_formats.py +68 -0
- inklet-4.0.0.dev1/examples/real_biology.py +178 -0
- inklet-4.0.0.dev1/examples/research_figure_planner.py +156 -0
- inklet-4.0.0.dev1/examples/research_planner_study.py +147 -0
- inklet-4.0.0.dev1/examples/research_revision.py +59 -0
- inklet-4.0.0.dev1/examples/slab_biology.py +122 -0
- inklet-4.0.0.dev1/examples/v4/README.md +299 -0
- inklet-4.0.0.dev1/examples/v4/browser_scatter.py +42 -0
- inklet-4.0.0.dev1/examples/v4/contours_streamlines.py +102 -0
- inklet-4.0.0.dev1/examples/v4/data/world-countries.geojson +1 -0
- inklet-4.0.0.dev1/examples/v4/data/world-map-source.json +30 -0
- inklet-4.0.0.dev1/examples/v4/data/world-population.csv +177 -0
- inklet-4.0.0.dev1/examples/v4/engineering_report.py +167 -0
- inklet-4.0.0.dev1/examples/v4/faceted_operations.py +86 -0
- inklet-4.0.0.dev1/examples/v4/fixtures/assembly.json +10 -0
- inklet-4.0.0.dev1/examples/v4/fixtures/manifest.json +21 -0
- inklet-4.0.0.dev1/examples/v4/fixtures/measurement.json +8 -0
- inklet-4.0.0.dev1/examples/v4/fixtures/region-shapes.geojson +1 -0
- inklet-4.0.0.dev1/examples/v4/fixtures/regions.csv +5 -0
- inklet-4.0.0.dev1/examples/v4/fixtures/regions.geojson +1 -0
- inklet-4.0.0.dev1/examples/v4/linked_dashboard.py +46 -0
- inklet-4.0.0.dev1/examples/v4/linked_selection.html +89 -0
- inklet-4.0.0.dev1/examples/v4/linked_selection.py +102 -0
- inklet-4.0.0.dev1/examples/v4/mesh_fields.py +115 -0
- inklet-4.0.0.dev1/examples/v4/region_shapes.py +28 -0
- inklet-4.0.0.dev1/examples/v4/regional_analysis.py +50 -0
- inklet-4.0.0.dev1/examples/v4/regional_report.py +162 -0
- inklet-4.0.0.dev1/examples/v4/scientific_report.py +110 -0
- inklet-4.0.0.dev1/examples/v4/statistical_views.py +61 -0
- inklet-4.0.0.dev1/examples/v4/table_inputs.py +82 -0
- inklet-4.0.0.dev1/examples/v4/time_series.py +78 -0
- inklet-4.0.0.dev1/examples/v4/world_population.py +154 -0
- inklet-4.0.0.dev1/gallery/biology-panels.png +0 -0
- inklet-4.0.0.dev1/gallery/diagram-labels-after.png +0 -0
- inklet-4.0.0.dev1/gallery/diagram-labels-before.png +0 -0
- inklet-4.0.0.dev1/gallery/diagram-review.png +0 -0
- inklet-4.0.0.dev1/gallery/engine-review.png +0 -0
- inklet-4.0.0.dev1/gallery/engine-transparency-after.png +0 -0
- inklet-4.0.0.dev1/gallery/engine-transparency-before.png +0 -0
- inklet-4.0.0.dev1/gallery/fluorescence-biology.png +0 -0
- inklet-4.0.0.dev1/gallery/general-plots-before.png +0 -0
- inklet-4.0.0.dev1/gallery/general-plots.png +0 -0
- inklet-4.0.0.dev1/gallery/label-intensities.png +0 -0
- inklet-4.0.0.dev1/gallery/oblique-biology.png +0 -0
- inklet-4.0.0.dev1/gallery/plot-axis-after.png +0 -0
- inklet-4.0.0.dev1/gallery/plot-axis-before.png +0 -0
- inklet-4.0.0.dev1/gallery/plot-engine-review.png +0 -0
- inklet-4.0.0.dev1/gallery/real-biology.png +0 -0
- inklet-4.0.0.dev1/gallery/research-crossing-revision.png +0 -0
- inklet-4.0.0.dev1/gallery/research-figure-planner.png +0 -0
- inklet-4.0.0.dev1/gallery/research-planner-study.png +0 -0
- inklet-4.0.0.dev1/gallery/research-revision.png +0 -0
- inklet-4.0.0.dev1/gallery/slab-biology.png +0 -0
- inklet-4.0.0.dev1/mkdocs.yml +144 -0
- inklet-4.0.0.dev1/pyproject.toml +77 -0
- inklet-4.0.0.dev1/requirements-ci.txt +52 -0
- inklet-4.0.0.dev1/requirements-tables.txt +28 -0
- inklet-4.0.0.dev1/src/inklet/__init__.py +472 -0
- inklet-4.0.0.dev1/src/inklet/core/diagram.py +583 -0
- inklet-4.0.0.dev1/src/inklet/core/envelope.py +269 -0
- inklet-4.0.0.dev1/src/inklet/core/style.py +182 -0
- inklet-4.0.0.dev1/src/inklet/document/__init__.py +21 -0
- inklet-4.0.0.dev1/src/inklet/document/compiler.py +630 -0
- inklet-4.0.0.dev1/src/inklet/document/data.py +306 -0
- inklet-4.0.0.dev1/src/inklet/document/data_io.py +51 -0
- inklet-4.0.0.dev1/src/inklet/document/module.py +97 -0
- inklet-4.0.0.dev1/src/inklet/document/spec.py +302 -0
- inklet-4.0.0.dev1/src/inklet/draw/shapes.py +226 -0
- inklet-4.0.0.dev1/src/inklet/experimental/__init__.py +1 -0
- inklet-4.0.0.dev1/src/inklet/experimental/_table_adapters.py +137 -0
- inklet-4.0.0.dev1/src/inklet/experimental/browser/__init__.py +747 -0
- inklet-4.0.0.dev1/src/inklet/experimental/browser/drawings.py +91 -0
- inklet-4.0.0.dev1/src/inklet/experimental/browser/fields.py +108 -0
- inklet-4.0.0.dev1/src/inklet/experimental/browser/grid.py +108 -0
- inklet-4.0.0.dev1/src/inklet/experimental/browser/images.py +122 -0
- inklet-4.0.0.dev1/src/inklet/experimental/browser/page.html +22 -0
- inklet-4.0.0.dev1/src/inklet/experimental/browser/regions.py +92 -0
- inklet-4.0.0.dev1/src/inklet/experimental/browser/runtime.js +382 -0
- inklet-4.0.0.dev1/src/inklet/experimental/browser/series.py +107 -0
- inklet-4.0.0.dev1/src/inklet/experimental/browser/timeaxis.py +109 -0
- inklet-4.0.0.dev1/src/inklet/experimental/channels.py +152 -0
- inklet-4.0.0.dev1/src/inklet/experimental/contours.py +97 -0
- inklet-4.0.0.dev1/src/inklet/experimental/engineering.py +99 -0
- inklet-4.0.0.dev1/src/inklet/experimental/fields.py +135 -0
- inklet-4.0.0.dev1/src/inklet/experimental/figure_planner.py +513 -0
- inklet-4.0.0.dev1/src/inklet/experimental/grid.py +294 -0
- inklet-4.0.0.dev1/src/inklet/experimental/measurement.py +112 -0
- inklet-4.0.0.dev1/src/inklet/experimental/measurements.py +142 -0
- inklet-4.0.0.dev1/src/inklet/experimental/planner_geometry.py +127 -0
- inklet-4.0.0.dev1/src/inklet/experimental/regions.py +119 -0
- inklet-4.0.0.dev1/src/inklet/experimental/sections.py +213 -0
- inklet-4.0.0.dev1/src/inklet/experimental/selection.py +200 -0
- inklet-4.0.0.dev1/src/inklet/experimental/slabs.py +134 -0
- inklet-4.0.0.dev1/src/inklet/experimental/temporal.py +59 -0
- inklet-4.0.0.dev1/src/inklet/experimental/tiff.py +93 -0
- inklet-4.0.0.dev1/src/inklet/experimental/volume.py +222 -0
- inklet-4.0.0.dev1/src/inklet/figure.py +428 -0
- inklet-4.0.0.dev1/src/inklet/links/link.py +2484 -0
- inklet-4.0.0.dev1/src/inklet/plot/axis.py +559 -0
- inklet-4.0.0.dev1/src/inklet/plot/inset.py +311 -0
- inklet-4.0.0.dev1/src/inklet/plot/key.py +235 -0
- inklet-4.0.0.dev1/src/inklet/plot/marks.py +1151 -0
- inklet-4.0.0.dev1/src/inklet/plot/panel.py +1817 -0
- inklet-4.0.0.dev1/src/inklet/plot/scale.py +1224 -0
- inklet-4.0.0.dev1/src/inklet/plot/scatter_raster.py +201 -0
- inklet-4.0.0.dev1/src/inklet/plot/simplify.py +67 -0
- inklet-4.0.0.dev1/src/inklet/render/bounds.py +44 -0
- inklet-4.0.0.dev1/src/inklet/render/fontembed.py +395 -0
- inklet-4.0.0.dev1/src/inklet/render/paint.py +60 -0
- inklet-4.0.0.dev1/src/inklet/render/pdf.py +927 -0
- inklet-4.0.0.dev1/src/inklet/render/preview.py +106 -0
- inklet-4.0.0.dev1/src/inklet/render/resources.py +51 -0
- inklet-4.0.0.dev1/src/inklet/render/svg.py +1036 -0
- inklet-4.0.0.dev1/src/inklet/themes/theme.py +422 -0
- inklet-4.0.0.dev1/src/inklet/three/blender/lineart.py +451 -0
- inklet-4.0.0.dev1/src/inklet/three/blender/script.py +545 -0
- inklet-4.0.0.dev1/tests/test_biology_source.py +76 -0
- inklet-4.0.0.dev1/tests/test_browser_facets.py +262 -0
- inklet-4.0.0.dev1/tests/test_browser_figure.py +167 -0
- inklet-4.0.0.dev1/tests/test_browser_regions.py +165 -0
- inklet-4.0.0.dev1/tests/test_browser_revision.py +196 -0
- inklet-4.0.0.dev1/tests/test_browser_scatter.py +115 -0
- inklet-4.0.0.dev1/tests/test_browser_series.py +134 -0
- inklet-4.0.0.dev1/tests/test_browser_statistics.py +467 -0
- inklet-4.0.0.dev1/tests/test_browser_switching.py +330 -0
- inklet-4.0.0.dev1/tests/test_browser_time.py +295 -0
- inklet-4.0.0.dev1/tests/test_categories.py +52 -0
- inklet-4.0.0.dev1/tests/test_channels_contours.py +170 -0
- inklet-4.0.0.dev1/tests/test_csv_input.py +51 -0
- inklet-4.0.0.dev1/tests/test_diagram_engine.py +116 -0
- inklet-4.0.0.dev1/tests/test_docs_site.py +141 -0
- inklet-4.0.0.dev1/tests/test_engine_layout.py +80 -0
- inklet-4.0.0.dev1/tests/test_engine_rendering.py +84 -0
- inklet-4.0.0.dev1/tests/test_engine_scatter.py +57 -0
- inklet-4.0.0.dev1/tests/test_engineering_report.py +190 -0
- inklet-4.0.0.dev1/tests/test_figure_planner.py +390 -0
- inklet-4.0.0.dev1/tests/test_grid_fields.py +222 -0
- inklet-4.0.0.dev1/tests/test_guides.py +105 -0
- inklet-4.0.0.dev1/tests/test_label_measurements.py +99 -0
- inklet-4.0.0.dev1/tests/test_mesh_fields.py +218 -0
- inklet-4.0.0.dev1/tests/test_microscopy_tiff.py +72 -0
- inklet-4.0.0.dev1/tests/test_plot_engine.py +138 -0
- inklet-4.0.0.dev1/tests/test_plot_key.py +260 -0
- inklet-4.0.0.dev1/tests/test_plot_legend.py +200 -0
- inklet-4.0.0.dev1/tests/test_plot_quality_review.py +108 -0
- inklet-4.0.0.dev1/tests/test_regional_report.py +172 -0
- inklet-4.0.0.dev1/tests/test_release_adversarial.py +136 -0
- inklet-4.0.0.dev1/tests/test_render_jobs.py +122 -0
- inklet-4.0.0.dev1/tests/test_scientific_report.py +204 -0
- inklet-4.0.0.dev1/tests/test_sections.py +141 -0
- inklet-4.0.0.dev1/tests/test_shared_plot_margins.py +219 -0
- inklet-4.0.0.dev1/tests/test_slabs_regions.py +167 -0
- inklet-4.0.0.dev1/tests/test_table_adapters.py +260 -0
- inklet-4.0.0.dev1/tests/test_temporal_adapters.py +141 -0
- inklet-4.0.0.dev1/tests/test_three_blender.py +771 -0
- inklet-4.0.0.dev1/tests/test_v4_selection.py +226 -0
- inklet-4.0.0.dev1/tests/test_volume.py +132 -0
- inklet-4.0.0.dev1/tests/test_world_map_example.py +77 -0
- inklet-4.0.0.dev1/tests/visual/README.md +37 -0
- inklet-4.0.0.dev1/tests/visual/baseline/categories-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/categories-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/components-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/dense-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/dense-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/inset-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/inset-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/markers-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/markers-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/renderers.json +4 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-category-subset-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-dense-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-dense-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-late-inset-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-workflow-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v2-workflow-svg.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v25-document-pdf.png +0 -0
- inklet-4.0.0.dev1/tests/visual/baseline/v25-document-svg.png +0 -0
- inklet-4.0.0.dev1/tools/benchmark_diagrams.py +75 -0
- inklet-4.0.0.dev1/tools/benchmark_engine.py +117 -0
- inklet-4.0.0.dev1/tools/benchmark_lines.py +63 -0
- inklet-4.0.0.dev1/tools/benchmark_v4.py +119 -0
- inklet-4.0.0.dev1/tools/browser_study.js +35 -0
- inklet-4.0.0.dev1/tools/check_wheel.py +201 -0
- inklet-4.0.0.dev1/tools/docs_gallery.json +365 -0
- inklet-4.0.0.dev1/tools/docs_previews.json +457 -0
- inklet-4.0.0.dev1/tools/docs_previews.py +69 -0
- inklet-4.0.0.dev1/tools/docs_site.py +171 -0
- inklet-4.0.0.dev1/tools/docs_theme/home.html +17 -0
- inklet-4.0.0.dev1/tools/docs_theme/main.html +54 -0
- inklet-4.0.0.dev1/tools/prepare_world_map.py +69 -0
- inklet-4.0.0.dev1/tools/v4-budgets.json +9 -0
- inklet-4.0.0.dev1/tools/visual_check.py +100 -0
- inklet-3.0.0/.gitattributes +0 -2
- inklet-3.0.0/.github/workflows/checks.yml +0 -146
- inklet-3.0.0/.github/workflows/publish.yml +0 -87
- inklet-3.0.0/CHANGELOG.md +0 -144
- inklet-3.0.0/CONTRIBUTING.md +0 -98
- inklet-3.0.0/PKG-INFO +0 -218
- inklet-3.0.0/README.md +0 -178
- inklet-3.0.0/THIRD_PARTY_NOTICES.md +0 -81
- inklet-3.0.0/docs/api.md +0 -1263
- inklet-3.0.0/docs/compatibility.md +0 -83
- inklet-3.0.0/docs/complex-scene.md +0 -59
- inklet-3.0.0/docs/concepts.md +0 -92
- inklet-3.0.0/docs/cookbook.md +0 -2723
- inklet-3.0.0/docs/data.md +0 -101
- inklet-3.0.0/docs/diagram-components.md +0 -25
- inklet-3.0.0/docs/diagrams.md +0 -93
- inklet-3.0.0/docs/export-review.md +0 -138
- inklet-3.0.0/docs/index.md +0 -58
- inklet-3.0.0/docs/installation.md +0 -130
- inklet-3.0.0/docs/javascripts/inklet.js +0 -135
- inklet-3.0.0/docs/layout.md +0 -87
- inklet-3.0.0/docs/migration.md +0 -142
- inklet-3.0.0/docs/plotting.md +0 -105
- inklet-3.0.0/docs/presets.md +0 -183
- inklet-3.0.0/docs/publication-plots.md +0 -70
- inklet-3.0.0/docs/recipes/architecture-sketch.md +0 -28
- inklet-3.0.0/docs/recipes/architecture.md +0 -28
- inklet-3.0.0/docs/recipes/attractor.md +0 -28
- inklet-3.0.0/docs/recipes/helix.md +0 -26
- inklet-3.0.0/docs/recipes/interference.md +0 -28
- inklet-3.0.0/docs/recipes/lattice.md +0 -26
- inklet-3.0.0/docs/recipes/photonics.md +0 -26
- inklet-3.0.0/docs/recipes/wave-packets.md +0 -28
- inklet-3.0.0/docs/release-checks.md +0 -133
- inklet-3.0.0/docs/scene-paths.md +0 -125
- inklet-3.0.0/docs/scene-templates.md +0 -123
- inklet-3.0.0/docs/stylesheets/inklet.css +0 -1534
- inklet-3.0.0/docs/three-images.md +0 -88
- inklet-3.0.0/examples/preset_formats.py +0 -65
- inklet-3.0.0/mkdocs.yml +0 -95
- inklet-3.0.0/pyproject.toml +0 -71
- inklet-3.0.0/requirements-ci.txt +0 -26
- inklet-3.0.0/src/inklet/__init__.py +0 -472
- inklet-3.0.0/src/inklet/core/diagram.py +0 -580
- inklet-3.0.0/src/inklet/core/envelope.py +0 -269
- inklet-3.0.0/src/inklet/core/style.py +0 -179
- inklet-3.0.0/src/inklet/document/__init__.py +0 -18
- inklet-3.0.0/src/inklet/document/compiler.py +0 -543
- inklet-3.0.0/src/inklet/document/data.py +0 -301
- inklet-3.0.0/src/inklet/document/module.py +0 -75
- inklet-3.0.0/src/inklet/document/spec.py +0 -277
- inklet-3.0.0/src/inklet/draw/shapes.py +0 -226
- inklet-3.0.0/src/inklet/figure.py +0 -428
- inklet-3.0.0/src/inklet/links/link.py +0 -2464
- inklet-3.0.0/src/inklet/plot/axis.py +0 -523
- inklet-3.0.0/src/inklet/plot/inset.py +0 -310
- inklet-3.0.0/src/inklet/plot/key.py +0 -202
- inklet-3.0.0/src/inklet/plot/marks.py +0 -1150
- inklet-3.0.0/src/inklet/plot/panel.py +0 -1775
- inklet-3.0.0/src/inklet/plot/scale.py +0 -1202
- inklet-3.0.0/src/inklet/plot/scatter_raster.py +0 -161
- inklet-3.0.0/src/inklet/render/fontembed.py +0 -391
- inklet-3.0.0/src/inklet/render/paint.py +0 -60
- inklet-3.0.0/src/inklet/render/pdf.py +0 -926
- inklet-3.0.0/src/inklet/render/preview.py +0 -70
- inklet-3.0.0/src/inklet/render/resources.py +0 -45
- inklet-3.0.0/src/inklet/render/svg.py +0 -1025
- inklet-3.0.0/src/inklet/themes/theme.py +0 -422
- inklet-3.0.0/src/inklet/three/blender/lineart.py +0 -458
- inklet-3.0.0/src/inklet/three/blender/script.py +0 -541
- inklet-3.0.0/tests/test_categories.py +0 -44
- inklet-3.0.0/tests/test_docs_site.py +0 -100
- inklet-3.0.0/tests/test_guides.py +0 -83
- inklet-3.0.0/tests/test_plot_key.py +0 -233
- inklet-3.0.0/tests/test_plot_legend.py +0 -187
- inklet-3.0.0/tests/test_render_jobs.py +0 -120
- inklet-3.0.0/tests/test_three_blender.py +0 -761
- inklet-3.0.0/tests/visual/README.md +0 -26
- inklet-3.0.0/tests/visual/baseline/categories-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/categories-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/components-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/dense-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/dense-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/inset-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/inset-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/markers-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/markers-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-category-subset-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-category-subset-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-dense-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-dense-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-late-inset-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-late-inset-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-shared-scales-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-shared-scales-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-twins-matrix-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-twins-matrix-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-workflow-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v2-workflow-svg.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v25-document-pdf.png +0 -0
- inklet-3.0.0/tests/visual/baseline/v25-document-svg.png +0 -0
- inklet-3.0.0/tools/check_wheel.py +0 -102
- inklet-3.0.0/tools/docs_gallery.json +0 -222
- inklet-3.0.0/tools/docs_site.py +0 -104
- inklet-3.0.0/tools/docs_theme/home.html +0 -17
- inklet-3.0.0/tools/docs_theme/main.html +0 -53
- inklet-3.0.0/tools/visual_check.py +0 -80
- {inklet-3.0.0 → inklet-4.0.0.dev1}/.gitignore +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/.readthedocs.yaml +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/CONTRACT.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/LICENSE +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/assets/brand/inklet-icon.svg +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/assets/brand/inklet-logo-dark.svg +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/assets/brand/inklet-logo-mono.svg +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/assets/brand/inklet-logo.svg +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/assets/brand/inklet-wordmark.svg +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/assets/examples/quickstart.pdf +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/assets/examples/quickstart.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/assets/examples/quickstart.svg +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/blender-scenes.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/brand.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/cli.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/design/page_grid.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/design/v2.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/example-library.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/examples.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/quickstart.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/render-jobs.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/scene-annotations.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/showcase.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/stress20.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/stylesheets/code.css +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/troubleshooting.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/v2.5.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/v2.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/docs/v3.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/blender/complex_lab_scene.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/blender/lab_scene.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/blender/occlusion_scene.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/broken_axis.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/feature_flow.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/gallery.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/graph.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/hello_figure.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/panels.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/polar.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/presets.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/render_smoke.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/showcase/README.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/showcase/assets.lock.json +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/showcase/blender_scenes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/showcase/figures.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/state_machine.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/stress20.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/v25_document.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/v2_cases.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/v2_document.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/v3_complex_scene.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/v3_render_jobs.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/v3_rendering.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/v3_scene_annotations.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/v3_scene_passes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/v3_scene_paths.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/examples/v3_scene_templates.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/annot.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/bio3d.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/cartoon.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/chem_data.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/chem_fingerprints.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/data/1m17-kinase.pdb +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/data/README.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/drug_discovery.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/mouse_brain_data.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/neural_activity.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/pdbfile.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/showcase_part.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/showcase_process.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/showcase_season.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/structure.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/structure_data.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/target.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/figures/trial.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/README.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/chem_fingerprints.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/flow.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/part.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/plots.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/polar.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/preset-formats.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/presets.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/process.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/season.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/showcase-architecture-sketch.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/showcase-architecture.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/showcase-attractor.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/showcase-helix.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/showcase-interference.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/showcase-lattice.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/showcase-photonics.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/showcase-wave-packets.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/stress20.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/structure.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/v3-complex-scene.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/v3-render-jobs.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/v3-rendering.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/v3-scene-annotations.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/v3-scene-passes.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/v3-scene-paths.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/gallery/v3-scene-templates.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/requirements-docs.txt +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/scripts/bench_svg.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/scripts/rasterise.sh +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/scripts/sanity_typeset.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/__main__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/asset.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/cache.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/cutout.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/deps.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/harmonise.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/lineart.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/mask.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/provenance.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/raster.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/sidecar.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/assets/silhouette.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/cli.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/components.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/core/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/core/geom.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/core/prims.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/core/trace.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/core/units.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/abut.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/break_rules.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/color.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/cross.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/image.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/key_rules.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/link_rules.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/path_rules.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/plot_rules.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/report.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/rules.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/diagnostics/three_rules.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/document/composition.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/document/presets.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/document/publication.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/draw/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/draw/annotate.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/draw/clip.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/draw/coords.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/draw/path.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/draw/place.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/layout/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/layout/fit.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/layout/flow.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/layout/graph.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/layout/graph_force.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/layout/graph_layered.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/layout/graph_tree.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/layout/labels.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/layout/sankey.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/links/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/links/curves.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/breaks.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/categories.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/facets.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/notes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/png.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/polar.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/ramp.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/raster.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/ribbon.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/series.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/plot/timescale.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/brushes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/bundle.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/composite.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/glyphs.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/outline.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/pathdata.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/pdftext.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/raster.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/review.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/render/revision.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/themes/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/themes/color.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/themes/palettes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/api.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/backend.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/blender/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/blender/device_worker.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/blender/discover.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/blender/options.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/blender/scene_worker.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/blender/svgread.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/blender/template_worker.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/blender/tracing.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/blender_backend.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/camera.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/deps.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/depth.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/devices.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/drill.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/edges.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/hlr.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/linalg.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/mesh.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/occlude.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/order.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/parse.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/place.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/protein.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/quality.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/render_jobs.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/scene_annotations.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/scene_pass.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/scene_projection.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/scenes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/shade.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/solids.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/templates.json +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/three/templates.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/typeset/__init__.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/typeset/fonts.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/typeset/markup.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/typeset/onpath.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/typeset/outline.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/src/inklet/typeset/shaping.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/assets/mouse.inklet.json +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/assets/mouse.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/dense_graph.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/draw_probe.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/electro/assets/sem.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/electro/assets/tem.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/electro/cell.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/electro/common.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/electro/data.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/electro/imaging.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/electro/kinetics.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/electro/micrograph.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/electro/system.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/electro_figure.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/fidelity.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/flow.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/hard_figure.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/label_storm.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/mega_figure.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/meshes/README.md +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/meshes/brain-lh.obj +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/meshes/spot.obj +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/panels/apparatus.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/panels/graphs.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/panels/relations.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/panels/responses.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/panels/sections.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/probes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/stress/three_figure.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_alignment_contract.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_annotate.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_annotate_letters.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_assets.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_assets_provenance.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_blend_scene.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_chem_figure.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_cli.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_components.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_contrast_and_labels.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_cookbook.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_core.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_core_amendments.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics_api.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics_artwork.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics_break_distorts.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics_crossing.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics_image_contrast.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics_ink.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics_keys.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics_links.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics_paths.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_diagnostics_plot_box.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_docs.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_document.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_document_data.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_document_v25.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_draw_clip.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_draw_path.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_draw_place.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_draw_shapes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_export_bundle.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_figure.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_fit.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_layout.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_layout_graph.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_layout_graph_fit.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_layout_origin.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_layout_sankey.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_links.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_links_avoid.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_links_shapes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_neural_activity.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_output_contract.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_paint_program.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_place_labels.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_axis.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_broken_axis.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_clip.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_facets.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_inset.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_labels.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_marks.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_notes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_polar.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_publication.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_raster.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_ribbon.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_scale.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_swarm.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_plot_time.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_presets.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_publication_limits.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_render_devices.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_render_embed.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_render_glyphs.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_render_outline.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_render_pdf.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_render_pdf_text.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_render_quality.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_render_style_fields.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_render_svg_perf.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_render_v3.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_review_v25.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_round4_plot.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_routing_avoid.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_scatter_rendering.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_scene_annotations.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_scene_pass.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_scene_projection.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_scene_templates.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_showcase_library.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_showcase_round3.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_structure_figure.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_svg.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_target_pose.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_text_markup.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_text_on_path.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_theme_font_style.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_themes.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_anchor_pin.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_api.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_backend_blender.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_depth_order.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_drill.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_hlr.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_mesh.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_order_vector.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_overlay.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_parse.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_patches.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_place.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_protein.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_ridges.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_sort.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_sort_budget.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_three_view.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_typeset.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/test_watch_review.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/visual/baseline/components-pdf.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/visual/baseline/fonts.json +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/visual/baseline/type-opacity-pdf.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/visual/baseline/type-opacity-svg.png +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/visual/fixtures.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tests/visual/v2-budgets.json +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/benchmark_v2.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/check_render_wheel.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/dock_ligand.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/docs_theme/404.html +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/docs_theme/card.html +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/docs_theme/gallery.html +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/gen_api.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/preset_gallery.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/showcase_gallery.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/stress20.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/strip_pdb.py +0 -0
- {inklet-3.0.0 → inklet-4.0.0.dev1}/tools/v3_showcase.py +0 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
name: Release checks
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [master]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
concurrency:
|
|
13
|
+
group: checks-${{ github.workflow }}-${{ github.ref }}
|
|
14
|
+
cancel-in-progress: true
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
figures:
|
|
18
|
+
runs-on: ubuntu-24.04
|
|
19
|
+
timeout-minutes: 25
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
22
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
23
|
+
with:
|
|
24
|
+
python-version: '3.12'
|
|
25
|
+
- name: Install fonts and independent PDF renderer
|
|
26
|
+
run: |
|
|
27
|
+
sudo apt-get update
|
|
28
|
+
sudo apt-get install -y fonts-dejavu-core fonts-dejavu-extra fonts-noto-core fonts-liberation fonts-urw-base35 poppler-utils
|
|
29
|
+
pdftoppm -v
|
|
30
|
+
- name: Install the reviewed visual browser
|
|
31
|
+
env:
|
|
32
|
+
CHROME_VERSION: '145.0.7632.45'
|
|
33
|
+
CHROME_SHA256: 6aed53fe777ca9a58a680b848a80022300566fb902424291e054984a784c73a2
|
|
34
|
+
run: |
|
|
35
|
+
curl --fail --location --retry 3 "https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" --output "$RUNNER_TEMP/chrome.deb"
|
|
36
|
+
printf '%s %s\n' "$CHROME_SHA256" "$RUNNER_TEMP/chrome.deb" | sha256sum --check
|
|
37
|
+
dpkg-deb -x "$RUNNER_TEMP/chrome.deb" "$RUNNER_TEMP/visual-browser"
|
|
38
|
+
mkdir -p "$RUNNER_TEMP/visual-browser/bin"
|
|
39
|
+
ln -s ../opt/google/chrome/google-chrome "$RUNNER_TEMP/visual-browser/bin/google-chrome"
|
|
40
|
+
echo "$RUNNER_TEMP/visual-browser/bin" >> "$GITHUB_PATH"
|
|
41
|
+
"$RUNNER_TEMP/visual-browser/bin/google-chrome" --version
|
|
42
|
+
- name: Install locked test dependencies
|
|
43
|
+
run: |
|
|
44
|
+
uv venv
|
|
45
|
+
uv pip install -r requirements-ci.txt -e .
|
|
46
|
+
.venv/bin/inklet doctor
|
|
47
|
+
- name: Unit and integration tests
|
|
48
|
+
run: .venv/bin/python -m pytest -q --junitxml=out/tests.xml
|
|
49
|
+
- name: Generated API documentation
|
|
50
|
+
run: .venv/bin/python tools/gen_api.py --check
|
|
51
|
+
- name: Build documentation with strict link validation
|
|
52
|
+
run: |
|
|
53
|
+
uv pip install -r requirements-docs.txt
|
|
54
|
+
.venv/bin/python -m mkdocs build --strict
|
|
55
|
+
.venv/bin/python -m pytest -q tests/test_docs_site.py
|
|
56
|
+
- name: Build the v2.5 publication review
|
|
57
|
+
run: .venv/bin/inklet build examples/v25_document.py --output out/v25 --name document
|
|
58
|
+
- name: Build the preset comparison gallery
|
|
59
|
+
run: .venv/bin/python tools/preset_gallery.py --output out/presets
|
|
60
|
+
- name: Common CSV plotting example
|
|
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
|
|
83
|
+
- name: Build the mathematical showcase library
|
|
84
|
+
run: .venv/bin/python tools/showcase_gallery.py --plots-only --quality preview
|
|
85
|
+
- name: Coordinated biology figure and data export
|
|
86
|
+
run: .venv/bin/python examples/biology_panels.py --output out/biology
|
|
87
|
+
- name: Complete figure visual regressions
|
|
88
|
+
run: .venv/bin/python tools/visual_check.py --output out/visual
|
|
89
|
+
- name: Complete figure performance checks
|
|
90
|
+
run: .venv/bin/python tools/benchmark_v2.py --output out/benchmarks
|
|
91
|
+
- name: Rendering engine workloads and quality review
|
|
92
|
+
run: |
|
|
93
|
+
.venv/bin/python tools/benchmark_engine.py --repeat 1 --output out/engine-benchmark.json
|
|
94
|
+
.venv/bin/python examples/engine_review.py --output out/engine-review
|
|
95
|
+
- name: Diagram routing and label review
|
|
96
|
+
run: |
|
|
97
|
+
.venv/bin/python tools/benchmark_diagrams.py --repeat 1 --output out/diagram-benchmark.json
|
|
98
|
+
.venv/bin/python examples/diagram_review.py --output out/diagram-review
|
|
99
|
+
- name: Dense vector lines and measured axes
|
|
100
|
+
run: |
|
|
101
|
+
.venv/bin/python tools/benchmark_lines.py --repeat 1 --output out/line-benchmark.json
|
|
102
|
+
.venv/bin/python examples/plot_engine_review.py --output out/plot-engine-review
|
|
103
|
+
- name: Twenty-panel mixed-media stress test
|
|
104
|
+
run: .venv/bin/python tools/stress20.py --output out/stress20
|
|
105
|
+
- name: Preserve review artifacts
|
|
106
|
+
if: always()
|
|
107
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
108
|
+
with:
|
|
109
|
+
name: figure-checks
|
|
110
|
+
path: out/
|
|
111
|
+
retention-days: 7
|
|
112
|
+
if-no-files-found: ignore
|
|
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
|
+
|
|
150
|
+
wheel:
|
|
151
|
+
runs-on: ${{ matrix.os }}
|
|
152
|
+
timeout-minutes: 10
|
|
153
|
+
defaults:
|
|
154
|
+
run:
|
|
155
|
+
shell: bash
|
|
156
|
+
strategy:
|
|
157
|
+
fail-fast: false
|
|
158
|
+
matrix:
|
|
159
|
+
os: [ubuntu-24.04]
|
|
160
|
+
python: ['3.11', '3.12', '3.13']
|
|
161
|
+
include:
|
|
162
|
+
- os: windows-2022
|
|
163
|
+
python: '3.12'
|
|
164
|
+
- os: macos-14
|
|
165
|
+
python: '3.12'
|
|
166
|
+
steps:
|
|
167
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
168
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
169
|
+
with:
|
|
170
|
+
python-version: ${{ matrix.python }}
|
|
171
|
+
- name: Build and install with core dependencies only
|
|
172
|
+
run: |
|
|
173
|
+
uv build --wheel --out-dir out/dist
|
|
174
|
+
uv run --no-project python tools/check_wheel.py out/dist/inklet-*.whl
|
|
175
|
+
- name: Install and check optional render extra
|
|
176
|
+
run: uv run --no-project python tools/check_render_wheel.py out/dist/inklet-*.whl
|
|
177
|
+
|
|
178
|
+
blender:
|
|
179
|
+
name: Blender ${{ matrix.version }} CPU
|
|
180
|
+
runs-on: ubuntu-24.04
|
|
181
|
+
timeout-minutes: 15
|
|
182
|
+
strategy:
|
|
183
|
+
fail-fast: false
|
|
184
|
+
matrix:
|
|
185
|
+
include:
|
|
186
|
+
- version: '4.2.23'
|
|
187
|
+
series: '4.2'
|
|
188
|
+
sha256: bea0eb3146be13eae6225409a117b215184f41b7f79e799f97cb3abb8f6dc404
|
|
189
|
+
- version: '4.5.13'
|
|
190
|
+
series: '4.5'
|
|
191
|
+
sha256: da4e69b06b75b9e642d106496c50e7e240218b411d2f6e18271c1d1d819cef91
|
|
192
|
+
steps:
|
|
193
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
194
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
195
|
+
with:
|
|
196
|
+
python-version: '3.12'
|
|
197
|
+
- name: Install Blender and test dependencies
|
|
198
|
+
env:
|
|
199
|
+
BLENDER_VERSION: ${{ matrix.version }}
|
|
200
|
+
BLENDER_SERIES: ${{ matrix.series }}
|
|
201
|
+
BLENDER_SHA256: ${{ matrix.sha256 }}
|
|
202
|
+
run: |
|
|
203
|
+
sudo apt-get update
|
|
204
|
+
sudo apt-get install -y libegl1 libxkbcommon0 fonts-dejavu-core fonts-dejavu-extra
|
|
205
|
+
archive="blender-${BLENDER_VERSION}-linux-x64.tar.xz"
|
|
206
|
+
curl --fail --location --retry 3 "https://download.blender.org/release/Blender${BLENDER_SERIES}/${archive}" --output "$RUNNER_TEMP/$archive"
|
|
207
|
+
printf '%s %s\n' "$BLENDER_SHA256" "$RUNNER_TEMP/$archive" | sha256sum --check
|
|
208
|
+
tar -xf "$RUNNER_TEMP/$archive" -C "$RUNNER_TEMP"
|
|
209
|
+
echo "INKLET_BLENDER=$RUNNER_TEMP/blender-${BLENDER_VERSION}-linux-x64/blender" >> "$GITHUB_ENV"
|
|
210
|
+
uv venv
|
|
211
|
+
uv pip install -r requirements-ci.txt -e .
|
|
212
|
+
- name: Require the requested Blender build
|
|
213
|
+
env:
|
|
214
|
+
BLENDER_VERSION: ${{ matrix.version }}
|
|
215
|
+
run: |
|
|
216
|
+
.venv/bin/python -c 'import os; from inklet.three.blender import find_blender; assert find_blender().release == os.environ["BLENDER_VERSION"]'
|
|
217
|
+
- name: Complete scenes, passes, projections, annotations and templates
|
|
218
|
+
run: |
|
|
219
|
+
.venv/bin/python -m pytest -q tests/test_blend_scene.py tests/test_scene_pass.py tests/test_scene_projection.py tests/test_scene_annotations.py tests/test_scene_templates.py tests/test_render_devices.py tests/test_render_jobs.py --junitxml=out/blender-tests.xml
|
|
220
|
+
- name: Installed wheel creates and renders all templates
|
|
221
|
+
run: |
|
|
222
|
+
uv build --wheel --out-dir out/dist
|
|
223
|
+
.venv/bin/python tools/check_render_wheel.py out/dist/inklet-*.whl --templates
|
|
224
|
+
- name: Legacy vector line-art export integrity
|
|
225
|
+
if: matrix.version == '4.2.23'
|
|
226
|
+
run: .venv/bin/python -m pytest -q tests/test_three_blender.py
|
|
227
|
+
- name: Preserve Blender test report
|
|
228
|
+
if: always()
|
|
229
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
230
|
+
with:
|
|
231
|
+
name: blender-${{ matrix.version }}-checks
|
|
232
|
+
path: out/blender-tests.xml
|
|
233
|
+
retention-days: 7
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
tag:
|
|
7
|
+
description: Published GitHub release tag
|
|
8
|
+
required: true
|
|
9
|
+
default: v4.0.0.dev1
|
|
10
|
+
type: string
|
|
11
|
+
dry_run:
|
|
12
|
+
description: Validate release files without uploading to PyPI
|
|
13
|
+
required: true
|
|
14
|
+
default: true
|
|
15
|
+
type: boolean
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
|
|
20
|
+
concurrency:
|
|
21
|
+
group: pypi-publish
|
|
22
|
+
cancel-in-progress: false
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
publish:
|
|
26
|
+
if: github.repository == 'Mapika/inklet' && github.ref == 'refs/heads/master'
|
|
27
|
+
runs-on: ubuntu-24.04
|
|
28
|
+
timeout-minutes: 10
|
|
29
|
+
environment:
|
|
30
|
+
name: pypi
|
|
31
|
+
url: https://pypi.org/project/inklet/
|
|
32
|
+
permissions:
|
|
33
|
+
contents: read
|
|
34
|
+
id-token: write
|
|
35
|
+
steps:
|
|
36
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
37
|
+
with:
|
|
38
|
+
python-version: '3.12'
|
|
39
|
+
- name: Download published release distributions
|
|
40
|
+
env:
|
|
41
|
+
GH_TOKEN: ${{ github.token }}
|
|
42
|
+
GH_REPO: ${{ github.repository }}
|
|
43
|
+
RELEASE_TAG: ${{ inputs.tag }}
|
|
44
|
+
run: |
|
|
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
|
+
exit 1
|
|
48
|
+
}
|
|
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
|
|
59
|
+
version="${RELEASE_TAG#v}"
|
|
60
|
+
gh release download "$RELEASE_TAG" --dir dist \
|
|
61
|
+
--pattern "inklet-${version}-py3-none-any.whl" \
|
|
62
|
+
--pattern "inklet-${version}.tar.gz" \
|
|
63
|
+
--pattern SHA256SUMS
|
|
64
|
+
- name: Verify release checksums and package metadata
|
|
65
|
+
env:
|
|
66
|
+
RELEASE_TAG: ${{ inputs.tag }}
|
|
67
|
+
run: |
|
|
68
|
+
python - <<'PY'
|
|
69
|
+
import hashlib
|
|
70
|
+
import os
|
|
71
|
+
import tarfile
|
|
72
|
+
import zipfile
|
|
73
|
+
from email.parser import BytesParser
|
|
74
|
+
from pathlib import Path
|
|
75
|
+
|
|
76
|
+
dist = Path('dist')
|
|
77
|
+
version = os.environ['RELEASE_TAG'][1:]
|
|
78
|
+
expected = {f'inklet-{version}-py3-none-any.whl', f'inklet-{version}.tar.gz'}
|
|
79
|
+
lines = (dist / 'SHA256SUMS').read_text().splitlines()
|
|
80
|
+
entries = [line.split() for line in lines]
|
|
81
|
+
if len(entries) != 2 or any(len(entry) != 2 for entry in entries):
|
|
82
|
+
raise SystemExit('Expected exactly two release checksums')
|
|
83
|
+
if {name for _, name in entries} != expected:
|
|
84
|
+
raise SystemExit('Checksum filenames do not match the requested release')
|
|
85
|
+
for digest, name in entries:
|
|
86
|
+
if hashlib.sha256((dist / name).read_bytes()).hexdigest() != digest:
|
|
87
|
+
raise SystemExit(f'Checksum mismatch: {name}')
|
|
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')
|
|
103
|
+
(dist / 'SHA256SUMS').unlink()
|
|
104
|
+
PY
|
|
105
|
+
uvx --from twine==7.0.0 twine check --strict dist/*
|
|
106
|
+
- name: Publish using PyPI Trusted Publishing
|
|
107
|
+
if: ${{ !inputs.dry_run }}
|
|
108
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
109
|
+
with:
|
|
110
|
+
packages-dir: dist/
|
|
111
|
+
- name: Record dry run
|
|
112
|
+
if: inputs.dry_run
|
|
113
|
+
run: echo 'Release files verified. Nothing was uploaded to PyPI.' >> "$GITHUB_STEP_SUMMARY"
|