.. |icon| image:: ./media/icon.svg :width: 30 ============ |icon| Maple ============ |Code style: black| |BubbleBox| |FlashX| |FlowX| |Minimal| Maple is a productivity tool that acts a wrapper around docker, podman, and singularity containerization services to provide a seamless interface to deploy High Performance Computing (HPC) applications on cloud and supercomputing platforms. It comprises a python based library and command line interface to manage developer and production environment for running complex multiphysics simulations. Open-source tools for numerical simulation of partical engineering problems provide state-of-art methods and techniques, and undergo continous development for accuracy and performance on modern computing architectures. Accessibility of these tools for core industry users has been a challenge due to the presence of complexities associated with setting up desired problems with external dependencies. Consider the problem illustrated below where a backend developer for an open-source simulation tool manages/creates images for application users, who in turn can customize it for their specific use case. Maple can be used to manage/deploy this workflow. |fig1| Another important aspect that Maple aims to address is the reproducibility in research and development. As illustrated below, a scientist can publish software images using Maple to allow their peers to: (1) Reproduce their research datasets (2) Work with existing datasets to gain more insight. Maple aims to make the process of publishing/use of images organized and systematic. |fig2| Tutorial ======== The link below provides an overiew of Maple within the context of Flash-X (https://flash-x.org), a multiphysics simulation software instrument. Some of the details maybe be outdated, but we are working on updating the tutorial. |Tutorial| Installation ============ Stable releases of Maple are hosted on Python Package Index website (``_) and can be installed by executing, :: pip install PyMaple Note that ``pip`` should point to ``python3+`` installation package ``pip3``. Upgrading and uninstallation is easily managed through this interface using, :: pip install --upgrade PyMaple pip uninstall PyMaple There maybe situations where users may want to install Maple in development mode $\\textemdash$ to design new features, debug, or customize options/commands to their needs. This can be easily accomplished using the ``setup`` script located in the project root directory and executing, :: ./setup develop Development mode enables testing of features/updates directly from the source code and is an effective method for debugging. Note that the ``setup`` script relies on ``click``, which can be installed using, :: pip install click The ``maple`` script is installed in ``$HOME/.local/bin`` directory and therfore the environment variable, ``PATH``, should be updated to include this location for command line use. Dependencies ============ ``click`` ``toml`` ``docker`` ``singularity`` ``podman`` Writing a Maplefile =================== Maplefile is a TOML configuration file that is placed in a project root directory. Location of the Maplefile marks the directory which will be mounted inside container, :: $ tree Flash-X ├── bin  ├── docs  ├── LICENSE ├── NOTICE ├── RELEASE ├── sites ├── tools ├── container ├── lib ├── Maplefile ├── README.md ├── setup ├── source The example above shows the directory tree for Flash-X, which contains a Maplefile along with files/folders that comprise the project. The corresponding Maplefile looks like, .. code-block:: python # Maplefile for Flash-X # Base Image base = "akashdhruv/amrex:ppc64le" # Platform platform = "linux/ppc64le" # Name of the container/image container = "flashx" # MPI path from host mpi = "/path/to/host/mpi" # Commands for building local image # from base image, and installing dependencies build = [ "dnf install ", "pip install ", ] # Commands to execute inside the container # using the current mount directory and # update the local image publish = [ "./setup ", "make && cp ", ] # Backend for service # docker/singularity/podman backend = "podman" Image versus Container ====================== Following is how Maple differentiates between an Image and a Container: - Image Blueprint for running containers, provides environment to work with code/data in working directory - Container Instance of an image Interacts with an image by mounting data/code from working directory Writes data to working directory when running applications from an image Updates an image using data/code from working directory Usage ===== - Build a local image from base image ``maple image build --base=`` - Activate local container from an image ``maple container pour --image=`` - Step inside container shell ``maple container shell`` - Save changes from a local container to an image ``maple container commit --image=`` - Stop and delete local container ``maple container rinse`` - Prune redundant layers from a local image (reduce size) ``maple image squash --image=`` - Launch an ipython notebook inside the container ``maple container notebook --image= --port=`` - Run commands inside the container ``maple container run --image= "echo Hello World!"`` - Delete containers ``maple container rinse `` - Delete images ``maple image delete `` - Remote interface ``maple pull `` ``maple push `` Citation ======== :: @software{akash_dhruv_2022_7255622, author = {Akash Dhruv}, title = {akashdhruv/Maple: October 2022}, month = oct, year = 2022, publisher = {Zenodo}, version = {22.10}, doi = {10.5281/zenodo.7255622}, url = {https://doi.org/10.5281/zenodo.7255622} } .. |Code style: black| image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/psf/black .. |BubbleBox| image:: https://github.com/akashdhruv/Maple/workflows/BubbleBox/badge.svg .. |FlashX| image:: https://github.com/akashdhruv/Maple/workflows/FlashX/badge.svg .. |FlowX| image:: https://github.com/akashdhruv/Maple/workflows/FlowX/badge.svg .. |Minimal| image:: https://github.com/akashdhruv/Maple/workflows/Minimal/badge.svg .. |Tutorial| image:: http://img.youtube.com/vi/gNmVtj7-RBY/0.jpg :target: http://www.youtube.com/watch?v=gNmVtj7-RBY .. |fig1| image:: ./media/maple-use-1.png :width: 450px .. |fig2| image:: ./media/maple-use-2.png :width: 450px .. |nbsp| unicode:: U+00A0 .. NO-BREAK SPACE