animora 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 (169) hide show
  1. animora-0.1.0/.github/workflows/ci.yml +81 -0
  2. animora-0.1.0/.github/workflows/docs-deploy.yml +30 -0
  3. animora-0.1.0/.github/workflows/publish.yml +35 -0
  4. animora-0.1.0/.gitignore +51 -0
  5. animora-0.1.0/CHANGELOG.md +60 -0
  6. animora-0.1.0/CODE_OF_CONDUCT.md +54 -0
  7. animora-0.1.0/CONTRIBUTING.md +79 -0
  8. animora-0.1.0/LICENSE +21 -0
  9. animora-0.1.0/PKG-INFO +326 -0
  10. animora-0.1.0/README.md +283 -0
  11. animora-0.1.0/benchmarks/harness.py +122 -0
  12. animora-0.1.0/benchmarks/scenarios/stress_scenes.py +46 -0
  13. animora-0.1.0/docs/algorithms/overview.md +74 -0
  14. animora-0.1.0/docs/architecture/00-overview.md +133 -0
  15. animora-0.1.0/docs/architecture/api-philosophy.md +110 -0
  16. animora-0.1.0/docs/architecture/core-abstractions.md +121 -0
  17. animora-0.1.0/docs/architecture/dependency-policy.md +36 -0
  18. animora-0.1.0/docs/architecture/module-boundaries.md +90 -0
  19. animora-0.1.0/docs/architecture/versioning-strategy.md +60 -0
  20. animora-0.1.0/docs/cli/overview.md +74 -0
  21. animora-0.1.0/docs/components/layout.md +68 -0
  22. animora-0.1.0/docs/components/primitives.md +66 -0
  23. animora-0.1.0/docs/datastructures/overview.md +75 -0
  24. animora-0.1.0/docs/dataviz/overview.md +71 -0
  25. animora-0.1.0/docs/examples/gallery.md +33 -0
  26. animora-0.1.0/docs/getting-started/first-scene.md +65 -0
  27. animora-0.1.0/docs/getting-started/installation.md +45 -0
  28. animora-0.1.0/docs/guides/algorithms.md +37 -0
  29. animora-0.1.0/docs/guides/cli.md +35 -0
  30. animora-0.1.0/docs/guides/components.md +60 -0
  31. animora-0.1.0/docs/guides/datastructures.md +37 -0
  32. animora-0.1.0/docs/guides/dataviz.md +33 -0
  33. animora-0.1.0/docs/guides/layout.md +37 -0
  34. animora-0.1.0/docs/guides/theming.md +48 -0
  35. animora-0.1.0/docs/index.md +50 -0
  36. animora-0.1.0/docs/migration.md +16 -0
  37. animora-0.1.0/docs/performance/profiling-report.md +46 -0
  38. animora-0.1.0/docs/recipes/custom-layout.md +37 -0
  39. animora-0.1.0/docs/recipes/escape-hatch.md +29 -0
  40. animora-0.1.0/docs/recipes/theme-switching.md +31 -0
  41. animora-0.1.0/docs/reference/api.md +98 -0
  42. animora-0.1.0/docs/stability.md +18 -0
  43. animora-0.1.0/docs/theming/overview.md +83 -0
  44. animora-0.1.0/docs/troubleshooting.md +34 -0
  45. animora-0.1.0/examples/01_basics_and_shapes.py +43 -0
  46. animora-0.1.0/examples/02_layout_and_grouping.py +36 -0
  47. animora-0.1.0/examples/03_themes_and_styling.py +36 -0
  48. animora-0.1.0/examples/04_dataviz_charts.py +31 -0
  49. animora-0.1.0/examples/05_datastructures_bst.py +34 -0
  50. animora-0.1.0/examples/06_algorithms_sorting.py +33 -0
  51. animora-0.1.0/examples/07_pathfinding_dijkstra.py +36 -0
  52. animora-0.1.0/mkdocs.yml +79 -0
  53. animora-0.1.0/pyproject.toml +121 -0
  54. animora-0.1.0/src/animora/__init__.py +189 -0
  55. animora-0.1.0/src/animora/algorithms/__init__.py +65 -0
  56. animora-0.1.0/src/animora/algorithms/backtracking.py +124 -0
  57. animora-0.1.0/src/animora/algorithms/dynamic_programming.py +81 -0
  58. animora-0.1.0/src/animora/algorithms/graph_traversal.py +125 -0
  59. animora-0.1.0/src/animora/algorithms/pathfinding.py +244 -0
  60. animora-0.1.0/src/animora/algorithms/search.py +97 -0
  61. animora-0.1.0/src/animora/algorithms/sorting.py +336 -0
  62. animora-0.1.0/src/animora/algorithms/trace.py +82 -0
  63. animora-0.1.0/src/animora/animations/__init__.py +10 -0
  64. animora-0.1.0/src/animora/cli/__init__.py +21 -0
  65. animora-0.1.0/src/animora/cli/doctor.py +154 -0
  66. animora-0.1.0/src/animora/cli/main.py +59 -0
  67. animora-0.1.0/src/animora/cli/new.py +84 -0
  68. animora-0.1.0/src/animora/cli/preview.py +83 -0
  69. animora-0.1.0/src/animora/cli/render.py +97 -0
  70. animora-0.1.0/src/animora/cli/templates/basic_scene.py.template +27 -0
  71. animora-0.1.0/src/animora/components/__init__.py +27 -0
  72. animora-0.1.0/src/animora/components/arrow.py +111 -0
  73. animora-0.1.0/src/animora/components/connector.py +116 -0
  74. animora-0.1.0/src/animora/components/dataviz/__init__.py +23 -0
  75. animora-0.1.0/src/animora/components/dsa/__init__.py +38 -0
  76. animora-0.1.0/src/animora/components/group.py +121 -0
  77. animora-0.1.0/src/animora/components/label.py +100 -0
  78. animora-0.1.0/src/animora/components/panel.py +131 -0
  79. animora-0.1.0/src/animora/components/primitives/__init__.py +23 -0
  80. animora-0.1.0/src/animora/components/shape.py +243 -0
  81. animora-0.1.0/src/animora/components/text.py +104 -0
  82. animora-0.1.0/src/animora/core/__init__.py +23 -0
  83. animora-0.1.0/src/animora/core/animation.py +74 -0
  84. animora-0.1.0/src/animora/core/component.py +181 -0
  85. animora-0.1.0/src/animora/core/config.py +110 -0
  86. animora-0.1.0/src/animora/core/scene.py +80 -0
  87. animora-0.1.0/src/animora/datastructures/__init__.py +42 -0
  88. animora-0.1.0/src/animora/datastructures/array.py +226 -0
  89. animora-0.1.0/src/animora/datastructures/bst.py +339 -0
  90. animora-0.1.0/src/animora/datastructures/graph.py +275 -0
  91. animora-0.1.0/src/animora/datastructures/hash_table.py +242 -0
  92. animora-0.1.0/src/animora/datastructures/heap.py +198 -0
  93. animora-0.1.0/src/animora/datastructures/linked_list.py +245 -0
  94. animora-0.1.0/src/animora/datastructures/queue.py +193 -0
  95. animora-0.1.0/src/animora/datastructures/stack.py +193 -0
  96. animora-0.1.0/src/animora/datastructures/tree.py +216 -0
  97. animora-0.1.0/src/animora/dataviz/__init__.py +23 -0
  98. animora-0.1.0/src/animora/dataviz/axes.py +146 -0
  99. animora-0.1.0/src/animora/dataviz/bar_chart.py +179 -0
  100. animora-0.1.0/src/animora/dataviz/histogram.py +156 -0
  101. animora-0.1.0/src/animora/dataviz/line_chart.py +137 -0
  102. animora-0.1.0/src/animora/dataviz/scatter_plot.py +130 -0
  103. animora-0.1.0/src/animora/dataviz/table.py +170 -0
  104. animora-0.1.0/src/animora/layout/__init__.py +30 -0
  105. animora-0.1.0/src/animora/layout/base.py +63 -0
  106. animora-0.1.0/src/animora/layout/circular.py +87 -0
  107. animora-0.1.0/src/animora/layout/flow.py +105 -0
  108. animora-0.1.0/src/animora/layout/graph.py +100 -0
  109. animora-0.1.0/src/animora/layout/grid.py +90 -0
  110. animora-0.1.0/src/animora/layout/horizontal.py +72 -0
  111. animora-0.1.0/src/animora/layout/tree.py +179 -0
  112. animora-0.1.0/src/animora/layout/vertical.py +72 -0
  113. animora-0.1.0/src/animora/py.typed +1 -0
  114. animora-0.1.0/src/animora/theme/__init__.py +48 -0
  115. animora-0.1.0/src/animora/theme/builtin.py +156 -0
  116. animora-0.1.0/src/animora/theme/context.py +51 -0
  117. animora-0.1.0/src/animora/theme/theme.py +148 -0
  118. animora-0.1.0/tests/algorithms/test_algorithms_correctness.py +98 -0
  119. animora-0.1.0/tests/algorithms/test_algorithms_trace.py +75 -0
  120. animora-0.1.0/tests/cli/test_doctor.py +30 -0
  121. animora-0.1.0/tests/cli/test_new.py +48 -0
  122. animora-0.1.0/tests/cli/test_preview.py +21 -0
  123. animora-0.1.0/tests/cli/test_render.py +18 -0
  124. animora-0.1.0/tests/components/test_arrow.py +34 -0
  125. animora-0.1.0/tests/components/test_connector.py +47 -0
  126. animora-0.1.0/tests/components/test_group.py +49 -0
  127. animora-0.1.0/tests/components/test_label.py +46 -0
  128. animora-0.1.0/tests/components/test_panel.py +28 -0
  129. animora-0.1.0/tests/components/test_shape.py +48 -0
  130. animora-0.1.0/tests/components/test_text.py +43 -0
  131. animora-0.1.0/tests/core/test_animation.py +33 -0
  132. animora-0.1.0/tests/core/test_component.py +89 -0
  133. animora-0.1.0/tests/core/test_config.py +34 -0
  134. animora-0.1.0/tests/core/test_scene.py +56 -0
  135. animora-0.1.0/tests/datastructures/test_array_model.py +28 -0
  136. animora-0.1.0/tests/datastructures/test_bst_model.py +70 -0
  137. animora-0.1.0/tests/datastructures/test_graph_model.py +32 -0
  138. animora-0.1.0/tests/datastructures/test_hash_table_model.py +36 -0
  139. animora-0.1.0/tests/datastructures/test_heap_model.py +24 -0
  140. animora-0.1.0/tests/datastructures/test_linked_list_model.py +28 -0
  141. animora-0.1.0/tests/datastructures/test_queue_model.py +28 -0
  142. animora-0.1.0/tests/datastructures/test_stack_model.py +30 -0
  143. animora-0.1.0/tests/datastructures/test_tree_model.py +17 -0
  144. animora-0.1.0/tests/dataviz/test_axes.py +41 -0
  145. animora-0.1.0/tests/dataviz/test_bar_chart.py +29 -0
  146. animora-0.1.0/tests/dataviz/test_histogram.py +32 -0
  147. animora-0.1.0/tests/dataviz/test_line_chart.py +20 -0
  148. animora-0.1.0/tests/dataviz/test_scatter_plot.py +23 -0
  149. animora-0.1.0/tests/dataviz/test_table.py +36 -0
  150. animora-0.1.0/tests/docs/test_examples_run.py +77 -0
  151. animora-0.1.0/tests/integration/test_algorithms_renders.py +70 -0
  152. animora-0.1.0/tests/integration/test_datastructures_visual.py +74 -0
  153. animora-0.1.0/tests/integration/test_dataviz_renders.py +50 -0
  154. animora-0.1.0/tests/integration/test_group_layout_integration.py +71 -0
  155. animora-0.1.0/tests/integration/test_label_renders.py +34 -0
  156. animora-0.1.0/tests/integration/test_primitives_render.py +38 -0
  157. animora-0.1.0/tests/integration/test_themed_rendering.py +45 -0
  158. animora-0.1.0/tests/layout/test_base.py +29 -0
  159. animora-0.1.0/tests/layout/test_circular.py +36 -0
  160. animora-0.1.0/tests/layout/test_flow.py +30 -0
  161. animora-0.1.0/tests/layout/test_graph.py +59 -0
  162. animora-0.1.0/tests/layout/test_grid.py +50 -0
  163. animora-0.1.0/tests/layout/test_horizontal.py +50 -0
  164. animora-0.1.0/tests/layout/test_tree.py +62 -0
  165. animora-0.1.0/tests/layout/test_vertical.py +50 -0
  166. animora-0.1.0/tests/test_package_imports.py +36 -0
  167. animora-0.1.0/tests/theme/test_builtin_themes.py +31 -0
  168. animora-0.1.0/tests/theme/test_theme.py +42 -0
  169. animora-0.1.0/tests/theme/test_theme_context.py +48 -0
