diff --git a/docs/source/posts/2024/2024-07-06-week5-wachiou-bouraima.rst b/docs/source/posts/2024/2024-07-06-week5-wachiou-bouraima.rst new file mode 100644 index 000000000..01a915125 --- /dev/null +++ b/docs/source/posts/2024/2024-07-06-week5-wachiou-bouraima.rst @@ -0,0 +1,112 @@ +WEEK 5: Implementing Lazy Loading in FURY with ``lazy_loader`` +============================================================== + +.. post:: July 6, 2024 + :author: Wachiou BOURAIMA + :tags: google + :category: gsoc + +Hello everyone, +--------------- + +Welcome back to my Google Summer of Code (GSoC) 2024 journey! This week has been particularly exciting as I introduced a significant performance optimization feature: lazy loading. Here's an overview of my progress and contributions. + + +**Introduction of lazy loading** +-------------------------------- + +This week, I focused on implementing the ``lazy_loader`` feature of `Scientific Python `_ to optimize module loading in FURY. Lazy loading improves performance by deferring the loading of modules until they are actually needed, thus reducing start-up times and memory footprint. + +The implementation involved: + +1. Implementation of Lazy Loading: + + - Application of lazy loading in several FURY modules using the ``lazy_loader`` module to improve performance + +2. Update ``__init__.py`` files: + + - Modified ``__init__.py`` files to support lazy loading where necessary. This ensures that modules are only loaded when they are accessed for the first time + +3. Added Type Stubs (``__init__.pyi``): + + - Adding type stubs (``__init__.pyi``) provides type hints for lazy-loading modules, improving code readability and maintainability + +4. **Improved module organization:** + + - Improved module organization in ``__init__.py`` and ``__init__.pyi`` files, to effectively support lazy loading. + + +**Example Implementation** +--------------------------- + +To give you an idea, here's the actual implementation of how lazy loading was done using the ``lazy_loader`` module in FURY: + +``__init__.py`` File: + +.. code-block:: python + + import lazy_loader as lazy + from fury.pkg_info import __version__, pkg_commit_hash + + __getattr__, __dir__, __all__ = lazy.attach_stub(__name__, __file__) + + _all__ += [ + "__version__", + "disable_warnings", + "enable_warnings", + "get_info", + ] + + # ... (functions) + +``__init__.pyi`` File: + +.. code-block:: python + + # This file is a stub type for the fury package. It provides information about types + # to help type-checking tools like mypy and improve the development experience + # with better autocompletion and documentation in code editors. + + __all__ = [ + "actor", + "actors", + "animation", + "colormap", + # ... (other modules) + , + ] + + from . import ( + actor, + actors, + animation, + colormap, + # ... (other modules) + , + ) + # ... (other functions) + +You can review the implementation in `this pull request `_. + + +Reading ``SPEC1`` +----------------- + +To align myself with best practice, I read the `SPEC1 `_ document available at Scientific Python SPEC1. This document provided valuable hints and guidelines that I took into account when implementing the lazy loading feature. + + +Did I get stuck anywhere? +-------------------------- +No, I didn't encounter any major blockers this week. The implementation of lazy loading went smoothly, and I was able to complete the task. + + +**What's Next?** +----------------- + +For the next week, I plan to: + +1. Review all my Pull Requests with my mentor `Serge Koudoro `_, to ensure everything is up to FURY's standards. +2. Start working on the redesign of the FURY website, making it more user-friendly and visually appealing. + + +Thank you for reading. Stay tuned for more updates on my progress!