Turn your functions into composable apps¶
This is super easy – just use the appify
decorator! This generates a user_function
wrapper class that takes a reference to your function and the input, output and data types. The resulting app can then become part of a composed function.
You need four things.
func
A function to decorate … duh!
input_types
A type, or collection of type that your function can handle. This setting dictates what other apps have an output that is a compatable input for your function.
output_types
A type, or collection of type that your function produces. This setting dictates what other apps can have yours as input.
data_types
The data class names, as strings, that your function can handle. Not required, but useful.
A simple example¶
Let’s make an app that returns the elements of an alignment up to a specified index, with the index being a keyword argument. We now define a decorated function up_to()
Now we define a user_function
instance that takes and ret
The repr()
of your user_function
instance indicates the wrapped function and the module it’s in.
We create an app instance for a specific value of index
You use first4()
like all composable apps, e.g.
Renaming sequences¶
This time we wrap a method call on a SequenceCollection
(and the alignment sub-classes) for renaming sequences. We also illustrate here that to support both aligned and unaligned data types as input/output, we have to include these in the construction of the custom function.
Note
The SERIALISABLE_TYPE
indicates the data has the ability to be converted to json
.
A user app with a different output type¶
In this example, we make an function that returns DistanceMatrix
of an alignment.
Note
We omitted the data_types
argument just for demonstration purposes.