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.
Files changed (213) hide show
  1. murali_kit-0.1.0/.gitignore +10 -0
  2. murali_kit-0.1.0/PKG-INFO +116 -0
  3. murali_kit-0.1.0/README.md +94 -0
  4. murali_kit-0.1.0/RUNNING_EXAMPLES.md +113 -0
  5. murali_kit-0.1.0/docs/SPLIT_PLAN.md +73 -0
  6. murali_kit-0.1.0/examples/MIGRATION.md +82 -0
  7. murali_kit-0.1.0/examples/README.md +57 -0
  8. murali_kit-0.1.0/examples/_runner.py +26 -0
  9. murali_kit-0.1.0/examples/core_surfaces.py +89 -0
  10. murali_kit-0.1.0/examples/hello_shapes.py +34 -0
  11. murali_kit-0.1.0/examples/shapes_and_layout.py +86 -0
  12. murali_kit-0.1.0/examples/three_d_scene.py +80 -0
  13. murali_kit-0.1.0/examples/title_card.py +31 -0
  14. murali_kit-0.1.0/preview_all.py +73 -0
  15. murali_kit-0.1.0/pyproject.toml +34 -0
  16. murali_kit-0.1.0/requirements-git.txt +5 -0
  17. murali_kit-0.1.0/requirements-local.txt +5 -0
  18. murali_kit-0.1.0/rust-reference/MIGRATION_MANIFEST.md +65 -0
  19. murali_kit-0.1.0/rust-reference/README.md +32 -0
  20. murali_kit-0.1.0/rust-reference/examples/README.md +217 -0
  21. murali_kit-0.1.0/rust-reference/examples/chat_input_box.rs +128 -0
  22. murali_kit-0.1.0/rust-reference/examples/code_blocks.rs +171 -0
  23. murali_kit-0.1.0/rust-reference/examples/context_window.rs +92 -0
  24. murali_kit-0.1.0/rust-reference/examples/curves_3d.rs +175 -0
  25. murali_kit-0.1.0/rust-reference/examples/data/self_attention_trace.json +159 -0
  26. murali_kit-0.1.0/rust-reference/examples/equation_and_matrix_animation.rs +204 -0
  27. murali_kit-0.1.0/rust-reference/examples/force_fields.rs +199 -0
  28. murali_kit-0.1.0/rust-reference/examples/fourier_formula_trace.rs +504 -0
  29. murali_kit-0.1.0/rust-reference/examples/graphs_2d.rs +193 -0
  30. murali_kit-0.1.0/rust-reference/examples/hello_shapes.rs +133 -0
  31. murali_kit-0.1.0/rust-reference/examples/kavriq_opening.rs +102 -0
  32. murali_kit-0.1.0/rust-reference/examples/kv_cache.rs +91 -0
  33. murali_kit-0.1.0/rust-reference/examples/latex_and_typst.rs +174 -0
  34. murali_kit-0.1.0/rust-reference/examples/layout_and_groups.rs +297 -0
  35. murali_kit-0.1.0/rust-reference/examples/linear_algebra_basis_change.rs +91 -0
  36. murali_kit-0.1.0/rust-reference/examples/linear_algebra_column_combination.rs +71 -0
  37. murali_kit-0.1.0/rust-reference/examples/linear_algebra_composition.rs +81 -0
  38. murali_kit-0.1.0/rust-reference/examples/linear_algebra_determinant.rs +68 -0
  39. murali_kit-0.1.0/rust-reference/examples/linear_algebra_dot_product.rs +99 -0
  40. murali_kit-0.1.0/rust-reference/examples/linear_algebra_matrix_transform.rs +86 -0
  41. murali_kit-0.1.0/rust-reference/examples/linear_algebra_matrix_vector.rs +111 -0
  42. murali_kit-0.1.0/rust-reference/examples/linear_algebra_span.rs +87 -0
  43. murali_kit-0.1.0/rust-reference/examples/linear_algebra_transform_order_scene_view.rs +231 -0
  44. murali_kit-0.1.0/rust-reference/examples/linear_algebra_vectors.rs +89 -0
  45. murali_kit-0.1.0/rust-reference/examples/map_projection_morph.rs +347 -0
  46. murali_kit-0.1.0/rust-reference/examples/model_inspector.rs +419 -0
  47. murali_kit-0.1.0/rust-reference/examples/motion_basics.rs +193 -0
  48. murali_kit-0.1.0/rust-reference/examples/murali_logo.rs +396 -0
  49. murali_kit-0.1.0/rust-reference/examples/murali_logo_transparent.rs +350 -0
  50. murali_kit-0.1.0/rust-reference/examples/neural_networks.rs +172 -0
  51. murali_kit-0.1.0/rust-reference/examples/next_token_distribution.rs +104 -0
  52. murali_kit-0.1.0/rust-reference/examples/normalization.rs +92 -0
  53. murali_kit-0.1.0/rust-reference/examples/opening_scene_view.rs +294 -0
  54. murali_kit-0.1.0/rust-reference/examples/particles.rs +144 -0
  55. murali_kit-0.1.0/rust-reference/examples/portrait_video.rs +75 -0
  56. murali_kit-0.1.0/rust-reference/examples/prop3d_glb.rs +102 -0
  57. murali_kit-0.1.0/rust-reference/examples/prop3d_gltf.rs +102 -0
  58. murali_kit-0.1.0/rust-reference/examples/scene_view.rs +460 -0
  59. murali_kit-0.1.0/rust-reference/examples/self_attention_lesson.rs +293 -0
  60. murali_kit-0.1.0/rust-reference/examples/stepwise_storytelling.rs +133 -0
  61. murali_kit-0.1.0/rust-reference/examples/streamlines.rs +148 -0
  62. murali_kit-0.1.0/rust-reference/examples/style_and_paths.rs +256 -0
  63. murali_kit-0.1.0/rust-reference/examples/surfaces_3d.rs +188 -0
  64. murali_kit-0.1.0/rust-reference/examples/tables.rs +96 -0
  65. murali_kit-0.1.0/rust-reference/examples/tensor_operations.rs +227 -0
  66. murali_kit-0.1.0/rust-reference/examples/tensor_semantics.rs +158 -0
  67. murali_kit-0.1.0/rust-reference/examples/tensor_slicing.rs +136 -0
  68. murali_kit-0.1.0/rust-reference/examples/text_animation.rs +292 -0
  69. murali_kit-0.1.0/rust-reference/examples/textured_surface.rs +199 -0
  70. murali_kit-0.1.0/rust-reference/examples/traced_paths.rs +179 -0
  71. murali_kit-0.1.0/rust-reference/examples/transformer_attention.rs +248 -0
  72. murali_kit-0.1.0/rust-reference/examples/wireframe_surfaces.rs +165 -0
  73. murali_kit-0.1.0/rust-reference/frontend/collection/README.md +57 -0
  74. murali_kit-0.1.0/rust-reference/frontend/collection/ai/README.md +27 -0
  75. murali_kit-0.1.0/rust-reference/frontend/collection/ai/deep_learning/README.md +17 -0
  76. murali_kit-0.1.0/rust-reference/frontend/collection/ai/deep_learning/mod.rs +17 -0
  77. murali_kit-0.1.0/rust-reference/frontend/collection/ai/deep_learning/neural_network_diagram.rs +514 -0
  78. murali_kit-0.1.0/rust-reference/frontend/collection/ai/ml_components/README.md +16 -0
  79. murali_kit-0.1.0/rust-reference/frontend/collection/ai/ml_components/mod.rs +14 -0
  80. murali_kit-0.1.0/rust-reference/frontend/collection/ai/ml_components/signal_flow.rs +221 -0
  81. murali_kit-0.1.0/rust-reference/frontend/collection/ai/mod.rs +30 -0
  82. murali_kit-0.1.0/rust-reference/frontend/collection/ai/murali_ai_indicator.rs +417 -0
  83. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/README.md +18 -0
  84. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/README.md +300 -0
  85. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/animation.rs +285 -0
  86. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/chart.rs +739 -0
  87. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/edge.rs +41 -0
  88. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/layout.rs +175 -0
  89. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/mod.rs +27 -0
  90. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/model.rs +235 -0
  91. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/node.rs +139 -0
  92. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/renderer.rs +777 -0
  93. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/routing.rs +459 -0
  94. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/shapes.rs +157 -0
  95. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/agentic_flow_chart/types.rs +69 -0
  96. murali_kit-0.1.0/rust-reference/frontend/collection/ai/systems_agentic_ai/mod.rs +14 -0
  97. murali_kit-0.1.0/rust-reference/frontend/collection/ai/templates.rs +43 -0
  98. murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/README.md +20 -0
  99. murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/attention_matrix.rs +136 -0
  100. murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/context_window.rs +542 -0
  101. murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/kv_cache.rs +524 -0
  102. murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/mod.rs +28 -0
  103. murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/token_sequence.rs +279 -0
  104. murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/trace.rs +476 -0
  105. murali_kit-0.1.0/rust-reference/frontend/collection/ai/transformers_llms/transformer_block_diagram.rs +725 -0
  106. murali_kit-0.1.0/rust-reference/frontend/collection/common/README.md +20 -0
  107. murali_kit-0.1.0/rust-reference/frontend/collection/common/mod.rs +13 -0
  108. murali_kit-0.1.0/rust-reference/frontend/collection/common/tensor.rs +1366 -0
  109. murali_kit-0.1.0/rust-reference/frontend/collection/common/tensor_ops.rs +1553 -0
  110. murali_kit-0.1.0/rust-reference/frontend/collection/composite/axes.rs +132 -0
  111. murali_kit-0.1.0/rust-reference/frontend/collection/composite/axes3d.rs +189 -0
  112. murali_kit-0.1.0/rust-reference/frontend/collection/composite/beta/chat_input.rs +189 -0
  113. murali_kit-0.1.0/rust-reference/frontend/collection/composite/beta/mod.rs +7 -0
  114. murali_kit-0.1.0/rust-reference/frontend/collection/composite/beta/opening.rs +723 -0
  115. murali_kit-0.1.0/rust-reference/frontend/collection/composite/card.rs +89 -0
  116. murali_kit-0.1.0/rust-reference/frontend/collection/composite/logo.rs +425 -0
  117. murali_kit-0.1.0/rust-reference/frontend/collection/composite/mod.rs +12 -0
  118. murali_kit-0.1.0/rust-reference/frontend/collection/composite/number_plane.rs +100 -0
  119. murali_kit-0.1.0/rust-reference/frontend/collection/layout/group.rs +67 -0
  120. murali_kit-0.1.0/rust-reference/frontend/collection/layout/mod.rs +5 -0
  121. murali_kit-0.1.0/rust-reference/frontend/collection/layout/stack.rs +63 -0
  122. murali_kit-0.1.0/rust-reference/frontend/collection/maths/README.md +31 -0
  123. murali_kit-0.1.0/rust-reference/frontend/collection/maths/basic_math/README.md +16 -0
  124. murali_kit-0.1.0/rust-reference/frontend/collection/maths/basic_math/mod.rs +20 -0
  125. murali_kit-0.1.0/rust-reference/frontend/collection/maths/basic_math/number_line.rs +133 -0
  126. murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/README.md +17 -0
  127. murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/function_graph.rs +79 -0
  128. murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/mod.rs +19 -0
  129. murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/parametric_curve.rs +75 -0
  130. murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/parametric_curve3d.rs +82 -0
  131. murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/parametric_surface.rs +523 -0
  132. murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/stream_lines.rs +421 -0
  133. murali_kit-0.1.0/rust-reference/frontend/collection/maths/calculus/vector_field.rs +219 -0
  134. murali_kit-0.1.0/rust-reference/frontend/collection/maths/data_geometry/README.md +16 -0
  135. murali_kit-0.1.0/rust-reference/frontend/collection/maths/data_geometry/mod.rs +17 -0
  136. murali_kit-0.1.0/rust-reference/frontend/collection/maths/data_geometry/scatter_plot.rs +62 -0
  137. murali_kit-0.1.0/rust-reference/frontend/collection/maths/graph/README.md +7 -0
  138. murali_kit-0.1.0/rust-reference/frontend/collection/maths/graph/legend.rs +117 -0
  139. murali_kit-0.1.0/rust-reference/frontend/collection/maths/graph/mod.rs +5 -0
  140. murali_kit-0.1.0/rust-reference/frontend/collection/maths/information_theory/README.md +17 -0
  141. murali_kit-0.1.0/rust-reference/frontend/collection/maths/information_theory/entropy.rs +139 -0
  142. murali_kit-0.1.0/rust-reference/frontend/collection/maths/information_theory/mod.rs +16 -0
  143. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/README.md +32 -0
  144. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/angle.rs +217 -0
  145. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/badge.rs +175 -0
  146. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/basis.rs +366 -0
  147. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/composition.rs +510 -0
  148. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/coordinate.rs +143 -0
  149. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/meter.rs +134 -0
  150. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/mod.rs +248 -0
  151. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/projection.rs +108 -0
  152. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/transform.rs +778 -0
  153. murali_kit-0.1.0/rust-reference/frontend/collection/maths/linear_algebra/vector.rs +251 -0
  154. murali_kit-0.1.0/rust-reference/frontend/collection/maths/mod.rs +31 -0
  155. murali_kit-0.1.0/rust-reference/frontend/collection/maths/notation/README.md +15 -0
  156. murali_kit-0.1.0/rust-reference/frontend/collection/maths/notation/equation.rs +356 -0
  157. murali_kit-0.1.0/rust-reference/frontend/collection/maths/notation/matrix.rs +277 -0
  158. murali_kit-0.1.0/rust-reference/frontend/collection/maths/notation/mod.rs +8 -0
  159. murali_kit-0.1.0/rust-reference/frontend/collection/maths/optimization/README.md +18 -0
  160. murali_kit-0.1.0/rust-reference/frontend/collection/maths/optimization/mod.rs +14 -0
  161. murali_kit-0.1.0/rust-reference/frontend/collection/maths/optimization/path.rs +129 -0
  162. murali_kit-0.1.0/rust-reference/frontend/collection/maths/probability/README.md +15 -0
  163. murali_kit-0.1.0/rust-reference/frontend/collection/maths/probability/mod.rs +12 -0
  164. murali_kit-0.1.0/rust-reference/frontend/collection/maths/probability/next_token_distribution.rs +692 -0
  165. murali_kit-0.1.0/rust-reference/frontend/collection/maths/statistics/README.md +17 -0
  166. murali_kit-0.1.0/rust-reference/frontend/collection/maths/statistics/decision_boundary_plot.rs +266 -0
  167. murali_kit-0.1.0/rust-reference/frontend/collection/maths/statistics/mod.rs +14 -0
  168. murali_kit-0.1.0/rust-reference/frontend/collection/maths/statistics/normalization_view.rs +499 -0
  169. murali_kit-0.1.0/rust-reference/frontend/collection/mod.rs +26 -0
  170. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/arrow.rs +174 -0
  171. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/chat_bubble.rs +232 -0
  172. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/circle.rs +82 -0
  173. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/cube.rs +41 -0
  174. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/ellipse.rs +83 -0
  175. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/line.rs +82 -0
  176. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/mod.rs +33 -0
  177. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/noisy_circle.rs +330 -0
  178. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/noisy_horizon.rs +659 -0
  179. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/particle_belt.rs +243 -0
  180. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/path.rs +924 -0
  181. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/polygon.rs +88 -0
  182. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/prop3d.rs +424 -0
  183. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/rectangle.rs +74 -0
  184. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/rounded_rectangle.rs +118 -0
  185. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/square.rs +81 -0
  186. murali_kit-0.1.0/rust-reference/frontend/collection/primitives/to_path.rs +172 -0
  187. murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/mod.rs +3 -0
  188. murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/layout.rs +75 -0
  189. murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/mod.rs +19 -0
  190. murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/model.rs +99 -0
  191. murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/script.rs +333 -0
  192. murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/state.rs +21 -0
  193. murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/tattva.rs +868 -0
  194. murali_kit-0.1.0/rust-reference/frontend/collection/storytelling/stepwise/timeline.rs +80 -0
  195. murali_kit-0.1.0/rust-reference/frontend/collection/table/mod.rs +3 -0
  196. murali_kit-0.1.0/rust-reference/frontend/collection/table/table.rs +616 -0
  197. murali_kit-0.1.0/rust-reference/frontend/collection/text/code_block.rs +443 -0
  198. murali_kit-0.1.0/rust-reference/frontend/collection/text/label.rs +135 -0
  199. murali_kit-0.1.0/rust-reference/frontend/collection/text/latex.rs +117 -0
  200. murali_kit-0.1.0/rust-reference/frontend/collection/text/letter3d.rs +813 -0
  201. murali_kit-0.1.0/rust-reference/frontend/collection/text/mod.rs +11 -0
  202. murali_kit-0.1.0/rust-reference/frontend/collection/text/typst.rs +59 -0
  203. murali_kit-0.1.0/rust-reference/frontend/collection/utility/mod.rs +3 -0
  204. murali_kit-0.1.0/rust-reference/frontend/collection/utility/traced_path.rs +224 -0
  205. murali_kit-0.1.0/src/murali_kit/__init__.py +13 -0
  206. murali_kit-0.1.0/src/murali_kit/_compat.py +30 -0
  207. murali_kit-0.1.0/src/murali_kit/ai/__init__.py +3 -0
  208. murali_kit-0.1.0/src/murali_kit/collection/__init__.py +5 -0
  209. murali_kit-0.1.0/src/murali_kit/collection/title_card.py +72 -0
  210. murali_kit-0.1.0/src/murali_kit/maths/__init__.py +3 -0
  211. murali_kit-0.1.0/src/murali_kit/maths/linear_algebra/__init__.py +3 -0
  212. murali_kit-0.1.0/tests/test_scaffold.py +17 -0
  213. murali_kit-0.1.0/tests/test_title_card.py +28 -0
@@ -0,0 +1,10 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ .pytest_cache/
4
+ .mypy_cache/
5
+ .ruff_cache/
6
+ .venv/
7
+ dist/
8
+ build/
9
+ *.egg-info/
10
+ rendered_output/
@@ -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")