# This file was auto generated by Styx.
# Do not edit this file directly.

import typing
import pathlib
from styxdefs import *

CIFTI_CREATE_LABEL_METADATA = Metadata(
    id="1efacf6ed3cd2541d0611a121451c354eaf2d727.workbench",
    name="cifti-create-label",
    package="workbench",
    container_image_tag="nx10x/workbench:2.1.0",
)


_CiftiCreateLabelVolumeParamsDictNoTag = typing.TypedDict('_CiftiCreateLabelVolumeParamsDictNoTag', {
    "label-volume": InputPathType,
    "structure-label-volume": InputPathType,
})
CiftiCreateLabelVolumeParamsDictTagged = typing.TypedDict('CiftiCreateLabelVolumeParamsDictTagged', {
    "@type": typing.Literal["volume"],
    "label-volume": InputPathType,
    "structure-label-volume": InputPathType,
})
CiftiCreateLabelVolumeParamsDict = _CiftiCreateLabelVolumeParamsDictNoTag | CiftiCreateLabelVolumeParamsDictTagged


_CiftiCreateLabelLeftLabelParamsDictNoTag = typing.TypedDict('_CiftiCreateLabelLeftLabelParamsDictNoTag', {
    "label": InputPathType,
    "roi-metric": typing.NotRequired[InputPathType | None],
})
CiftiCreateLabelLeftLabelParamsDictTagged = typing.TypedDict('CiftiCreateLabelLeftLabelParamsDictTagged', {
    "@type": typing.Literal["left-label"],
    "label": InputPathType,
    "roi-metric": typing.NotRequired[InputPathType | None],
})
CiftiCreateLabelLeftLabelParamsDict = _CiftiCreateLabelLeftLabelParamsDictNoTag | CiftiCreateLabelLeftLabelParamsDictTagged


_CiftiCreateLabelRightLabelParamsDictNoTag = typing.TypedDict('_CiftiCreateLabelRightLabelParamsDictNoTag', {
    "label": InputPathType,
    "roi-metric": typing.NotRequired[InputPathType | None],
})
CiftiCreateLabelRightLabelParamsDictTagged = typing.TypedDict('CiftiCreateLabelRightLabelParamsDictTagged', {
    "@type": typing.Literal["right-label"],
    "label": InputPathType,
    "roi-metric": typing.NotRequired[InputPathType | None],
})
CiftiCreateLabelRightLabelParamsDict = _CiftiCreateLabelRightLabelParamsDictNoTag | CiftiCreateLabelRightLabelParamsDictTagged


_CiftiCreateLabelCerebellumLabelParamsDictNoTag = typing.TypedDict('_CiftiCreateLabelCerebellumLabelParamsDictNoTag', {
    "label": InputPathType,
    "roi-metric": typing.NotRequired[InputPathType | None],
})
CiftiCreateLabelCerebellumLabelParamsDictTagged = typing.TypedDict('CiftiCreateLabelCerebellumLabelParamsDictTagged', {
    "@type": typing.Literal["cerebellum-label"],
    "label": InputPathType,
    "roi-metric": typing.NotRequired[InputPathType | None],
})
CiftiCreateLabelCerebellumLabelParamsDict = _CiftiCreateLabelCerebellumLabelParamsDictNoTag | CiftiCreateLabelCerebellumLabelParamsDictTagged


_CiftiCreateLabelLabelParamsDictNoTag = typing.TypedDict('_CiftiCreateLabelLabelParamsDictNoTag', {
    "structure": str,
    "label": InputPathType,
    "roi-metric": typing.NotRequired[InputPathType | None],
})
CiftiCreateLabelLabelParamsDictTagged = typing.TypedDict('CiftiCreateLabelLabelParamsDictTagged', {
    "@type": typing.Literal["label"],
    "structure": str,
    "label": InputPathType,
    "roi-metric": typing.NotRequired[InputPathType | None],
})
CiftiCreateLabelLabelParamsDict = _CiftiCreateLabelLabelParamsDictNoTag | CiftiCreateLabelLabelParamsDictTagged


