murali-kit 0.1.0__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.
- murali_kit-0.1.0/.gitignore +10 -0
- murali_kit-0.1.0/PKG-INFO +116 -0
- murali_kit-0.1.0/README.md +94 -0
- murali_kit-0.1.0/RUNNING_EXAMPLES.md +113 -0
- murali_kit-0.1.0/docs/SPLIT_PLAN.md +73 -0
- murali_kit-0.1.0/examples/MIGRATION.md +82 -0
- murali_kit-0.1.0/examples/README.md +57 -0
- murali_kit-0.1.0/examples/_runner.py +26 -0
- murali_kit-0.1.0/examples/core_surfaces.py +89 -0
- murali_kit-0.1.0/examples/hello_shapes.py +34 -0
- murali_kit-0.1.0/examples/shapes_and_layout.py +86 -0
- murali_kit-0.1.0/examples/three_d_scene.py +80 -0
- murali_kit-0.1.0/examples/title_card.py +31 -0
- murali_kit-0.1.0/preview_all.py +73 -0
- murali_kit-0.1.0/pyproject.toml +34 -0
- murali_kit-0.1.0/requirements-git.txt +5 -0
- murali_kit-0.1.0/requirements-local.txt +5 -0
- murali_kit-0.1.0/rust-reference/MIGRATION_MANIFEST.md +65 -0
- murali_kit-0.1.0/rust-reference/README.md +32 -0
- murali_kit-0.1.0/rust-reference/examples/README.md +217 -0
- murali_kit-0.1.0/rust-reference/examples/chat_input_box.rs +128 -0
- murali_kit-0.1.0/rust-reference/examples/code_blocks.rs +171 -0
- murali_kit-0.1.0/rust-reference/examples/context_window.rs +92 -0
- murali_kit-0.1.0/rust-reference/examples/curves_3d.rs +175 -0
- murali_kit-0.1.0/rust-reference/examples/data/self_attention_trace.json +159 -0
- murali_kit-0.1.0/rust-reference/examples/equation_and_matrix_animation.rs +204 -0
- murali_kit-0.1.0/rust-reference/examples/force_fields.rs +199 -0
- murali_kit-0.1.0/rust-reference/examples/fourier_formula_trace.rs +504 -0
- murali_kit-0.1.0/rust-reference/examples/graphs_2d.rs +193 -0
- murali_kit-0.1.0/rust-reference/examples/hello_shapes.rs +133 -0
- murali_kit-0.1.0/rust-reference/examples/kavriq_opening.rs +102 -0
- murali_kit-0.1.0/rust-reference/examples/kv_cache.rs +91 -0
- murali_kit-0.1.0/rust-reference/examples/latex_and_typst.rs +174 -0
- murali_kit-0.1.0/rust-reference/examples/layout_and_groups.rs +297 -0
- murali_kit-0.1.0/rust-reference/examples/linear_algebra_basis_change.rs +91 -0
- murali_kit-0.1.0/rust-reference/examples/linear_algebra_column_combination.rs +71 -0
- murali_kit-0.1.0/rust-reference/examples/linear_algebra_composition.rs +81 -0
- murali_kit-0.1.0/rust-reference/examples/linear_algebra_determinant.rs +68 -0
- murali_kit-0.1.0/rust-reference/examples/linear_algebra_dot_product.rs +99 -0
- murali_kit-0.1.0/rust-reference/examples/linear_algebra_matrix_transform.rs +86 -0
- murali_kit-0.1.0/rust-reference/examples/linear_algebra_matrix_vector.rs +111 -0
- murali_kit-0.1.0/rust-reference/examples/linear_algebra_span.rs +87 -0
- murali_kit-0.1.0/rust-reference/examples/linear_algebra_transform_order_scene_view.rs +231 -0
- murali_kit-0.1.0/rust-reference/examples/linear_algebra_vectors.rs +89 -0
- murali_kit-0.1.0/rust-reference/examples/map_projection_morph.rs +347 -0
- murali_kit-0.1.0/rust-reference/examples/model_inspector.rs +419 -0
- murali_kit-0.1.0/rust-reference/examples/motion_basics.rs +193 -0
- murali_kit-0.1.0/rust-reference/examples/murali_logo.rs +396 -0
- murali_kit-0.1.0/rust-reference/examples/murali_logo_transparent.rs +350 -0
- murali_kit-0.1.0/rust-reference/examples/neural_networks.rs +172 -0
- murali_kit-0.1.0/rust-reference/examples/next_token_distribution.rs +104 -0
- murali_kit-0.1.0/rust-reference/examples/normalization.rs +92 -0
- murali_kit-0.1.0/rust-reference/examples/opening_scene_view.rs +294 -0
- murali_kit-0.1.0/rust-reference/examples/particles.rs +144 -0
- murali_kit-0.1.0/rust-reference/examples/portrait_video.rs +75 -0
- murali_kit-0.1.0/rust-reference/examples/prop3d_glb.rs +102 -0
- murali_kit-0.1.0/rust-reference/examples/prop3d_gltf.rs +102 -0
- murali_kit-0.1.0/rust-reference/examples/scene_view.rs +460 -0
- murali_kit-0.1.0/rust-reference/examples/self_attention_lesson.rs +293 -0
- murali_kit-0.1.0/rust-reference/examples/stepwise_storytelling.rs +133 -0
- murali_kit-0.1.0/rust-reference/examples/streamlines.rs +148 -0
- murali_kit-0.1.0/rust-reference/examples/style_and_paths.rs +256 -0
- murali_kit-0.1.0/rust-reference/examples/surfaces_3d.rs +188 -0
- murali_kit-0.1.0/rust-reference/examples/tables.rs +96 -0
- murali_kit-0.1.0/rust-reference/examples/tensor_operations.rs +227 -0
- murali_kit-0.1.0/rust-reference/examples/tensor_semantics.rs +158 -0
- murali_kit-0.1.0/rust-reference/examples/tensor_slicing.rs +136 -0
- murali_kit-0.1.0/rust-reference/examples/text_animation.rs +292 -0
- murali_kit-0.1.0/rust-reference/examples/textured_surface.rs +199 -0
- murali_kit-0.1.0/rust-reference/examples/traced_paths.rs +179 -0
- murali_kit-0.1.0/rust-reference/examples/transformer_attention.rs +248 -0
- murali_kit-0.1.0/rust-reference/examples/wireframe_surfaces.rs +165 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/README.md +57 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/README.md +27 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/deep_learning/README.md +17 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/deep_learning/mod.rs +17 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/deep_learning/neural_network_diagram.rs +514 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/ml_components/README.md +16 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/ml_components/mod.rs +14 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/ml_components/signal_flow.rs +221 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/mod.rs +30 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/murali_ai_indicator.rs +417 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/README.md +18 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/README.md +300 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/animation.rs +285 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/chart.rs +739 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/edge.rs +41 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/layout.rs +175 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/mod.rs +27 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/model.rs +235 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/node.rs +139 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/renderer.rs +777 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/routing.rs +459 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/shapes.rs +157 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/types.rs +69 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/mod.rs +14 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/templates.rs +43 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/README.md +20 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/attention_matrix.rs +136 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/context_window.rs +542 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/kv_cache.rs +524 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/mod.rs +28 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/token_sequence.rs +279 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/trace.rs +476 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/transformer_block_diagram.rs +725 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/common/README.md +20 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/common/mod.rs +13 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/common/tensor.rs +1366 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/common/tensor_ops.rs +1553 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/composite/axes.rs +132 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/composite/axes3d.rs +189 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/composite/beta/chat_input.rs +189 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/composite/beta/mod.rs +7 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/composite/beta/opening.rs +723 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/composite/card.rs +89 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/composite/logo.rs +425 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/composite/mod.rs +12 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/composite/number_plane.rs +100 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/layout/group.rs +67 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/layout/mod.rs +5 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/layout/stack.rs +63 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/README.md +31 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/basic_math/README.md +16 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/basic_math/mod.rs +20 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/basic_math/number_line.rs +133 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/README.md +17 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/function_graph.rs +79 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/mod.rs +19 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/parametric_curve.rs +75 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/parametric_curve3d.rs +82 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/parametric_surface.rs +523 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/stream_lines.rs +421 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/vector_field.rs +219 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/data_geometry/README.md +16 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/data_geometry/mod.rs +17 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/data_geometry/scatter_plot.rs +62 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/graph/README.md +7 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/graph/legend.rs +117 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/graph/mod.rs +5 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/information_theory/README.md +17 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/information_theory/entropy.rs +139 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/information_theory/mod.rs +16 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/README.md +32 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/angle.rs +217 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/badge.rs +175 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/basis.rs +366 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/composition.rs +510 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/coordinate.rs +143 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/meter.rs +134 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/mod.rs +248 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/projection.rs +108 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/transform.rs +778 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/vector.rs +251 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/mod.rs +31 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/notation/README.md +15 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/notation/equation.rs +356 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/notation/matrix.rs +277 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/notation/mod.rs +8 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/optimization/README.md +18 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/optimization/mod.rs +14 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/optimization/path.rs +129 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/probability/README.md +15 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/probability/mod.rs +12 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/probability/next_token_distribution.rs +692 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/statistics/README.md +17 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/statistics/decision_boundary_plot.rs +266 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/statistics/mod.rs +14 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/maths/statistics/normalization_view.rs +499 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/mod.rs +26 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/arrow.rs +174 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/chat_bubble.rs +232 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/circle.rs +82 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/cube.rs +41 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/ellipse.rs +83 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/line.rs +82 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/mod.rs +33 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/noisy_circle.rs +330 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/noisy_horizon.rs +659 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/particle_belt.rs +243 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/path.rs +924 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/polygon.rs +88 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/prop3d.rs +424 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/rectangle.rs +74 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/rounded_rectangle.rs +118 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/square.rs +81 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/primitives/to_path.rs +172 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/mod.rs +3 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/layout.rs +75 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/mod.rs +19 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/model.rs +99 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/script.rs +333 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/state.rs +21 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/tattva.rs +868 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/timeline.rs +80 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/table/mod.rs +3 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/table/table.rs +616 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/text/code_block.rs +443 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/text/label.rs +135 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/text/latex.rs +117 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/text/letter3d.rs +813 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/text/mod.rs +11 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/text/typst.rs +59 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/utility/mod.rs +3 -0
- murali_kit-0.1.0/rust-reference/frontend/collection/utility/traced_path.rs +224 -0
- murali_kit-0.1.0/src/murali_kit/__init__.py +13 -0
- murali_kit-0.1.0/src/murali_kit/_compat.py +30 -0
- murali_kit-0.1.0/src/murali_kit/ai/__init__.py +3 -0
- murali_kit-0.1.0/src/murali_kit/collection/__init__.py +5 -0
- murali_kit-0.1.0/src/murali_kit/collection/title_card.py +72 -0
- murali_kit-0.1.0/src/murali_kit/maths/__init__.py +3 -0
- murali_kit-0.1.0/src/murali_kit/maths/linear_algebra/__init__.py +3 -0
- murali_kit-0.1.0/tests/test_scaffold.py +17 -0
- murali_kit-0.1.0/tests/test_title_card.py +28 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: murali-kit
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Free Python authoring kit and add-ons for Murali Engine.
|
|
5
|
+
Project-URL: Homepage, https://github.com/murali-engine/murali-kit
|
|
6
|
+
Project-URL: Repository, https://github.com/murali-engine/murali-kit
|
|
7
|
+
Project-URL: Engine, https://github.com/murali-engine/murali
|
|
8
|
+
Author: Murali Engine
|
|
9
|
+
License: MIT OR Apache-2.0
|
|
10
|
+
Keywords: ai,animation,education,math,visualization
|
|
11
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
12
|
+
Classifier: Intended Audience :: Education
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Topic :: Multimedia :: Graphics
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Requires-Dist: murali-engine<0.3.0,>=0.2.5
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# Murali Kit
|
|
24
|
+
|
|
25
|
+
Free Python authoring components and add-ons for Murali Engine.
|
|
26
|
+
|
|
27
|
+
This repository is the free companion package for higher-level Murali visuals, examples, and
|
|
28
|
+
education-focused helpers. The core runtime and PyO3 engine bindings live in the
|
|
29
|
+
[`murali-engine/murali`](https://github.com/murali-engine/murali) repository.
|
|
30
|
+
|
|
31
|
+
## Boundary
|
|
32
|
+
|
|
33
|
+
- `murali-engine`: Rust engine, renderer, scene graph, timelines, preview/export, and Python
|
|
34
|
+
bindings for the core runtime.
|
|
35
|
+
- `murali-kit`: Python add-ons built on top of `murali-engine`.
|
|
36
|
+
|
|
37
|
+
The current split is non-destructive. Existing Rust collection code remains in the engine repo until
|
|
38
|
+
each add-on surface has a Python equivalent and a stable engine contract.
|
|
39
|
+
|
|
40
|
+
See [docs/SPLIT_PLAN.md](docs/SPLIT_PLAN.md) for the migration plan.
|
|
41
|
+
|
|
42
|
+
## First Component
|
|
43
|
+
|
|
44
|
+
`murali-kit` now includes a small `TitleCard` composition:
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from murali_engine import Scene
|
|
48
|
+
from murali_kit.collection import TitleCard
|
|
49
|
+
|
|
50
|
+
scene = Scene()
|
|
51
|
+
handles = TitleCard("Murali Kit", "Python add-ons for Murali Engine").add_to_scene(scene)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`murali-kit` depends on the `murali-engine` Python package:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
python3 -m pip install murali-kit==0.1.0
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
During local development, create a virtual environment inside this repo and install the adjacent
|
|
61
|
+
engine checkout plus this kit package:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
python3 -m venv .venv
|
|
65
|
+
.venv/bin/python -m pip install -r requirements-local.txt
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Activate the environment:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
source .venv/bin/activate
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Run the examples:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
python examples/core_surfaces.py
|
|
78
|
+
python examples/hello_shapes.py
|
|
79
|
+
python examples/shapes_and_layout.py
|
|
80
|
+
python examples/three_d_scene.py
|
|
81
|
+
python examples/title_card.py
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
By default these open the preview window. To export a single PNG frame instead:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
python examples/core_surfaces.py --png
|
|
88
|
+
python examples/hello_shapes.py --png
|
|
89
|
+
python examples/shapes_and_layout.py --png
|
|
90
|
+
python examples/three_d_scene.py --png
|
|
91
|
+
python examples/title_card.py --png
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
To try every Python example one by one:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
python preview_all.py
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
For a non-window export pass:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
python preview_all.py --png
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
You can also run them without activation:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
.venv/bin/python examples/core_surfaces.py
|
|
110
|
+
.venv/bin/python examples/hello_shapes.py
|
|
111
|
+
.venv/bin/python examples/shapes_and_layout.py
|
|
112
|
+
.venv/bin/python examples/three_d_scene.py
|
|
113
|
+
.venv/bin/python examples/title_card.py
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
See [RUNNING_EXAMPLES.md](RUNNING_EXAMPLES.md) for the full local workflow.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Murali Kit
|
|
2
|
+
|
|
3
|
+
Free Python authoring components and add-ons for Murali Engine.
|
|
4
|
+
|
|
5
|
+
This repository is the free companion package for higher-level Murali visuals, examples, and
|
|
6
|
+
education-focused helpers. The core runtime and PyO3 engine bindings live in the
|
|
7
|
+
[`murali-engine/murali`](https://github.com/murali-engine/murali) repository.
|
|
8
|
+
|
|
9
|
+
## Boundary
|
|
10
|
+
|
|
11
|
+
- `murali-engine`: Rust engine, renderer, scene graph, timelines, preview/export, and Python
|
|
12
|
+
bindings for the core runtime.
|
|
13
|
+
- `murali-kit`: Python add-ons built on top of `murali-engine`.
|
|
14
|
+
|
|
15
|
+
The current split is non-destructive. Existing Rust collection code remains in the engine repo until
|
|
16
|
+
each add-on surface has a Python equivalent and a stable engine contract.
|
|
17
|
+
|
|
18
|
+
See [docs/SPLIT_PLAN.md](docs/SPLIT_PLAN.md) for the migration plan.
|
|
19
|
+
|
|
20
|
+
## First Component
|
|
21
|
+
|
|
22
|
+
`murali-kit` now includes a small `TitleCard` composition:
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
from murali_engine import Scene
|
|
26
|
+
from murali_kit.collection import TitleCard
|
|
27
|
+
|
|
28
|
+
scene = Scene()
|
|
29
|
+
handles = TitleCard("Murali Kit", "Python add-ons for Murali Engine").add_to_scene(scene)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`murali-kit` depends on the `murali-engine` Python package:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
python3 -m pip install murali-kit==0.1.0
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
During local development, create a virtual environment inside this repo and install the adjacent
|
|
39
|
+
engine checkout plus this kit package:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
python3 -m venv .venv
|
|
43
|
+
.venv/bin/python -m pip install -r requirements-local.txt
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Activate the environment:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
source .venv/bin/activate
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Run the examples:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
python examples/core_surfaces.py
|
|
56
|
+
python examples/hello_shapes.py
|
|
57
|
+
python examples/shapes_and_layout.py
|
|
58
|
+
python examples/three_d_scene.py
|
|
59
|
+
python examples/title_card.py
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
By default these open the preview window. To export a single PNG frame instead:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
python examples/core_surfaces.py --png
|
|
66
|
+
python examples/hello_shapes.py --png
|
|
67
|
+
python examples/shapes_and_layout.py --png
|
|
68
|
+
python examples/three_d_scene.py --png
|
|
69
|
+
python examples/title_card.py --png
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
To try every Python example one by one:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
python preview_all.py
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
For a non-window export pass:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
python preview_all.py --png
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
You can also run them without activation:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
.venv/bin/python examples/core_surfaces.py
|
|
88
|
+
.venv/bin/python examples/hello_shapes.py
|
|
89
|
+
.venv/bin/python examples/shapes_and_layout.py
|
|
90
|
+
.venv/bin/python examples/three_d_scene.py
|
|
91
|
+
.venv/bin/python examples/title_card.py
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
See [RUNNING_EXAMPLES.md](RUNNING_EXAMPLES.md) for the full local workflow.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Running Examples
|
|
2
|
+
|
|
3
|
+
## Rust Examples
|
|
4
|
+
|
|
5
|
+
Rust examples still run from the engine repo:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
cd ../murali
|
|
9
|
+
cargo run --example hello_shapes
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Experimental linear-algebra Rust examples need the feature enabled:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
cargo run --features experimental --example linear_algebra_vectors
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The helper scripts in the engine repo can preview or export tagged Rust example groups:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
./preview_all.sh --tag linear-algebra --auto
|
|
22
|
+
./export_all.sh --tag linear-algebra --release
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Python Examples
|
|
26
|
+
|
|
27
|
+
Python examples require the `murali-engine` Python package. For local development, create a virtual
|
|
28
|
+
environment in this kit repo and install both the adjacent engine checkout and this kit package:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
python3 -m venv .venv
|
|
32
|
+
.venv/bin/python -m pip install -r requirements-local.txt
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
To install `murali-engine` from GitHub instead of the adjacent checkout:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
.venv/bin/python -m pip install -r requirements-git.txt
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Then activate the environment and run examples from `murali-kit`:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
source .venv/bin/activate
|
|
45
|
+
python examples/core_surfaces.py
|
|
46
|
+
python examples/hello_shapes.py
|
|
47
|
+
python examples/shapes_and_layout.py
|
|
48
|
+
python examples/three_d_scene.py
|
|
49
|
+
python examples/title_card.py
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
By default these open the preview window. To export a single PNG frame instead:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
python examples/core_surfaces.py --png
|
|
56
|
+
python examples/hello_shapes.py --png
|
|
57
|
+
python examples/shapes_and_layout.py --png
|
|
58
|
+
python examples/three_d_scene.py --png
|
|
59
|
+
python examples/title_card.py --png
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Or run them without activation:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
.venv/bin/python examples/core_surfaces.py
|
|
66
|
+
.venv/bin/python examples/hello_shapes.py
|
|
67
|
+
.venv/bin/python examples/shapes_and_layout.py
|
|
68
|
+
.venv/bin/python examples/three_d_scene.py
|
|
69
|
+
.venv/bin/python examples/title_card.py
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Run every Python example one by one:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
python preview_all.py
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
For an export-only pass:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
python preview_all.py --png
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Useful filters:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
python preview_all.py --list
|
|
88
|
+
python preview_all.py --match title
|
|
89
|
+
python preview_all.py --png --continue-on-error
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Where To Write Examples
|
|
93
|
+
|
|
94
|
+
New Python examples should be written in:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
examples/
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Rust examples remain in:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
../murali/examples/
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The copied Rust examples are reference material only:
|
|
107
|
+
|
|
108
|
+
```text
|
|
109
|
+
rust-reference/examples/
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Those Rust examples do not run as Python yet. We will port them one by one into
|
|
113
|
+
`murali-kit/examples` as Python equivalents.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Murali Library Split Plan
|
|
2
|
+
|
|
3
|
+
Murali is splitting into a core engine repo and a free Python kit repo.
|
|
4
|
+
|
|
5
|
+
This pass is intentionally non-destructive: no Rust collection code is removed from the engine repo.
|
|
6
|
+
Rust components stay where they are until the PyO3 engine surface exists and each Python add-on has
|
|
7
|
+
real examples and compatibility checks.
|
|
8
|
+
|
|
9
|
+
## Repositories
|
|
10
|
+
|
|
11
|
+
### murali-engine/murali
|
|
12
|
+
|
|
13
|
+
Owns the core runtime:
|
|
14
|
+
|
|
15
|
+
- Rust scene graph and tattva lifecycle
|
|
16
|
+
- timeline, animation, easing, and playback
|
|
17
|
+
- renderer, preview, export, capture, and resources
|
|
18
|
+
- primitive geometry needed by most scenes
|
|
19
|
+
- PyO3 bindings for the core authoring surface
|
|
20
|
+
- stable contracts that add-ons can depend on
|
|
21
|
+
|
|
22
|
+
### murali-engine/murali-kit
|
|
23
|
+
|
|
24
|
+
Owns free Python add-ons:
|
|
25
|
+
|
|
26
|
+
- education-focused authoring helpers
|
|
27
|
+
- Python collection components
|
|
28
|
+
- AI visualization components
|
|
29
|
+
- maths and linear algebra helpers
|
|
30
|
+
- examples that exercise the public Python surface
|
|
31
|
+
|
|
32
|
+
## Package Names
|
|
33
|
+
|
|
34
|
+
- PyPI package for the engine: `murali-engine`
|
|
35
|
+
- Python import for the engine: `murali_engine`
|
|
36
|
+
- PyPI package for the free kit: `murali-kit`
|
|
37
|
+
- Python import for the free kit: `murali_kit`
|
|
38
|
+
|
|
39
|
+
## Initial Python Namespaces
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
murali_kit
|
|
43
|
+
collection
|
|
44
|
+
maths
|
|
45
|
+
linear_algebra
|
|
46
|
+
ai
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
More namespaces should be added only when they have at least one real component and one example.
|
|
50
|
+
|
|
51
|
+
## Migration Order
|
|
52
|
+
|
|
53
|
+
1. Keep Rust code in the engine repo.
|
|
54
|
+
2. Copy the current add-on-facing Rust sources into `murali-kit/rust-reference`.
|
|
55
|
+
3. Add PyO3 bindings for a small engine slice: scene, timeline, labels, shapes, preview, and export.
|
|
56
|
+
4. Add compatibility metadata to `murali-kit` against the engine package.
|
|
57
|
+
5. Translate one small component into Python and add one example. The first component is
|
|
58
|
+
`murali_kit.collection.TitleCard`.
|
|
59
|
+
6. Translate components incrementally, keeping visual examples close to each new public API.
|
|
60
|
+
7. Add contract checks once the first real engine API exists.
|
|
61
|
+
8. Only then decide whether any Rust collection code should move, remain as examples, or become
|
|
62
|
+
internal engine tests.
|
|
63
|
+
|
|
64
|
+
## Contract Strategy
|
|
65
|
+
|
|
66
|
+
The first contract should be programmatic but small:
|
|
67
|
+
|
|
68
|
+
- import availability checks for required engine symbols
|
|
69
|
+
- signature checks for constructors and methods used by kit components
|
|
70
|
+
- smoke examples that render or export through the installed engine package
|
|
71
|
+
- version bounds in package metadata
|
|
72
|
+
|
|
73
|
+
Documentation remains useful, but docs alone should not be treated as the compatibility contract.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Example Migration
|
|
2
|
+
|
|
3
|
+
The long-term goal is to port the Rust reference examples from `murali/examples` into Python
|
|
4
|
+
examples here when the `murali_engine` Python API exposes the needed surface.
|
|
5
|
+
|
|
6
|
+
## Current Python Examples
|
|
7
|
+
|
|
8
|
+
- `core_surfaces.py`
|
|
9
|
+
- `hello_shapes.py`
|
|
10
|
+
- `shapes_and_layout.py`
|
|
11
|
+
- `three_d_scene.py`
|
|
12
|
+
- `title_card.py`
|
|
13
|
+
|
|
14
|
+
## Porting Rule
|
|
15
|
+
|
|
16
|
+
- Keep Rust reference examples in `murali/examples`.
|
|
17
|
+
- Put runnable Python ports in `murali-kit/examples`.
|
|
18
|
+
- Keep `murali-kit/rust-reference/examples` as reference material only.
|
|
19
|
+
- Prefer 1:1 teaching intent over mechanical line-by-line translation when the Python API is more
|
|
20
|
+
ergonomic.
|
|
21
|
+
|
|
22
|
+
## Rust Examples To Port
|
|
23
|
+
|
|
24
|
+
The current Python API supports basic shapes, paths, labels, code blocks, LaTeX, Typst, axes,
|
|
25
|
+
number planes, tables, camera controls, 3D axes, named 3D curves, named parametric surfaces,
|
|
26
|
+
SceneView, prop asset loading, timelines, preview, and PNG export. Examples that need arbitrary
|
|
27
|
+
Python callbacks for curves/surfaces, advanced graph helpers, tensors, or AI composites need more
|
|
28
|
+
`murali_engine` bindings before they can be ported cleanly.
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
chat_input_box.rs
|
|
32
|
+
code_blocks.rs
|
|
33
|
+
context_window.rs
|
|
34
|
+
curves_3d.rs
|
|
35
|
+
equation_and_matrix_animation.rs
|
|
36
|
+
force_fields.rs
|
|
37
|
+
fourier_formula_trace.rs
|
|
38
|
+
graphs_2d.rs
|
|
39
|
+
hello_shapes.rs
|
|
40
|
+
kavriq_opening.rs
|
|
41
|
+
kv_cache.rs
|
|
42
|
+
latex_and_typst.rs
|
|
43
|
+
layout_and_groups.rs
|
|
44
|
+
linear_algebra_basis_change.rs
|
|
45
|
+
linear_algebra_column_combination.rs
|
|
46
|
+
linear_algebra_composition.rs
|
|
47
|
+
linear_algebra_determinant.rs
|
|
48
|
+
linear_algebra_dot_product.rs
|
|
49
|
+
linear_algebra_matrix_transform.rs
|
|
50
|
+
linear_algebra_matrix_vector.rs
|
|
51
|
+
linear_algebra_span.rs
|
|
52
|
+
linear_algebra_transform_order_scene_view.rs
|
|
53
|
+
linear_algebra_vectors.rs
|
|
54
|
+
map_projection_morph.rs
|
|
55
|
+
model_inspector.rs
|
|
56
|
+
motion_basics.rs
|
|
57
|
+
murali_logo.rs
|
|
58
|
+
murali_logo_transparent.rs
|
|
59
|
+
neural_networks.rs
|
|
60
|
+
next_token_distribution.rs
|
|
61
|
+
normalization.rs
|
|
62
|
+
opening_scene_view.rs
|
|
63
|
+
particles.rs
|
|
64
|
+
portrait_video.rs
|
|
65
|
+
prop3d_glb.rs
|
|
66
|
+
prop3d_gltf.rs
|
|
67
|
+
scene_view.rs
|
|
68
|
+
self_attention_lesson.rs
|
|
69
|
+
stepwise_storytelling.rs
|
|
70
|
+
streamlines.rs
|
|
71
|
+
style_and_paths.rs
|
|
72
|
+
surfaces_3d.rs
|
|
73
|
+
tables.rs
|
|
74
|
+
tensor_operations.rs
|
|
75
|
+
tensor_semantics.rs
|
|
76
|
+
tensor_slicing.rs
|
|
77
|
+
text_animation.rs
|
|
78
|
+
textured_surface.rs
|
|
79
|
+
traced_paths.rs
|
|
80
|
+
transformer_attention.rs
|
|
81
|
+
wireframe_surfaces.rs
|
|
82
|
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Examples
|
|
2
|
+
|
|
3
|
+
Examples use the `murali_engine` Python package and installed editable `murali_kit` source.
|
|
4
|
+
|
|
5
|
+
One-time local setup from this kit repo:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
python3 -m venv .venv
|
|
9
|
+
.venv/bin/python -m pip install -r requirements-local.txt
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
This installs `murali-engine` from the adjacent `../murali` checkout and installs `murali-kit`
|
|
13
|
+
editable. To install the engine from GitHub instead:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
.venv/bin/python -m pip install -r requirements-git.txt
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Run examples from this repo:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
source .venv/bin/activate
|
|
23
|
+
python examples/core_surfaces.py
|
|
24
|
+
python examples/hello_shapes.py
|
|
25
|
+
python examples/shapes_and_layout.py
|
|
26
|
+
python examples/three_d_scene.py
|
|
27
|
+
python examples/title_card.py
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
By default these open the preview window. To export a single PNG frame instead:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
python examples/core_surfaces.py --png
|
|
34
|
+
python examples/hello_shapes.py --png
|
|
35
|
+
python examples/shapes_and_layout.py --png
|
|
36
|
+
python examples/three_d_scene.py --png
|
|
37
|
+
python examples/title_card.py --png
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Or run without activation:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
.venv/bin/python examples/core_surfaces.py
|
|
44
|
+
.venv/bin/python examples/hello_shapes.py
|
|
45
|
+
.venv/bin/python examples/shapes_and_layout.py
|
|
46
|
+
.venv/bin/python examples/three_d_scene.py
|
|
47
|
+
.venv/bin/python examples/title_card.py
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Run every Python example one by one from the repo root:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
python preview_all.py
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Write new Python examples in this folder. The copied Rust examples in `rust-reference/examples`
|
|
57
|
+
are only migration references until we port them.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
from collections.abc import Callable
|
|
5
|
+
|
|
6
|
+
from murali_engine import Scene
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def run_example(build_scene: Callable[[], Scene], default_png: str) -> None:
|
|
10
|
+
parser = argparse.ArgumentParser()
|
|
11
|
+
parser.add_argument(
|
|
12
|
+
"--png",
|
|
13
|
+
action="store_true",
|
|
14
|
+
help="export one PNG frame instead of opening the preview window",
|
|
15
|
+
)
|
|
16
|
+
parser.add_argument("--output", default=default_png, help="PNG path for --png")
|
|
17
|
+
parser.add_argument("--width", type=int, default=960, help="PNG width for --png")
|
|
18
|
+
args = parser.parse_args()
|
|
19
|
+
|
|
20
|
+
scene = build_scene()
|
|
21
|
+
print(scene.tattva_count())
|
|
22
|
+
|
|
23
|
+
if args.png:
|
|
24
|
+
scene.save_png(args.output, width=args.width, fps=1, duration=0.0)
|
|
25
|
+
else:
|
|
26
|
+
scene.preview()
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
from murali_engine import (
|
|
2
|
+
BLUE_D,
|
|
3
|
+
GOLD_C,
|
|
4
|
+
GRAY_A,
|
|
5
|
+
GRAY_B,
|
|
6
|
+
GREEN_D,
|
|
7
|
+
TEAL_D,
|
|
8
|
+
WHITE,
|
|
9
|
+
Axes,
|
|
10
|
+
CodeBlock,
|
|
11
|
+
Label,
|
|
12
|
+
Latex,
|
|
13
|
+
NumberPlane,
|
|
14
|
+
Path,
|
|
15
|
+
Scene,
|
|
16
|
+
Table,
|
|
17
|
+
Timeline,
|
|
18
|
+
Typst,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
from _runner import run_example
|
|
23
|
+
except ModuleNotFoundError as exc:
|
|
24
|
+
if exc.name != "_runner":
|
|
25
|
+
raise
|
|
26
|
+
from examples._runner import run_example
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def build_scene() -> Scene:
|
|
30
|
+
scene = Scene(frame="landscape")
|
|
31
|
+
|
|
32
|
+
title = scene.add(Label("Core Surfaces", height=0.34, color=WHITE))
|
|
33
|
+
scene.to_edge(title, "up", margin=0.65)
|
|
34
|
+
|
|
35
|
+
subtitle = scene.add(
|
|
36
|
+
Label("Paths, code, math, axes, planes, and tables from Python", height=0.17, color=GRAY_B)
|
|
37
|
+
)
|
|
38
|
+
scene.next_to(subtitle, title, "down", padding=0.24)
|
|
39
|
+
|
|
40
|
+
curve = Path(color=GOLD_C, thickness=0.045)
|
|
41
|
+
curve.move_to((-2.2, -0.15))
|
|
42
|
+
curve.cubic_to((-1.4, 1.0), (-0.5, -1.0), (0.25, 0.15))
|
|
43
|
+
curve.cubic_to((0.75, 0.9), (1.45, -0.45), (2.1, 0.25))
|
|
44
|
+
curve_id = scene.add(curve, at=(-3.45, 0.2, 0.0))
|
|
45
|
+
|
|
46
|
+
plane = NumberPlane(x_range=(-2.2, 2.2), y_range=(-1.4, 1.4), step=0.7)
|
|
47
|
+
plane_id = scene.add(plane, at=(-3.45, 0.2, 0.0))
|
|
48
|
+
|
|
49
|
+
axes = Axes(x_range=(-2.2, 2.2), y_range=(-1.4, 1.4), color=GRAY_A)
|
|
50
|
+
axes.with_step(0.7)
|
|
51
|
+
axes.with_thickness(0.018)
|
|
52
|
+
axes_id = scene.add(axes, at=(-3.45, 0.2, 0.0))
|
|
53
|
+
|
|
54
|
+
code = CodeBlock(
|
|
55
|
+
"scene = Scene()\\npath = Path(color=GOLD_C)\\nscene.add(path)",
|
|
56
|
+
language="python",
|
|
57
|
+
font_size=0.16,
|
|
58
|
+
)
|
|
59
|
+
code.with_title("example.py")
|
|
60
|
+
code.with_surface("dark")
|
|
61
|
+
code_id = scene.add(code, at=(2.55, 1.0, 0.0))
|
|
62
|
+
|
|
63
|
+
latex_id = scene.add(Latex(r"\\nabla f(x, y)", height=0.28, color=GREEN_D), at=(2.55, -0.55, 0.0))
|
|
64
|
+
typst_id = scene.add(Typst("$A x = b$", height=0.26, color=TEAL_D), at=(2.55, -1.05, 0.0))
|
|
65
|
+
|
|
66
|
+
table = Table([["Surface", "Status"], ["Path", "bound"], ["Table", "bound"]])
|
|
67
|
+
table.with_title("Python API")
|
|
68
|
+
table.with_text_color(WHITE)
|
|
69
|
+
table.with_line_color(BLUE_D)
|
|
70
|
+
table.with_text_height(0.15)
|
|
71
|
+
table_id = scene.add(table, at=(2.55, -2.35, 0.0))
|
|
72
|
+
|
|
73
|
+
timeline = Timeline()
|
|
74
|
+
timeline.animate(title).at(0.0).for_duration(0.6).typewrite_text().spawn()
|
|
75
|
+
timeline.animate(subtitle).at(0.25).for_duration(0.8).reveal_text().spawn()
|
|
76
|
+
timeline.animate(plane_id).at(0.8).for_duration(0.45).appear().spawn()
|
|
77
|
+
timeline.animate(axes_id).at(1.05).for_duration(0.55).draw().spawn()
|
|
78
|
+
timeline.animate(curve_id).at(1.45).for_duration(0.85).draw().spawn()
|
|
79
|
+
timeline.animate(code_id).at(1.8).for_duration(0.75).reveal_text().spawn()
|
|
80
|
+
timeline.animate(latex_id).at(2.35).for_duration(0.55).reveal_text().spawn()
|
|
81
|
+
timeline.animate(typst_id).at(2.65).for_duration(0.55).reveal_text().spawn()
|
|
82
|
+
timeline.animate(table_id).at(3.0).for_duration(0.8).write_table().spawn()
|
|
83
|
+
scene.play(timeline)
|
|
84
|
+
|
|
85
|
+
return scene
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
if __name__ == "__main__":
|
|
89
|
+
run_example(build_scene, "rendered_output/core_surfaces.png")
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from murali_engine import BLUE, GREEN, WHITE, Circle, Label, Rectangle, Scene, Square, Timeline
|
|
2
|
+
|
|
3
|
+
try:
|
|
4
|
+
from _runner import run_example
|
|
5
|
+
except ModuleNotFoundError as exc:
|
|
6
|
+
if exc.name != "_runner":
|
|
7
|
+
raise
|
|
8
|
+
from examples._runner import run_example
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def build_scene() -> Scene:
|
|
12
|
+
scene = Scene()
|
|
13
|
+
|
|
14
|
+
title = scene.add(Label("Hello from Murali Kit", height=0.3, color=WHITE), at=(0.0, 1.0, 0.0))
|
|
15
|
+
|
|
16
|
+
circle = Circle(radius=0.5, color=GREEN, segments=32)
|
|
17
|
+
circle.with_stroke(0.03, WHITE)
|
|
18
|
+
moving_circle = scene.add(circle, at=(-1.0, 0.0, 0.0))
|
|
19
|
+
|
|
20
|
+
scene.add(Square(size=0.6, color=BLUE), at=(1.0, 0.0, 0.0))
|
|
21
|
+
scene.add(Rectangle(width=1.2, height=0.4, color=WHITE), at=(0.0, -1.0, 0.0))
|
|
22
|
+
|
|
23
|
+
timeline = Timeline()
|
|
24
|
+
timeline.animate(title).at(0.0).for_duration(0.4).typewrite_text().spawn()
|
|
25
|
+
timeline.animate(moving_circle).at(0.2).for_duration(0.8).ease("out_cubic").move_to(
|
|
26
|
+
(0.0, -0.2, 0.0)
|
|
27
|
+
).spawn()
|
|
28
|
+
scene.play(timeline)
|
|
29
|
+
|
|
30
|
+
return scene
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
run_example(build_scene, "rendered_output/hello_shapes.png")
|