* Only use -no-pdf for xelatex rendering
* Instead of tracking du and dv points on surface, track points off the surface in the normal direction
This means that surface shading will not necessarily work well for arbitrary transformations of the surface. But the existing solution was flimsy anyway, and caused annoying issues with singularity points.
* Have density of anchor points on arcs depend on arc length
* Allow for specifying true normals and orientation of Sphere
* Change miter threshold on stroke shader
* Add get_start_and_end to DashedLine
* Add min_total_width option to DecimalNumber
* Have BackgroundRectangle.set_style absorb (and ignore) added configuration
Note, this feels suboptimal
* Add LineBrace
* Update font_size adjustment in Tex
* Add scale_factor parameter to BulletedList.fade_all_but
* Minor import tweaks
* Add play_sound
* Comment tweak
* Directly print traceback
Since the shell.showtraceback is giving some issues
* Make InteracrtiveSceneEmbed into a class
This way it can keep track of it's internal shell; use of get_ipython has a finicky relationship with reloading.
* Move remaining checkpoint_paste logic into scene_embed.py
This involved making a few context managers for Scene: temp_record, temp_skip, temp_progress_bar, which seem useful in and of themselves.
* Change null key to be the empty string
* Ensure temporary svg paths for Text are deleted
* Remove unused dict_ops.py functions
* Remove break_into_partial_movies from file_writer configuration
* Rewrite guarantee_existence using Path
* Clean up SceneFileWriter
It had a number of vestigial functions no longer used, and some setup that could be made more organized.
* Remove --save_pngs CLI arg (which did nothing)
* Add --subdivide CLI arg
* Remove add_extension_if_not_present
* Remove get_sorted_integer_files
* Have find_file return Path
* Minor clean up
* Clean up num_tex_symbols
* Fix find_file
* Minor cleanup for extract_scene.py
* Add preview_frame_while_skipping option to scene config
* Use shell.showtraceback function
* Move keybindings to config, instead of in-place constants
* Replace DEGREES -> DEG
* Comment tweak
* Directly print traceback
Since the shell.showtraceback is giving some issues
* Make InteracrtiveSceneEmbed into a class
This way it can keep track of it's internal shell; use of get_ipython has a finicky relationship with reloading.
* Move remaining checkpoint_paste logic into scene_embed.py
This involved making a few context managers for Scene: temp_record, temp_skip, temp_progress_bar, which seem useful in and of themselves.
* Change null key to be the empty string
This simply didn't work, and had no resilience to changes to the library. For cases where this might be useful, it's likely much better deliberately save specific data which is time-consuming to generate on the fly.
* Experiment a lot with module loading
* Extract methods out of experimental mess
* Fix get module return type
* Only reload() modules during reload() command
* Remove unnecessary default parameter
* Add docstrings and logging statements
* Delete unwanted printout
* Improve logging messages
* Extract methods to a new class ModuleLoader
* Remove unused builtins import
* exec_module in any case at the end
* Clarify docstrings & move get_module method up in file
* Add more additionally excluded modules as array
* Distinguish between user-defined modules and external libraries like numpy
* Improved tracked_import docstring
* Remove _insert_embed suffix before logging
* Fix args.is_reload not defined error
* Refine logic to determine whether module is user-defined or not
* Fix list vs. set type annotations
* Improve docstrings & change order of early return
* Fix spelling mistake of "Reloading"
* Try out custom deep reload
* Make deep reload more robust
* Also reload modules imported as classes
* Move early return up to greatly improve performance
* Clean up comments
* Make methods of Module Loader "private"
* Add backticks around function in docstring
---------
Co-authored-by: Grant Sanderson <grant@3blue1brown.com>
* Remove print("Reloading...")
* Change where exception mode is set, to be quieter
* Add default fallback monitor for when no monitors are detected
* Have StringMobject work with svg strings rather than necessarily writing to file
Change SVGMobject to allow taking in a string of svg code as an input
* Add caching functionality, and have Tex and Text both use it for saved svg strings
* Clean up tex_file_writing
* Get rid of get_tex_dir and get_text_dir
* Allow for a configurable cache location
* Make caching on disk a decorator, and update implementations for Tex and Text mobjects
* Remove stray prints
* Clean up how configuration is handled
In principle, all we need here is that manim looks to the default_config.yaml file, and updates it based on any local configuration files, whether in the current working directory or as specified by a CLI argument.
* Make the default size for hash_string an option
* Remove utils/customization.py
* Remove stray prints
* Consolidate camera configuration
This is still not optimal, but at least makes clearer the way that importing from constants.py kicks off some of the configuration code.
* Factor out configuration to be passed into a scene vs. that used to run a scene
* Use newer extract_scene.main interface
* Add clarifying message to note what exactly is being reloaded
* Minor clean up
* Minor clean up
* If it's worth caching to disk, then might as well do so in memory too during development
* No longer any need for custom hash_seeds in Tex and Text
* Remove display_during_execution
* Get rid of (no longer used) mobject_data directory reference
* Remove get_downloads_dir reference from register_font
* Update where downloads go
* Easier use of subdirectories in configuration
* Add new pip requirements
* Init reload command (lots of things not working yet)
* Add back in class line (accidentally deleted)
* Add back in key modifiers (accidentally deleted)
* Unpack tuple from changed `get_module`
* Init MainRunManager & respawn IPython shell
* Init cleanup of scenes from manager
* Restore string quotes
* Still take `self.preview` into account
* Remove left-over code from module experimentation
* Remove double window activation
* Reset scenes array in RunManager
* Move self.args None check up
* Use first available window
* Don't use constructor for RunManager
* Use self. syntax
* Init moderngl context manually
* Add some comments for failed attempts to reset scene
* Reuse existing shell (this fixed the bug 🎉)
* Remove unused code
* Remove unnecessary intermediate ReloadSceneException
* Allow users to finally exit
* Rename main_run_manager to reload_manager
* Add docstrings to `ReloadManager`
* Improve reset management in window
* Clarify why we use magic exit_raise command
* Add comment about window reuse
* Improve docstrings in ReloadManager & handle case of 0 scenes
* Set scene and title earlier
* Run linter suggestions
It seems this issues is no longer there in the case of list constructors(?). Although it still exists for functions defined within a cell, that can be circumvented with more explicit function arguments.
When the time intervals are (0, dt, 2dt, ...), during the first frame processing, only the video is inserted, but the update parameter is 0, which causes scene.time to be inaccurate. The correct time intervals should be (dt, 2dt, ...)