_CiftiCreateLabelParamsDictNoTag = typing.TypedDict('_CiftiCreateLabelParamsDictNoTag', {
    "cifti-out": str,
    "volume": typing.NotRequired[CiftiCreateLabelVolumeParamsDict | None],
    "left-label": typing.NotRequired[CiftiCreateLabelLeftLabelParamsDict | None],
    "right-label": typing.NotRequired[CiftiCreateLabelRightLabelParamsDict | None],
    "cerebellum-label": typing.NotRequired[CiftiCreateLabelCerebellumLabelParamsDict | None],
    "label": typing.NotRequired[list[CiftiCreateLabelLabelParamsDict] | None],
})
CiftiCreateLabelParamsDictTagged = typing.TypedDict('CiftiCreateLabelParamsDictTagged', {
    "@type": typing.Literal["workbench/cifti-create-label"],
    "cifti-out": str,
    "volume": typing.NotRequired[CiftiCreateLabelVolumeParamsDict | None],
    "left-label": typing.NotRequired[CiftiCreateLabelLeftLabelParamsDict | None],
    "right-label": typing.NotRequired[CiftiCreateLabelRightLabelParamsDict | None],
    "cerebellum-label": typing.NotRequired[CiftiCreateLabelCerebellumLabelParamsDict | None],
    "label": typing.NotRequired[list[CiftiCreateLabelLabelParamsDict] | None],
})
CiftiCreateLabelParamsDict = _CiftiCreateLabelParamsDictNoTag | CiftiCreateLabelParamsDictTagged


def cifti_create_label_volume(
    label_volume: InputPathType,
    structure_label_volume: InputPathType,
) -> CiftiCreateLabelVolumeParamsDictTagged:
    """
    Build parameters.
    
    Args:
        label_volume: label volume file containing the data to be copied.
        structure_label_volume: label volume file that defines which voxels to\
            use.
    Returns:
        Parameter dictionary
    """
    params = {
        "@type": "volume",
        "label-volume": label_volume,
        "structure-label-volume": structure_label_volume,
    }
    return params


def cifti_create_label_volume_validate(
    params: typing.Any,
) -> None:
    """
    Validate parameters. Throws an error if `params` is not a valid
    `CiftiCreateLabelVolumeParamsDict` object.
    
    Args:
        params: The parameters object to validate.
    """
    if params is None or not isinstance(params, dict):
        raise StyxValidationError(f'Params object has the wrong type \'{type(params)}\'')
    if params.get("label-volume", None) is None:
        raise StyxValidationError("`label-volume` must not be None")
    if not isinstance(params["label-volume"], (pathlib.Path, str)):
        raise StyxValidationError(f'`label-volume` has the wrong type: Received `{type(params.get("label-volume", None))}` expected `InputPathType`')
    if params.get("structure-label-volume", None) is None:
        raise StyxValidationError("`structure-label-volume` must not be None")
    if not isinstance(params["structure-label-volume"], (pathlib.Path, str)):
        raise StyxValidationError(f'`structure-label-volume` has the wrong type: Received `{type(params.get("structure-label-volume", None))}` expected `InputPathType`')


def cifti_create_label_volume_cargs(
    params: CiftiCreateLabelVolumeParamsDict,
    execution: Execution,
) -> list[str]:
    """
    Build command-line arguments from parameters.
    
    Args:
        params: The parameters.
        execution: The execution object for resolving input paths.
    Returns:
        Command-line arguments.
    """
    cargs = []
    cargs.extend([
        "-volume",
        execution.input_file(params.get("label-volume", None)),
        execution.input_file(params.get("structure-label-volume", None))
    ])
    return cargs


def cifti_create_label_left_label(
    label: InputPathType,
    roi_metric: InputPathType | None = None,
) -> CiftiCreateLabelLeftLabelParamsDictTagged:
    """
    Build parameters.
    
    Args:
        label: the label file.
        roi_metric: roi of vertices to use from left surface\
            \
            the ROI as a metric file.
    Returns:
        Parameter dictionary
    """
    params = {
        "@type": "left-label",
        "label": label,
    }
    if roi_metric is not None:
        params["roi-metric"] = roi_metric
    return params


