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.
- animora-0.1.0/.github/workflows/ci.yml +81 -0
- animora-0.1.0/.github/workflows/docs-deploy.yml +30 -0
- animora-0.1.0/.github/workflows/publish.yml +35 -0
- animora-0.1.0/.gitignore +51 -0
- animora-0.1.0/CHANGELOG.md +60 -0
- animora-0.1.0/CODE_OF_CONDUCT.md +54 -0
- animora-0.1.0/CONTRIBUTING.md +79 -0
- animora-0.1.0/LICENSE +21 -0
- animora-0.1.0/PKG-INFO +326 -0
- animora-0.1.0/README.md +283 -0
- animora-0.1.0/benchmarks/harness.py +122 -0
- animora-0.1.0/benchmarks/scenarios/stress_scenes.py +46 -0
- animora-0.1.0/docs/algorithms/overview.md +74 -0
- animora-0.1.0/docs/architecture/00-overview.md +133 -0
- animora-0.1.0/docs/architecture/api-philosophy.md +110 -0
- animora-0.1.0/docs/architecture/core-abstractions.md +121 -0
- animora-0.1.0/docs/architecture/dependency-policy.md +36 -0
- animora-0.1.0/docs/architecture/module-boundaries.md +90 -0
- animora-0.1.0/docs/architecture/versioning-strategy.md +60 -0
- animora-0.1.0/docs/cli/overview.md +74 -0
- animora-0.1.0/docs/components/layout.md +68 -0
- animora-0.1.0/docs/components/primitives.md +66 -0
- animora-0.1.0/docs/datastructures/overview.md +75 -0
- animora-0.1.0/docs/dataviz/overview.md +71 -0
- animora-0.1.0/docs/examples/gallery.md +33 -0
- animora-0.1.0/docs/getting-started/first-scene.md +65 -0
- animora-0.1.0/docs/getting-started/installation.md +45 -0
- animora-0.1.0/docs/guides/algorithms.md +37 -0
- animora-0.1.0/docs/guides/cli.md +35 -0
- animora-0.1.0/docs/guides/components.md +60 -0
- animora-0.1.0/docs/guides/datastructures.md +37 -0
- animora-0.1.0/docs/guides/dataviz.md +33 -0
- animora-0.1.0/docs/guides/layout.md +37 -0
- animora-0.1.0/docs/guides/theming.md +48 -0
- animora-0.1.0/docs/index.md +50 -0
- animora-0.1.0/docs/migration.md +16 -0
- animora-0.1.0/docs/performance/profiling-report.md +46 -0
- animora-0.1.0/docs/recipes/custom-layout.md +37 -0
- animora-0.1.0/docs/recipes/escape-hatch.md +29 -0
- animora-0.1.0/docs/recipes/theme-switching.md +31 -0
- animora-0.1.0/docs/reference/api.md +98 -0
- animora-0.1.0/docs/stability.md +18 -0
- animora-0.1.0/docs/theming/overview.md +83 -0
- animora-0.1.0/docs/troubleshooting.md +34 -0
- animora-0.1.0/examples/01_basics_and_shapes.py +43 -0
- animora-0.1.0/examples/02_layout_and_grouping.py +36 -0
- animora-0.1.0/examples/03_themes_and_styling.py +36 -0
- animora-0.1.0/examples/04_dataviz_charts.py +31 -0
- animora-0.1.0/examples/05_datastructures_bst.py +34 -0
- animora-0.1.0/examples/06_algorithms_sorting.py +33 -0
- animora-0.1.0/examples/07_pathfinding_dijkstra.py +36 -0
- animora-0.1.0/mkdocs.yml +79 -0
- animora-0.1.0/pyproject.toml +121 -0
- animora-0.1.0/src/animora/__init__.py +189 -0
- animora-0.1.0/src/animora/algorithms/__init__.py +65 -0
- animora-0.1.0/src/animora/algorithms/backtracking.py +124 -0
- animora-0.1.0/src/animora/algorithms/dynamic_programming.py +81 -0
- animora-0.1.0/src/animora/algorithms/graph_traversal.py +125 -0
- animora-0.1.0/src/animora/algorithms/pathfinding.py +244 -0
- animora-0.1.0/src/animora/algorithms/search.py +97 -0
- animora-0.1.0/src/animora/algorithms/sorting.py +336 -0
- animora-0.1.0/src/animora/algorithms/trace.py +82 -0
- animora-0.1.0/src/animora/animations/__init__.py +10 -0
- animora-0.1.0/src/animora/cli/__init__.py +21 -0
- animora-0.1.0/src/animora/cli/doctor.py +154 -0
- animora-0.1.0/src/animora/cli/main.py +59 -0
- animora-0.1.0/src/animora/cli/new.py +84 -0
- animora-0.1.0/src/animora/cli/preview.py +83 -0
- animora-0.1.0/src/animora/cli/render.py +97 -0
- animora-0.1.0/src/animora/cli/templates/basic_scene.py.template +27 -0
- animora-0.1.0/src/animora/components/__init__.py +27 -0
- animora-0.1.0/src/animora/components/arrow.py +111 -0
- animora-0.1.0/src/animora/components/connector.py +116 -0
- animora-0.1.0/src/animora/components/dataviz/__init__.py +23 -0
- animora-0.1.0/src/animora/components/dsa/__init__.py +38 -0
- animora-0.1.0/src/animora/components/group.py +121 -0
- animora-0.1.0/src/animora/components/label.py +100 -0
- animora-0.1.0/src/animora/components/panel.py +131 -0
- animora-0.1.0/src/animora/components/primitives/__init__.py +23 -0
- animora-0.1.0/src/animora/components/shape.py +243 -0
- animora-0.1.0/src/animora/components/text.py +104 -0
- animora-0.1.0/src/animora/core/__init__.py +23 -0
- animora-0.1.0/src/animora/core/animation.py +74 -0
- animora-0.1.0/src/animora/core/component.py +181 -0
- animora-0.1.0/src/animora/core/config.py +110 -0
- animora-0.1.0/src/animora/core/scene.py +80 -0
- animora-0.1.0/src/animora/datastructures/__init__.py +42 -0
- animora-0.1.0/src/animora/datastructures/array.py +226 -0
- animora-0.1.0/src/animora/datastructures/bst.py +339 -0
- animora-0.1.0/src/animora/datastructures/graph.py +275 -0
- animora-0.1.0/src/animora/datastructures/hash_table.py +242 -0
- animora-0.1.0/src/animora/datastructures/heap.py +198 -0
- animora-0.1.0/src/animora/datastructures/linked_list.py +245 -0
- animora-0.1.0/src/animora/datastructures/queue.py +193 -0
- animora-0.1.0/src/animora/datastructures/stack.py +193 -0
- animora-0.1.0/src/animora/datastructures/tree.py +216 -0
- animora-0.1.0/src/animora/dataviz/__init__.py +23 -0
- animora-0.1.0/src/animora/dataviz/axes.py +146 -0
- animora-0.1.0/src/animora/dataviz/bar_chart.py +179 -0
- animora-0.1.0/src/animora/dataviz/histogram.py +156 -0
- animora-0.1.0/src/animora/dataviz/line_chart.py +137 -0
- animora-0.1.0/src/animora/dataviz/scatter_plot.py +130 -0
- animora-0.1.0/src/animora/dataviz/table.py +170 -0
- animora-0.1.0/src/animora/layout/__init__.py +30 -0
- animora-0.1.0/src/animora/layout/base.py +63 -0
- animora-0.1.0/src/animora/layout/circular.py +87 -0
- animora-0.1.0/src/animora/layout/flow.py +105 -0
- animora-0.1.0/src/animora/layout/graph.py +100 -0
- animora-0.1.0/src/animora/layout/grid.py +90 -0
- animora-0.1.0/src/animora/layout/horizontal.py +72 -0
- animora-0.1.0/src/animora/layout/tree.py +179 -0
- animora-0.1.0/src/animora/layout/vertical.py +72 -0
- animora-0.1.0/src/animora/py.typed +1 -0
- animora-0.1.0/src/animora/theme/__init__.py +48 -0
- animora-0.1.0/src/animora/theme/builtin.py +156 -0
- animora-0.1.0/src/animora/theme/context.py +51 -0
- animora-0.1.0/src/animora/theme/theme.py +148 -0
- animora-0.1.0/tests/algorithms/test_algorithms_correctness.py +98 -0
- animora-0.1.0/tests/algorithms/test_algorithms_trace.py +75 -0
- animora-0.1.0/tests/cli/test_doctor.py +30 -0
- animora-0.1.0/tests/cli/test_new.py +48 -0
- animora-0.1.0/tests/cli/test_preview.py +21 -0
- animora-0.1.0/tests/cli/test_render.py +18 -0
- animora-0.1.0/tests/components/test_arrow.py +34 -0
- animora-0.1.0/tests/components/test_connector.py +47 -0
- animora-0.1.0/tests/components/test_group.py +49 -0
- animora-0.1.0/tests/components/test_label.py +46 -0
- animora-0.1.0/tests/components/test_panel.py +28 -0
- animora-0.1.0/tests/components/test_shape.py +48 -0
- animora-0.1.0/tests/components/test_text.py +43 -0
- animora-0.1.0/tests/core/test_animation.py +33 -0
- animora-0.1.0/tests/core/test_component.py +89 -0
- animora-0.1.0/tests/core/test_config.py +34 -0
- animora-0.1.0/tests/core/test_scene.py +56 -0
- animora-0.1.0/tests/datastructures/test_array_model.py +28 -0
- animora-0.1.0/tests/datastructures/test_bst_model.py +70 -0
- animora-0.1.0/tests/datastructures/test_graph_model.py +32 -0
- animora-0.1.0/tests/datastructures/test_hash_table_model.py +36 -0
- animora-0.1.0/tests/datastructures/test_heap_model.py +24 -0
- animora-0.1.0/tests/datastructures/test_linked_list_model.py +28 -0
- animora-0.1.0/tests/datastructures/test_queue_model.py +28 -0
- animora-0.1.0/tests/datastructures/test_stack_model.py +30 -0
- animora-0.1.0/tests/datastructures/test_tree_model.py +17 -0
- animora-0.1.0/tests/dataviz/test_axes.py +41 -0
- animora-0.1.0/tests/dataviz/test_bar_chart.py +29 -0
- animora-0.1.0/tests/dataviz/test_histogram.py +32 -0
- animora-0.1.0/tests/dataviz/test_line_chart.py +20 -0
- animora-0.1.0/tests/dataviz/test_scatter_plot.py +23 -0
- animora-0.1.0/tests/dataviz/test_table.py +36 -0
- animora-0.1.0/tests/docs/test_examples_run.py +77 -0
- animora-0.1.0/tests/integration/test_algorithms_renders.py +70 -0
- animora-0.1.0/tests/integration/test_datastructures_visual.py +74 -0
- animora-0.1.0/tests/integration/test_dataviz_renders.py +50 -0
- animora-0.1.0/tests/integration/test_group_layout_integration.py +71 -0
- animora-0.1.0/tests/integration/test_label_renders.py +34 -0
- animora-0.1.0/tests/integration/test_primitives_render.py +38 -0
- animora-0.1.0/tests/integration/test_themed_rendering.py +45 -0
- animora-0.1.0/tests/layout/test_base.py +29 -0
- animora-0.1.0/tests/layout/test_circular.py +36 -0
- animora-0.1.0/tests/layout/test_flow.py +30 -0
- animora-0.1.0/tests/layout/test_graph.py +59 -0
- animora-0.1.0/tests/layout/test_grid.py +50 -0
- animora-0.1.0/tests/layout/test_horizontal.py +50 -0
- animora-0.1.0/tests/layout/test_tree.py +62 -0
- animora-0.1.0/tests/layout/test_vertical.py +50 -0
- animora-0.1.0/tests/test_package_imports.py +36 -0
- animora-0.1.0/tests/theme/test_builtin_themes.py +31 -0
- animora-0.1.0/tests/theme/test_theme.py +42 -0
- 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
|
animora-0.1.0/.gitignore
ADDED
|
@@ -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.
|