@@ -0,0 +1,81 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+ pull_request:
7
+ branches: [ "main" ]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ lint-and-typecheck:
15
+ name: Lint & Type Check (Python 3.10)
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - name: Checkout repository
19
+ uses: actions/checkout@v4
20
+
21
+ - name: Install system dependencies (Linux)
22
+ run: |
23
+ sudo apt-get update
24
+ sudo apt-get install -y ffmpeg libcairo2-dev libpango1.0-dev pkg-config
25
+
26
+ - name: Set up Python 3.10
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: "3.10"
30
+ cache: "pip"
31
+
32
+ - name: Install dependencies
33
+ run: |
34
+ python -m pip install --upgrade pip
35
+ pip install -e ".[dev]"
36
+
37
+ - name: Run Ruff Linting
38
+ run: ruff check .
39
+
40
+ - name: Run Ruff Format Check
41
+ run: ruff format --check .
42
+
43
+ - name: Run MyPy Type Check
44
+ run: mypy src/ tests/
45
+
46
+ test-matrix:
47
+ name: Test (Python ${{ matrix.python-version }} on ${{ matrix.os }})
48
+ runs-on: ${{ matrix.os }}
49
+ strategy:
50
+ fail-fast: false
51
+ matrix:
52
+ os: [ubuntu-latest, macos-latest, windows-latest]
53
+ python-version: ["3.10", "3.11", "3.12"]
54
+ steps:
55
+ - name: Checkout repository
56
+ uses: actions/checkout@v4
57
+
58
+ - name: Install system dependencies (Linux)
59
+ if: runner.os == 'Linux'
60
+ run: |
61
+ sudo apt-get update
62
+ sudo apt-get install -y ffmpeg libcairo2-dev libpango1.0-dev pkg-config
63
+
64
+ - name: Install system dependencies (macOS)
65
+ if: runner.os == 'macOS'
66
+ run: |
67
+ brew install ffmpeg cairo pango pkg-config
68
+
69
+ - name: Set up Python ${{ matrix.python-version }}
70
+ uses: actions/setup-python@v5
71
+ with:
72
+ python-version: ${{ matrix.python-version }}
73
+ cache: "pip"
74
+
75
+ - name: Install dependencies
76
+ run: |
77
+ python -m pip install --upgrade pip
78
+ pip install -e ".[dev]"
79
+
80
+ - name: Run pytest
81
+ run: pytest
@@ -0,0 +1,30 @@
1
+ name: Deploy Documentation
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: write
11
+
12
+ jobs:
13
+ deploy:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - name: Checkout repository
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.11"
23
+
24
+ - name: Install documentation dependencies
25
+ run: |
26
+ python -m pip install --upgrade pip
27
+ pip install mkdocs-material
28
+
29
+ - name: Deploy MkDocs to GitHub Pages
30
+ run: mkdocs gh-deploy --force
@@ -0,0 +1,35 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ pypi-publish:
10
+ name: Build and publish Python ๐Ÿ distribution ๐Ÿ“ฆ to PyPI
11
+ runs-on: ubuntu-latest
12
+ permissions:
13
+ id-token: write
14
+
15
+ steps:
16
+ - name: Checkout repository
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.11"
23
+
24
+ - name: Install build dependencies
25
+ run: |
26
+ python -m pip install --upgrade pip
27
+ pip install build
28
+
29
+ - name: Build binary wheel and source tarball
30
+ run: python -m build
31
+
32
+ - name: Publish package distributions to PyPI
33
+ uses: pypa/gh-action-pypi-publish@release/v1
34
+ with:
35
+ skip-existing: true
@@ -0,0 +1,51 @@
1
+ # Animora Prompts (Internal)
2
+ animora-prompts/
3
+
4
+ # Python
5
+ __pycache__/
6
+ *.py[cod]
7
+ *$py.class
8
+ *.so
9
+ .Python
10
+ env/
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+
29
+ # Virtual Environments
30
+ .venv/
31
+ venv/
32
+ ENV/
33
+ env.bak/
34
+ venv.bak/
35
+
36
+ # Testing & Quality Tooling
37
+ .pytest_cache/
38
+ .mypy_cache/
39
+ .ruff_cache/
40
+ .coverage
41
+ htmlcov/
42
+
43
+ # IDE / Editor
44
+ .vscode/
45
+ .idea/
46
+ *.swp
47
+ *.swo
48
+
49
+ # OS
50
+ .DS_Store
51
+ Thumbs.db
@@ -0,0 +1,60 @@
1
+ # Changelog
2
+
3
+ All notable changes to the **Animora** project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [0.1.0] - 2026-08-26
11
+
12
+ ### Added
13
+ - **Core Architecture & Abstractions**:
14
+ - `Component` base class encapsulating visual state, geometric bounds, positioning fluent API, and the `.manim_object` escape hatch.
15
+ - `Scene` high-level declarative wrapper around Manim's Scene supporting polymorphic `.play()`.
16
+ - `Animation` polymorphic bridge wrapping Manim animations.
17
+ - `ComponentConfig` and `BoundingBox` geometry contracts.
18
+ - **Visual Primitives (`animora.components`)**:
19
+ - `Text`: Typography component with font styling and text transformation animations (`animate_transform_text`).
20
+ - `Shape`: Versatile geometric primitive (`circle`, `rectangle`, `rounded_rectangle`, `polygon`).
21
+ - `Connector` & `Arrow`: Straight/curved connectors and directional arrows.
22
+ - `Group`: Composite multi-element container with `arrange(layout)`.
23
+ - `Panel`: Padded container card with header titles.
24
+ - `Label`: Text label primitive.
25
+ - **Decoupled Layout Engines (`animora.layout`)**:
26
+ - `HorizontalLayout`, `VerticalLayout`, `GridLayout`, `CircularLayout`, `TreeLayout`, `GraphLayout` (NetworkX-powered), and `FlowLayout`.
27
+ - **Design Tokens & Theme System (`animora.theme`)**:
28
+ - `ColorPalette`, `Typography`, `SpacingScale`, `StrokeScale`, `CornerRadius`, `AnimationTiming`.
29
+ - Built-in Themes: `ModernDark` (default), `PaperLight`, `Cyberpunk`, and `Monokai`.
30
+ - `use_theme()` context manager for block-level theme scoping.
31
+ - **Data Visualization (`animora.dataviz`)**:
32
+ - `Axes`: 2D coordinate system with `c2p()` and `p2c()` mapping.
33
+ - `BarChart`: Proportional bar height scaling with `animate_grow()` and `animate_highlight_bar()`.
34
+ - `LineChart`: Progressive path drawing with `animate_draw()`.
35
+ - `ScatterPlot`: 2D point cloud with `animate_plot()`.
36
+ - `Histogram`: Statistical frequency distribution verified against `numpy.histogram`.
37
+ - `Table`: Tabular matrix visualizer with `animate_highlight_cell()`.
38
+ - **Computer Science Data Structures (`animora.datastructures`)**:
39
+ - Independent pure Python models (`XModel`) paired with animation layers (`X`).
40
+ - `Array`, `Stack`, `Queue`, `LinkedList`, `Heap`, `Tree`, `BST`, `Graph`, and `HashTable` (Separate Chaining).
41
+ - Path-traced operations and complete 3-case BST deletion (leaf, 1-child, 2-children).
42
+ - **Algorithm Visualizations (`animora.algorithms`)**:
43
+ - `OperationTrace` event recording framework.
44
+ - `binary_search` with interval comparison tracing.
45
+ - 5 visually distinguishable sorting algorithms: `bubble_sort`, `selection_sort`, `insertion_sort`, `merge_sort`, `quick_sort`.
46
+ - Graph traversals: `bfs` and `dfs`.
47
+ - Pathfinding: `dijkstra` and `a_star` with distinct exploration patterns.
48
+ - Dynamic Programming: `fibonacci_dp` on `Table`.
49
+ - Backtracking: `n_queens` with conflict backtracking.
50
+ - **Developer CLI (`animora.cli`)**:
51
+ - `animora new`: Scaffold starter scene from template.
52
+ - `animora preview`: Fast low-quality preview (`-ql`).
53
+ - `animora render`: Production quality render (`-qh`, `-qk`).
54
+ - `animora doctor`: System and environment diagnostics.
55
+ - **Documentation & Examples**:
56
+ - MkDocs Material documentation site with Getting Started tutorials, subsystem guides, API reference, recipes, and troubleshooting.
57
+ - Seven runnable, tested example scenes in `examples/`.
58
+ - **Benchmarking & Performance**:
59
+ - Benchmark suite measuring construction, layout, and trace generation.
60
+ - Bounding box memoization in `Component`.
@@ -0,0 +1,54 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, caste, color, religion, or sexual
10
+ identity and orientation.
11
+
12
+ We pledge to act and interact in ways that contribute to an open, welcoming,
13
+ diverse, inclusive, and healthy community.
14
+
15
+ ## Our Standards
16
+
17
+ Examples of behavior that contributes to a positive environment for our
18
+ community include:
19
+
20
+ * Demonstrating empathy and kindness toward other people
21
+ * Being respectful of differing opinions, viewpoints, and experiences
22
+ * Giving and gracefully accepting constructive feedback
23
+ * Accepting responsibility and apologizing to those affected by our mistakes,
24
+ and learning from the experience
25
+ * Focusing on what is best not just for us as individuals, but for the
26
+ overall community
27
+
28
+ Examples of unacceptable behavior include:
29
+
30
+ * The use of sexualized language or imagery, and sexual attention or advances of
31
+ any kind
32
+ * Trolling, insulting or derogatory comments, and personal or political attacks
33
+ * Public or private harassment
34
+ * Publishing others' private information, such as a physical or email
35
+ address, without their explicit permission
36
+ * Other conduct which could reasonably be considered inappropriate in a
37
+ professional setting
38
+
39
+ ## Enforcement Responsibilities
40
+
41
+ Community leaders are responsible for clarifying and enforcing our standards of
42
+ acceptable behavior and will take appropriate and fair corrective action in
43
+ response to any behavior that they deem inappropriate, threatening, offensive,
44
+ or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies within all community spaces, and also applies when
49
+ an individual is officially representing the community in public spaces.
50
+
51
+ ## Attribution
52
+
53
+ This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org),
54
+ version 2.1.
@@ -0,0 +1,79 @@
1
+ # Contributing to Animora
2
+
3
+ Thank you for your interest in contributing to **Animora**! We welcome contributions to help make educational animation intuitive and accessible.
4
+
5
+ ---
6
+
7
+ ## ๐Ÿ› ๏ธ Development Setup
8
+
9
+ Animora requires **Python 3.10+**. We recommend using a virtual environment.
10
+
11
+ ### 1. Clone the repository
12
+ ```bash
13
+ git clone https://github.com/himanshu-jadhav108/Animora.git
14
+ cd Animora
15
+ ```
16
+
17
+ ### 2. Create and activate a virtual environment
18
+ ```bash
19
+ python -m venv .venv
20
+
21
+ # On Linux/macOS:
22
+ source .venv/bin/activate
23
+
24
+ # On Windows:
25
+ .venv\Scripts\activate
26
+ ```
27
+
28
+ ### 3. Install in editable mode with development dependencies
29
+ ```bash
30
+ pip install -e ".[dev]"
31
+ ```
32
+
33
+ ---
34
+
35
+ ## ๐Ÿงช Quality Checks & Validation
36
+
37
+ Before submitting a Pull Request, make sure all quality checks pass locally:
38
+
39
+ ### Run Linter and Formatter
40
+ ```bash
41
+ ruff check .
42
+ ruff format --check .
43
+ ```
44
+ To auto-fix linting and formatting issues:
45
+ ```bash
46
+ ruff check --fix .
47
+ ruff format .
48
+ ```
49
+
50
+ ### Run Type Checking
51
+ ```bash
52
+ mypy src/ tests/
53
+ ```
54
+
55
+ ### Run Tests
56
+ ```bash
57
+ pytest
58
+ ```
59
+
60
+ ### Build Documentation
61
+ ```bash
62
+ mkdocs build
63
+ ```
64
+
65
+ ---
66
+
67
+ ## ๐Ÿ“ Architecture Guidelines
68
+
69
+ All contributions must follow the architectural boundaries established in `docs/architecture/`:
70
+ 1. **Separation of Concerns**: Layout algorithms belong in `animora.layout`, not inside component classes.
71
+ 2. **First-Class Escape Hatch**: Every component must expose `.manim_object`.
72
+ 3. **Type Safety**: All public functions and classes must be 100% type-annotated.
73
+ 4. **Public API Exports**: Export public symbols explicitly in `__all__`.
74
+
75
+ ---
76
+
77
+ ## ๐Ÿ“œ Code of Conduct
78
+
79
+ Please review and adhere to our [Code of Conduct](CODE_OF_CONDUCT.md) in all community interactions.
animora-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Himanshu Jadhav
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.