def cifti_create_label_left_label_validate(
    params: typing.Any,
) -> None:
    """
    Validate parameters. Throws an error if `params` is not a valid
    `CiftiCreateLabelLeftLabelParamsDict` object.
    
    Args:
        params: The parameters object to validate.
    """
    if params is None or not isinstance(params, dict):
        raise StyxValidationError(f'Params object has the wrong type \'{type(params)}\'')
    if params.get("label", None) is None:
        raise StyxValidationError("`label` must not be None")
    if not isinstance(params["label"], (pathlib.Path, str)):
        raise StyxValidationError(f'`label` has the wrong type: Received `{type(params.get("label", None))}` expected `InputPathType`')
    if params.get("roi-metric", None) is not None:
        if not isinstance(params["roi-metric"], (pathlib.Path, str)):
            raise StyxValidationError(f'`roi-metric` has the wrong type: Received `{type(params.get("roi-metric", None))}` expected `InputPathType | None`')


def cifti_create_label_left_label_cargs(
    params: CiftiCreateLabelLeftLabelParamsDict,
    execution: Execution,
) -> list[str]:
    """
    Build command-line arguments from parameters.
    
    Args:
        params: The parameters.
        execution: The execution object for resolving input paths.
    Returns:
        Command-line arguments.
    """
    cargs = []
    cargs.extend([
        "-left-label",
        execution.input_file(params.get("label", None))
    ])
    if params.get("roi-metric", None) is not None:
        cargs.extend([
            "-roi-left",
            execution.input_file(params.get("roi-metric", None))
        ])
    return cargs


def cifti_create_label_right_label(
    label: InputPathType,
    roi_metric: InputPathType | None = None,
) -> CiftiCreateLabelRightLabelParamsDictTagged:
    """
    Build parameters.
    
    Args:
        label: the label file.
        roi_metric: roi of vertices to use from right surface\
            \
            the ROI as a metric file.
    Returns:
        Parameter dictionary
    """
    params = {
        "@type": "right-label",
        "label": label,
    }
    if roi_metric is not None:
        params["roi-metric"] = roi_metric
    return params


def cifti_create_label_right_label_validate(
    params: typing.Any,
) -> None:
    """
    Validate parameters. Throws an error if `params` is not a valid
    `CiftiCreateLabelRightLabelParamsDict` object.
    
    Args:
        params: The parameters object to validate.
    """
    if params is None or not isinstance(params, dict):
        raise StyxValidationError(f'Params object has the wrong type \'{type(params)}\'')
    if params.get("label", None) is None:
        raise StyxValidationError("`label` must not be None")
    if not isinstance(params["label"], (pathlib.Path, str)):
        raise StyxValidationError(f'`label` has the wrong type: Received `{type(params.get("label", None))}` expected `InputPathType`')
    if params.get("roi-metric", None) is not None:
        if not isinstance(params["roi-metric"], (pathlib.Path, str)):
            raise StyxValidationError(f'`roi-metric` has the wrong type: Received `{type(params.get("roi-metric", None))}` expected `InputPathType | None`')


def cifti_create_label_right_label_cargs(
    params: CiftiCreateLabelRightLabelParamsDict,
    execution: Execution,
) -> list[str]:
    """
    Build command-line arguments from parameters.
    
    Args:
        params: The parameters.
        execution: The execution object for resolving input paths.
    Returns:
        Command-line arguments.
    """
    cargs = []
    cargs.extend([
        "-right-label",
        execution.input_file(params.get("label", None))
    ])
    if params.get("roi-metric", None) is not None:
        cargs.extend([
            "-roi-right",
            execution.input_file(params.get("roi-metric", None))
        ])
    return cargs


def cifti_create_label_cerebellum_label(
    label: InputPathType,
    roi_metric: InputPathType | None = None,
) -> CiftiCreateLabelCerebellumLabelParamsDictTagged:
    """
    Build parameters.
    
    Args:
        label: the label file.
        roi_metric: roi of vertices to use from right surface\
            \
            the ROI as a metric file.
    Returns:
        Parameter dictionary
    """
    params = {
        "@type": "cerebellum-label",
        "label": label,
    }
    if roi_metric is not None:
        params["roi-metric"] = roi_metric
    return params


