fastplotpy 0.3.0a1__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.
- fastplotpy-0.3.0a1/AGENTS.md +61 -0
- fastplotpy-0.3.0a1/LICENSE +21 -0
- fastplotpy-0.3.0a1/MANIFEST.in +14 -0
- fastplotpy-0.3.0a1/PKG-INFO +86 -0
- fastplotpy-0.3.0a1/README.md +1582 -0
- fastplotpy-0.3.0a1/bench/README.md +85 -0
- fastplotpy-0.3.0a1/charting_library_spec_en.md +152 -0
- fastplotpy-0.3.0a1/docs/API_STABILITY_AND_VERSIONING.md +271 -0
- fastplotpy-0.3.0a1/docs/DOCS_INDEX.md +30 -0
- fastplotpy-0.3.0a1/docs/EXPERIMENTAL_3D_ARCHITECTURE.md +220 -0
- fastplotpy-0.3.0a1/docs/PROJECT_HISTORY.md +1244 -0
- fastplotpy-0.3.0a1/docs/PROJECT_STATUS.md +807 -0
- fastplotpy-0.3.0a1/docs/RELEASE_NOTES_DRAFT.md +281 -0
- fastplotpy-0.3.0a1/docs/SUBPLOTS_AND_SHARED_AXES.md +191 -0
- fastplotpy-0.3.0a1/docs/THREE_DIMENSIONAL_CHARTS_ROADMAP.md +351 -0
- fastplotpy-0.3.0a1/docs/WEBSITE_ANALYTICS.md +73 -0
- fastplotpy-0.3.0a1/docs/agents/PRODUCT_MANAGER.md +56 -0
- fastplotpy-0.3.0a1/docs/assets/logo.png +0 -0
- fastplotpy-0.3.0a1/docs/assets/logo_big.png +0 -0
- fastplotpy-0.3.0a1/examples/gallery/catalog.py +180 -0
- fastplotpy-0.3.0a1/examples/gallery/gallery.js +111 -0
- fastplotpy-0.3.0a1/examples/gallery/index.html +176 -0
- fastplotpy-0.3.0a1/examples/gallery/server.py +922 -0
- fastplotpy-0.3.0a1/examples/gallery/source-options.json +1 -0
- fastplotpy-0.3.0a1/examples/gallery/styles.css +436 -0
- fastplotpy-0.3.0a1/examples/jupyter_interactive.ipynb +64 -0
- fastplotpy-0.3.0a1/pyproject.toml +24 -0
- fastplotpy-0.3.0a1/rust/Cargo.lock +1449 -0
- fastplotpy-0.3.0a1/rust/Cargo.toml +3 -0
- fastplotpy-0.3.0a1/rust/core-rust/Cargo.toml +17 -0
- fastplotpy-0.3.0a1/rust/core-rust/benches/line_scene.rs +32 -0
- fastplotpy-0.3.0a1/rust/core-rust/src/lib.rs +3163 -0
- fastplotpy-0.3.0a1/rust/core-rust/tests/scene_json.rs +12 -0
- fastplotpy-0.3.0a1/rust/python-abi/Cargo.toml +15 -0
- fastplotpy-0.3.0a1/rust/python-abi/assets/fonts/NotoSans-Regular.ttf +0 -0
- fastplotpy-0.3.0a1/rust/python-abi/assets/fonts/NotoSans-SemiBold.ttf +0 -0
- fastplotpy-0.3.0a1/rust/python-abi/src/lib.rs +155 -0
- fastplotpy-0.3.0a1/setup.cfg +4 -0
- fastplotpy-0.3.0a1/setup.py +48 -0
- fastplotpy-0.3.0a1/src/fastplotpy/README.md +70 -0
- fastplotpy-0.3.0a1/src/fastplotpy/__init__.py +33 -0
- fastplotpy-0.3.0a1/src/fastplotpy/assets/dist/assets/scene.worker-CcnexaKr.js +1 -0
- fastplotpy-0.3.0a1/src/fastplotpy/assets/dist/index.js +15071 -0
- fastplotpy-0.3.0a1/src/fastplotpy/assets/native/NotoSans-OFL.txt +96 -0
- fastplotpy-0.3.0a1/src/fastplotpy/assets/native/THIRD_PARTY_NOTICES.md +24 -0
- fastplotpy-0.3.0a1/src/fastplotpy/assets/package.json +1 -0
- fastplotpy-0.3.0a1/src/fastplotpy/axes_validation.py +102 -0
- fastplotpy-0.3.0a1/src/fastplotpy/camera3d.py +104 -0
- fastplotpy-0.3.0a1/src/fastplotpy/color_scale.py +88 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/area-fill.json +5 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/bar.json +22 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/camera3d.json +22 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/cartesian-references.json +10 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/control.json +3 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/crosshair.json +19 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/error-bars.json +7 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/heatmap.json +70 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/interaction.json +3 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/layout.json +32 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/legend.json +24 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/line-axes.json +28 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/line3d.json +13 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/markers.json +6 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/mesh3d.json +13 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/pan.json +7 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/pie.json +27 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/pie3d.json +7 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/point-labels.json +13 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/pointClick.json +6 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/pointSelection.json +13 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/polar.json +71 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/polarRotate.json +5 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/scatter3d.json +39 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/scene3d.json +61 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/surface.json +35 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/tooltip.json +18 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/trace-colors.json +10 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/trace-options.json +24 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/wonderplot.json +58 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults/zoom.json +12 -0
- fastplotpy-0.3.0a1/src/fastplotpy/defaults.py +15 -0
- fastplotpy-0.3.0a1/src/fastplotpy/error_bars.py +118 -0
- fastplotpy-0.3.0a1/src/fastplotpy/exports.py +153 -0
- fastplotpy-0.3.0a1/src/fastplotpy/families2d.py +896 -0
- fastplotpy-0.3.0a1/src/fastplotpy/heatmap_labels.py +146 -0
- fastplotpy-0.3.0a1/src/fastplotpy/interactions.py +243 -0
- fastplotpy-0.3.0a1/src/fastplotpy/interactive.py +1922 -0
- fastplotpy-0.3.0a1/src/fastplotpy/js_serialize.py +47 -0
- fastplotpy-0.3.0a1/src/fastplotpy/lighting3d.py +113 -0
- fastplotpy-0.3.0a1/src/fastplotpy/line3d_lod.py +138 -0
- fastplotpy-0.3.0a1/src/fastplotpy/lod3d.py +105 -0
- fastplotpy-0.3.0a1/src/fastplotpy/mesh3d_lod.py +107 -0
- fastplotpy-0.3.0a1/src/fastplotpy/native.py +163 -0
- fastplotpy-0.3.0a1/src/fastplotpy/overlays.py +561 -0
- fastplotpy-0.3.0a1/src/fastplotpy/point_labels.py +86 -0
- fastplotpy-0.3.0a1/src/fastplotpy/polar.py +445 -0
- fastplotpy-0.3.0a1/src/fastplotpy/polygon_clip3d.py +148 -0
- fastplotpy-0.3.0a1/src/fastplotpy/references.py +72 -0
- fastplotpy-0.3.0a1/src/fastplotpy/rendering.py +65 -0
- fastplotpy-0.3.0a1/src/fastplotpy/rust_scenes.py +314 -0
- fastplotpy-0.3.0a1/src/fastplotpy/scene.py +1185 -0
- fastplotpy-0.3.0a1/src/fastplotpy/scene3d.py +1215 -0
- fastplotpy-0.3.0a1/src/fastplotpy/scene3d_accessibility.py +183 -0
- fastplotpy-0.3.0a1/src/fastplotpy/scene3d_collection.py +158 -0
- fastplotpy-0.3.0a1/src/fastplotpy/subplots.py +115 -0
- fastplotpy-0.3.0a1/src/fastplotpy/surface_contours.py +122 -0
- fastplotpy-0.3.0a1/src/fastplotpy/surface_lod.py +109 -0
- fastplotpy-0.3.0a1/src/fastplotpy/svg3d.py +235 -0
- fastplotpy-0.3.0a1/src/fastplotpy/trendline.py +236 -0
- fastplotpy-0.3.0a1/src/fastplotpy/triangle_wireframe.py +51 -0
- fastplotpy-0.3.0a1/src/fastplotpy/types.py +3027 -0
- fastplotpy-0.3.0a1/src/fastplotpy.egg-info/PKG-INFO +86 -0
- fastplotpy-0.3.0a1/src/fastplotpy.egg-info/SOURCES.txt +242 -0
- fastplotpy-0.3.0a1/src/fastplotpy.egg-info/dependency_links.txt +1 -0
- fastplotpy-0.3.0a1/src/fastplotpy.egg-info/requires.txt +7 -0
- fastplotpy-0.3.0a1/src/fastplotpy.egg-info/top_level.txt +1 -0
- fastplotpy-0.3.0a1/tests/fixtures/observed_scene_float_deltas.json +1313 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_2d_line_style_inert.json +268 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_advanced_chart_overlays.json +767 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_advanced_png.json +282 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_advanced_svg.json +358 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_axis_options.json +727 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_bar_rust_contracts.json +1928 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_bar_style.json +477 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_bar_subplots.json +2229 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_before_events.json +161 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_cartesian_references.json +544 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_chart_methods.json +515 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_chart_state_exchange.json +35 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_foreign_family_fields.json +387 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_foreign_trace_fields.json +411 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_heatmap_contracts.json +2226 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_heatmap_rust_contracts.json +2226 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_heatmap_wonder_colors.json +1597 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_inert_trace_fields.json +355 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_lighting.json +6691 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_line3d_lod.json +2092 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_line3d_smooth.json +6896 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_line_named_viewport.json +212 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_line_rust_contracts.json +12222 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_line_style.json +590 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_line_subplots.json +8790 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_mesh3d_lod.json +7801 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_mesh_colors.json +4060 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_nested_gate_errors.json +416 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_nonline_marker_style.json +5151 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_pie3d_errors.json +197 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_pie3d_lighting.json +3142 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_pie_contracts.json +2081 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_pie_malformed.json +252 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_pie_nested.json +580 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_polar_contracts.json +1497 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_polar_rust_contracts.json +1584 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_polygon_clipping.json +12035 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_public_types_source.json +1 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_remaining_scene_compositions.json +5214 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_remaining_top_fields.json +380 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_render_canvas.json +109 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_render_to_png_bytes.json +393 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_renderer_fields.json +322 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_scatter3d_encodings.json +1783 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_scatter3d_lod.json +8131 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_scene3d_accessibility.json +923 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_scene3d_line_colors.json +3657 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_scene3d_line_style_inert.json +4800 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_scene3d_renderer.json +14460 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_scene3d_subplots.json +14723 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_scene_contracts.json +24973 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_subplots_contracts.json +777 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_surface_color.json +4786 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_surface_contours.json +6918 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_surface_lod.json +10110 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_wireframe.json +4355 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_wonder_log_subplots.json +980 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_wonder_multitrace.json +455 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_wonder_subplots.json +1036 -0
- fastplotpy-0.3.0a1/tests/fixtures/pinned_wonderplot_rust_contracts.json +1502 -0
- fastplotpy-0.3.0a1/tests/fixtures/source_canvas_consumer_evidence.json +159 -0
- fastplotpy-0.3.0a1/tests/test_2d_line_style_inert.py +33 -0
- fastplotpy-0.3.0a1/tests/test_advanced_chart_overlays.py +234 -0
- fastplotpy-0.3.0a1/tests/test_advanced_png.py +28 -0
- fastplotpy-0.3.0a1/tests/test_advanced_svg.py +39 -0
- fastplotpy-0.3.0a1/tests/test_axis_options.py +29 -0
- fastplotpy-0.3.0a1/tests/test_bar_rust_contracts.py +29 -0
- fastplotpy-0.3.0a1/tests/test_bar_style.py +25 -0
- fastplotpy-0.3.0a1/tests/test_bar_subplots.py +95 -0
- fastplotpy-0.3.0a1/tests/test_before_events.py +120 -0
- fastplotpy-0.3.0a1/tests/test_cartesian_references.py +35 -0
- fastplotpy-0.3.0a1/tests/test_chart_3d_interaction.py +48 -0
- fastplotpy-0.3.0a1/tests/test_chart_methods.py +97 -0
- fastplotpy-0.3.0a1/tests/test_chart_state_exchange.py +84 -0
- fastplotpy-0.3.0a1/tests/test_foreign_family_fields.py +27 -0
- fastplotpy-0.3.0a1/tests/test_foreign_trace_fields.py +29 -0
- fastplotpy-0.3.0a1/tests/test_gallery.py +543 -0
- fastplotpy-0.3.0a1/tests/test_heatmap_contracts.py +74 -0
- fastplotpy-0.3.0a1/tests/test_heatmap_wonder_colors.py +23 -0
- fastplotpy-0.3.0a1/tests/test_inert_trace_fields.py +27 -0
- fastplotpy-0.3.0a1/tests/test_interactions_contracts.py +83 -0
- fastplotpy-0.3.0a1/tests/test_line3d_lod.py +28 -0
- fastplotpy-0.3.0a1/tests/test_line3d_smooth.py +83 -0
- fastplotpy-0.3.0a1/tests/test_line_named_viewport.py +23 -0
- fastplotpy-0.3.0a1/tests/test_line_rust_contracts.py +41 -0
- fastplotpy-0.3.0a1/tests/test_line_style.py +25 -0
- fastplotpy-0.3.0a1/tests/test_line_subplots.py +28 -0
- fastplotpy-0.3.0a1/tests/test_mesh3d_lod.py +27 -0
- fastplotpy-0.3.0a1/tests/test_nested_gate_lighting.py +57 -0
- fastplotpy-0.3.0a1/tests/test_nonline_marker_style.py +26 -0
- fastplotpy-0.3.0a1/tests/test_pie_contracts.py +53 -0
- fastplotpy-0.3.0a1/tests/test_pie_malformed.py +32 -0
- fastplotpy-0.3.0a1/tests/test_pie_nested.py +23 -0
- fastplotpy-0.3.0a1/tests/test_pinned_scene_contracts.py +93 -0
- fastplotpy-0.3.0a1/tests/test_polar_contracts.py +53 -0
- fastplotpy-0.3.0a1/tests/test_polar_rust_contracts.py +75 -0
- fastplotpy-0.3.0a1/tests/test_port.py +287 -0
- fastplotpy-0.3.0a1/tests/test_public_types.py +29 -0
- fastplotpy-0.3.0a1/tests/test_remaining_scene_compositions.py +100 -0
- fastplotpy-0.3.0a1/tests/test_remaining_top_fields.py +35 -0
- fastplotpy-0.3.0a1/tests/test_render_to_png_bytes.py +24 -0
- fastplotpy-0.3.0a1/tests/test_renderer_fields.py +30 -0
- fastplotpy-0.3.0a1/tests/test_rendering_adapters.py +66 -0
- fastplotpy-0.3.0a1/tests/test_review_corrections.py +313 -0
- fastplotpy-0.3.0a1/tests/test_scatter3d_encodings.py +27 -0
- fastplotpy-0.3.0a1/tests/test_scatter3d_lod.py +28 -0
- fastplotpy-0.3.0a1/tests/test_scene3d_accessibility.py +32 -0
- fastplotpy-0.3.0a1/tests/test_scene3d_line_colors.py +42 -0
- fastplotpy-0.3.0a1/tests/test_scene3d_line_style_inert.py +33 -0
- fastplotpy-0.3.0a1/tests/test_scene3d_renderer.py +42 -0
- fastplotpy-0.3.0a1/tests/test_scene3d_subplots.py +89 -0
- fastplotpy-0.3.0a1/tests/test_state_traces.py +92 -0
- fastplotpy-0.3.0a1/tests/test_subplots_contracts.py +62 -0
- fastplotpy-0.3.0a1/tests/test_surface_lod.py +152 -0
- fastplotpy-0.3.0a1/tests/test_wonder_log_subplots.py +27 -0
- fastplotpy-0.3.0a1/tests/test_wonder_multitrace.py +28 -0
- fastplotpy-0.3.0a1/tests/test_wonder_subplots.py +33 -0
- fastplotpy-0.3.0a1/tests/test_wonderplot_rust_contracts.py +29 -0
- fastplotpy-0.3.0a1/tools/validate_browser_3d_picking.py +100 -0
- fastplotpy-0.3.0a1/tools/validate_browser_before_render.py +65 -0
- fastplotpy-0.3.0a1/tools/validate_browser_chart_traces.py +68 -0
- fastplotpy-0.3.0a1/tools/validate_browser_crosshair_formatter.py +64 -0
- fastplotpy-0.3.0a1/tools/validate_browser_legend.py +72 -0
- fastplotpy-0.3.0a1/tools/validate_browser_progressive_reentry.py +71 -0
- fastplotpy-0.3.0a1/tools/validate_installed_package.py +107 -0
- fastplotpy-0.3.0a1/tools/validate_review_browser_roundtrip.py +207 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Agent Bootstrap
|
|
2
|
+
|
|
3
|
+
Start every new task by reading:
|
|
4
|
+
|
|
5
|
+
1. `docs/DOCS_INDEX.md`
|
|
6
|
+
2. `docs/PROJECT_STATUS.md`
|
|
7
|
+
|
|
8
|
+
`docs/PROJECT_STATUS.md` is the project status source of truth, including implementation state, roadmap, CI expectations, and recent changes.
|
|
9
|
+
|
|
10
|
+
## Default Regression Check
|
|
11
|
+
|
|
12
|
+
After code changes, run:
|
|
13
|
+
|
|
14
|
+
- `python -m unittest discover -s tests`
|
|
15
|
+
- `python -m build`
|
|
16
|
+
|
|
17
|
+
The tests exercise Python scenes, the optional pinned Rust binding, and source-derived contracts. Build a wheel and source distribution, then validate installation outside this checkout before a release claim. The source fastPlotJs Node/WASM gates do not validate the Python package.
|
|
18
|
+
|
|
19
|
+
## Role Routing
|
|
20
|
+
|
|
21
|
+
Use the narrowest role that matches the user's request. A task can move through more than one role, but do not widen scope beyond what the role requires.
|
|
22
|
+
|
|
23
|
+
These are reusable task functions, not permanent appointments. An agent may perform one only within a specific authorized task; its authority ends when that assignment is completed or revoked.
|
|
24
|
+
|
|
25
|
+
| Trigger | Role | Default behavior |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| Project resume, "continue", "what is next", or unclear chart-library requests | Project Orchestrator | Read `docs/DOCS_INDEX.md` and `docs/PROJECT_STATUS.md`, check git state, identify the next small slice, and route the work to the right specialist role. |
|
|
28
|
+
| Product direction, target users, use cases, requirements, priorities, roadmap, acceptance criteria, adoption hypotheses, compatibility/deprecation scope, or product status | Product Manager Agent | Read `docs/agents/PRODUCT_MANAGER.md`; frame task-scoped product recommendations, collaborate with qualified technical specialists, and escalate portfolio conflicts or cross-project tradeoffs through the task's authorized decision path. |
|
|
29
|
+
| Public API, SemVer, `createChart()`, option semantics, defaults, or release compatibility | API Steward | Protect public API stability, reconcile README examples with Python exports and API stability docs, and avoid breaking changes without an explicit versioning decision. |
|
|
30
|
+
| Rust scene generation, layout, downsampling, data processing, or performance-sensitive internals | Rust Core Agent | Keep core changes scoped, preserve Python/Rust contract behavior, and pair perf-sensitive work with targeted tests or benchmarks when risk warrants it. |
|
|
31
|
+
| Rust bindings, pinned browser frontend, Python wrappers, engine fallback, or packaging surfaces | Bindings Agent | Keep browser and Python behavior aligned, preserve strict `engine` semantics, and update bindings tests or smoke checks when public behavior changes. |
|
|
32
|
+
| Browser examples, interaction behavior, viewport controls, drag modes, legends, or visible chart behavior | Examples Agent | Keep examples runnable and representative, update example code with API changes, and verify browser behavior when UI interaction is the requested surface. |
|
|
33
|
+
| Performance guard, benchmark baselines, regression thresholds, or release-readiness perf questions | Performance Agent | Treat source benchmarks as upstream context until equivalent Python baselines exist, separate environment noise from real regressions, and do not update baselines without an explicit decision. |
|
|
34
|
+
| Project status, API stability docs, release notes, publish readiness, or documentation index updates | Docs/Release Agent | Update canonical Markdown, keep `docs/DOCS_INDEX.md` current for new docs, and block publish readiness claims until gates and docs agree. |
|
|
35
|
+
| Review-only requests | Reviewer | Stay read-only unless fixes are explicitly requested. Lead with bugs, regressions, API drift, missing tests, performance risk, and exact file references. |
|
|
36
|
+
|
|
37
|
+
## Documentation Rules
|
|
38
|
+
|
|
39
|
+
- `docs/DOCS_INDEX.md` tracks all project Markdown files outside `node_modules`.
|
|
40
|
+
- When adding a new Markdown file, update `docs/DOCS_INDEX.md` in the same change.
|
|
41
|
+
- Keep long-lived project context in `docs/PROJECT_STATUS.md`; do not create a separate handoff file unless the project status document becomes too large to maintain.
|
|
42
|
+
- Any feature that adds or changes user-visible UI behavior must include a runnable example under `examples/` in the same task slice.
|
|
43
|
+
|
|
44
|
+
## Branch Workflow
|
|
45
|
+
|
|
46
|
+
- Before implementation or documentation work, create or switch to a dedicated working branch instead of committing directly on `main`.
|
|
47
|
+
- Branch names must not use a `codex/` prefix.
|
|
48
|
+
- Use `feature/...` for new features.
|
|
49
|
+
- Use `bugfix/...` for bug fixes.
|
|
50
|
+
- Use `hotfix/...` for urgent hot fixes.
|
|
51
|
+
- Use `release/...` for release preparation or release-evidence work.
|
|
52
|
+
- Use `docs/...` when the task only adds or edits Markdown documentation.
|
|
53
|
+
- Choose a short, descriptive branch name that matches the task scope.
|
|
54
|
+
|
|
55
|
+
## Engineering Rules
|
|
56
|
+
|
|
57
|
+
- Keep the library consumer-agnostic. Public APIs, runtime code, tests, examples, and canonical documentation must model generic chart and data primitives rather than application-specific product domains; consumer semantics belong outside this repository.
|
|
58
|
+
- All configurable/default values in the Python layer must be centralized under `src/fastplotpy/defaults.py` and `src/fastplotpy/defaults_data`.
|
|
59
|
+
- Avoid introducing new inline visual/behavior defaults in runtime code (`renderers`, `core`), including alpha/width/size/font-style constants.
|
|
60
|
+
- When adding feature options, add or update the matching defaults file first, then consume those defaults from runtime code.
|
|
61
|
+
- Preserve user changes. Do not revert unrelated work.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Intellisys Software
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
recursive-include rust *.rs *.toml
|
|
2
|
+
recursive-include rust *.ttf
|
|
3
|
+
include rust/Cargo.lock
|
|
4
|
+
include AGENTS.md README.md LICENSE charting_library_spec_en.md
|
|
5
|
+
recursive-include docs *.md *.png
|
|
6
|
+
recursive-include bench *.md
|
|
7
|
+
recursive-include src/fastplotpy *.md *.txt
|
|
8
|
+
recursive-include examples *.ipynb
|
|
9
|
+
recursive-include examples/gallery *.py *.js *.css *.html *.json
|
|
10
|
+
recursive-include tests *.py *.json
|
|
11
|
+
recursive-include tools *.py
|
|
12
|
+
prune rust/target
|
|
13
|
+
prune build
|
|
14
|
+
prune dist
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fastplotpy
|
|
3
|
+
Version: 0.3.0a1
|
|
4
|
+
Summary: Python port of fastPlotJs chart scenes and interactive charts
|
|
5
|
+
Author: Intellisys Software
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Requires-Python: >=3.11
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Provides-Extra: notebook
|
|
11
|
+
Requires-Dist: ipython>=8; extra == "notebook"
|
|
12
|
+
Requires-Dist: ipywidgets>=8; extra == "notebook"
|
|
13
|
+
Provides-Extra: test
|
|
14
|
+
Requires-Dist: Pillow>=10; extra == "test"
|
|
15
|
+
Dynamic: license-file
|
|
16
|
+
|
|
17
|
+
# FastPlotPy
|
|
18
|
+
|
|
19
|
+
FastPlotPy is the Python port of FastPlotJs for renderer-neutral scene generation and browser/Jupyter charts. After its first PyPI publication, install with:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
python -m pip install fastplotpy
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
In Python or Jupyter:
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
from fastplotpy import createChart
|
|
29
|
+
|
|
30
|
+
chart = createChart({
|
|
31
|
+
"type": "line",
|
|
32
|
+
"width": 800,
|
|
33
|
+
"height": 400,
|
|
34
|
+
"engine": "auto",
|
|
35
|
+
"data": [{"x": 0, "y": 12}, {"x": 1, "y": 18}],
|
|
36
|
+
"axes": {"show": True},
|
|
37
|
+
})
|
|
38
|
+
chart # Jupyter displays the interactive browser view.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The local chart view uses the pinned FastPlotJs browser frontend for Canvas,
|
|
42
|
+
pointer, and WebGL behavior. Its loopback bridge binds to `127.0.0.1` for the
|
|
43
|
+
chart session. Python owns scene and state APIs; source frontend callbacks can
|
|
44
|
+
invoke Python formatters. Browser WebAssembly is separate from the optional
|
|
45
|
+
Python-host Rust core and is not initialized by `initWasmPlotEngine()` in CPython.
|
|
46
|
+
The source-named `hasNodePlotEngine()` and `initNodePlotEngine()` are Python
|
|
47
|
+
compatibility aliases for `hasRustPlotEngine()` and `initRustPlotEngine()`;
|
|
48
|
+
they do not start or require Node.js. `getRustPlotEngineStatus()` reports host
|
|
49
|
+
native capabilities. `getWasmPlotEngineStatus()` reports CPython availability,
|
|
50
|
+
not the state of the separate browser frontend.
|
|
51
|
+
|
|
52
|
+
Without a browser, `plot()` produces a renderer-neutral scene:
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from fastplotpy import plot
|
|
56
|
+
|
|
57
|
+
scene = plot({
|
|
58
|
+
"type": "line",
|
|
59
|
+
"width": 800,
|
|
60
|
+
"height": 400,
|
|
61
|
+
"engine": "ts", # Source spelling selects the Python fallback geometry.
|
|
62
|
+
"data": [{"x": 0, "y": 12}, {"x": 1, "y": 18}],
|
|
63
|
+
})
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Current Python geometry covers all eleven source chart families, including
|
|
67
|
+
source-documented 3D LOD, encodings, lighting, accessibility, and multiple
|
|
68
|
+
subplots. No chart calculation invokes Node.js at package runtime. Strict
|
|
69
|
+
`engine="rust"` uses the optional pinned Rust core
|
|
70
|
+
for supported 2D families and fails explicitly when unavailable. Pie3D reuses
|
|
71
|
+
`pie` datum and presentation options, accepts `pie3d.extrusionDepth` in
|
|
72
|
+
`(0, 1]`, and uses the shared `scene3d.camera`. The native 3D PNG path has
|
|
73
|
+
Windows validation only. `renderToPNG()` retains the source placeholder behavior.
|
|
74
|
+
|
|
75
|
+
The source project is [FastPlotJs](https://fastplotjs.com). The first Python
|
|
76
|
+
alpha candidate is `0.3.0a1`; check PyPI separately for publication status.
|
|
77
|
+
Python 3.11 or newer is required. Its Windows wheel includes Python code,
|
|
78
|
+
the pinned frontend,
|
|
79
|
+
the built Rust ABI library, and the MIT License. The source
|
|
80
|
+
distribution includes the pinned Rust sources and lockfile for optional
|
|
81
|
+
native builds. Bundled font attribution is in the packaged
|
|
82
|
+
`assets/native/THIRD_PARTY_NOTICES.md` file.
|
|
83
|
+
|
|
84
|
+
## Canvas quality
|
|
85
|
+
|
|
86
|
+
The pinned browser frontend accepts `canvas: { pixelRatio: "auto", resolutionScale: 2 }` through `createChart`. Omitted ratios default to `1`; logical sizes, text, and pointer coordinates remain unchanged while the backing bitmap scales. Experimental Pie3D also accepts `pie3d: { curveTolerance: 0.1 }` (default `1` logical pixel; smaller means more faces, within `scene3d.maxPoints`). Higher settings use more memory and rendering work. The source browser comparison remains in FastPlotJs. The Python source distribution includes the local Python-backed gallery under `examples/gallery/`; the installed wheel bundles the interactive frontend but does not install the standalone gallery server.
|