Extension Packages

Note

For some additional discussion, see YTEP-0029, where this plan was designed.

As of version 3.3 of yt, we have put into place new methods for easing the process of developing “extensions” to yt. Extensions might be analysis packages, visualization tools, or other software projects that use yt as a base engine but that are versioned, developed and distributed separately. This brings with it the advantage of retaining control over the versioning, contribution guidelines, scope, etc, while also providing a mechanism for disseminating information about it, and potentially a method of interacting with other extensions.

We have created a few pieces of infrastructure for developing extensions, making them discoverable, and distributing them to collaborators.

If you have a module you would like to retain some external control over, or that you don’t feel would fit into yt, we encourage you to build it as an extension module and distribute and version it independently.

Hooks for Extensions

Starting with version 3.3 of yt, any package named with the prefix yt_ is importable from the namespace yt.extensions. For instance, the yt_interaction package ( https://bitbucket.org/data-exp-lab/yt_interaction ) is importable as yt.extensions.interaction.

In subsequent versions, we plan to include in yt a catalog of known extensions and where to find them; this will put discoverability directly into the code base.

Frontends as extensions

Starting with version 4.2 of yt, any externally installed package that exports Dataset subclass as an entrypoint in yt.frontends namespace in setup.py or pyproject.toml will be automatically loaded and immediately available in load().

To add an entrypoint in an external project’s setup.py:

setup(
    # ...,
    entry_points={
        "yt.frontends": [
            "myFrontend = my_frontend.api.MyFrontendDataset",
            "myOtherFrontend = my_frontend.api.MyOtherFrontendDataset",
        ]
    }
)

or pyproject.toml:

[project.entry-points."yt.frontends"]
myFrontend = "my_frontend.api:MyFrontendDataset"
myOtherFrontend = "my_frontend.api:MyOtherFrontendDataset"

Extension Template

A template for starting an extension module (or converting an existing set of code to an extension module) can be found at https://github.com/yt-project/yt_extension_template .

To get started, download a zipfile of the template ( https://codeload.github.com/yt-project/yt_extension_template/zip/master ) and follow the directions in README.md to modify the metadata.

Distributing Extensions

We encourage you to version on your choice of hosting platform (Bitbucket, GitHub, etc), and to distribute your extension widely. We are presently working on deploying a method for listing extension modules on the yt webpage.