def cifti_create_label_cerebellum_label_validate(
    params: typing.Any,
) -> None:
    """
    Validate parameters. Throws an error if `params` is not a valid
    `CiftiCreateLabelCerebellumLabelParamsDict` object.
    
    Args:
        params: The parameters object to validate.
    """
    if params is None or not isinstance(params, dict):
        raise StyxValidationError(f'Params object has the wrong type \'{type(params)}\'')
    if params.get("label", None) is None:
        raise StyxValidationError("`label` must not be None")
    if not isinstance(params["label"], (pathlib.Path, str)):
        raise StyxValidationError(f'`label` has the wrong type: Received `{type(params.get("label", None))}` expected `InputPathType`')
    if params.get("roi-metric", None) is not None:
        if not isinstance(params["roi-metric"], (pathlib.Path, str)):
            raise StyxValidationError(f'`roi-metric` has the wrong type: Received `{type(params.get("roi-metric", None))}` expected `InputPathType | None`')


def cifti_create_label_cerebellum_label_cargs(
    params: CiftiCreateLabelCerebellumLabelParamsDict,
    execution: Execution,
) -> list[str]:
    """
    Build command-line arguments from parameters.
    
    Args:
        params: The parameters.
        execution: The execution object for resolving input paths.
    Returns:
        Command-line arguments.
    """
    cargs = []
    cargs.extend([
        "-cerebellum-label",
        execution.input_file(params.get("label", None))
    ])
    if params.get("roi-metric", None) is not None:
        cargs.extend([
            "-roi-cerebellum",
            execution.input_file(params.get("roi-metric", None))
        ])
    return cargs


def cifti_create_label_label(
    structure: str,
    label: InputPathType,
    roi_metric: InputPathType | None = None,
) -> CiftiCreateLabelLabelParamsDictTagged:
    """
    Build parameters.
    
    Args:
        structure: the structure name.
        label: the label file.
        roi_metric: roi of vertices to use from this structure\
            \
            the ROI as a metric file.
    Returns:
        Parameter dictionary
    """
    params = {
        "@type": "label",
        "structure": structure,
        "label": label,
    }
    if roi_metric is not None:
        params["roi-metric"] = roi_metric
    return params


def cifti_create_label_label_validate(
    params: typing.Any,
) -> None:
    """
    Validate parameters. Throws an error if `params` is not a valid
    `CiftiCreateLabelLabelParamsDict` object.
    
    Args:
        params: The parameters object to validate.
    """
    if params is None or not isinstance(params, dict):
        raise StyxValidationError(f'Params object has the wrong type \'{type(params)}\'')
    if params.get("structure", None) is None:
        raise StyxValidationError("`structure` must not be None")
    if not isinstance(params["structure"], str):
        raise StyxValidationError(f'`structure` has the wrong type: Received `{type(params.get("structure", None))}` expected `str`')
    if params.get("label", None) is None:
        raise StyxValidationError("`label` must not be None")
    if not isinstance(params["label"], (pathlib.Path, str)):
        raise StyxValidationError(f'`label` has the wrong type: Received `{type(params.get("label", None))}` expected `InputPathType`')
    if params.get("roi-metric", None) is not None:
        if not isinstance(params["roi-metric"], (pathlib.Path, str)):
            raise StyxValidationError(f'`roi-metric` has the wrong type: Received `{type(params.get("roi-metric", None))}` expected `InputPathType | None`')


def cifti_create_label_label_cargs(
    params: CiftiCreateLabelLabelParamsDict,
    execution: Execution,
) -> list[str]:
    """
    Build command-line arguments from parameters.
    
    Args:
        params: The parameters.
        execution: The execution object for resolving input paths.
    Returns:
        Command-line arguments.
    """
    cargs = []
    cargs.extend([
        "-label",
        params.get("structure", None),
        execution.input_file(params.get("label", None))
    ])
    if params.get("roi-metric", None) is not None:
        cargs.extend([
            "-roi",
            execution.input_file(params.get("roi-metric", None))
        ])
    return cargs


