Transformers#
Transformers
are functions for converting between formats and data types.
These transformers are typically defined along with the artifact classes that they are designed to work with, and q2-types
provides a number of common types and associated transformers.
Plugins can define their own transformers.
How are transformers used by a plugin?#
Transformers
are not called directly at any time within a plugin.
Transformations are handled by the QIIME 2 framework, as long as the appropriate transformers
are registered.
The framework identifies the input Artifact
source format for the transformation as the format registered to the Artifact
’s artifact class, and it identifies the transformation’s destination type based on the functional annotation associated with the input in an Action
’s registered function.
When output is generated by a Method
, the framework identifies the source type for the transformation as the registered function’s output annotation, and the destination format for the output Artifact
from the output’s artifact class defined in the Action
’s registration.
For example, we can see how functional annotations define input and output formats in q2_diversity.beta_phylogenetic
:
def beta_phylogenetic(table: biom.Table,
phylogeny: skbio.TreeNode,
metric: str)-> skbio.DistanceMatrix:
This function requires biom.Table
and skbio.TreeNode
objects as input, and produces an skbio.DistanceMatrix
object as output.
We can examine the first few lines of the Action
registration for this function to determine the artifact classes of these input and output objects:
plugin.pipelines.register_function(
function=q2_diversity.beta_phylogenetic,
inputs={'table': FeatureTable[Frequency],
'phylogeny': Phylogeny[Rooted]},
parameters={'metric': Str % Choices(beta.phylogenetic_metrics())},
outputs=[('distance_matrix', DistanceMatrix)],
This pair of code examples illustrate that the biom.Table
object used in beta_phylogenetic
begins its life as a FeatureTable[Frequency]
artifact, and the skbio.TreeNode
comes from a Phylogeny[Rooted]
artifact.
The output skbio.DistanceMatrix
generated by beta_phylogenetic
must be coerced to become a DistanceMatrix
artifact.
The QIIME 2 framework takes care of all of those conversions for you, provided the appropriate transformers have been defined and registered (which you can learn how to do here).