Extending Taitale
Adding New Tools
Taitale provides two types of tool wrappers:
parset_app: For tools that use parameter sets (parsets)cli_app: For tools that use command-line arguments
Creating a Parset-based Tool
Here’s how to create a new tool that uses parameter sets:
from typing import Union
from taitale.utils.Parset import Parset
from taitale.utils.wrapper import parset_app
def my_tool(
parset: Union[str, Parset, None] = None,
**kwargs,
):
# Initialize parset
if parset is None:
parset = Parset(prefix="mytool")
elif isinstance(parset, str):
parset_obj = Parset(prefix="mytool")
parset_obj.read_from_file(parset)
parset = parset_obj
elif not isinstance(parset, Parset):
raise TypeError("parset must be either a string path or a Parset instance")
# Create the tool wrapper
my_tool_app = parset_app(
name="mytool",
parset=parset,
out_parset_name="taitale_mytool.in",
cmd="mytool -c {parset_name}",
mpi_compartible=True, # Set to True if tool supports MPI
)
# Execute the tool
my_tool_app(**kwargs)
# Add docstring with usage examples
my_tool.__doc__ = """
My custom tool description
Parameters
----------
parset : str or Parset or None, optional
Either a path to a parset file, a Parset instance, or None to create a new Parset
**kwargs : dict
Additional keyword arguments passed to the tool
Example
-------
>>> from taitale.mytools import my_tool
>>> my_tool(
args={
"param1": "value1",
"param2": "value2",
}
)
"""
Creating a CLI-based Tool
For tools that use command-line arguments:
from taitale.utils.wrapper import cli_app
def my_cli_tool(**kwargs):
# Create the tool wrapper
my_tool_app = cli_app(
name="mytool",
cli_args="", # Default CLI arguments if any
cmd="mytool {args}", # Command template
mpi_compartible=True, # Set to True if tool supports MPI
)
# Execute the tool
my_tool_app(**kwargs)
# Add docstring with usage examples
my_cli_tool.__doc__ = """
My custom CLI tool description
Parameters
----------
**kwargs : dict
Command line arguments passed to the tool
Example
-------
>>> from taitale.mytools import my_cli_tool
>>> my_cli_tool(
args="-i input.ms -o output.ms"
)
"""