class CiftiCreateLabelOutputs(typing.NamedTuple):
    """
    Output object returned when calling `CiftiCreateLabelParamsDict(...)`.
    """
    root: OutputPathType
    """Output root folder. This is the root folder for all outputs."""
    cifti_out: OutputPathType
    """the output cifti file"""


def cifti_create_label_params(
    cifti_out: str,
    volume: CiftiCreateLabelVolumeParamsDict | None = None,
    left_label: CiftiCreateLabelLeftLabelParamsDict | None = None,
    right_label: CiftiCreateLabelRightLabelParamsDict | None = None,
    cerebellum_label: CiftiCreateLabelCerebellumLabelParamsDict | None = None,
    label: list[CiftiCreateLabelLabelParamsDict] | None = None,
) -> CiftiCreateLabelParamsDictTagged:
    """
    Build parameters.
    
    Args:
        cifti_out: the output cifti file.
        volume: volume component.
        left_label: label file for the left cortical surface.
        right_label: label file for the right cortical surface.
        cerebellum_label: label file for the cerebellum.
        label: label for a specified surface structure.
    Returns:
        Parameter dictionary
    """
    params = {
        "@type": "workbench/cifti-create-label",
        "cifti-out": cifti_out,
    }
    if volume is not None:
        params["volume"] = volume
    if left_label is not None:
        params["left-label"] = left_label
    if right_label is not None:
        params["right-label"] = right_label
    if cerebellum_label is not None:
        params["cerebellum-label"] = cerebellum_label
    if label is not None:
        params["label"] = label
    return params


def cifti_create_label_validate(
    params: typing.Any,
) -> None:
    """
    Validate parameters. Throws an error if `params` is not a valid
    `CiftiCreateLabelParamsDict` object.
    
    Args:
        params: The parameters object to validate.
    """
    if params is None or not isinstance(params, dict):
        raise StyxValidationError(f'Params object has the wrong type \'{type(params)}\'')
    if params.get("cifti-out", None) is None:
        raise StyxValidationError("`cifti-out` must not be None")
    if not isinstance(params["cifti-out"], str):
        raise StyxValidationError(f'`cifti-out` has the wrong type: Received `{type(params.get("cifti-out", None))}` expected `str`')
    if params.get("volume", None) is not None:
        cifti_create_label_volume_validate(params["volume"])
    if params.get("left-label", None) is not None:
        cifti_create_label_left_label_validate(params["left-label"])
    if params.get("right-label", None) is not None:
        cifti_create_label_right_label_validate(params["right-label"])
    if params.get("cerebellum-label", None) is not None:
        cifti_create_label_cerebellum_label_validate(params["cerebellum-label"])
    if params.get("label", None) is not None:
        if not isinstance(params["label"], list):
            raise StyxValidationError(f'`label` has the wrong type: Received `{type(params.get("label", None))}` expected `list[CiftiCreateLabelLabelParamsDict] | None`')
        for e in params["label"]:
            cifti_create_label_label_validate(e)


def cifti_create_label_cargs(
    params: CiftiCreateLabelParamsDict,
    execution: Execution,
) -> list[str]:
    """
    Build command-line arguments from parameters.
    
    Args:
        params: The parameters.
        execution: The execution object for resolving input paths.
    Returns:
        Command-line arguments.
    """
    cargs = []
    cargs.extend([
        "wb_command",
        "-cifti-create-label"
    ])
    cargs.append(params.get("cifti-out", None))
    if params.get("volume", None) is not None or params.get("left-label", None) is not None or params.get("right-label", None) is not None or params.get("cerebellum-label", None) is not None or params.get("label", None) is not None:
        cargs.extend([
            *(cifti_create_label_volume_cargs(params.get("volume", None), execution) if (params.get("volume", None) is not None) else []),
            *(cifti_create_label_left_label_cargs(params.get("left-label", None), execution) if (params.get("left-label", None) is not None) else []),
            *(cifti_create_label_right_label_cargs(params.get("right-label", None), execution) if (params.get("right-label", None) is not None) else []),
            *(cifti_create_label_cerebellum_label_cargs(params.get("cerebellum-label", None), execution) if (params.get("cerebellum-label", None) is not None) else []),
            *([a for c in [cifti_create_label_label_cargs(s, execution) for s in params.get("label", None)] for a in c] if (params.get("label", None) is not None) else [])
        ])
    return cargs


