Extending Taitale

Adding New Tools

Taitale provides two types of tool wrappers:

  1. parset_app: For tools that use parameter sets (parsets)

  2. 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"
    )
"""