algan 0.0.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.
- algan-0.0.0/.gitignore +210 -0
- algan-0.0.0/LICENSE +21 -0
- algan-0.0.0/PKG-INFO +274 -0
- algan-0.0.0/README.md +184 -0
- algan-0.0.0/algan/__init__.py +563 -0
- algan-0.0.0/algan/animatable_base/__init__.py +0 -0
- algan-0.0.0/algan/animatable_base/animatable.py +1944 -0
- algan-0.0.0/algan/animatable_base/mob.py +2398 -0
- algan-0.0.0/algan/animatable_base/mob_hierarchy.py +424 -0
- algan-0.0.0/algan/animatable_base/mob_layout.py +1056 -0
- algan-0.0.0/algan/animatable_base/mob_materials.py +472 -0
- algan-0.0.0/algan/animatable_base/mob_morph.py +1712 -0
- algan-0.0.0/algan/animatable_base/mob_movement.py +767 -0
- algan-0.0.0/algan/animatable_base/mob_orientation.py +402 -0
- algan-0.0.0/algan/animatable_base/morph_conversions.py +477 -0
- algan-0.0.0/algan/animation_timeline/__init__.py +0 -0
- algan-0.0.0/algan/animation_timeline/animation_contexts.py +1415 -0
- algan-0.0.0/algan/animation_timeline/timeline.py +3833 -0
- algan-0.0.0/algan/animation_timeline/utils_taichi.py +81 -0
- algan-0.0.0/algan/animations/__init__.py +5 -0
- algan-0.0.0/algan/animations/changing.py +166 -0
- algan-0.0.0/algan/animations/indication.py +893 -0
- algan-0.0.0/algan/animations/manim_animations.py +144 -0
- algan-0.0.0/algan/animations/movement.py +598 -0
- algan-0.0.0/algan/constants/__init__.py +0 -0
- algan-0.0.0/algan/constants/color.py +596 -0
- algan-0.0.0/algan/constants/easings.py +405 -0
- algan-0.0.0/algan/constants/material_presets.py +67 -0
- algan-0.0.0/algan/constants/math.py +52 -0
- algan-0.0.0/algan/constants/spatial.py +66 -0
- algan-0.0.0/algan/daemon.py +1368 -0
- algan-0.0.0/algan/daemon_client.py +880 -0
- algan-0.0.0/algan/environment.py +544 -0
- algan-0.0.0/algan/errors.py +152 -0
- algan-0.0.0/algan/external_libraries/ground/LICENSE +31 -0
- algan-0.0.0/algan/external_libraries/ground/__init__.py +3 -0
- algan-0.0.0/algan/external_libraries/ground/base.py +2690 -0
- algan-0.0.0/algan/external_libraries/ground/core/__init__.py +0 -0
- algan-0.0.0/algan/external_libraries/ground/core/angular/__init__.py +32 -0
- algan-0.0.0/algan/external_libraries/ground/core/angular/exact/__init__.py +26 -0
- algan-0.0.0/algan/external_libraries/ground/core/arithmetic.py +9 -0
- algan-0.0.0/algan/external_libraries/ground/core/boxed.py +85 -0
- algan-0.0.0/algan/external_libraries/ground/core/centroidal/__init__.py +105 -0
- algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/__init__.py +0 -0
- algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/contour.py +20 -0
- algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/multipoint.py +19 -0
- algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/multipolygon.py +32 -0
- algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/multisegment.py +21 -0
- algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/polygon.py +34 -0
- algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/region.py +27 -0
- algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/segment.py +11 -0
- algan-0.0.0/algan/external_libraries/ground/core/circular/__init__.py +26 -0
- algan-0.0.0/algan/external_libraries/ground/core/circular/exact/__init__.py +0 -0
- algan-0.0.0/algan/external_libraries/ground/core/circular/exact/point_point_point.py +30 -0
- algan-0.0.0/algan/external_libraries/ground/core/discrete.py +40 -0
- algan-0.0.0/algan/external_libraries/ground/core/enums.py +114 -0
- algan-0.0.0/algan/external_libraries/ground/core/geometries.py +279 -0
- algan-0.0.0/algan/external_libraries/ground/core/hints.py +283 -0
- algan-0.0.0/algan/external_libraries/ground/core/measured/__init__.py +24 -0
- algan-0.0.0/algan/external_libraries/ground/core/measured/exact/__init__.py +0 -0
- algan-0.0.0/algan/external_libraries/ground/core/measured/exact/region.py +17 -0
- algan-0.0.0/algan/external_libraries/ground/core/metric/__init__.py +97 -0
- algan-0.0.0/algan/external_libraries/ground/core/metric/exact/__init__.py +0 -0
- algan-0.0.0/algan/external_libraries/ground/core/metric/exact/box.py +153 -0
- algan-0.0.0/algan/external_libraries/ground/core/metric/exact/point.py +8 -0
- algan-0.0.0/algan/external_libraries/ground/core/metric/exact/segment.py +49 -0
- algan-0.0.0/algan/external_libraries/ground/core/packing.py +50 -0
- algan-0.0.0/algan/external_libraries/ground/core/primitive.py +27 -0
- algan-0.0.0/algan/external_libraries/ground/core/robust.py +23 -0
- algan-0.0.0/algan/external_libraries/ground/core/rotation/__init__.py +291 -0
- algan-0.0.0/algan/external_libraries/ground/core/rotation/exact.py +31 -0
- algan-0.0.0/algan/external_libraries/ground/core/scaling/__init__.py +366 -0
- algan-0.0.0/algan/external_libraries/ground/core/scaling/exact.py +13 -0
- algan-0.0.0/algan/external_libraries/ground/core/segment/__init__.py +171 -0
- algan-0.0.0/algan/external_libraries/ground/core/segment/exact.py +44 -0
- algan-0.0.0/algan/external_libraries/ground/core/translation/__init__.py +132 -0
- algan-0.0.0/algan/external_libraries/ground/core/translation/exact.py +11 -0
- algan-0.0.0/algan/external_libraries/ground/core/vector/__init__.py +33 -0
- algan-0.0.0/algan/external_libraries/ground/core/vector/exact/__init__.py +0 -0
- algan-0.0.0/algan/external_libraries/ground/core/vector/exact/cross.py +12 -0
- algan-0.0.0/algan/external_libraries/ground/core/vector/exact/dot.py +12 -0
- algan-0.0.0/algan/external_libraries/ground/hints.py +27 -0
- algan-0.0.0/algan/external_libraries/manim/LICENSE +21 -0
- algan-0.0.0/algan/external_libraries/manim/LICENSE.community +21 -0
- algan-0.0.0/algan/external_libraries/manim/VENDORING.md +109 -0
- algan-0.0.0/algan/external_libraries/manim/__init__.py +97 -0
- algan-0.0.0/algan/external_libraries/manim/_compat.py +44 -0
- algan-0.0.0/algan/external_libraries/manim/_config/__init__.py +89 -0
- algan-0.0.0/algan/external_libraries/manim/_config/default.cfg +238 -0
- algan-0.0.0/algan/external_libraries/manim/_config/utils.py +1940 -0
- algan-0.0.0/algan/external_libraries/manim/_pango.py +94 -0
- algan-0.0.0/algan/external_libraries/manim/animation/__init__.py +40 -0
- algan-0.0.0/algan/external_libraries/manim/animation/animation.py +41 -0
- algan-0.0.0/algan/external_libraries/manim/animation/composition.py +19 -0
- algan-0.0.0/algan/external_libraries/manim/animation/creation.py +27 -0
- algan-0.0.0/algan/external_libraries/manim/animation/fading.py +19 -0
- algan-0.0.0/algan/external_libraries/manim/animation/growing.py +19 -0
- algan-0.0.0/algan/external_libraries/manim/animation/indication.py +11 -0
- algan-0.0.0/algan/external_libraries/manim/animation/transform.py +20 -0
- algan-0.0.0/algan/external_libraries/manim/animation/updaters/__init__.py +1 -0
- algan-0.0.0/algan/external_libraries/manim/animation/updaters/update.py +15 -0
- algan-0.0.0/algan/external_libraries/manim/constants.py +342 -0
- algan-0.0.0/algan/external_libraries/manim/data_structures.py +31 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/__init__.py +0 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/frame.py +41 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/geometry/__init__.py +16 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/geometry/arc.py +1388 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/geometry/boolean_ops.py +323 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/geometry/labeled.py +378 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/geometry/line.py +1233 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/geometry/polygram.py +865 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/geometry/shape_matchers.py +216 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/geometry/tips.py +342 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/graph.py +1811 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/graphing/__init__.py +14 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/graphing/coordinate_systems.py +3516 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/graphing/functions.py +336 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/graphing/number_line.py +710 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/graphing/probability.py +559 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/graphing/scale.py +201 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/logo.py +338 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/matrix.py +648 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/mobject.py +3559 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/opengl/__init__.py +13 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/opengl/_placeholder.py +25 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_compatibility.py +23 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_mobject.py +15 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_point_cloud_mobject.py +11 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_surface.py +11 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_three_dimensions.py +7 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_vectorized_mobject.py +15 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/svg/__init__.py +11 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/svg/brace.py +468 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/svg/svg_mobject.py +693 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/table.py +1212 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/text/__init__.py +14 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/text/code_mobject.py +372 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/text/numbers.py +479 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/text/tex_mobject.py +763 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/text/text_mobject.py +1583 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/three_d/__init__.py +12 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/three_d/polyhedra.py +463 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/three_d/three_d_utils.py +80 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/three_d/three_dimensions.py +1351 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/types/__init__.py +12 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/types/image_mobject.py +360 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/types/point_cloud_mobject.py +436 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/types/vectorized_mobject.py +3061 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/utils.py +107 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/value_tracker.py +242 -0
- algan-0.0.0/algan/external_libraries/manim/mobject/vector_field.py +1090 -0
- algan-0.0.0/algan/external_libraries/manim/typing.py +1000 -0
- algan-0.0.0/algan/external_libraries/manim/utils/__init__.py +0 -0
- algan-0.0.0/algan/external_libraries/manim/utils/bezier.py +2084 -0
- algan-0.0.0/algan/external_libraries/manim/utils/color/AS2700.py +236 -0
- algan-0.0.0/algan/external_libraries/manim/utils/color/BS381.py +318 -0
- algan-0.0.0/algan/external_libraries/manim/utils/color/DVIPSNAMES.py +96 -0
- algan-0.0.0/algan/external_libraries/manim/utils/color/SVGNAMES.py +179 -0
- algan-0.0.0/algan/external_libraries/manim/utils/color/X11.py +533 -0
- algan-0.0.0/algan/external_libraries/manim/utils/color/XKCD.py +952 -0
- algan-0.0.0/algan/external_libraries/manim/utils/color/__init__.py +61 -0
- algan-0.0.0/algan/external_libraries/manim/utils/color/core.py +1664 -0
- algan-0.0.0/algan/external_libraries/manim/utils/color/manim_colors.py +223 -0
- algan-0.0.0/algan/external_libraries/manim/utils/config_ops.py +98 -0
- algan-0.0.0/algan/external_libraries/manim/utils/deprecation.py +536 -0
- algan-0.0.0/algan/external_libraries/manim/utils/exceptions.py +19 -0
- algan-0.0.0/algan/external_libraries/manim/utils/family.py +43 -0
- algan-0.0.0/algan/external_libraries/manim/utils/family_ops.py +50 -0
- algan-0.0.0/algan/external_libraries/manim/utils/file_ops.py +305 -0
- algan-0.0.0/algan/external_libraries/manim/utils/images.py +71 -0
- algan-0.0.0/algan/external_libraries/manim/utils/iterables.py +482 -0
- algan-0.0.0/algan/external_libraries/manim/utils/parameter_parsing.py +32 -0
- algan-0.0.0/algan/external_libraries/manim/utils/paths.py +377 -0
- algan-0.0.0/algan/external_libraries/manim/utils/polylabel.py +235 -0
- algan-0.0.0/algan/external_libraries/manim/utils/qhull.py +219 -0
- algan-0.0.0/algan/external_libraries/manim/utils/rate_functions.py +525 -0
- algan-0.0.0/algan/external_libraries/manim/utils/simple_functions.py +139 -0
- algan-0.0.0/algan/external_libraries/manim/utils/space_ops.py +898 -0
- algan-0.0.0/algan/external_libraries/manim/utils/tex.py +201 -0
- algan-0.0.0/algan/external_libraries/manim/utils/tex_file_writing.py +364 -0
- algan-0.0.0/algan/external_libraries/manim/utils/tex_templates.py +1051 -0
- algan-0.0.0/algan/external_libraries/manim/utils/unit.py +39 -0
- algan-0.0.0/algan/external_libraries/manim_alias.py +107 -0
- algan-0.0.0/algan/external_libraries/readme.txt +29 -0
- algan-0.0.0/algan/external_libraries/sect/LICENSE +35 -0
- algan-0.0.0/algan/external_libraries/sect/__init__.py +0 -0
- algan-0.0.0/algan/external_libraries/sect/core/__init__.py +0 -0
- algan-0.0.0/algan/external_libraries/sect/core/hints.py +7 -0
- algan-0.0.0/algan/external_libraries/sect/core/utils.py +39 -0
- algan-0.0.0/algan/external_libraries/sect/event.py +129 -0
- algan-0.0.0/algan/external_libraries/sect/events_queue.py +190 -0
- algan-0.0.0/algan/external_libraries/sect/hints.py +9 -0
- algan-0.0.0/algan/external_libraries/sect/quad_edge.py +173 -0
- algan-0.0.0/algan/external_libraries/sect/sweep_line.py +82 -0
- algan-0.0.0/algan/external_libraries/sect/triangulation.py +518 -0
- algan-0.0.0/algan/external_libraries/sect/utils.py +147 -0
- algan-0.0.0/algan/geometry/__init__.py +0 -0
- algan-0.0.0/algan/geometry/geometry.py +732 -0
- algan-0.0.0/algan/logging/logger.py +321 -0
- algan-0.0.0/algan/manim/__init__.py +120 -0
- algan-0.0.0/algan/manim_defaults.py +254 -0
- algan-0.0.0/algan/mobs/__init__.py +0 -0
- algan-0.0.0/algan/mobs/bezier_circuit.py +1967 -0
- algan-0.0.0/algan/mobs/group.py +592 -0
- algan-0.0.0/algan/mobs/image_compat.py +267 -0
- algan-0.0.0/algan/mobs/image_mob.py +122 -0
- algan-0.0.0/algan/mobs/manim_adapters.py +773 -0
- algan-0.0.0/algan/mobs/manim_compat.py +1385 -0
- algan-0.0.0/algan/mobs/manim_mob.py +200 -0
- algan-0.0.0/algan/mobs/manim_parity.py +341 -0
- algan-0.0.0/algan/mobs/neural_nets/__init__.py +0 -0
- algan-0.0.0/algan/mobs/neural_nets/neural_net.py +1170 -0
- algan-0.0.0/algan/mobs/nonplanar_circuit.py +1148 -0
- algan-0.0.0/algan/mobs/numeric_display.py +326 -0
- algan-0.0.0/algan/mobs/opengl_compat.py +307 -0
- algan-0.0.0/algan/mobs/plots.py +356 -0
- algan-0.0.0/algan/mobs/pn_mesh.py +109 -0
- algan-0.0.0/algan/mobs/point_cloud.py +564 -0
- algan-0.0.0/algan/mobs/shapes_2d.py +1026 -0
- algan-0.0.0/algan/mobs/shapes_3d.py +2339 -0
- algan-0.0.0/algan/mobs/surfaces/__init__.py +0 -0
- algan-0.0.0/algan/mobs/surfaces/procedural_textures.py +826 -0
- algan-0.0.0/algan/mobs/surfaces/surface.py +4281 -0
- algan-0.0.0/algan/mobs/surfaces/surface_kernels_taichi.py +197 -0
- algan-0.0.0/algan/mobs/text.py +1266 -0
- algan-0.0.0/algan/mobs/three_d_models/__init__.py +30 -0
- algan-0.0.0/algan/mobs/three_d_models/animation.py +256 -0
- algan-0.0.0/algan/mobs/three_d_models/assimp_loader.py +339 -0
- algan-0.0.0/algan/mobs/three_d_models/gltf_loader.py +453 -0
- algan-0.0.0/algan/mobs/three_d_models/mesh.py +560 -0
- algan-0.0.0/algan/mobs/three_d_models/model_mob.py +589 -0
- algan-0.0.0/algan/mobs/three_d_models/scene_data.py +148 -0
- algan-0.0.0/algan/mobs/triangulated_bezier_circuit.py +1072 -0
- algan-0.0.0/algan/project.py +733 -0
- algan-0.0.0/algan/render_loop.py +3780 -0
- algan-0.0.0/algan/rendering/DESIGN_mps_support.md +1457 -0
- algan-0.0.0/algan/rendering/DESIGN_mps_zero_copy.md +474 -0
- algan-0.0.0/algan/rendering/__init__.py +0 -0
- algan-0.0.0/algan/rendering/arena_binding.py +250 -0
- algan-0.0.0/algan/rendering/camera.py +507 -0
- algan-0.0.0/algan/rendering/denoise/__init__.py +39 -0
- algan-0.0.0/algan/rendering/denoise/denoise.py +244 -0
- algan-0.0.0/algan/rendering/denoise/oidn_unet.py +135 -0
- algan-0.0.0/algan/rendering/denoise/tza.py +82 -0
- algan-0.0.0/algan/rendering/denoise/weights.py +136 -0
- algan-0.0.0/algan/rendering/fragment_capture.py +143 -0
- algan-0.0.0/algan/rendering/lights.py +774 -0
- algan-0.0.0/algan/rendering/logical_pn.py +1037 -0
- algan-0.0.0/algan/rendering/memory_model.py +542 -0
- algan-0.0.0/algan/rendering/mps_compat.py +590 -0
- algan-0.0.0/algan/rendering/mps_zero_copy.py +661 -0
- algan-0.0.0/algan/rendering/post_processing/__init__.py +11 -0
- algan-0.0.0/algan/rendering/post_processing/anti_aliasing/AreaTex.png +0 -0
- algan-0.0.0/algan/rendering/post_processing/anti_aliasing/SearchTex.png +0 -0
- algan-0.0.0/algan/rendering/post_processing/anti_aliasing/__init__.py +0 -0
- algan-0.0.0/algan/rendering/post_processing/anti_aliasing/fxaa.py +200 -0
- algan-0.0.0/algan/rendering/post_processing/anti_aliasing/smaa.py +532 -0
- algan-0.0.0/algan/rendering/post_processing/bloom.py +867 -0
- algan-0.0.0/algan/rendering/post_processing/bloom_kernels_taichi.py +134 -0
- algan-0.0.0/algan/rendering/post_processing/post_process.py +480 -0
- algan-0.0.0/algan/rendering/post_processing/tonemap_kernels_taichi.py +83 -0
- algan-0.0.0/algan/rendering/primitives/bezier_circuit_primitive.py +225 -0
- algan-0.0.0/algan/rendering/primitives/primitive.py +106 -0
- algan-0.0.0/algan/rendering/primitives/triangle_primitive.py +312 -0
- algan-0.0.0/algan/rendering/primitives/triangle_primitive_kernels_taichi.py +80 -0
- algan-0.0.0/algan/rendering/raytracing/DESIGN_analytic_aa.md +2218 -0
- algan-0.0.0/algan/rendering/raytracing/DESIGN_analytic_aa_v2.md +881 -0
- algan-0.0.0/algan/rendering/raytracing/DESIGN_glossy_prefilter.md +376 -0
- algan-0.0.0/algan/rendering/raytracing/DESIGN_hybrid_raster.md +1029 -0
- algan-0.0.0/algan/rendering/raytracing/DESIGN_mesh_identity.md +3394 -0
- algan-0.0.0/algan/rendering/raytracing/DESIGN_mesh_identity_open.md +884 -0
- algan-0.0.0/algan/rendering/raytracing/DESIGN_path_tracer_roadmap.md +2095 -0
- algan-0.0.0/algan/rendering/raytracing/DESIGN_physical_area_lights.md +59 -0
- algan-0.0.0/algan/rendering/raytracing/DESIGN_sheet_resolve.md +1037 -0
- algan-0.0.0/algan/rendering/raytracing/__init__.py +75 -0
- algan-0.0.0/algan/rendering/raytracing/area_light_quads.py +397 -0
- algan-0.0.0/algan/rendering/raytracing/arena_args_taichi.py +362 -0
- algan-0.0.0/algan/rendering/raytracing/background_taichi.py +55 -0
- algan-0.0.0/algan/rendering/raytracing/bezier_acceleration.py +359 -0
- algan-0.0.0/algan/rendering/raytracing/blue_noise.py +80 -0
- algan-0.0.0/algan/rendering/raytracing/color_space_taichi.py +61 -0
- algan-0.0.0/algan/rendering/raytracing/data/blue_noise_tile_64.npy +0 -0
- algan-0.0.0/algan/rendering/raytracing/device_sort.py +245 -0
- algan-0.0.0/algan/rendering/raytracing/glossy_prefilter_taichi.py +335 -0
- algan-0.0.0/algan/rendering/raytracing/light_tree.py +434 -0
- algan-0.0.0/algan/rendering/raytracing/logical_pn_taichi.py +499 -0
- algan-0.0.0/algan/rendering/raytracing/path_tracer.py +1686 -0
- algan-0.0.0/algan/rendering/raytracing/path_tracer_taichi.py +4066 -0
- algan-0.0.0/algan/rendering/raytracing/primitives.py +3558 -0
- algan-0.0.0/algan/rendering/raytracing/pt_media.py +72 -0
- algan-0.0.0/algan/rendering/raytracing/pt_media_taichi.py +408 -0
- algan-0.0.0/algan/rendering/raytracing/radix_sort_taichi.py +149 -0
- algan-0.0.0/algan/rendering/raytracing/raster_pipeline.py +2736 -0
- algan-0.0.0/algan/rendering/raytracing/raster_taichi.py +3213 -0
- algan-0.0.0/algan/rendering/raytracing/raytrace_kernels_taichi.py +3504 -0
- algan-0.0.0/algan/rendering/raytracing/refit_bvh.py +618 -0
- algan-0.0.0/algan/rendering/raytracing/refit_bvh_taichi.py +117 -0
- algan-0.0.0/algan/rendering/raytracing/scene_builder.py +2791 -0
- algan-0.0.0/algan/rendering/raytracing/settings.py +3883 -0
- algan-0.0.0/algan/rendering/raytracing/shading_taichi.py +1833 -0
- algan-0.0.0/algan/rendering/raytracing/sheet_compact_taichi.py +800 -0
- algan-0.0.0/algan/rendering/raytracing/sheet_depth_taichi.py +96 -0
- algan-0.0.0/algan/rendering/raytracing/sheet_metadata_taichi.py +34 -0
- algan-0.0.0/algan/rendering/raytracing/sheet_rank_groups_taichi.py +24 -0
- algan-0.0.0/algan/rendering/raytracing/sheet_resolve_taichi.py +1439 -0
- algan-0.0.0/algan/rendering/raytracing/sheet_sibling_taichi.py +65 -0
- algan-0.0.0/algan/rendering/raytracing/sheet_sort_taichi.py +123 -0
- algan-0.0.0/algan/rendering/raytracing/sheets.py +2403 -0
- algan-0.0.0/algan/rendering/raytracing/sliver_split.py +196 -0
- algan-0.0.0/algan/rendering/raytracing/stbvh.py +904 -0
- algan-0.0.0/algan/rendering/raytracing/tracer.py +3877 -0
- algan-0.0.0/algan/rendering/raytracing/truncation.py +361 -0
- algan-0.0.0/algan/rendering/raytracing/utils.py +84 -0
- algan-0.0.0/algan/rendering/raytracing/wavefront_kernels_taichi.py +3763 -0
- algan-0.0.0/algan/rendering/shaders/__init__.py +4 -0
- algan-0.0.0/algan/rendering/shaders/fragment_shaders.py +436 -0
- algan-0.0.0/algan/rendering/shaders/fragment_stage_library.py +227 -0
- algan-0.0.0/algan/rendering/shaders/material_shaders.py +990 -0
- algan-0.0.0/algan/rendering/shaders/materials.py +1010 -0
- algan-0.0.0/algan/rendering/shaders/pbr_shaders.py +173 -0
- algan-0.0.0/algan/rendering/taichi_runtime.py +1246 -0
- algan-0.0.0/algan/scene.py +1795 -0
- algan-0.0.0/algan/scene_manager.py +145 -0
- algan-0.0.0/algan/scenes/default_scene.py +24 -0
- algan-0.0.0/algan/settings/__init__.py +64 -0
- algan-0.0.0/algan/settings/_startup.py +192 -0
- algan-0.0.0/algan/settings/abstract_settings.py +390 -0
- algan-0.0.0/algan/settings/computing_settings.py +340 -0
- algan-0.0.0/algan/settings/kernel_settings.py +15 -0
- algan-0.0.0/algan/settings/path_settings.py +121 -0
- algan-0.0.0/algan/settings/raytracing_settings.py +717 -0
- algan-0.0.0/algan/settings/renderer_settings.py +36 -0
- algan-0.0.0/algan/settings/root_settings.py +129 -0
- algan-0.0.0/algan/settings/shape_style_profiles.py +223 -0
- algan-0.0.0/algan/settings/style_settings.py +118 -0
- algan-0.0.0/algan/settings/video_settings.py +157 -0
- algan-0.0.0/algan/sound/audio_effect.py +101 -0
- algan-0.0.0/algan/taichi_compat.py +296 -0
- algan-0.0.0/algan/utils/__init__.py +0 -0
- algan-0.0.0/algan/utils/algan_utils.py +881 -0
- algan-0.0.0/algan/utils/animation_utils.py +96 -0
- algan-0.0.0/algan/utils/api_renames.py +124 -0
- algan-0.0.0/algan/utils/audio_utils.py +314 -0
- algan-0.0.0/algan/utils/color_space.py +103 -0
- algan-0.0.0/algan/utils/docbuild/__init__.py +18 -0
- algan-0.0.0/algan/utils/docbuild/algan_directive.py +420 -0
- algan-0.0.0/algan/utils/docbuild/autoaliasattr_directive.py +234 -0
- algan-0.0.0/algan/utils/docbuild/autocolor_directive.py +95 -0
- algan-0.0.0/algan/utils/docbuild/module_parsing.py +254 -0
- algan-0.0.0/algan/utils/file_utils.py +77 -0
- algan-0.0.0/algan/utils/lazy_import.py +56 -0
- algan-0.0.0/algan/utils/manim_svg_cache.py +511 -0
- algan-0.0.0/algan/utils/memory_utils.py +1186 -0
- algan-0.0.0/algan/utils/mob_utils.py +324 -0
- algan-0.0.0/algan/utils/plotting_utils.py +58 -0
- algan-0.0.0/algan/utils/profiling_utils.py +1651 -0
- algan-0.0.0/algan/utils/python_utils.py +81 -0
- algan-0.0.0/algan/utils/singleton.py +35 -0
- algan-0.0.0/algan/utils/taichi_early_return.py +998 -0
- algan-0.0.0/algan/utils/taichi_fast_launch.py +706 -0
- algan-0.0.0/algan/utils/taichi_source_key.py +1283 -0
- algan-0.0.0/algan/utils/taichi_utils.py +15 -0
- algan-0.0.0/algan/utils/taichi_warmstart.py +567 -0
- algan-0.0.0/algan/utils/tensor_utils.py +620 -0
- algan-0.0.0/algan/utils/torch_compile.py +377 -0
- algan-0.0.0/algan/utils/video_encoding.py +471 -0
- algan-0.0.0/algan/viewer/__init__.py +7 -0
- algan-0.0.0/algan/viewer/hierarchy.py +242 -0
- algan-0.0.0/algan/viewer/pixels.py +370 -0
- algan-0.0.0/algan/viewer/server.py +290 -0
- algan-0.0.0/algan/viewer/session.py +677 -0
- algan-0.0.0/algan/viewer/static/index.html +77 -0
- algan-0.0.0/algan/viewer/static/viewer.css +205 -0
- algan-0.0.0/algan/viewer/static/viewer.js +619 -0
- algan-0.0.0/algan/viewer/viewer.py +124 -0
- algan-0.0.0/algan_cli.py +635 -0
- algan-0.0.0/pyproject.toml +452 -0
- algan-0.0.0/quadrants_patches/0001-metal-zero-copy-ndarray.patch +413 -0
- algan-0.0.0/quadrants_patches/0002-metal-codegen-and-diagnostics.patch +313 -0
- algan-0.0.0/quadrants_patches/0003-pre-volta-cuda.patch +118 -0
- algan-0.0.0/quadrants_patches/0004-llvm-invariant-load-kernel-args.patch +135 -0
- algan-0.0.0/quadrants_patches/0005-cuda-max-reg.patch +423 -0
- algan-0.0.0/quadrants_patches/0006-cuda-readonly-ndarray-ldg.patch +177 -0
- algan-0.0.0/quadrants_patches/0007-cuda-fast-expf.patch +40 -0
- algan-0.0.0/quadrants_patches/0008-aarch64-shared-libgcc.patch +19 -0
- algan-0.0.0/quadrants_patches/PORTING-NOTES.md +847 -0
- algan-0.0.0/quadrants_patches/PYPI.md +164 -0
- algan-0.0.0/quadrants_patches/README.md +910 -0
- algan-0.0.0/quadrants_patches/verify_cuda_patches.py +342 -0
- algan-0.0.0/quadrants_patches/verify_invariant_load.py +218 -0
- algan-0.0.0/scripts/build_quadrants_wheels.py +721 -0
- algan-0.0.0/scripts/cleanup_mac_branches.py +147 -0
- algan-0.0.0/scripts/gate/backend_pixel_ab.py +306 -0
- algan-0.0.0/scripts/gate/build_portable_quadrants_llvm.sh +223 -0
- algan-0.0.0/scripts/gate/metal_repro_8745.sh +65 -0
- algan-0.0.0/scripts/gate/mps_crash_diagnose.sh +181 -0
- algan-0.0.0/scripts/gate/mps_probe_quadrants.sh +264 -0
- algan-0.0.0/scripts/gate/mps_vs_cpu_ab.sh +123 -0
- algan-0.0.0/scripts/gate/quadrants_glibc34_smoke.py +30 -0
- algan-0.0.0/scripts/gate/quadrants_linux_build.sh +276 -0
- algan-0.0.0/scripts/gate/quadrants_macos_build.sh +594 -0
- algan-0.0.0/scripts/gate/report_wheel.sh +82 -0
- algan-0.0.0/scripts/gate/taichi_macos_build.sh +527 -0
- algan-0.0.0/scripts/gate/verify_baseline_pointer.py +190 -0
- algan-0.0.0/scripts/gate/verify_license_notices.py +151 -0
- algan-0.0.0/scripts/gate/verify_wheel_tag.py +174 -0
- algan-0.0.0/scripts/generate_blue_noise_tile.py +497 -0
- algan-0.0.0/scripts/gpu_smoke.py +80 -0
- algan-0.0.0/scripts/kaggle/make_notebook.py +245 -0
- algan-0.0.0/scripts/kaggle/read_output.py +103 -0
- algan-0.0.0/scripts/kaggle/runner.py +369 -0
- algan-0.0.0/scripts/package_baselines.py +257 -0
- algan-0.0.0/scripts/rebrand_quadrants_wheel.py +403 -0
- algan-0.0.0/scripts/run_ci.py +996 -0
- algan-0.0.0/scripts/validate_quadrants_release.py +73 -0
- algan-0.0.0/scripts/vendor_manim.py +1484 -0
- algan-0.0.0/taichi_patches/0001-metal-zero-copy-ndarray.patch +325 -0
- algan-0.0.0/taichi_patches/0002-metal-codegen-and-diagnostics.patch +387 -0
- algan-0.0.0/taichi_patches/0003-literal-operator-whitespace.patch +106 -0
- algan-0.0.0/taichi_patches/MIGRATION.md +611 -0
- algan-0.0.0/taichi_patches/PLAN.md +864 -0
- algan-0.0.0/taichi_patches/README.md +183 -0
- algan-0.0.0/tests/README.md +675 -0
- algan-0.0.0/tests/assets/fonts/AlganTestMono-Bold.ttf +0 -0
- algan-0.0.0/tests/assets/fonts/AlganTestMono-BoldItalic.ttf +0 -0
- algan-0.0.0/tests/assets/fonts/AlganTestMono-Italic.ttf +0 -0
- algan-0.0.0/tests/assets/fonts/AlganTestMono-Regular.ttf +0 -0
- algan-0.0.0/tests/assets/fonts/AlganTestSans-Bold.ttf +0 -0
- algan-0.0.0/tests/assets/fonts/AlganTestSans-BoldItalic.ttf +0 -0
- algan-0.0.0/tests/assets/fonts/AlganTestSans-Italic.ttf +0 -0
- algan-0.0.0/tests/assets/fonts/AlganTestSans-Regular.ttf +0 -0
- algan-0.0.0/tests/assets/fonts/LICENSE.txt +134 -0
- algan-0.0.0/tests/baseline_store.py +442 -0
- algan-0.0.0/tests/baselines.json +43 -0
- algan-0.0.0/tests/conftest.py +568 -0
- algan-0.0.0/tests/fast/expected_outputs_cpu/fast.mp4 +0 -0
- algan-0.0.0/tests/fast/expected_outputs_cuda/fast.mp4 +0 -0
- algan-0.0.0/tests/fast/scene.py +164 -0
- algan-0.0.0/tests/fast/test_fast_render.py +187 -0
- algan-0.0.0/tests/full_renders/assets/textured_icosphere.glb +0 -0
- algan-0.0.0/tests/full_renders/assets/world_map.jpg +0 -0
- algan-0.0.0/tests/full_renders/scenes/complex_hierarchy_become.py +171 -0
- algan-0.0.0/tests/full_renders/scenes/manim_compat_and_plots.py +211 -0
- algan-0.0.0/tests/full_renders/scenes/materials_and_lighting.py +261 -0
- algan-0.0.0/tests/full_renders/scenes/shapes_and_timeline.py +479 -0
- algan-0.0.0/tests/full_renders/scenes/solids_and_camera.py +274 -0
- algan-0.0.0/tests/full_renders/scenes/text_and_media.py +227 -0
- algan-0.0.0/tests/full_renders/test_full_renders.py +252 -0
- algan-0.0.0/tests/mps_known_failures.py +81 -0
- algan-0.0.0/tests/path_traced/scenes/authored_under_many_lights.py +70 -0
- algan-0.0.0/tests/path_traced/scenes/environment_and_refraction.py +46 -0
- algan-0.0.0/tests/path_traced/scenes/lit_and_shadowed.py +53 -0
- algan-0.0.0/tests/path_traced/scenes/translucency_and_order.py +39 -0
- algan-0.0.0/tests/path_traced/test_path_traced.py +291 -0
- algan-0.0.0/tests/unit_tests/pt_media_probe_taichi.py +59 -0
- algan-0.0.0/tests/unit_tests/public_api_snapshot.txt +382 -0
- algan-0.0.0/tests/unit_tests/test_active_timeline_materialization.py +208 -0
- algan-0.0.0/tests/unit_tests/test_analytic_aa_gates.py +181 -0
- algan-0.0.0/tests/unit_tests/test_area_light_soft_shadow.py +317 -0
- algan-0.0.0/tests/unit_tests/test_arena_args.py +449 -0
- algan-0.0.0/tests/unit_tests/test_arena_binding.py +159 -0
- algan-0.0.0/tests/unit_tests/test_arena_binding_live.py +235 -0
- algan-0.0.0/tests/unit_tests/test_authoring_contracts.py +529 -0
- algan-0.0.0/tests/unit_tests/test_background_image.py +85 -0
- algan-0.0.0/tests/unit_tests/test_baseline_store.py +446 -0
- algan-0.0.0/tests/unit_tests/test_batch_preparation_devices.py +119 -0
- algan-0.0.0/tests/unit_tests/test_batched_bezier_mobs.py +246 -0
- algan-0.0.0/tests/unit_tests/test_batched_surface_mobs.py +296 -0
- algan-0.0.0/tests/unit_tests/test_bezier_curve_sampling.py +347 -0
- algan-0.0.0/tests/unit_tests/test_bezier_group_runs.py +204 -0
- algan-0.0.0/tests/unit_tests/test_bloom_device_parity.py +135 -0
- algan-0.0.0/tests/unit_tests/test_cap_disc_rim.py +147 -0
- algan-0.0.0/tests/unit_tests/test_circuit_texture_grid.py +347 -0
- algan-0.0.0/tests/unit_tests/test_cli.py +458 -0
- algan-0.0.0/tests/unit_tests/test_cli_startup.py +106 -0
- algan-0.0.0/tests/unit_tests/test_closed_shell_ceiling.py +223 -0
- algan-0.0.0/tests/unit_tests/test_closed_shell_declaration.py +585 -0
- algan-0.0.0/tests/unit_tests/test_color_array_inputs.py +98 -0
- algan-0.0.0/tests/unit_tests/test_color_decode_boundary.py +194 -0
- algan-0.0.0/tests/unit_tests/test_color_grid_broadcasting.py +67 -0
- algan-0.0.0/tests/unit_tests/test_color_space.py +182 -0
- algan-0.0.0/tests/unit_tests/test_coplanar_z_index.py +287 -0
- algan-0.0.0/tests/unit_tests/test_daemon_client.py +726 -0
- algan-0.0.0/tests/unit_tests/test_daemon_run_context.py +239 -0
- algan-0.0.0/tests/unit_tests/test_daemon_socket.py +203 -0
- algan-0.0.0/tests/unit_tests/test_daemon_staleness.py +127 -0
- algan-0.0.0/tests/unit_tests/test_default_material.py +165 -0
- algan-0.0.0/tests/unit_tests/test_default_shader_albedo.py +127 -0
- algan-0.0.0/tests/unit_tests/test_deferred_bvh_arena.py +139 -0
- algan-0.0.0/tests/unit_tests/test_deferred_shadow_samples.py +109 -0
- algan-0.0.0/tests/unit_tests/test_denoise.py +553 -0
- algan-0.0.0/tests/unit_tests/test_deterministic_shadow_opacity.py +152 -0
- algan-0.0.0/tests/unit_tests/test_device_sort.py +269 -0
- algan-0.0.0/tests/unit_tests/test_dielectric_fresnel.py +268 -0
- algan-0.0.0/tests/unit_tests/test_direct_specular_lobe.py +261 -0
- algan-0.0.0/tests/unit_tests/test_display_referred_coverage.py +175 -0
- algan-0.0.0/tests/unit_tests/test_doc_builder.py +29 -0
- algan-0.0.0/tests/unit_tests/test_doc_examples.py +588 -0
- algan-0.0.0/tests/unit_tests/test_easings.py +220 -0
- algan-0.0.0/tests/unit_tests/test_easings_and_ux.py +182 -0
- algan-0.0.0/tests/unit_tests/test_environment.py +383 -0
- algan-0.0.0/tests/unit_tests/test_fast_suite_curation.py +75 -0
- algan-0.0.0/tests/unit_tests/test_fbx_import.py +543 -0
- algan-0.0.0/tests/unit_tests/test_frag_pid_gate.py +99 -0
- algan-0.0.0/tests/unit_tests/test_fragment_shaders.py +195 -0
- algan-0.0.0/tests/unit_tests/test_glossy_prefilter.py +663 -0
- algan-0.0.0/tests/unit_tests/test_gpu_harness.py +344 -0
- algan-0.0.0/tests/unit_tests/test_import_side_effects.py +124 -0
- algan-0.0.0/tests/unit_tests/test_indication_animations.py +304 -0
- algan-0.0.0/tests/unit_tests/test_kernel_control_flow.py +106 -0
- algan-0.0.0/tests/unit_tests/test_lifecycle.py +71 -0
- algan-0.0.0/tests/unit_tests/test_lights.py +232 -0
- algan-0.0.0/tests/unit_tests/test_lit_bsdf_sidedness.py +127 -0
- algan-0.0.0/tests/unit_tests/test_logging.py +254 -0
- algan-0.0.0/tests/unit_tests/test_logical_pn_tessellation.py +1063 -0
- algan-0.0.0/tests/unit_tests/test_mac_branch_cleanup.py +123 -0
- algan-0.0.0/tests/unit_tests/test_mac_depth_buffer_ab.py +109 -0
- algan-0.0.0/tests/unit_tests/test_manim_adapter_conventions.py +323 -0
- algan-0.0.0/tests/unit_tests/test_manim_animation_audit.py +443 -0
- algan-0.0.0/tests/unit_tests/test_manim_compat_movement.py +310 -0
- algan-0.0.0/tests/unit_tests/test_manim_compat_scene_registration.py +204 -0
- algan-0.0.0/tests/unit_tests/test_manim_compat_sync.py +132 -0
- algan-0.0.0/tests/unit_tests/test_manim_defaults.py +311 -0
- algan-0.0.0/tests/unit_tests/test_manim_docstring_examples.py +119 -0
- algan-0.0.0/tests/unit_tests/test_manim_mobject_parity.py +352 -0
- algan-0.0.0/tests/unit_tests/test_manim_shader.py +130 -0
- algan-0.0.0/tests/unit_tests/test_manim_shader_render.py +565 -0
- algan-0.0.0/tests/unit_tests/test_manim_svg_cache.py +263 -0
- algan-0.0.0/tests/unit_tests/test_manual_memory.py +387 -0
- algan-0.0.0/tests/unit_tests/test_materials.py +770 -0
- algan-0.0.0/tests/unit_tests/test_memory_model.py +423 -0
- algan-0.0.0/tests/unit_tests/test_mesh_identity.py +559 -0
- algan-0.0.0/tests/unit_tests/test_missing_tool_errors.py +93 -0
- algan-0.0.0/tests/unit_tests/test_mob_layout.py +257 -0
- algan-0.0.0/tests/unit_tests/test_mob_movement.py +154 -0
- algan-0.0.0/tests/unit_tests/test_mob_orientation.py +90 -0
- algan-0.0.0/tests/unit_tests/test_mob_reparenting.py +535 -0
- algan-0.0.0/tests/unit_tests/test_morph_become.py +577 -0
- algan-0.0.0/tests/unit_tests/test_morph_become_audit.py +674 -0
- algan-0.0.0/tests/unit_tests/test_move_to_edge_inset.py +124 -0
- algan-0.0.0/tests/unit_tests/test_mps_friendly.py +1090 -0
- algan-0.0.0/tests/unit_tests/test_mps_known_failures.py +82 -0
- algan-0.0.0/tests/unit_tests/test_mps_zero_copy.py +267 -0
- algan-0.0.0/tests/unit_tests/test_nested_ior.py +239 -0
- algan-0.0.0/tests/unit_tests/test_neural_net_idle.py +174 -0
- algan-0.0.0/tests/unit_tests/test_nonplanar_circuits.py +475 -0
- algan-0.0.0/tests/unit_tests/test_normal_orientation.py +419 -0
- algan-0.0.0/tests/unit_tests/test_numeric_display.py +114 -0
- algan-0.0.0/tests/unit_tests/test_parent_child_basis.py +129 -0
- algan-0.0.0/tests/unit_tests/test_path_tracer.py +3651 -0
- algan-0.0.0/tests/unit_tests/test_phong_specular_normalization.py +206 -0
- algan-0.0.0/tests/unit_tests/test_pn_mesh.py +112 -0
- algan-0.0.0/tests/unit_tests/test_point_cloud_rendering.py +148 -0
- algan-0.0.0/tests/unit_tests/test_post_processing_memory.py +111 -0
- algan-0.0.0/tests/unit_tests/test_preflight_overlap.py +655 -0
- algan-0.0.0/tests/unit_tests/test_premultiplied_over.py +359 -0
- algan-0.0.0/tests/unit_tests/test_primary_shadow_sort.py +39 -0
- algan-0.0.0/tests/unit_tests/test_procedural_textures.py +191 -0
- algan-0.0.0/tests/unit_tests/test_profiler_bounce_attribution.py +114 -0
- algan-0.0.0/tests/unit_tests/test_profiler_kernel_discovery.py +75 -0
- algan-0.0.0/tests/unit_tests/test_profiler_stage_attribution.py +93 -0
- algan-0.0.0/tests/unit_tests/test_project.py +285 -0
- algan-0.0.0/tests/unit_tests/test_pt_media.py +614 -0
- algan-0.0.0/tests/unit_tests/test_public_api_surface.py +167 -0
- algan-0.0.0/tests/unit_tests/test_quadrants_distribution.py +236 -0
- algan-0.0.0/tests/unit_tests/test_quadrants_warning_filter.py +28 -0
- algan-0.0.0/tests/unit_tests/test_quadrants_wheels.py +1064 -0
- algan-0.0.0/tests/unit_tests/test_ray_sort_keys.py +71 -0
- algan-0.0.0/tests/unit_tests/test_raytracing_unit.py +421 -0
- algan-0.0.0/tests/unit_tests/test_refit_bvh.py +195 -0
- algan-0.0.0/tests/unit_tests/test_refit_link_decode.py +43 -0
- algan-0.0.0/tests/unit_tests/test_render_batch_sizing.py +657 -0
- algan-0.0.0/tests/unit_tests/test_render_coverage_audit.py +317 -0
- algan-0.0.0/tests/unit_tests/test_render_output_pipeline.py +255 -0
- algan-0.0.0/tests/unit_tests/test_render_truncations.py +478 -0
- algan-0.0.0/tests/unit_tests/test_rgb_shadow_payload.py +476 -0
- algan-0.0.0/tests/unit_tests/test_rough_dielectric.py +216 -0
- algan-0.0.0/tests/unit_tests/test_scene_actor_registration.py +315 -0
- algan-0.0.0/tests/unit_tests/test_scene_arena_upload.py +304 -0
- algan-0.0.0/tests/unit_tests/test_scene_containment.py +183 -0
- algan-0.0.0/tests/unit_tests/test_screen_relative_camera_frame.py +285 -0
- algan-0.0.0/tests/unit_tests/test_secondary_tap_counts.py +228 -0
- algan-0.0.0/tests/unit_tests/test_settings_api.py +858 -0
- algan-0.0.0/tests/unit_tests/test_shading_sidedness.py +209 -0
- algan-0.0.0/tests/unit_tests/test_shadow_flags.py +346 -0
- algan-0.0.0/tests/unit_tests/test_shadow_identity_epsilon.py +127 -0
- algan-0.0.0/tests/unit_tests/test_shadow_terminator.py +345 -0
- algan-0.0.0/tests/unit_tests/test_shadow_vis_slots.py +87 -0
- algan-0.0.0/tests/unit_tests/test_shape_anchors.py +199 -0
- algan-0.0.0/tests/unit_tests/test_shape_style_profiles.py +275 -0
- algan-0.0.0/tests/unit_tests/test_sheet_chain_kernels.py +530 -0
- algan-0.0.0/tests/unit_tests/test_sheet_compaction.py +1216 -0
- algan-0.0.0/tests/unit_tests/test_sheet_depth.py +154 -0
- algan-0.0.0/tests/unit_tests/test_sheet_group_reuse.py +47 -0
- algan-0.0.0/tests/unit_tests/test_sheet_metadata.py +94 -0
- algan-0.0.0/tests/unit_tests/test_sheet_packed_sort.py +170 -0
- algan-0.0.0/tests/unit_tests/test_sheet_pixel_sort.py +166 -0
- algan-0.0.0/tests/unit_tests/test_sheet_rank_groups.py +98 -0
- algan-0.0.0/tests/unit_tests/test_sheet_sibling_weights.py +158 -0
- algan-0.0.0/tests/unit_tests/test_sliver_split.py +194 -0
- algan-0.0.0/tests/unit_tests/test_spatial_constants.py +92 -0
- algan-0.0.0/tests/unit_tests/test_surface_autotune.py +237 -0
- algan-0.0.0/tests/unit_tests/test_surface_parametric_ranges.py +212 -0
- algan-0.0.0/tests/unit_tests/test_surface_prep_kernels.py +258 -0
- algan-0.0.0/tests/unit_tests/test_surface_shape_and_image_mob.py +245 -0
- algan-0.0.0/tests/unit_tests/test_surface_texture_locations.py +282 -0
- algan-0.0.0/tests/unit_tests/test_surface_welding.py +148 -0
- algan-0.0.0/tests/unit_tests/test_taichi_background.py +89 -0
- algan-0.0.0/tests/unit_tests/test_taichi_compat.py +125 -0
- algan-0.0.0/tests/unit_tests/test_taichi_early_return.py +1571 -0
- algan-0.0.0/tests/unit_tests/test_taichi_fast_launch.py +308 -0
- algan-0.0.0/tests/unit_tests/test_taichi_launch_pairing.py +205 -0
- algan-0.0.0/tests/unit_tests/test_taichi_runtime_config.py +646 -0
- algan-0.0.0/tests/unit_tests/test_taichi_source_key.py +866 -0
- algan-0.0.0/tests/unit_tests/test_taichi_warmstart.py +323 -0
- algan-0.0.0/tests/unit_tests/test_tessellation_cache.py +123 -0
- algan-0.0.0/tests/unit_tests/test_texture_opacity_u8.py +252 -0
- algan-0.0.0/tests/unit_tests/test_texture_seam_wrapping.py +252 -0
- algan-0.0.0/tests/unit_tests/test_texture_time_lerp.py +422 -0
- algan-0.0.0/tests/unit_tests/test_texture_timeline_memory.py +215 -0
- algan-0.0.0/tests/unit_tests/test_timeline_overlap.py +265 -0
- algan-0.0.0/tests/unit_tests/test_timeline_state_query.py +147 -0
- algan-0.0.0/tests/unit_tests/test_tonemapping.py +504 -0
- algan-0.0.0/tests/unit_tests/test_torch_compile.py +286 -0
- algan-0.0.0/tests/unit_tests/test_transparent_output.py +165 -0
- algan-0.0.0/tests/unit_tests/test_updater_mob_creation.py +155 -0
- algan-0.0.0/tests/unit_tests/test_ux_regressions.py +2043 -0
- algan-0.0.0/tests/unit_tests/test_verify_baseline_pointer.py +200 -0
- algan-0.0.0/tests/unit_tests/test_video_encoding.py +340 -0
- algan-0.0.0/tests/unit_tests/test_viewer_fragments.py +300 -0
- algan-0.0.0/tests/unit_tests/test_viewer_server.py +334 -0
- algan-0.0.0/tests/unit_tests/test_volume_absorption.py +183 -0
- algan-0.0.0/tests/unit_tests/test_watertight_triangle.py +200 -0
- algan-0.0.0/tests/unit_tests/test_wave_color_resolution.py +487 -0
- algan-0.0.0/tests/unit_tests/test_wavefront_compaction.py +272 -0
- algan-0.0.0/tests/unit_tests/test_weight_floor_exit.py +187 -0
- algan-0.0.0/tests/unit_tests/test_wide_attr_device.py +207 -0
- algan-0.0.0/tests/world_map.jpg +0 -0
- algan-0.0.0/uv.lock +5683 -0
algan-0.0.0/.gitignore
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Algan videos
|
|
2
|
+
# Heavy render baselines are release assets. Local rebaselines remain
|
|
3
|
+
# discoverable by scripts/package_baselines.py but must not be recommitted.
|
|
4
|
+
tests/full_renders/expected_outputs_*/
|
|
5
|
+
tests/path_traced/expected_outputs_*/
|
|
6
|
+
**/output_errors/
|
|
7
|
+
benchmarks/_*_out/
|
|
8
|
+
**/algan_outputs/
|
|
9
|
+
# tests/full_renders writes its renders next to the baselines, in a directory
|
|
10
|
+
# the glob above just misses (test_full_renders.OUTPUT_DIR).
|
|
11
|
+
**/algan_outputs2/
|
|
12
|
+
algan_outputs/
|
|
13
|
+
algan_outputs
|
|
14
|
+
algan_cache
|
|
15
|
+
|
|
16
|
+
# What benchmarks/_mps_capability_probe.py writes. It is a measurement of the
|
|
17
|
+
# machine it ran on, so it belongs in a CI artifact, not in the tree.
|
|
18
|
+
mps_probe_results.json
|
|
19
|
+
probe-output.txt
|
|
20
|
+
|
|
21
|
+
# Same for benchmarks/_mps_vs_cpu_torch_speed.py.
|
|
22
|
+
benchmarks/mps_vs_cpu_speed.json
|
|
23
|
+
speed-output.txt
|
|
24
|
+
|
|
25
|
+
# The frame benchmarks/_mps_render_smoke.py draws. It is what the run produced
|
|
26
|
+
# on the machine it ran on -- a CI artifact, not a baseline: nothing compares
|
|
27
|
+
# against it, and the two devices legitimately tessellate differently.
|
|
28
|
+
mps_render_smoke/
|
|
29
|
+
|
|
30
|
+
# Byte-compiled / optimized / DLL files
|
|
31
|
+
__pycache__/
|
|
32
|
+
*.py[cod]
|
|
33
|
+
*$py.class
|
|
34
|
+
|
|
35
|
+
# C extensions
|
|
36
|
+
*.so
|
|
37
|
+
|
|
38
|
+
.agents
|
|
39
|
+
# Ignore personal Claude Code state, but track the shared project config: the
|
|
40
|
+
# SessionStart hook is what makes Claude Code on the web able to build and test
|
|
41
|
+
# this repo, so it has to be committed. Git will not look inside an ignored
|
|
42
|
+
# directory, hence ignoring the contents rather than the directory itself.
|
|
43
|
+
.claude/*
|
|
44
|
+
!.claude/settings.json
|
|
45
|
+
!.claude/hooks/
|
|
46
|
+
.codex
|
|
47
|
+
.devcontainer
|
|
48
|
+
|
|
49
|
+
# Distribution / packaging
|
|
50
|
+
.Python
|
|
51
|
+
build/
|
|
52
|
+
develop-eggs/
|
|
53
|
+
dist/
|
|
54
|
+
downloads/
|
|
55
|
+
eggs/
|
|
56
|
+
.eggs/
|
|
57
|
+
lib/
|
|
58
|
+
lib64/
|
|
59
|
+
parts/
|
|
60
|
+
sdist/
|
|
61
|
+
var/
|
|
62
|
+
wheels/
|
|
63
|
+
pip-wheel-metadata/
|
|
64
|
+
share/python-wheels/
|
|
65
|
+
*.egg-info/
|
|
66
|
+
.installed.cfg
|
|
67
|
+
*.egg
|
|
68
|
+
MANIFEST
|
|
69
|
+
|
|
70
|
+
# PyInstaller
|
|
71
|
+
# Usually these files are written by a python script from a template
|
|
72
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
73
|
+
*.manifest
|
|
74
|
+
*.spec
|
|
75
|
+
|
|
76
|
+
# Installer logs
|
|
77
|
+
pip-log.txt
|
|
78
|
+
pip-delete-this-directory.txt
|
|
79
|
+
|
|
80
|
+
# Unit test / coverage reports
|
|
81
|
+
htmlcov/
|
|
82
|
+
.tox/
|
|
83
|
+
.nox/
|
|
84
|
+
.coverage
|
|
85
|
+
.coverage.*
|
|
86
|
+
.cache
|
|
87
|
+
nosetests.xml
|
|
88
|
+
coverage.xml
|
|
89
|
+
*.cover
|
|
90
|
+
*.py,cover
|
|
91
|
+
.hypothesis/
|
|
92
|
+
.pytest_cache/
|
|
93
|
+
|
|
94
|
+
*.log
|
|
95
|
+
|
|
96
|
+
# Sphinx documentation
|
|
97
|
+
docs/_build/
|
|
98
|
+
docs/build/
|
|
99
|
+
docs/source/_autosummary/
|
|
100
|
+
docs/source/reference/
|
|
101
|
+
docs/source/_build/
|
|
102
|
+
docs/rendering_times.csv
|
|
103
|
+
#i18n ####
|
|
104
|
+
docs/i18n/gettext/.doctrees
|
|
105
|
+
docs/i18n/**/*.mo
|
|
106
|
+
docs/i18n/translatable.po
|
|
107
|
+
docs/i18n/untranslatable.po
|
|
108
|
+
|
|
109
|
+
# PyBuilder
|
|
110
|
+
target/
|
|
111
|
+
|
|
112
|
+
# Jupyter Notebook
|
|
113
|
+
jupyter/
|
|
114
|
+
.ipynb_checkpoints
|
|
115
|
+
|
|
116
|
+
# IPython
|
|
117
|
+
profile_default/
|
|
118
|
+
ipython_config.py
|
|
119
|
+
|
|
120
|
+
# pyenv
|
|
121
|
+
.python-version
|
|
122
|
+
|
|
123
|
+
# pipenv
|
|
124
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
125
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
126
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
127
|
+
# install all needed dependencies.
|
|
128
|
+
#Pipfile.lock
|
|
129
|
+
|
|
130
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
131
|
+
__pypackages__/
|
|
132
|
+
|
|
133
|
+
# PyCharm
|
|
134
|
+
/.idea/
|
|
135
|
+
|
|
136
|
+
# Celery stuff
|
|
137
|
+
celerybeat-schedule
|
|
138
|
+
celerybeat.pid
|
|
139
|
+
|
|
140
|
+
# Environments
|
|
141
|
+
.env
|
|
142
|
+
.venv
|
|
143
|
+
env/
|
|
144
|
+
venv/
|
|
145
|
+
ENV/
|
|
146
|
+
env.bak/
|
|
147
|
+
venv.bak/
|
|
148
|
+
|
|
149
|
+
# mkdocs documentation
|
|
150
|
+
/site
|
|
151
|
+
|
|
152
|
+
# mypy
|
|
153
|
+
.mypy_cache/
|
|
154
|
+
.dmypy.json
|
|
155
|
+
dmypy.json
|
|
156
|
+
|
|
157
|
+
*.pyc
|
|
158
|
+
*.bak
|
|
159
|
+
.DS_Store
|
|
160
|
+
|
|
161
|
+
.floo
|
|
162
|
+
.flooignore
|
|
163
|
+
.vscode
|
|
164
|
+
.vs
|
|
165
|
+
*.xml
|
|
166
|
+
*.iml
|
|
167
|
+
media
|
|
168
|
+
**/media/
|
|
169
|
+
.eggs/
|
|
170
|
+
build/
|
|
171
|
+
dist/
|
|
172
|
+
|
|
173
|
+
/media_dir.txt
|
|
174
|
+
# ^TODO: Remove the need for this with a proper config file
|
|
175
|
+
|
|
176
|
+
# Ignore the built dependencies
|
|
177
|
+
third_party/*
|
|
178
|
+
|
|
179
|
+
/debug/
|
|
180
|
+
/tests/output_errors/
|
|
181
|
+
/scratch/
|
|
182
|
+
/tests/full_renders/output_errors/
|
|
183
|
+
|
|
184
|
+
# Session scratch (briefs for subagents, interim measurements)
|
|
185
|
+
/scratch_*
|
|
186
|
+
|
|
187
|
+
# The renderer audit's Three.js back end (benchmarks/renderer_audit/three_render.mjs)
|
|
188
|
+
# needs three + three-gpu-pathtracer + playwright installed beside it; the
|
|
189
|
+
# script's header says how. Reference renders are regenerated, not committed.
|
|
190
|
+
benchmarks/renderer_audit/node_modules/
|
|
191
|
+
benchmarks/renderer_audit/package.json
|
|
192
|
+
benchmarks/renderer_audit/package-lock.json
|
|
193
|
+
|
|
194
|
+
# What benchmarks/_mps_torch_op_probe.py writes in CI, for the artifact and
|
|
195
|
+
# for the end-of-job replay. A measurement of the machine it ran on.
|
|
196
|
+
torch-op-probe.txt
|
|
197
|
+
pytest-output.txt
|
|
198
|
+
compile-trace.txt
|
|
199
|
+
|
|
200
|
+
# Written by algan/utils/profiling_utils.py into the working directory
|
|
201
|
+
algan_profile_report*.txt
|
|
202
|
+
|
|
203
|
+
# The patched Quadrants wheels `scripts/build_quadrants_wheels.py` downloads.
|
|
204
|
+
# 20-30 MiB each and a full matrix is twelve of them, so the bytes stay out of
|
|
205
|
+
# git for the reason the render baselines do (`tests/README.md`, "Where the
|
|
206
|
+
# heavy baselines live"). The manifest beside them IS committed: it carries the
|
|
207
|
+
# run id, the commit and a sha256 per wheel and per patch, so which wheel a
|
|
208
|
+
# measurement was taken on stays recoverable without the wheel being here.
|
|
209
|
+
/quadrants_wheels/*
|
|
210
|
+
!/quadrants_wheels/manifest.json
|
algan-0.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-2026 Algorithmic Simplicity
|
|
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.
|
algan-0.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: algan
|
|
3
|
+
Version: 0.0.0
|
|
4
|
+
Summary: The simplest animation engine for 3D graphics.
|
|
5
|
+
Project-URL: repository, https://github.com/algorithmicsimplicity/algan
|
|
6
|
+
Project-URL: documentation, https://algorithmicsimplicity.github.io/algan
|
|
7
|
+
Project-URL: homepage, https://github.com/algorithmicsimplicity/algan
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/algorithmicsimplicity/algan/issues
|
|
9
|
+
Project-URL: X / Twitter, https://x.com/algorithmicsimplicity
|
|
10
|
+
Project-URL: Discord, https://discord.gg/NvarFmvXKm
|
|
11
|
+
Author-email: Algorithmic Simplicity <algorithmicsimplicity@gmail.com>
|
|
12
|
+
License-Expression: MIT
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
License-File: algan/external_libraries/ground/LICENSE
|
|
15
|
+
License-File: algan/external_libraries/manim/LICENSE
|
|
16
|
+
License-File: algan/external_libraries/manim/LICENSE.community
|
|
17
|
+
License-File: algan/external_libraries/sect/LICENSE
|
|
18
|
+
Classifier: Development Status :: 4 - Beta
|
|
19
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
20
|
+
Classifier: Natural Language :: English
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Multimedia :: Graphics
|
|
26
|
+
Classifier: Topic :: Multimedia :: Video
|
|
27
|
+
Classifier: Topic :: Scientific/Engineering
|
|
28
|
+
Requires-Python: <3.14,>=3.10
|
|
29
|
+
Requires-Dist: algan-quadrants==1.3.0.post2
|
|
30
|
+
Requires-Dist: beautifulsoup4>=4.12
|
|
31
|
+
Requires-Dist: decision>=0.3.0
|
|
32
|
+
Requires-Dist: decorator>=4.3.2
|
|
33
|
+
Requires-Dist: dendroid>=1.6.0
|
|
34
|
+
Requires-Dist: isosurfaces>=0.1.0
|
|
35
|
+
Requires-Dist: manimpango>=0.5.0; sys_platform != 'linux'
|
|
36
|
+
Requires-Dist: mapbox-earcut>=1.0.0
|
|
37
|
+
Requires-Dist: moviepy>=2.2.0
|
|
38
|
+
Requires-Dist: networkx>=2.6
|
|
39
|
+
Requires-Dist: numpy>=1.20.0
|
|
40
|
+
Requires-Dist: pillow>=9.0
|
|
41
|
+
Requires-Dist: prioq>=0.6.0
|
|
42
|
+
Requires-Dist: psutil>=6.1.1
|
|
43
|
+
Requires-Dist: pygltflib>=1.16
|
|
44
|
+
Requires-Dist: pygments>=2.0.0
|
|
45
|
+
Requires-Dist: pyttsx3>=2.0
|
|
46
|
+
Requires-Dist: reprit>=0.9.0
|
|
47
|
+
Requires-Dist: scipy>=1.8.0
|
|
48
|
+
Requires-Dist: setuptools>=61
|
|
49
|
+
Requires-Dist: skia-pathops>=0.7.0
|
|
50
|
+
Requires-Dist: svgelements>=1.0.0
|
|
51
|
+
Requires-Dist: torch>=2.0.0
|
|
52
|
+
Requires-Dist: tqdm>=4.51.0
|
|
53
|
+
Requires-Dist: trimesh>=4.0.0
|
|
54
|
+
Requires-Dist: typing-extensions>=4.12.0
|
|
55
|
+
Provides-Extra: audio
|
|
56
|
+
Requires-Dist: torchaudio>=2.0.0; extra == 'audio'
|
|
57
|
+
Requires-Dist: transformers>=4.30.0; extra == 'audio'
|
|
58
|
+
Provides-Extra: dev
|
|
59
|
+
Requires-Dist: furo>=2024.8.6; extra == 'dev'
|
|
60
|
+
Requires-Dist: gitpython>=3.1.44; extra == 'dev'
|
|
61
|
+
Requires-Dist: matplotlib>=3.9.4; extra == 'dev'
|
|
62
|
+
Requires-Dist: myst-parser>=3.0.1; extra == 'dev'
|
|
63
|
+
Requires-Dist: opencv-python-headless<5,>=4.5; extra == 'dev'
|
|
64
|
+
Requires-Dist: parameterized>=0.9.0; extra == 'dev'
|
|
65
|
+
Requires-Dist: pyassimp>=5.0; extra == 'dev'
|
|
66
|
+
Requires-Dist: pygithub>=2.5.0; extra == 'dev'
|
|
67
|
+
Requires-Dist: pytest-cov>=6.0.0; extra == 'dev'
|
|
68
|
+
Requires-Dist: pytest-xdist<3.0,>=2.2; extra == 'dev'
|
|
69
|
+
Requires-Dist: requests>=2.32.3; extra == 'dev'
|
|
70
|
+
Requires-Dist: ruff>=0.9.3; extra == 'dev'
|
|
71
|
+
Requires-Dist: sphinx-copybutton>=0.5.2; extra == 'dev'
|
|
72
|
+
Requires-Dist: sphinx-design>=0.6.1; extra == 'dev'
|
|
73
|
+
Requires-Dist: sphinx-reredirects>=0.1.5; extra == 'dev'
|
|
74
|
+
Requires-Dist: sphinx>=7.4.7; extra == 'dev'
|
|
75
|
+
Requires-Dist: sphinxcontrib-programoutput>=0.18; extra == 'dev'
|
|
76
|
+
Requires-Dist: sphinxext-opengraph>=0.9.1; extra == 'dev'
|
|
77
|
+
Requires-Dist: taichi>=1.7.4; extra == 'dev'
|
|
78
|
+
Requires-Dist: torchaudio>=2.0.0; extra == 'dev'
|
|
79
|
+
Requires-Dist: transformers>=4.30.0; extra == 'dev'
|
|
80
|
+
Requires-Dist: types-decorator>=5.1.8.20250121; extra == 'dev'
|
|
81
|
+
Requires-Dist: types-pillow>=10.2.0.20240822; extra == 'dev'
|
|
82
|
+
Requires-Dist: types-pygments>=2.19.0.20250107; extra == 'dev'
|
|
83
|
+
Provides-Extra: fbx
|
|
84
|
+
Requires-Dist: pyassimp>=5.0; extra == 'fbx'
|
|
85
|
+
Provides-Extra: pango
|
|
86
|
+
Requires-Dist: manimpango>=0.5.0; extra == 'pango'
|
|
87
|
+
Provides-Extra: taichi
|
|
88
|
+
Requires-Dist: taichi>=1.7.4; extra == 'taichi'
|
|
89
|
+
Description-Content-Type: text/markdown
|
|
90
|
+
|
|
91
|
+
# Algan
|
|
92
|
+
|
|
93
|
+
<p align="center">
|
|
94
|
+
<strong>Full-featured 2D/3D programmatic animation engine for explanatory mathematics and technical videos.</strong>
|
|
95
|
+
</p>
|
|
96
|
+
|
|
97
|
+
<p align="center">
|
|
98
|
+
<a href="https://algorithmicsimplicity.github.io/algan"><img src="https://img.shields.io/badge/docs-algorithmicsimplicity.github.io%2Falgan-blue.svg" alt="Documentation" /></a>
|
|
99
|
+
<a href="https://pypi.org/project/algan/"><img src="https://img.shields.io/pypi/v/algan.svg" alt="PyPI version" /></a>
|
|
100
|
+
<a href="https://pypi.org/project/algan/"><img src="https://img.shields.io/pypi/pyversions/algan.svg" alt="Python versions" /></a>
|
|
101
|
+
<a href="https://discord.gg/NvarFmvXKm"><img src="https://img.shields.io/badge/Discord-chat-7289da.svg?logo=discord&logoColor=white" alt="Discord Community" /></a>
|
|
102
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-green.svg" alt="License: MIT" /></a>
|
|
103
|
+
</p>
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
Algan is designed to be a successor to Manim with full-featured 3-D raytracing capabilities.
|
|
108
|
+
|
|
109
|
+
As seen on [AlgorithmicSimplicity](https://www.youtube.com/@algorithmicsimplicity).
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Key Features
|
|
114
|
+
|
|
115
|
+
- **Manim Feature Parity**: Everything you know and love from Manim.
|
|
116
|
+
- **GPU Ray Tracing**: High-fidelity optical effects including depth of field, area lights, glossy reflections, refractive glass, and soft shadows.
|
|
117
|
+
- **Declarative Timeline Contexts**: Intuitive animation staging with `Seq()`, `Sync()`, `Lag()`, `Off()`, and `Speech()` blocks makes animation code modular and re-usable.
|
|
118
|
+
- **Unified 2D/3D Geometry**: Seamless morphing and interpolation between 2D Bézier circuits and 3D meshes with `become()`.
|
|
119
|
+
- **Audio & Speech Alignment**: Automatic word-level forced alignment to synchronize on-screen animations with narration.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Installation
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pip install algan
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Every dependency ships wheels, so there is nothing to build and no system
|
|
130
|
+
package to install first. The installed footprint is large (~5 GB on Linux,
|
|
131
|
+
mostly the CUDA build of `torch` and its NVIDIA dependencies).
|
|
132
|
+
|
|
133
|
+
### Optional: Pango text on Linux
|
|
134
|
+
|
|
135
|
+
`Text` typesets with your system fonts through Pango, which is installed with
|
|
136
|
+
Algan on Windows and macOS. `manimpango` publishes no Linux wheel, so on Linux
|
|
137
|
+
it is an extra instead — without it `Text` falls back to LaTeX's text mode, and
|
|
138
|
+
Manim's `MarkupText` and `Paragraph` are absent. Installing it builds Pango
|
|
139
|
+
from source and wants its headers first:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
sudo apt-get install -y build-essential python3-dev libpango1.0-dev pkg-config
|
|
143
|
+
pip install "algan[pango]"
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
For per-OS instructions (GPU acceleration, optional LaTeX for formulas, speech), see the [Installation Guide](https://algorithmicsimplicity.github.io/algan/installation.html).
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Quickstart
|
|
151
|
+
|
|
152
|
+
Save this script as `scene.py`:
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
from algan import *
|
|
156
|
+
|
|
157
|
+
# 1. Make 3-D objects with physical materials
|
|
158
|
+
sphere = Sphere(color=BLUE, radius=1.2)
|
|
159
|
+
sphere.set_material(
|
|
160
|
+
MeshPhysicalMaterial(
|
|
161
|
+
roughness=0.15,
|
|
162
|
+
metalness=0.1,
|
|
163
|
+
clearcoat=1.0,
|
|
164
|
+
clearcoat_roughness=0.08,
|
|
165
|
+
)
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
# 2. Define animation timeline with contexts
|
|
169
|
+
sphere.spawn()
|
|
170
|
+
with Sync(runtime=2):
|
|
171
|
+
sphere.move(RIGHT * 2)
|
|
172
|
+
sphere.rotate(180, OUT, about=ORIGIN)
|
|
173
|
+
sphere.color = RED
|
|
174
|
+
|
|
175
|
+
# 3. Render video
|
|
176
|
+
Scene.save_video("quickstart.mp4")
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Run with Python or the Algan CLI:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
# Using python
|
|
183
|
+
python scene.py
|
|
184
|
+
|
|
185
|
+
# Using the algan CLI
|
|
186
|
+
algan render scene.py
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
The output video will be written to `algan_outputs/quickstart.mp4`.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Command Line Interface (CLI)
|
|
194
|
+
|
|
195
|
+
Algan includes a first-class CLI:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
algan check # Verify PyTorch, GPU acceleration, the kernel compiler, FFmpeg, LaTeX & paths
|
|
199
|
+
algan new my_scene.py # Scaffold a new scene script
|
|
200
|
+
algan render my_scene.py # Render scene to video
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
`render` takes `-q {preview,ld,md,hd,production,uhd}` for the video preset and
|
|
204
|
+
`-o` for the directory or file to write to. Both fill in what the script leaves
|
|
205
|
+
open: a `Scene.save_video("intro")` still decides the name, and a path with a
|
|
206
|
+
directory in it still decides everything.
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
algan render my_scene.py -q hd -o renders/ # renders/intro.mp4, at HD
|
|
210
|
+
algan render my_scene.py --no-daemon -- --seed 7 # fresh process, args forwarded
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
A scene script may have a command line of its own (such as a
|
|
214
|
+
[`Project`](https://algorithmicsimplicity.github.io/algan/reference/algan.project.Project.html)
|
|
215
|
+
calling `run_cli()`) so any argument this CLI does not recognise is
|
|
216
|
+
forwarded to it, as is everything after `--`:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
algan render project.py -q hd --render-video intro # -q ours, --render-video the project's
|
|
220
|
+
algan render project.py -- --help # the project's help, not ours
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Where both name the same thing, the script wins: `-q` sets the default preset,
|
|
224
|
+
and a `Project`'s own `--video-settings` (or its `video_settings=` argument)
|
|
225
|
+
overrides it.
|
|
226
|
+
|
|
227
|
+
### The warm render daemon
|
|
228
|
+
|
|
229
|
+
The first render of a session pays several seconds of library import plus
|
|
230
|
+
Taichi kernel preparation. Algan pays that once: the first `python scene.py`
|
|
231
|
+
starts a background daemon, and every later run hands its script to that warm
|
|
232
|
+
process and starts rendering in about a second. Nothing is launched
|
|
233
|
+
differently — it happens inside `import algan`.
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
algan daemon # run one in this terminal (Enter re-renders, q quits)
|
|
237
|
+
algan daemon ping # is one running?
|
|
238
|
+
algan daemon render # re-render the last script (bind an editor key to it)
|
|
239
|
+
algan daemon quit # stop it (algan daemon --stop is the same)
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Those verbs each carry the token from the daemon's state file
|
|
243
|
+
(`$ALGAN_HOME/daemon.json`, default `~/.algan`), which is also where the port
|
|
244
|
+
lives — the daemon prefers 46711 and falls back to an ephemeral port when it is
|
|
245
|
+
taken.
|
|
246
|
+
|
|
247
|
+
**A script served by the daemon runs in another process**, and three things
|
|
248
|
+
follow from that:
|
|
249
|
+
|
|
250
|
+
- everything above `import algan` runs **twice** — once in your process, once
|
|
251
|
+
in the daemon — so keep side effects below the import;
|
|
252
|
+
- `atexit` handlers do not run, because the warm process never shuts down;
|
|
253
|
+
- `stdin` is `/dev/null`, since the daemon's own stdin is its re-render trigger.
|
|
254
|
+
|
|
255
|
+
Everything else is reproduced: `sys.argv`, the working directory, the full
|
|
256
|
+
environment, stdout/stderr (including from ffmpeg and other subprocesses),
|
|
257
|
+
their tty-ness, and the exit code. `ALGAN_USE_DAEMON=0` runs in-process,
|
|
258
|
+
`ALGAN_AUTO_DAEMON=0` only stops new ones being started, and a script being
|
|
259
|
+
debugged is never handed off.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Documentation
|
|
264
|
+
|
|
265
|
+
- **Documentation**: [https://algorithmicsimplicity.github.io/algan](https://algorithmicsimplicity.github.io/algan)
|
|
266
|
+
- **Tutorials**: [New User Tutorials](https://algorithmicsimplicity.github.io/algan/new_user_tutorials/index.html)
|
|
267
|
+
- **Discord Community**: [Join our Discord](https://discord.gg/NvarFmvXKm)
|
|
268
|
+
- **Issue Tracker**: [GitHub Issues](https://github.com/algorithmicsimplicity/algan/issues)
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## License
|
|
273
|
+
|
|
274
|
+
Algan is licensed under the MIT License (see [LICENSE](LICENSE)). Copyright © Algorithmic Simplicity.
|
algan-0.0.0/README.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Algan
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<strong>Full-featured 2D/3D programmatic animation engine for explanatory mathematics and technical videos.</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://algorithmicsimplicity.github.io/algan"><img src="https://img.shields.io/badge/docs-algorithmicsimplicity.github.io%2Falgan-blue.svg" alt="Documentation" /></a>
|
|
9
|
+
<a href="https://pypi.org/project/algan/"><img src="https://img.shields.io/pypi/v/algan.svg" alt="PyPI version" /></a>
|
|
10
|
+
<a href="https://pypi.org/project/algan/"><img src="https://img.shields.io/pypi/pyversions/algan.svg" alt="Python versions" /></a>
|
|
11
|
+
<a href="https://discord.gg/NvarFmvXKm"><img src="https://img.shields.io/badge/Discord-chat-7289da.svg?logo=discord&logoColor=white" alt="Discord Community" /></a>
|
|
12
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-green.svg" alt="License: MIT" /></a>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
Algan is designed to be a successor to Manim with full-featured 3-D raytracing capabilities.
|
|
18
|
+
|
|
19
|
+
As seen on [AlgorithmicSimplicity](https://www.youtube.com/@algorithmicsimplicity).
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Key Features
|
|
24
|
+
|
|
25
|
+
- **Manim Feature Parity**: Everything you know and love from Manim.
|
|
26
|
+
- **GPU Ray Tracing**: High-fidelity optical effects including depth of field, area lights, glossy reflections, refractive glass, and soft shadows.
|
|
27
|
+
- **Declarative Timeline Contexts**: Intuitive animation staging with `Seq()`, `Sync()`, `Lag()`, `Off()`, and `Speech()` blocks makes animation code modular and re-usable.
|
|
28
|
+
- **Unified 2D/3D Geometry**: Seamless morphing and interpolation between 2D Bézier circuits and 3D meshes with `become()`.
|
|
29
|
+
- **Audio & Speech Alignment**: Automatic word-level forced alignment to synchronize on-screen animations with narration.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Installation
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pip install algan
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Every dependency ships wheels, so there is nothing to build and no system
|
|
40
|
+
package to install first. The installed footprint is large (~5 GB on Linux,
|
|
41
|
+
mostly the CUDA build of `torch` and its NVIDIA dependencies).
|
|
42
|
+
|
|
43
|
+
### Optional: Pango text on Linux
|
|
44
|
+
|
|
45
|
+
`Text` typesets with your system fonts through Pango, which is installed with
|
|
46
|
+
Algan on Windows and macOS. `manimpango` publishes no Linux wheel, so on Linux
|
|
47
|
+
it is an extra instead — without it `Text` falls back to LaTeX's text mode, and
|
|
48
|
+
Manim's `MarkupText` and `Paragraph` are absent. Installing it builds Pango
|
|
49
|
+
from source and wants its headers first:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
sudo apt-get install -y build-essential python3-dev libpango1.0-dev pkg-config
|
|
53
|
+
pip install "algan[pango]"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
For per-OS instructions (GPU acceleration, optional LaTeX for formulas, speech), see the [Installation Guide](https://algorithmicsimplicity.github.io/algan/installation.html).
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Quickstart
|
|
61
|
+
|
|
62
|
+
Save this script as `scene.py`:
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
from algan import *
|
|
66
|
+
|
|
67
|
+
# 1. Make 3-D objects with physical materials
|
|
68
|
+
sphere = Sphere(color=BLUE, radius=1.2)
|
|
69
|
+
sphere.set_material(
|
|
70
|
+
MeshPhysicalMaterial(
|
|
71
|
+
roughness=0.15,
|
|
72
|
+
metalness=0.1,
|
|
73
|
+
clearcoat=1.0,
|
|
74
|
+
clearcoat_roughness=0.08,
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
# 2. Define animation timeline with contexts
|
|
79
|
+
sphere.spawn()
|
|
80
|
+
with Sync(runtime=2):
|
|
81
|
+
sphere.move(RIGHT * 2)
|
|
82
|
+
sphere.rotate(180, OUT, about=ORIGIN)
|
|
83
|
+
sphere.color = RED
|
|
84
|
+
|
|
85
|
+
# 3. Render video
|
|
86
|
+
Scene.save_video("quickstart.mp4")
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Run with Python or the Algan CLI:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Using python
|
|
93
|
+
python scene.py
|
|
94
|
+
|
|
95
|
+
# Using the algan CLI
|
|
96
|
+
algan render scene.py
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
The output video will be written to `algan_outputs/quickstart.mp4`.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Command Line Interface (CLI)
|
|
104
|
+
|
|
105
|
+
Algan includes a first-class CLI:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
algan check # Verify PyTorch, GPU acceleration, the kernel compiler, FFmpeg, LaTeX & paths
|
|
109
|
+
algan new my_scene.py # Scaffold a new scene script
|
|
110
|
+
algan render my_scene.py # Render scene to video
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
`render` takes `-q {preview,ld,md,hd,production,uhd}` for the video preset and
|
|
114
|
+
`-o` for the directory or file to write to. Both fill in what the script leaves
|
|
115
|
+
open: a `Scene.save_video("intro")` still decides the name, and a path with a
|
|
116
|
+
directory in it still decides everything.
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
algan render my_scene.py -q hd -o renders/ # renders/intro.mp4, at HD
|
|
120
|
+
algan render my_scene.py --no-daemon -- --seed 7 # fresh process, args forwarded
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
A scene script may have a command line of its own (such as a
|
|
124
|
+
[`Project`](https://algorithmicsimplicity.github.io/algan/reference/algan.project.Project.html)
|
|
125
|
+
calling `run_cli()`) so any argument this CLI does not recognise is
|
|
126
|
+
forwarded to it, as is everything after `--`:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
algan render project.py -q hd --render-video intro # -q ours, --render-video the project's
|
|
130
|
+
algan render project.py -- --help # the project's help, not ours
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Where both name the same thing, the script wins: `-q` sets the default preset,
|
|
134
|
+
and a `Project`'s own `--video-settings` (or its `video_settings=` argument)
|
|
135
|
+
overrides it.
|
|
136
|
+
|
|
137
|
+
### The warm render daemon
|
|
138
|
+
|
|
139
|
+
The first render of a session pays several seconds of library import plus
|
|
140
|
+
Taichi kernel preparation. Algan pays that once: the first `python scene.py`
|
|
141
|
+
starts a background daemon, and every later run hands its script to that warm
|
|
142
|
+
process and starts rendering in about a second. Nothing is launched
|
|
143
|
+
differently — it happens inside `import algan`.
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
algan daemon # run one in this terminal (Enter re-renders, q quits)
|
|
147
|
+
algan daemon ping # is one running?
|
|
148
|
+
algan daemon render # re-render the last script (bind an editor key to it)
|
|
149
|
+
algan daemon quit # stop it (algan daemon --stop is the same)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Those verbs each carry the token from the daemon's state file
|
|
153
|
+
(`$ALGAN_HOME/daemon.json`, default `~/.algan`), which is also where the port
|
|
154
|
+
lives — the daemon prefers 46711 and falls back to an ephemeral port when it is
|
|
155
|
+
taken.
|
|
156
|
+
|
|
157
|
+
**A script served by the daemon runs in another process**, and three things
|
|
158
|
+
follow from that:
|
|
159
|
+
|
|
160
|
+
- everything above `import algan` runs **twice** — once in your process, once
|
|
161
|
+
in the daemon — so keep side effects below the import;
|
|
162
|
+
- `atexit` handlers do not run, because the warm process never shuts down;
|
|
163
|
+
- `stdin` is `/dev/null`, since the daemon's own stdin is its re-render trigger.
|
|
164
|
+
|
|
165
|
+
Everything else is reproduced: `sys.argv`, the working directory, the full
|
|
166
|
+
environment, stdout/stderr (including from ffmpeg and other subprocesses),
|
|
167
|
+
their tty-ness, and the exit code. `ALGAN_USE_DAEMON=0` runs in-process,
|
|
168
|
+
`ALGAN_AUTO_DAEMON=0` only stops new ones being started, and a script being
|
|
169
|
+
debugged is never handed off.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Documentation
|
|
174
|
+
|
|
175
|
+
- **Documentation**: [https://algorithmicsimplicity.github.io/algan](https://algorithmicsimplicity.github.io/algan)
|
|
176
|
+
- **Tutorials**: [New User Tutorials](https://algorithmicsimplicity.github.io/algan/new_user_tutorials/index.html)
|
|
177
|
+
- **Discord Community**: [Join our Discord](https://discord.gg/NvarFmvXKm)
|
|
178
|
+
- **Issue Tracker**: [GitHub Issues](https://github.com/algorithmicsimplicity/algan/issues)
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## License
|
|
183
|
+
|
|
184
|
+
Algan is licensed under the MIT License (see [LICENSE](LICENSE)). Copyright © Algorithmic Simplicity.
|