def cifti_create_label_outputs(
    params: CiftiCreateLabelParamsDict,
    execution: Execution,
) -> CiftiCreateLabelOutputs:
    """
    Build outputs object containing output file paths and possibly stdout/stderr.
    
    Args:
        params: The parameters.
        execution: The execution object for resolving input paths.
    Returns:
        Outputs object.
    """
    ret = CiftiCreateLabelOutputs(
        root=execution.output_file("."),
        cifti_out=execution.output_file(params.get("cifti-out", None)),
    )
    return ret


def cifti_create_label_execute(
    params: CiftiCreateLabelParamsDict,
    runner: Runner | None = None,
) -> CiftiCreateLabelOutputs:
    """
    CREATE A CIFTI LABEL FILE.
    
    All input files must have the same number of columns/subvolumes. Only the
    specified components will be in the output cifti. At least one component
    must be specified.
    
    The -volume option requires two volume arguments, the label-volume argument
    contains all labels you want to display (e.g. nuclei of the thalamus),
    whereas the structure-label-volume argument contains all CIFTI voxel-based
    structures you want to include data within (e.g. THALAMUS_LEFT,
    THALAMUS_RIGHT, etc). See -volume-label-import and -volume-help for format
    details of label volume files. If you just want the labels in voxels to be
    the structure names, you may use the same file for both arguments. The
    structure-label-volume must use some of the label names from this list, all
    other label names in the structure-label-volume will be ignored:
    
    CORTEX_LEFT
    CORTEX_RIGHT
    CEREBELLUM
    ACCUMBENS_LEFT
    ACCUMBENS_RIGHT
    ALL_GREY_MATTER
    ALL_WHITE_MATTER
    AMYGDALA_LEFT
    AMYGDALA_RIGHT
    BRAIN_STEM
    CAUDATE_LEFT
    CAUDATE_RIGHT
    CEREBELLAR_WHITE_MATTER_LEFT
    CEREBELLAR_WHITE_MATTER_RIGHT
    CEREBELLUM_LEFT
    CEREBELLUM_RIGHT
    CEREBRAL_WHITE_MATTER_LEFT
    CEREBRAL_WHITE_MATTER_RIGHT
    CORTEX
    DIENCEPHALON_VENTRAL_LEFT
    DIENCEPHALON_VENTRAL_RIGHT
    HIPPOCAMPUS_LEFT
    HIPPOCAMPUS_RIGHT
    HIPPOCAMPUS_DENTATE_LEFT
    HIPPOCAMPUS_DENTATE_RIGHT
    INVALID
    OTHER
    OTHER_GREY_MATTER
    OTHER_WHITE_MATTER
    PALLIDUM_LEFT
    PALLIDUM_RIGHT
    PUTAMEN_LEFT
    PUTAMEN_RIGHT
    THALAMUS_LEFT
    THALAMUS_RIGHT.
    
    Args:
        params: The parameters.
        runner: Command runner.
    Returns:
        NamedTuple of outputs (described in `CiftiCreateLabelOutputs`).
    """
    cifti_create_label_validate(params)
    runner = runner or get_global_runner()
    execution = runner.start_execution(CIFTI_CREATE_LABEL_METADATA)
    params = execution.params(params)
    cargs = cifti_create_label_cargs(params, execution)
    ret = cifti_create_label_outputs(params, execution)
    execution.run(cargs)
    return ret


