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.
Files changed (639) hide show
  1. algan-0.0.0/.gitignore +210 -0
  2. algan-0.0.0/LICENSE +21 -0
  3. algan-0.0.0/PKG-INFO +274 -0
  4. algan-0.0.0/README.md +184 -0
  5. algan-0.0.0/algan/__init__.py +563 -0
  6. algan-0.0.0/algan/animatable_base/__init__.py +0 -0
  7. algan-0.0.0/algan/animatable_base/animatable.py +1944 -0
  8. algan-0.0.0/algan/animatable_base/mob.py +2398 -0
  9. algan-0.0.0/algan/animatable_base/mob_hierarchy.py +424 -0
  10. algan-0.0.0/algan/animatable_base/mob_layout.py +1056 -0
  11. algan-0.0.0/algan/animatable_base/mob_materials.py +472 -0
  12. algan-0.0.0/algan/animatable_base/mob_morph.py +1712 -0
  13. algan-0.0.0/algan/animatable_base/mob_movement.py +767 -0
  14. algan-0.0.0/algan/animatable_base/mob_orientation.py +402 -0
  15. algan-0.0.0/algan/animatable_base/morph_conversions.py +477 -0
  16. algan-0.0.0/algan/animation_timeline/__init__.py +0 -0
  17. algan-0.0.0/algan/animation_timeline/animation_contexts.py +1415 -0
  18. algan-0.0.0/algan/animation_timeline/timeline.py +3833 -0
  19. algan-0.0.0/algan/animation_timeline/utils_taichi.py +81 -0
  20. algan-0.0.0/algan/animations/__init__.py +5 -0
  21. algan-0.0.0/algan/animations/changing.py +166 -0
  22. algan-0.0.0/algan/animations/indication.py +893 -0
  23. algan-0.0.0/algan/animations/manim_animations.py +144 -0
  24. algan-0.0.0/algan/animations/movement.py +598 -0
  25. algan-0.0.0/algan/constants/__init__.py +0 -0
  26. algan-0.0.0/algan/constants/color.py +596 -0
  27. algan-0.0.0/algan/constants/easings.py +405 -0
  28. algan-0.0.0/algan/constants/material_presets.py +67 -0
  29. algan-0.0.0/algan/constants/math.py +52 -0
  30. algan-0.0.0/algan/constants/spatial.py +66 -0
  31. algan-0.0.0/algan/daemon.py +1368 -0
  32. algan-0.0.0/algan/daemon_client.py +880 -0
  33. algan-0.0.0/algan/environment.py +544 -0
  34. algan-0.0.0/algan/errors.py +152 -0
  35. algan-0.0.0/algan/external_libraries/ground/LICENSE +31 -0
  36. algan-0.0.0/algan/external_libraries/ground/__init__.py +3 -0
  37. algan-0.0.0/algan/external_libraries/ground/base.py +2690 -0
  38. algan-0.0.0/algan/external_libraries/ground/core/__init__.py +0 -0
  39. algan-0.0.0/algan/external_libraries/ground/core/angular/__init__.py +32 -0
  40. algan-0.0.0/algan/external_libraries/ground/core/angular/exact/__init__.py +26 -0
  41. algan-0.0.0/algan/external_libraries/ground/core/arithmetic.py +9 -0
  42. algan-0.0.0/algan/external_libraries/ground/core/boxed.py +85 -0
  43. algan-0.0.0/algan/external_libraries/ground/core/centroidal/__init__.py +105 -0
  44. algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/__init__.py +0 -0
  45. algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/contour.py +20 -0
  46. algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/multipoint.py +19 -0
  47. algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/multipolygon.py +32 -0
  48. algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/multisegment.py +21 -0
  49. algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/polygon.py +34 -0
  50. algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/region.py +27 -0
  51. algan-0.0.0/algan/external_libraries/ground/core/centroidal/exact/segment.py +11 -0
  52. algan-0.0.0/algan/external_libraries/ground/core/circular/__init__.py +26 -0
  53. algan-0.0.0/algan/external_libraries/ground/core/circular/exact/__init__.py +0 -0
  54. algan-0.0.0/algan/external_libraries/ground/core/circular/exact/point_point_point.py +30 -0
  55. algan-0.0.0/algan/external_libraries/ground/core/discrete.py +40 -0
  56. algan-0.0.0/algan/external_libraries/ground/core/enums.py +114 -0
  57. algan-0.0.0/algan/external_libraries/ground/core/geometries.py +279 -0
  58. algan-0.0.0/algan/external_libraries/ground/core/hints.py +283 -0
  59. algan-0.0.0/algan/external_libraries/ground/core/measured/__init__.py +24 -0
  60. algan-0.0.0/algan/external_libraries/ground/core/measured/exact/__init__.py +0 -0
  61. algan-0.0.0/algan/external_libraries/ground/core/measured/exact/region.py +17 -0
  62. algan-0.0.0/algan/external_libraries/ground/core/metric/__init__.py +97 -0
  63. algan-0.0.0/algan/external_libraries/ground/core/metric/exact/__init__.py +0 -0
  64. algan-0.0.0/algan/external_libraries/ground/core/metric/exact/box.py +153 -0
  65. algan-0.0.0/algan/external_libraries/ground/core/metric/exact/point.py +8 -0
  66. algan-0.0.0/algan/external_libraries/ground/core/metric/exact/segment.py +49 -0
  67. algan-0.0.0/algan/external_libraries/ground/core/packing.py +50 -0
  68. algan-0.0.0/algan/external_libraries/ground/core/primitive.py +27 -0
  69. algan-0.0.0/algan/external_libraries/ground/core/robust.py +23 -0
  70. algan-0.0.0/algan/external_libraries/ground/core/rotation/__init__.py +291 -0
  71. algan-0.0.0/algan/external_libraries/ground/core/rotation/exact.py +31 -0
  72. algan-0.0.0/algan/external_libraries/ground/core/scaling/__init__.py +366 -0
  73. algan-0.0.0/algan/external_libraries/ground/core/scaling/exact.py +13 -0
  74. algan-0.0.0/algan/external_libraries/ground/core/segment/__init__.py +171 -0
  75. algan-0.0.0/algan/external_libraries/ground/core/segment/exact.py +44 -0
  76. algan-0.0.0/algan/external_libraries/ground/core/translation/__init__.py +132 -0
  77. algan-0.0.0/algan/external_libraries/ground/core/translation/exact.py +11 -0
  78. algan-0.0.0/algan/external_libraries/ground/core/vector/__init__.py +33 -0
  79. algan-0.0.0/algan/external_libraries/ground/core/vector/exact/__init__.py +0 -0
  80. algan-0.0.0/algan/external_libraries/ground/core/vector/exact/cross.py +12 -0
  81. algan-0.0.0/algan/external_libraries/ground/core/vector/exact/dot.py +12 -0
  82. algan-0.0.0/algan/external_libraries/ground/hints.py +27 -0
  83. algan-0.0.0/algan/external_libraries/manim/LICENSE +21 -0
  84. algan-0.0.0/algan/external_libraries/manim/LICENSE.community +21 -0
  85. algan-0.0.0/algan/external_libraries/manim/VENDORING.md +109 -0
  86. algan-0.0.0/algan/external_libraries/manim/__init__.py +97 -0
  87. algan-0.0.0/algan/external_libraries/manim/_compat.py +44 -0
  88. algan-0.0.0/algan/external_libraries/manim/_config/__init__.py +89 -0
  89. algan-0.0.0/algan/external_libraries/manim/_config/default.cfg +238 -0
  90. algan-0.0.0/algan/external_libraries/manim/_config/utils.py +1940 -0
  91. algan-0.0.0/algan/external_libraries/manim/_pango.py +94 -0
  92. algan-0.0.0/algan/external_libraries/manim/animation/__init__.py +40 -0
  93. algan-0.0.0/algan/external_libraries/manim/animation/animation.py +41 -0
  94. algan-0.0.0/algan/external_libraries/manim/animation/composition.py +19 -0
  95. algan-0.0.0/algan/external_libraries/manim/animation/creation.py +27 -0
  96. algan-0.0.0/algan/external_libraries/manim/animation/fading.py +19 -0
  97. algan-0.0.0/algan/external_libraries/manim/animation/growing.py +19 -0
  98. algan-0.0.0/algan/external_libraries/manim/animation/indication.py +11 -0
  99. algan-0.0.0/algan/external_libraries/manim/animation/transform.py +20 -0
  100. algan-0.0.0/algan/external_libraries/manim/animation/updaters/__init__.py +1 -0
  101. algan-0.0.0/algan/external_libraries/manim/animation/updaters/update.py +15 -0
  102. algan-0.0.0/algan/external_libraries/manim/constants.py +342 -0
  103. algan-0.0.0/algan/external_libraries/manim/data_structures.py +31 -0
  104. algan-0.0.0/algan/external_libraries/manim/mobject/__init__.py +0 -0
  105. algan-0.0.0/algan/external_libraries/manim/mobject/frame.py +41 -0
  106. algan-0.0.0/algan/external_libraries/manim/mobject/geometry/__init__.py +16 -0
  107. algan-0.0.0/algan/external_libraries/manim/mobject/geometry/arc.py +1388 -0
  108. algan-0.0.0/algan/external_libraries/manim/mobject/geometry/boolean_ops.py +323 -0
  109. algan-0.0.0/algan/external_libraries/manim/mobject/geometry/labeled.py +378 -0
  110. algan-0.0.0/algan/external_libraries/manim/mobject/geometry/line.py +1233 -0
  111. algan-0.0.0/algan/external_libraries/manim/mobject/geometry/polygram.py +865 -0
  112. algan-0.0.0/algan/external_libraries/manim/mobject/geometry/shape_matchers.py +216 -0
  113. algan-0.0.0/algan/external_libraries/manim/mobject/geometry/tips.py +342 -0
  114. algan-0.0.0/algan/external_libraries/manim/mobject/graph.py +1811 -0
  115. algan-0.0.0/algan/external_libraries/manim/mobject/graphing/__init__.py +14 -0
  116. algan-0.0.0/algan/external_libraries/manim/mobject/graphing/coordinate_systems.py +3516 -0
  117. algan-0.0.0/algan/external_libraries/manim/mobject/graphing/functions.py +336 -0
  118. algan-0.0.0/algan/external_libraries/manim/mobject/graphing/number_line.py +710 -0
  119. algan-0.0.0/algan/external_libraries/manim/mobject/graphing/probability.py +559 -0
  120. algan-0.0.0/algan/external_libraries/manim/mobject/graphing/scale.py +201 -0
  121. algan-0.0.0/algan/external_libraries/manim/mobject/logo.py +338 -0
  122. algan-0.0.0/algan/external_libraries/manim/mobject/matrix.py +648 -0
  123. algan-0.0.0/algan/external_libraries/manim/mobject/mobject.py +3559 -0
  124. algan-0.0.0/algan/external_libraries/manim/mobject/opengl/__init__.py +13 -0
  125. algan-0.0.0/algan/external_libraries/manim/mobject/opengl/_placeholder.py +25 -0
  126. algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_compatibility.py +23 -0
  127. algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_mobject.py +15 -0
  128. algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_point_cloud_mobject.py +11 -0
  129. algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_surface.py +11 -0
  130. algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_three_dimensions.py +7 -0
  131. algan-0.0.0/algan/external_libraries/manim/mobject/opengl/opengl_vectorized_mobject.py +15 -0
  132. algan-0.0.0/algan/external_libraries/manim/mobject/svg/__init__.py +11 -0
  133. algan-0.0.0/algan/external_libraries/manim/mobject/svg/brace.py +468 -0
  134. algan-0.0.0/algan/external_libraries/manim/mobject/svg/svg_mobject.py +693 -0
  135. algan-0.0.0/algan/external_libraries/manim/mobject/table.py +1212 -0
  136. algan-0.0.0/algan/external_libraries/manim/mobject/text/__init__.py +14 -0
  137. algan-0.0.0/algan/external_libraries/manim/mobject/text/code_mobject.py +372 -0
  138. algan-0.0.0/algan/external_libraries/manim/mobject/text/numbers.py +479 -0
  139. algan-0.0.0/algan/external_libraries/manim/mobject/text/tex_mobject.py +763 -0
  140. algan-0.0.0/algan/external_libraries/manim/mobject/text/text_mobject.py +1583 -0
  141. algan-0.0.0/algan/external_libraries/manim/mobject/three_d/__init__.py +12 -0
  142. algan-0.0.0/algan/external_libraries/manim/mobject/three_d/polyhedra.py +463 -0
  143. algan-0.0.0/algan/external_libraries/manim/mobject/three_d/three_d_utils.py +80 -0
  144. algan-0.0.0/algan/external_libraries/manim/mobject/three_d/three_dimensions.py +1351 -0
  145. algan-0.0.0/algan/external_libraries/manim/mobject/types/__init__.py +12 -0
  146. algan-0.0.0/algan/external_libraries/manim/mobject/types/image_mobject.py +360 -0
  147. algan-0.0.0/algan/external_libraries/manim/mobject/types/point_cloud_mobject.py +436 -0
  148. algan-0.0.0/algan/external_libraries/manim/mobject/types/vectorized_mobject.py +3061 -0
  149. algan-0.0.0/algan/external_libraries/manim/mobject/utils.py +107 -0
  150. algan-0.0.0/algan/external_libraries/manim/mobject/value_tracker.py +242 -0
  151. algan-0.0.0/algan/external_libraries/manim/mobject/vector_field.py +1090 -0
  152. algan-0.0.0/algan/external_libraries/manim/typing.py +1000 -0
  153. algan-0.0.0/algan/external_libraries/manim/utils/__init__.py +0 -0
  154. algan-0.0.0/algan/external_libraries/manim/utils/bezier.py +2084 -0
  155. algan-0.0.0/algan/external_libraries/manim/utils/color/AS2700.py +236 -0
  156. algan-0.0.0/algan/external_libraries/manim/utils/color/BS381.py +318 -0
  157. algan-0.0.0/algan/external_libraries/manim/utils/color/DVIPSNAMES.py +96 -0
  158. algan-0.0.0/algan/external_libraries/manim/utils/color/SVGNAMES.py +179 -0
  159. algan-0.0.0/algan/external_libraries/manim/utils/color/X11.py +533 -0
  160. algan-0.0.0/algan/external_libraries/manim/utils/color/XKCD.py +952 -0
  161. algan-0.0.0/algan/external_libraries/manim/utils/color/__init__.py +61 -0
  162. algan-0.0.0/algan/external_libraries/manim/utils/color/core.py +1664 -0
  163. algan-0.0.0/algan/external_libraries/manim/utils/color/manim_colors.py +223 -0
  164. algan-0.0.0/algan/external_libraries/manim/utils/config_ops.py +98 -0
  165. algan-0.0.0/algan/external_libraries/manim/utils/deprecation.py +536 -0
  166. algan-0.0.0/algan/external_libraries/manim/utils/exceptions.py +19 -0
  167. algan-0.0.0/algan/external_libraries/manim/utils/family.py +43 -0
  168. algan-0.0.0/algan/external_libraries/manim/utils/family_ops.py +50 -0
  169. algan-0.0.0/algan/external_libraries/manim/utils/file_ops.py +305 -0
  170. algan-0.0.0/algan/external_libraries/manim/utils/images.py +71 -0
  171. algan-0.0.0/algan/external_libraries/manim/utils/iterables.py +482 -0
  172. algan-0.0.0/algan/external_libraries/manim/utils/parameter_parsing.py +32 -0
  173. algan-0.0.0/algan/external_libraries/manim/utils/paths.py +377 -0
  174. algan-0.0.0/algan/external_libraries/manim/utils/polylabel.py +235 -0
  175. algan-0.0.0/algan/external_libraries/manim/utils/qhull.py +219 -0
  176. algan-0.0.0/algan/external_libraries/manim/utils/rate_functions.py +525 -0
  177. algan-0.0.0/algan/external_libraries/manim/utils/simple_functions.py +139 -0
  178. algan-0.0.0/algan/external_libraries/manim/utils/space_ops.py +898 -0
  179. algan-0.0.0/algan/external_libraries/manim/utils/tex.py +201 -0
  180. algan-0.0.0/algan/external_libraries/manim/utils/tex_file_writing.py +364 -0
  181. algan-0.0.0/algan/external_libraries/manim/utils/tex_templates.py +1051 -0
  182. algan-0.0.0/algan/external_libraries/manim/utils/unit.py +39 -0
  183. algan-0.0.0/algan/external_libraries/manim_alias.py +107 -0
  184. algan-0.0.0/algan/external_libraries/readme.txt +29 -0
  185. algan-0.0.0/algan/external_libraries/sect/LICENSE +35 -0
  186. algan-0.0.0/algan/external_libraries/sect/__init__.py +0 -0
  187. algan-0.0.0/algan/external_libraries/sect/core/__init__.py +0 -0
  188. algan-0.0.0/algan/external_libraries/sect/core/hints.py +7 -0
  189. algan-0.0.0/algan/external_libraries/sect/core/utils.py +39 -0
  190. algan-0.0.0/algan/external_libraries/sect/event.py +129 -0
  191. algan-0.0.0/algan/external_libraries/sect/events_queue.py +190 -0
  192. algan-0.0.0/algan/external_libraries/sect/hints.py +9 -0
  193. algan-0.0.0/algan/external_libraries/sect/quad_edge.py +173 -0
  194. algan-0.0.0/algan/external_libraries/sect/sweep_line.py +82 -0
  195. algan-0.0.0/algan/external_libraries/sect/triangulation.py +518 -0
  196. algan-0.0.0/algan/external_libraries/sect/utils.py +147 -0
  197. algan-0.0.0/algan/geometry/__init__.py +0 -0
  198. algan-0.0.0/algan/geometry/geometry.py +732 -0
  199. algan-0.0.0/algan/logging/logger.py +321 -0
  200. algan-0.0.0/algan/manim/__init__.py +120 -0
  201. algan-0.0.0/algan/manim_defaults.py +254 -0
  202. algan-0.0.0/algan/mobs/__init__.py +0 -0
  203. algan-0.0.0/algan/mobs/bezier_circuit.py +1967 -0
  204. algan-0.0.0/algan/mobs/group.py +592 -0
  205. algan-0.0.0/algan/mobs/image_compat.py +267 -0
  206. algan-0.0.0/algan/mobs/image_mob.py +122 -0
  207. algan-0.0.0/algan/mobs/manim_adapters.py +773 -0
  208. algan-0.0.0/algan/mobs/manim_compat.py +1385 -0
  209. algan-0.0.0/algan/mobs/manim_mob.py +200 -0
  210. algan-0.0.0/algan/mobs/manim_parity.py +341 -0
  211. algan-0.0.0/algan/mobs/neural_nets/__init__.py +0 -0
  212. algan-0.0.0/algan/mobs/neural_nets/neural_net.py +1170 -0
  213. algan-0.0.0/algan/mobs/nonplanar_circuit.py +1148 -0
  214. algan-0.0.0/algan/mobs/numeric_display.py +326 -0
  215. algan-0.0.0/algan/mobs/opengl_compat.py +307 -0
  216. algan-0.0.0/algan/mobs/plots.py +356 -0
  217. algan-0.0.0/algan/mobs/pn_mesh.py +109 -0
  218. algan-0.0.0/algan/mobs/point_cloud.py +564 -0
  219. algan-0.0.0/algan/mobs/shapes_2d.py +1026 -0
  220. algan-0.0.0/algan/mobs/shapes_3d.py +2339 -0
  221. algan-0.0.0/algan/mobs/surfaces/__init__.py +0 -0
  222. algan-0.0.0/algan/mobs/surfaces/procedural_textures.py +826 -0
  223. algan-0.0.0/algan/mobs/surfaces/surface.py +4281 -0
  224. algan-0.0.0/algan/mobs/surfaces/surface_kernels_taichi.py +197 -0
  225. algan-0.0.0/algan/mobs/text.py +1266 -0
  226. algan-0.0.0/algan/mobs/three_d_models/__init__.py +30 -0
  227. algan-0.0.0/algan/mobs/three_d_models/animation.py +256 -0
  228. algan-0.0.0/algan/mobs/three_d_models/assimp_loader.py +339 -0
  229. algan-0.0.0/algan/mobs/three_d_models/gltf_loader.py +453 -0
  230. algan-0.0.0/algan/mobs/three_d_models/mesh.py +560 -0
  231. algan-0.0.0/algan/mobs/three_d_models/model_mob.py +589 -0
  232. algan-0.0.0/algan/mobs/three_d_models/scene_data.py +148 -0
  233. algan-0.0.0/algan/mobs/triangulated_bezier_circuit.py +1072 -0
  234. algan-0.0.0/algan/project.py +733 -0
  235. algan-0.0.0/algan/render_loop.py +3780 -0
  236. algan-0.0.0/algan/rendering/DESIGN_mps_support.md +1457 -0
  237. algan-0.0.0/algan/rendering/DESIGN_mps_zero_copy.md +474 -0
  238. algan-0.0.0/algan/rendering/__init__.py +0 -0
  239. algan-0.0.0/algan/rendering/arena_binding.py +250 -0
  240. algan-0.0.0/algan/rendering/camera.py +507 -0
  241. algan-0.0.0/algan/rendering/denoise/__init__.py +39 -0
  242. algan-0.0.0/algan/rendering/denoise/denoise.py +244 -0
  243. algan-0.0.0/algan/rendering/denoise/oidn_unet.py +135 -0
  244. algan-0.0.0/algan/rendering/denoise/tza.py +82 -0
  245. algan-0.0.0/algan/rendering/denoise/weights.py +136 -0
  246. algan-0.0.0/algan/rendering/fragment_capture.py +143 -0
  247. algan-0.0.0/algan/rendering/lights.py +774 -0
  248. algan-0.0.0/algan/rendering/logical_pn.py +1037 -0
  249. algan-0.0.0/algan/rendering/memory_model.py +542 -0
  250. algan-0.0.0/algan/rendering/mps_compat.py +590 -0
  251. algan-0.0.0/algan/rendering/mps_zero_copy.py +661 -0
  252. algan-0.0.0/algan/rendering/post_processing/__init__.py +11 -0
  253. algan-0.0.0/algan/rendering/post_processing/anti_aliasing/AreaTex.png +0 -0
  254. algan-0.0.0/algan/rendering/post_processing/anti_aliasing/SearchTex.png +0 -0
  255. algan-0.0.0/algan/rendering/post_processing/anti_aliasing/__init__.py +0 -0
  256. algan-0.0.0/algan/rendering/post_processing/anti_aliasing/fxaa.py +200 -0
  257. algan-0.0.0/algan/rendering/post_processing/anti_aliasing/smaa.py +532 -0
  258. algan-0.0.0/algan/rendering/post_processing/bloom.py +867 -0
  259. algan-0.0.0/algan/rendering/post_processing/bloom_kernels_taichi.py +134 -0
  260. algan-0.0.0/algan/rendering/post_processing/post_process.py +480 -0
  261. algan-0.0.0/algan/rendering/post_processing/tonemap_kernels_taichi.py +83 -0
  262. algan-0.0.0/algan/rendering/primitives/bezier_circuit_primitive.py +225 -0
  263. algan-0.0.0/algan/rendering/primitives/primitive.py +106 -0
  264. algan-0.0.0/algan/rendering/primitives/triangle_primitive.py +312 -0
  265. algan-0.0.0/algan/rendering/primitives/triangle_primitive_kernels_taichi.py +80 -0
  266. algan-0.0.0/algan/rendering/raytracing/DESIGN_analytic_aa.md +2218 -0
  267. algan-0.0.0/algan/rendering/raytracing/DESIGN_analytic_aa_v2.md +881 -0
  268. algan-0.0.0/algan/rendering/raytracing/DESIGN_glossy_prefilter.md +376 -0
  269. algan-0.0.0/algan/rendering/raytracing/DESIGN_hybrid_raster.md +1029 -0
  270. algan-0.0.0/algan/rendering/raytracing/DESIGN_mesh_identity.md +3394 -0
  271. algan-0.0.0/algan/rendering/raytracing/DESIGN_mesh_identity_open.md +884 -0
  272. algan-0.0.0/algan/rendering/raytracing/DESIGN_path_tracer_roadmap.md +2095 -0
  273. algan-0.0.0/algan/rendering/raytracing/DESIGN_physical_area_lights.md +59 -0
  274. algan-0.0.0/algan/rendering/raytracing/DESIGN_sheet_resolve.md +1037 -0
  275. algan-0.0.0/algan/rendering/raytracing/__init__.py +75 -0
  276. algan-0.0.0/algan/rendering/raytracing/area_light_quads.py +397 -0
  277. algan-0.0.0/algan/rendering/raytracing/arena_args_taichi.py +362 -0
  278. algan-0.0.0/algan/rendering/raytracing/background_taichi.py +55 -0
  279. algan-0.0.0/algan/rendering/raytracing/bezier_acceleration.py +359 -0
  280. algan-0.0.0/algan/rendering/raytracing/blue_noise.py +80 -0
  281. algan-0.0.0/algan/rendering/raytracing/color_space_taichi.py +61 -0
  282. algan-0.0.0/algan/rendering/raytracing/data/blue_noise_tile_64.npy +0 -0
  283. algan-0.0.0/algan/rendering/raytracing/device_sort.py +245 -0
  284. algan-0.0.0/algan/rendering/raytracing/glossy_prefilter_taichi.py +335 -0
  285. algan-0.0.0/algan/rendering/raytracing/light_tree.py +434 -0
  286. algan-0.0.0/algan/rendering/raytracing/logical_pn_taichi.py +499 -0
  287. algan-0.0.0/algan/rendering/raytracing/path_tracer.py +1686 -0
  288. algan-0.0.0/algan/rendering/raytracing/path_tracer_taichi.py +4066 -0
  289. algan-0.0.0/algan/rendering/raytracing/primitives.py +3558 -0
  290. algan-0.0.0/algan/rendering/raytracing/pt_media.py +72 -0
  291. algan-0.0.0/algan/rendering/raytracing/pt_media_taichi.py +408 -0
  292. algan-0.0.0/algan/rendering/raytracing/radix_sort_taichi.py +149 -0
  293. algan-0.0.0/algan/rendering/raytracing/raster_pipeline.py +2736 -0
  294. algan-0.0.0/algan/rendering/raytracing/raster_taichi.py +3213 -0
  295. algan-0.0.0/algan/rendering/raytracing/raytrace_kernels_taichi.py +3504 -0
  296. algan-0.0.0/algan/rendering/raytracing/refit_bvh.py +618 -0
  297. algan-0.0.0/algan/rendering/raytracing/refit_bvh_taichi.py +117 -0
  298. algan-0.0.0/algan/rendering/raytracing/scene_builder.py +2791 -0
  299. algan-0.0.0/algan/rendering/raytracing/settings.py +3883 -0
  300. algan-0.0.0/algan/rendering/raytracing/shading_taichi.py +1833 -0
  301. algan-0.0.0/algan/rendering/raytracing/sheet_compact_taichi.py +800 -0
  302. algan-0.0.0/algan/rendering/raytracing/sheet_depth_taichi.py +96 -0
  303. algan-0.0.0/algan/rendering/raytracing/sheet_metadata_taichi.py +34 -0
  304. algan-0.0.0/algan/rendering/raytracing/sheet_rank_groups_taichi.py +24 -0
  305. algan-0.0.0/algan/rendering/raytracing/sheet_resolve_taichi.py +1439 -0
  306. algan-0.0.0/algan/rendering/raytracing/sheet_sibling_taichi.py +65 -0
  307. algan-0.0.0/algan/rendering/raytracing/sheet_sort_taichi.py +123 -0
  308. algan-0.0.0/algan/rendering/raytracing/sheets.py +2403 -0
  309. algan-0.0.0/algan/rendering/raytracing/sliver_split.py +196 -0
  310. algan-0.0.0/algan/rendering/raytracing/stbvh.py +904 -0
  311. algan-0.0.0/algan/rendering/raytracing/tracer.py +3877 -0
  312. algan-0.0.0/algan/rendering/raytracing/truncation.py +361 -0
  313. algan-0.0.0/algan/rendering/raytracing/utils.py +84 -0
  314. algan-0.0.0/algan/rendering/raytracing/wavefront_kernels_taichi.py +3763 -0
  315. algan-0.0.0/algan/rendering/shaders/__init__.py +4 -0
  316. algan-0.0.0/algan/rendering/shaders/fragment_shaders.py +436 -0
  317. algan-0.0.0/algan/rendering/shaders/fragment_stage_library.py +227 -0
  318. algan-0.0.0/algan/rendering/shaders/material_shaders.py +990 -0
  319. algan-0.0.0/algan/rendering/shaders/materials.py +1010 -0
  320. algan-0.0.0/algan/rendering/shaders/pbr_shaders.py +173 -0
  321. algan-0.0.0/algan/rendering/taichi_runtime.py +1246 -0
  322. algan-0.0.0/algan/scene.py +1795 -0
  323. algan-0.0.0/algan/scene_manager.py +145 -0
  324. algan-0.0.0/algan/scenes/default_scene.py +24 -0
  325. algan-0.0.0/algan/settings/__init__.py +64 -0
  326. algan-0.0.0/algan/settings/_startup.py +192 -0
  327. algan-0.0.0/algan/settings/abstract_settings.py +390 -0
  328. algan-0.0.0/algan/settings/computing_settings.py +340 -0
  329. algan-0.0.0/algan/settings/kernel_settings.py +15 -0
  330. algan-0.0.0/algan/settings/path_settings.py +121 -0
  331. algan-0.0.0/algan/settings/raytracing_settings.py +717 -0
  332. algan-0.0.0/algan/settings/renderer_settings.py +36 -0
  333. algan-0.0.0/algan/settings/root_settings.py +129 -0
  334. algan-0.0.0/algan/settings/shape_style_profiles.py +223 -0
  335. algan-0.0.0/algan/settings/style_settings.py +118 -0
  336. algan-0.0.0/algan/settings/video_settings.py +157 -0
  337. algan-0.0.0/algan/sound/audio_effect.py +101 -0
  338. algan-0.0.0/algan/taichi_compat.py +296 -0
  339. algan-0.0.0/algan/utils/__init__.py +0 -0
  340. algan-0.0.0/algan/utils/algan_utils.py +881 -0
  341. algan-0.0.0/algan/utils/animation_utils.py +96 -0
  342. algan-0.0.0/algan/utils/api_renames.py +124 -0
  343. algan-0.0.0/algan/utils/audio_utils.py +314 -0
  344. algan-0.0.0/algan/utils/color_space.py +103 -0
  345. algan-0.0.0/algan/utils/docbuild/__init__.py +18 -0
  346. algan-0.0.0/algan/utils/docbuild/algan_directive.py +420 -0
  347. algan-0.0.0/algan/utils/docbuild/autoaliasattr_directive.py +234 -0
  348. algan-0.0.0/algan/utils/docbuild/autocolor_directive.py +95 -0
  349. algan-0.0.0/algan/utils/docbuild/module_parsing.py +254 -0
  350. algan-0.0.0/algan/utils/file_utils.py +77 -0
  351. algan-0.0.0/algan/utils/lazy_import.py +56 -0
  352. algan-0.0.0/algan/utils/manim_svg_cache.py +511 -0
  353. algan-0.0.0/algan/utils/memory_utils.py +1186 -0
  354. algan-0.0.0/algan/utils/mob_utils.py +324 -0
  355. algan-0.0.0/algan/utils/plotting_utils.py +58 -0
  356. algan-0.0.0/algan/utils/profiling_utils.py +1651 -0
  357. algan-0.0.0/algan/utils/python_utils.py +81 -0
  358. algan-0.0.0/algan/utils/singleton.py +35 -0
  359. algan-0.0.0/algan/utils/taichi_early_return.py +998 -0
  360. algan-0.0.0/algan/utils/taichi_fast_launch.py +706 -0
  361. algan-0.0.0/algan/utils/taichi_source_key.py +1283 -0
  362. algan-0.0.0/algan/utils/taichi_utils.py +15 -0
  363. algan-0.0.0/algan/utils/taichi_warmstart.py +567 -0
  364. algan-0.0.0/algan/utils/tensor_utils.py +620 -0
  365. algan-0.0.0/algan/utils/torch_compile.py +377 -0
  366. algan-0.0.0/algan/utils/video_encoding.py +471 -0
  367. algan-0.0.0/algan/viewer/__init__.py +7 -0
  368. algan-0.0.0/algan/viewer/hierarchy.py +242 -0
  369. algan-0.0.0/algan/viewer/pixels.py +370 -0
  370. algan-0.0.0/algan/viewer/server.py +290 -0
  371. algan-0.0.0/algan/viewer/session.py +677 -0
  372. algan-0.0.0/algan/viewer/static/index.html +77 -0
  373. algan-0.0.0/algan/viewer/static/viewer.css +205 -0
  374. algan-0.0.0/algan/viewer/static/viewer.js +619 -0
  375. algan-0.0.0/algan/viewer/viewer.py +124 -0
  376. algan-0.0.0/algan_cli.py +635 -0
  377. algan-0.0.0/pyproject.toml +452 -0
  378. algan-0.0.0/quadrants_patches/0001-metal-zero-copy-ndarray.patch +413 -0
  379. algan-0.0.0/quadrants_patches/0002-metal-codegen-and-diagnostics.patch +313 -0
  380. algan-0.0.0/quadrants_patches/0003-pre-volta-cuda.patch +118 -0
  381. algan-0.0.0/quadrants_patches/0004-llvm-invariant-load-kernel-args.patch +135 -0
  382. algan-0.0.0/quadrants_patches/0005-cuda-max-reg.patch +423 -0
  383. algan-0.0.0/quadrants_patches/0006-cuda-readonly-ndarray-ldg.patch +177 -0
  384. algan-0.0.0/quadrants_patches/0007-cuda-fast-expf.patch +40 -0
  385. algan-0.0.0/quadrants_patches/0008-aarch64-shared-libgcc.patch +19 -0
  386. algan-0.0.0/quadrants_patches/PORTING-NOTES.md +847 -0
  387. algan-0.0.0/quadrants_patches/PYPI.md +164 -0
  388. algan-0.0.0/quadrants_patches/README.md +910 -0
  389. algan-0.0.0/quadrants_patches/verify_cuda_patches.py +342 -0
  390. algan-0.0.0/quadrants_patches/verify_invariant_load.py +218 -0
  391. algan-0.0.0/scripts/build_quadrants_wheels.py +721 -0
  392. algan-0.0.0/scripts/cleanup_mac_branches.py +147 -0
  393. algan-0.0.0/scripts/gate/backend_pixel_ab.py +306 -0
  394. algan-0.0.0/scripts/gate/build_portable_quadrants_llvm.sh +223 -0
  395. algan-0.0.0/scripts/gate/metal_repro_8745.sh +65 -0
  396. algan-0.0.0/scripts/gate/mps_crash_diagnose.sh +181 -0
  397. algan-0.0.0/scripts/gate/mps_probe_quadrants.sh +264 -0
  398. algan-0.0.0/scripts/gate/mps_vs_cpu_ab.sh +123 -0
  399. algan-0.0.0/scripts/gate/quadrants_glibc34_smoke.py +30 -0
  400. algan-0.0.0/scripts/gate/quadrants_linux_build.sh +276 -0
  401. algan-0.0.0/scripts/gate/quadrants_macos_build.sh +594 -0
  402. algan-0.0.0/scripts/gate/report_wheel.sh +82 -0
  403. algan-0.0.0/scripts/gate/taichi_macos_build.sh +527 -0
  404. algan-0.0.0/scripts/gate/verify_baseline_pointer.py +190 -0
  405. algan-0.0.0/scripts/gate/verify_license_notices.py +151 -0
  406. algan-0.0.0/scripts/gate/verify_wheel_tag.py +174 -0
  407. algan-0.0.0/scripts/generate_blue_noise_tile.py +497 -0
  408. algan-0.0.0/scripts/gpu_smoke.py +80 -0
  409. algan-0.0.0/scripts/kaggle/make_notebook.py +245 -0
  410. algan-0.0.0/scripts/kaggle/read_output.py +103 -0
  411. algan-0.0.0/scripts/kaggle/runner.py +369 -0
  412. algan-0.0.0/scripts/package_baselines.py +257 -0
  413. algan-0.0.0/scripts/rebrand_quadrants_wheel.py +403 -0
  414. algan-0.0.0/scripts/run_ci.py +996 -0
  415. algan-0.0.0/scripts/validate_quadrants_release.py +73 -0
  416. algan-0.0.0/scripts/vendor_manim.py +1484 -0
  417. algan-0.0.0/taichi_patches/0001-metal-zero-copy-ndarray.patch +325 -0
  418. algan-0.0.0/taichi_patches/0002-metal-codegen-and-diagnostics.patch +387 -0
  419. algan-0.0.0/taichi_patches/0003-literal-operator-whitespace.patch +106 -0
  420. algan-0.0.0/taichi_patches/MIGRATION.md +611 -0
  421. algan-0.0.0/taichi_patches/PLAN.md +864 -0
  422. algan-0.0.0/taichi_patches/README.md +183 -0
  423. algan-0.0.0/tests/README.md +675 -0
  424. algan-0.0.0/tests/assets/fonts/AlganTestMono-Bold.ttf +0 -0
  425. algan-0.0.0/tests/assets/fonts/AlganTestMono-BoldItalic.ttf +0 -0
  426. algan-0.0.0/tests/assets/fonts/AlganTestMono-Italic.ttf +0 -0
  427. algan-0.0.0/tests/assets/fonts/AlganTestMono-Regular.ttf +0 -0
  428. algan-0.0.0/tests/assets/fonts/AlganTestSans-Bold.ttf +0 -0
  429. algan-0.0.0/tests/assets/fonts/AlganTestSans-BoldItalic.ttf +0 -0
  430. algan-0.0.0/tests/assets/fonts/AlganTestSans-Italic.ttf +0 -0
  431. algan-0.0.0/tests/assets/fonts/AlganTestSans-Regular.ttf +0 -0
  432. algan-0.0.0/tests/assets/fonts/LICENSE.txt +134 -0
  433. algan-0.0.0/tests/baseline_store.py +442 -0
  434. algan-0.0.0/tests/baselines.json +43 -0
  435. algan-0.0.0/tests/conftest.py +568 -0
  436. algan-0.0.0/tests/fast/expected_outputs_cpu/fast.mp4 +0 -0
  437. algan-0.0.0/tests/fast/expected_outputs_cuda/fast.mp4 +0 -0
  438. algan-0.0.0/tests/fast/scene.py +164 -0
  439. algan-0.0.0/tests/fast/test_fast_render.py +187 -0
  440. algan-0.0.0/tests/full_renders/assets/textured_icosphere.glb +0 -0
  441. algan-0.0.0/tests/full_renders/assets/world_map.jpg +0 -0
  442. algan-0.0.0/tests/full_renders/scenes/complex_hierarchy_become.py +171 -0
  443. algan-0.0.0/tests/full_renders/scenes/manim_compat_and_plots.py +211 -0
  444. algan-0.0.0/tests/full_renders/scenes/materials_and_lighting.py +261 -0
  445. algan-0.0.0/tests/full_renders/scenes/shapes_and_timeline.py +479 -0
  446. algan-0.0.0/tests/full_renders/scenes/solids_and_camera.py +274 -0
  447. algan-0.0.0/tests/full_renders/scenes/text_and_media.py +227 -0
  448. algan-0.0.0/tests/full_renders/test_full_renders.py +252 -0
  449. algan-0.0.0/tests/mps_known_failures.py +81 -0
  450. algan-0.0.0/tests/path_traced/scenes/authored_under_many_lights.py +70 -0
  451. algan-0.0.0/tests/path_traced/scenes/environment_and_refraction.py +46 -0
  452. algan-0.0.0/tests/path_traced/scenes/lit_and_shadowed.py +53 -0
  453. algan-0.0.0/tests/path_traced/scenes/translucency_and_order.py +39 -0
  454. algan-0.0.0/tests/path_traced/test_path_traced.py +291 -0
  455. algan-0.0.0/tests/unit_tests/pt_media_probe_taichi.py +59 -0
  456. algan-0.0.0/tests/unit_tests/public_api_snapshot.txt +382 -0
  457. algan-0.0.0/tests/unit_tests/test_active_timeline_materialization.py +208 -0
  458. algan-0.0.0/tests/unit_tests/test_analytic_aa_gates.py +181 -0
  459. algan-0.0.0/tests/unit_tests/test_area_light_soft_shadow.py +317 -0
  460. algan-0.0.0/tests/unit_tests/test_arena_args.py +449 -0
  461. algan-0.0.0/tests/unit_tests/test_arena_binding.py +159 -0
  462. algan-0.0.0/tests/unit_tests/test_arena_binding_live.py +235 -0
  463. algan-0.0.0/tests/unit_tests/test_authoring_contracts.py +529 -0
  464. algan-0.0.0/tests/unit_tests/test_background_image.py +85 -0
  465. algan-0.0.0/tests/unit_tests/test_baseline_store.py +446 -0
  466. algan-0.0.0/tests/unit_tests/test_batch_preparation_devices.py +119 -0
  467. algan-0.0.0/tests/unit_tests/test_batched_bezier_mobs.py +246 -0
  468. algan-0.0.0/tests/unit_tests/test_batched_surface_mobs.py +296 -0
  469. algan-0.0.0/tests/unit_tests/test_bezier_curve_sampling.py +347 -0
  470. algan-0.0.0/tests/unit_tests/test_bezier_group_runs.py +204 -0
  471. algan-0.0.0/tests/unit_tests/test_bloom_device_parity.py +135 -0
  472. algan-0.0.0/tests/unit_tests/test_cap_disc_rim.py +147 -0
  473. algan-0.0.0/tests/unit_tests/test_circuit_texture_grid.py +347 -0
  474. algan-0.0.0/tests/unit_tests/test_cli.py +458 -0
  475. algan-0.0.0/tests/unit_tests/test_cli_startup.py +106 -0
  476. algan-0.0.0/tests/unit_tests/test_closed_shell_ceiling.py +223 -0
  477. algan-0.0.0/tests/unit_tests/test_closed_shell_declaration.py +585 -0
  478. algan-0.0.0/tests/unit_tests/test_color_array_inputs.py +98 -0
  479. algan-0.0.0/tests/unit_tests/test_color_decode_boundary.py +194 -0
  480. algan-0.0.0/tests/unit_tests/test_color_grid_broadcasting.py +67 -0
  481. algan-0.0.0/tests/unit_tests/test_color_space.py +182 -0
  482. algan-0.0.0/tests/unit_tests/test_coplanar_z_index.py +287 -0
  483. algan-0.0.0/tests/unit_tests/test_daemon_client.py +726 -0
  484. algan-0.0.0/tests/unit_tests/test_daemon_run_context.py +239 -0
  485. algan-0.0.0/tests/unit_tests/test_daemon_socket.py +203 -0
  486. algan-0.0.0/tests/unit_tests/test_daemon_staleness.py +127 -0
  487. algan-0.0.0/tests/unit_tests/test_default_material.py +165 -0
  488. algan-0.0.0/tests/unit_tests/test_default_shader_albedo.py +127 -0
  489. algan-0.0.0/tests/unit_tests/test_deferred_bvh_arena.py +139 -0
  490. algan-0.0.0/tests/unit_tests/test_deferred_shadow_samples.py +109 -0
  491. algan-0.0.0/tests/unit_tests/test_denoise.py +553 -0
  492. algan-0.0.0/tests/unit_tests/test_deterministic_shadow_opacity.py +152 -0
  493. algan-0.0.0/tests/unit_tests/test_device_sort.py +269 -0
  494. algan-0.0.0/tests/unit_tests/test_dielectric_fresnel.py +268 -0
  495. algan-0.0.0/tests/unit_tests/test_direct_specular_lobe.py +261 -0
  496. algan-0.0.0/tests/unit_tests/test_display_referred_coverage.py +175 -0
  497. algan-0.0.0/tests/unit_tests/test_doc_builder.py +29 -0
  498. algan-0.0.0/tests/unit_tests/test_doc_examples.py +588 -0
  499. algan-0.0.0/tests/unit_tests/test_easings.py +220 -0
  500. algan-0.0.0/tests/unit_tests/test_easings_and_ux.py +182 -0
  501. algan-0.0.0/tests/unit_tests/test_environment.py +383 -0
  502. algan-0.0.0/tests/unit_tests/test_fast_suite_curation.py +75 -0
  503. algan-0.0.0/tests/unit_tests/test_fbx_import.py +543 -0
  504. algan-0.0.0/tests/unit_tests/test_frag_pid_gate.py +99 -0
  505. algan-0.0.0/tests/unit_tests/test_fragment_shaders.py +195 -0
  506. algan-0.0.0/tests/unit_tests/test_glossy_prefilter.py +663 -0
  507. algan-0.0.0/tests/unit_tests/test_gpu_harness.py +344 -0
  508. algan-0.0.0/tests/unit_tests/test_import_side_effects.py +124 -0
  509. algan-0.0.0/tests/unit_tests/test_indication_animations.py +304 -0
  510. algan-0.0.0/tests/unit_tests/test_kernel_control_flow.py +106 -0
  511. algan-0.0.0/tests/unit_tests/test_lifecycle.py +71 -0
  512. algan-0.0.0/tests/unit_tests/test_lights.py +232 -0
  513. algan-0.0.0/tests/unit_tests/test_lit_bsdf_sidedness.py +127 -0
  514. algan-0.0.0/tests/unit_tests/test_logging.py +254 -0
  515. algan-0.0.0/tests/unit_tests/test_logical_pn_tessellation.py +1063 -0
  516. algan-0.0.0/tests/unit_tests/test_mac_branch_cleanup.py +123 -0
  517. algan-0.0.0/tests/unit_tests/test_mac_depth_buffer_ab.py +109 -0
  518. algan-0.0.0/tests/unit_tests/test_manim_adapter_conventions.py +323 -0
  519. algan-0.0.0/tests/unit_tests/test_manim_animation_audit.py +443 -0
  520. algan-0.0.0/tests/unit_tests/test_manim_compat_movement.py +310 -0
  521. algan-0.0.0/tests/unit_tests/test_manim_compat_scene_registration.py +204 -0
  522. algan-0.0.0/tests/unit_tests/test_manim_compat_sync.py +132 -0
  523. algan-0.0.0/tests/unit_tests/test_manim_defaults.py +311 -0
  524. algan-0.0.0/tests/unit_tests/test_manim_docstring_examples.py +119 -0
  525. algan-0.0.0/tests/unit_tests/test_manim_mobject_parity.py +352 -0
  526. algan-0.0.0/tests/unit_tests/test_manim_shader.py +130 -0
  527. algan-0.0.0/tests/unit_tests/test_manim_shader_render.py +565 -0
  528. algan-0.0.0/tests/unit_tests/test_manim_svg_cache.py +263 -0
  529. algan-0.0.0/tests/unit_tests/test_manual_memory.py +387 -0
  530. algan-0.0.0/tests/unit_tests/test_materials.py +770 -0
  531. algan-0.0.0/tests/unit_tests/test_memory_model.py +423 -0
  532. algan-0.0.0/tests/unit_tests/test_mesh_identity.py +559 -0
  533. algan-0.0.0/tests/unit_tests/test_missing_tool_errors.py +93 -0
  534. algan-0.0.0/tests/unit_tests/test_mob_layout.py +257 -0
  535. algan-0.0.0/tests/unit_tests/test_mob_movement.py +154 -0
  536. algan-0.0.0/tests/unit_tests/test_mob_orientation.py +90 -0
  537. algan-0.0.0/tests/unit_tests/test_mob_reparenting.py +535 -0
  538. algan-0.0.0/tests/unit_tests/test_morph_become.py +577 -0
  539. algan-0.0.0/tests/unit_tests/test_morph_become_audit.py +674 -0
  540. algan-0.0.0/tests/unit_tests/test_move_to_edge_inset.py +124 -0
  541. algan-0.0.0/tests/unit_tests/test_mps_friendly.py +1090 -0
  542. algan-0.0.0/tests/unit_tests/test_mps_known_failures.py +82 -0
  543. algan-0.0.0/tests/unit_tests/test_mps_zero_copy.py +267 -0
  544. algan-0.0.0/tests/unit_tests/test_nested_ior.py +239 -0
  545. algan-0.0.0/tests/unit_tests/test_neural_net_idle.py +174 -0
  546. algan-0.0.0/tests/unit_tests/test_nonplanar_circuits.py +475 -0
  547. algan-0.0.0/tests/unit_tests/test_normal_orientation.py +419 -0
  548. algan-0.0.0/tests/unit_tests/test_numeric_display.py +114 -0
  549. algan-0.0.0/tests/unit_tests/test_parent_child_basis.py +129 -0
  550. algan-0.0.0/tests/unit_tests/test_path_tracer.py +3651 -0
  551. algan-0.0.0/tests/unit_tests/test_phong_specular_normalization.py +206 -0
  552. algan-0.0.0/tests/unit_tests/test_pn_mesh.py +112 -0
  553. algan-0.0.0/tests/unit_tests/test_point_cloud_rendering.py +148 -0
  554. algan-0.0.0/tests/unit_tests/test_post_processing_memory.py +111 -0
  555. algan-0.0.0/tests/unit_tests/test_preflight_overlap.py +655 -0
  556. algan-0.0.0/tests/unit_tests/test_premultiplied_over.py +359 -0
  557. algan-0.0.0/tests/unit_tests/test_primary_shadow_sort.py +39 -0
  558. algan-0.0.0/tests/unit_tests/test_procedural_textures.py +191 -0
  559. algan-0.0.0/tests/unit_tests/test_profiler_bounce_attribution.py +114 -0
  560. algan-0.0.0/tests/unit_tests/test_profiler_kernel_discovery.py +75 -0
  561. algan-0.0.0/tests/unit_tests/test_profiler_stage_attribution.py +93 -0
  562. algan-0.0.0/tests/unit_tests/test_project.py +285 -0
  563. algan-0.0.0/tests/unit_tests/test_pt_media.py +614 -0
  564. algan-0.0.0/tests/unit_tests/test_public_api_surface.py +167 -0
  565. algan-0.0.0/tests/unit_tests/test_quadrants_distribution.py +236 -0
  566. algan-0.0.0/tests/unit_tests/test_quadrants_warning_filter.py +28 -0
  567. algan-0.0.0/tests/unit_tests/test_quadrants_wheels.py +1064 -0
  568. algan-0.0.0/tests/unit_tests/test_ray_sort_keys.py +71 -0
  569. algan-0.0.0/tests/unit_tests/test_raytracing_unit.py +421 -0
  570. algan-0.0.0/tests/unit_tests/test_refit_bvh.py +195 -0
  571. algan-0.0.0/tests/unit_tests/test_refit_link_decode.py +43 -0
  572. algan-0.0.0/tests/unit_tests/test_render_batch_sizing.py +657 -0
  573. algan-0.0.0/tests/unit_tests/test_render_coverage_audit.py +317 -0
  574. algan-0.0.0/tests/unit_tests/test_render_output_pipeline.py +255 -0
  575. algan-0.0.0/tests/unit_tests/test_render_truncations.py +478 -0
  576. algan-0.0.0/tests/unit_tests/test_rgb_shadow_payload.py +476 -0
  577. algan-0.0.0/tests/unit_tests/test_rough_dielectric.py +216 -0
  578. algan-0.0.0/tests/unit_tests/test_scene_actor_registration.py +315 -0
  579. algan-0.0.0/tests/unit_tests/test_scene_arena_upload.py +304 -0
  580. algan-0.0.0/tests/unit_tests/test_scene_containment.py +183 -0
  581. algan-0.0.0/tests/unit_tests/test_screen_relative_camera_frame.py +285 -0
  582. algan-0.0.0/tests/unit_tests/test_secondary_tap_counts.py +228 -0
  583. algan-0.0.0/tests/unit_tests/test_settings_api.py +858 -0
  584. algan-0.0.0/tests/unit_tests/test_shading_sidedness.py +209 -0
  585. algan-0.0.0/tests/unit_tests/test_shadow_flags.py +346 -0
  586. algan-0.0.0/tests/unit_tests/test_shadow_identity_epsilon.py +127 -0
  587. algan-0.0.0/tests/unit_tests/test_shadow_terminator.py +345 -0
  588. algan-0.0.0/tests/unit_tests/test_shadow_vis_slots.py +87 -0
  589. algan-0.0.0/tests/unit_tests/test_shape_anchors.py +199 -0
  590. algan-0.0.0/tests/unit_tests/test_shape_style_profiles.py +275 -0
  591. algan-0.0.0/tests/unit_tests/test_sheet_chain_kernels.py +530 -0
  592. algan-0.0.0/tests/unit_tests/test_sheet_compaction.py +1216 -0
  593. algan-0.0.0/tests/unit_tests/test_sheet_depth.py +154 -0
  594. algan-0.0.0/tests/unit_tests/test_sheet_group_reuse.py +47 -0
  595. algan-0.0.0/tests/unit_tests/test_sheet_metadata.py +94 -0
  596. algan-0.0.0/tests/unit_tests/test_sheet_packed_sort.py +170 -0
  597. algan-0.0.0/tests/unit_tests/test_sheet_pixel_sort.py +166 -0
  598. algan-0.0.0/tests/unit_tests/test_sheet_rank_groups.py +98 -0
  599. algan-0.0.0/tests/unit_tests/test_sheet_sibling_weights.py +158 -0
  600. algan-0.0.0/tests/unit_tests/test_sliver_split.py +194 -0
  601. algan-0.0.0/tests/unit_tests/test_spatial_constants.py +92 -0
  602. algan-0.0.0/tests/unit_tests/test_surface_autotune.py +237 -0
  603. algan-0.0.0/tests/unit_tests/test_surface_parametric_ranges.py +212 -0
  604. algan-0.0.0/tests/unit_tests/test_surface_prep_kernels.py +258 -0
  605. algan-0.0.0/tests/unit_tests/test_surface_shape_and_image_mob.py +245 -0
  606. algan-0.0.0/tests/unit_tests/test_surface_texture_locations.py +282 -0
  607. algan-0.0.0/tests/unit_tests/test_surface_welding.py +148 -0
  608. algan-0.0.0/tests/unit_tests/test_taichi_background.py +89 -0
  609. algan-0.0.0/tests/unit_tests/test_taichi_compat.py +125 -0
  610. algan-0.0.0/tests/unit_tests/test_taichi_early_return.py +1571 -0
  611. algan-0.0.0/tests/unit_tests/test_taichi_fast_launch.py +308 -0
  612. algan-0.0.0/tests/unit_tests/test_taichi_launch_pairing.py +205 -0
  613. algan-0.0.0/tests/unit_tests/test_taichi_runtime_config.py +646 -0
  614. algan-0.0.0/tests/unit_tests/test_taichi_source_key.py +866 -0
  615. algan-0.0.0/tests/unit_tests/test_taichi_warmstart.py +323 -0
  616. algan-0.0.0/tests/unit_tests/test_tessellation_cache.py +123 -0
  617. algan-0.0.0/tests/unit_tests/test_texture_opacity_u8.py +252 -0
  618. algan-0.0.0/tests/unit_tests/test_texture_seam_wrapping.py +252 -0
  619. algan-0.0.0/tests/unit_tests/test_texture_time_lerp.py +422 -0
  620. algan-0.0.0/tests/unit_tests/test_texture_timeline_memory.py +215 -0
  621. algan-0.0.0/tests/unit_tests/test_timeline_overlap.py +265 -0
  622. algan-0.0.0/tests/unit_tests/test_timeline_state_query.py +147 -0
  623. algan-0.0.0/tests/unit_tests/test_tonemapping.py +504 -0
  624. algan-0.0.0/tests/unit_tests/test_torch_compile.py +286 -0
  625. algan-0.0.0/tests/unit_tests/test_transparent_output.py +165 -0
  626. algan-0.0.0/tests/unit_tests/test_updater_mob_creation.py +155 -0
  627. algan-0.0.0/tests/unit_tests/test_ux_regressions.py +2043 -0
  628. algan-0.0.0/tests/unit_tests/test_verify_baseline_pointer.py +200 -0
  629. algan-0.0.0/tests/unit_tests/test_video_encoding.py +340 -0
  630. algan-0.0.0/tests/unit_tests/test_viewer_fragments.py +300 -0
  631. algan-0.0.0/tests/unit_tests/test_viewer_server.py +334 -0
  632. algan-0.0.0/tests/unit_tests/test_volume_absorption.py +183 -0
  633. algan-0.0.0/tests/unit_tests/test_watertight_triangle.py +200 -0
  634. algan-0.0.0/tests/unit_tests/test_wave_color_resolution.py +487 -0
  635. algan-0.0.0/tests/unit_tests/test_wavefront_compaction.py +272 -0
  636. algan-0.0.0/tests/unit_tests/test_weight_floor_exit.py +187 -0
  637. algan-0.0.0/tests/unit_tests/test_wide_attr_device.py +207 -0
  638. algan-0.0.0/tests/world_map.jpg +0 -0
  639. 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 &copy; 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 &copy; Algorithmic Simplicity.