def cifti_create_label(
    cifti_out: str,
    volume: CiftiCreateLabelVolumeParamsDict | None = None,
    left_label: CiftiCreateLabelLeftLabelParamsDict | None = None,
    right_label: CiftiCreateLabelRightLabelParamsDict | None = None,
    cerebellum_label: CiftiCreateLabelCerebellumLabelParamsDict | None = None,
    label: list[CiftiCreateLabelLabelParamsDict] | None = None,
    runner: Runner | None = None,
) -> CiftiCreateLabelOutputs:
    """
    CREATE A CIFTI LABEL FILE.
    
    All input files must have the same number of columns/subvolumes. Only the
    specified components will be in the output cifti. At least one component
    must be specified.
    
    The -volume option requires two volume arguments, the label-volume argument
    contains all labels you want to display (e.g. nuclei of the thalamus),
    whereas the structure-label-volume argument contains all CIFTI voxel-based
    structures you want to include data within (e.g. THALAMUS_LEFT,
    THALAMUS_RIGHT, etc). See -volume-label-import and -volume-help for format
    details of label volume files. If you just want the labels in voxels to be
    the structure names, you may use the same file for both arguments. The
    structure-label-volume must use some of the label names from this list, all
    other label names in the structure-label-volume will be ignored:
    
    CORTEX_LEFT
    CORTEX_RIGHT
    CEREBELLUM
    ACCUMBENS_LEFT
    ACCUMBENS_RIGHT
    ALL_GREY_MATTER
    ALL_WHITE_MATTER
    AMYGDALA_LEFT
    AMYGDALA_RIGHT
    BRAIN_STEM
    CAUDATE_LEFT
    CAUDATE_RIGHT
    CEREBELLAR_WHITE_MATTER_LEFT
    CEREBELLAR_WHITE_MATTER_RIGHT
    CEREBELLUM_LEFT
    CEREBELLUM_RIGHT
    CEREBRAL_WHITE_MATTER_LEFT
    CEREBRAL_WHITE_MATTER_RIGHT
    CORTEX
    DIENCEPHALON_VENTRAL_LEFT
    DIENCEPHALON_VENTRAL_RIGHT
    HIPPOCAMPUS_LEFT
    HIPPOCAMPUS_RIGHT
    HIPPOCAMPUS_DENTATE_LEFT
    HIPPOCAMPUS_DENTATE_RIGHT
    INVALID
    OTHER
    OTHER_GREY_MATTER
    OTHER_WHITE_MATTER
    PALLIDUM_LEFT
    PALLIDUM_RIGHT
    PUTAMEN_LEFT
    PUTAMEN_RIGHT
    THALAMUS_LEFT
    THALAMUS_RIGHT.
    
    Args:
        cifti_out: the output cifti file.
        volume: volume component.
        left_label: label file for the left cortical surface.
        right_label: label file for the right cortical surface.
        cerebellum_label: label file for the cerebellum.
        label: label for a specified surface structure.
        runner: Command runner.
    Returns:
        NamedTuple of outputs (described in `CiftiCreateLabelOutputs`).
    """
    params = cifti_create_label_params(
        cifti_out=cifti_out,
        volume=volume,
        left_label=left_label,
        right_label=right_label,
        cerebellum_label=cerebellum_label,
        label=label,
    )
    return cifti_create_label_execute(params, runner)


__all__ = [
    "CIFTI_CREATE_LABEL_METADATA",
    "CiftiCreateLabelCerebellumLabelParamsDict",
    "CiftiCreateLabelCerebellumLabelParamsDictTagged",
    "CiftiCreateLabelLabelParamsDict",
    "CiftiCreateLabelLabelParamsDictTagged",
    "CiftiCreateLabelLeftLabelParamsDict",
    "CiftiCreateLabelLeftLabelParamsDictTagged",
    "CiftiCreateLabelOutputs",
    "CiftiCreateLabelParamsDict",
    "CiftiCreateLabelParamsDictTagged",
    "CiftiCreateLabelRightLabelParamsDict",
    "CiftiCreateLabelRightLabelParamsDictTagged",
    "CiftiCreateLabelVolumeParamsDict",
    "CiftiCreateLabelVolumeParamsDictTagged",
    "cifti_create_label",
    "cifti_create_label_cerebellum_label",
    "cifti_create_label_execute",
    "cifti_create_label_label",
    "cifti_create_label_left_label",
    "cifti_create_label_params",
    "cifti_create_label_right_label",
    "cifti_create_label_volume",
]
