"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""

from . import biointerface_pb2
import builtins
import collections.abc
from . import common_pb2
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.internal.enum_type_wrapper
import google.protobuf.message
import sys
import typing

if sys.version_info >= (3, 10):
    import typing as typing_extensions
else:
    import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

class _SpikeSorterType:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SpikeSorterTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SpikeSorterType.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    SORTER_NULL: _SpikeSorterType.ValueType  # 0
    SORTER_VEX_STREAM: _SpikeSorterType.ValueType  # 1
    SORTER_SPIKES_STREAM: _SpikeSorterType.ValueType  # 2
    SORTER_VEX_FILE: _SpikeSorterType.ValueType  # 3
    SORTER_SPIKES_FILE: _SpikeSorterType.ValueType  # 4

class SpikeSorterType(_SpikeSorterType, metaclass=_SpikeSorterTypeEnumTypeWrapper): ...

SORTER_NULL: SpikeSorterType.ValueType  # 0
SORTER_VEX_STREAM: SpikeSorterType.ValueType  # 1
SORTER_SPIKES_STREAM: SpikeSorterType.ValueType  # 2
SORTER_VEX_FILE: SpikeSorterType.ValueType  # 3
SORTER_SPIKES_FILE: SpikeSorterType.ValueType  # 4
global___SpikeSorterType = SpikeSorterType

class _SpikeSorterCommand:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SpikeSorterCommandEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SpikeSorterCommand.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    SORTER_CMD_ON: _SpikeSorterCommand.ValueType  # 0
    SORTER_CMD_OFF: _SpikeSorterCommand.ValueType  # 1
    SORTER_CMD_CLEAR_SORT: _SpikeSorterCommand.ValueType  # 2
    """clears spike data"""
    SORTER_CMD_REBASE: _SpikeSorterCommand.ValueType  # 4
    SORTER_CMD_INIT: _SpikeSorterCommand.ValueType  # 5

class SpikeSorterCommand(_SpikeSorterCommand, metaclass=_SpikeSorterCommandEnumTypeWrapper): ...

SORTER_CMD_ON: SpikeSorterCommand.ValueType  # 0
SORTER_CMD_OFF: SpikeSorterCommand.ValueType  # 1
SORTER_CMD_CLEAR_SORT: SpikeSorterCommand.ValueType  # 2
"""clears spike data"""
SORTER_CMD_REBASE: SpikeSorterCommand.ValueType  # 4
SORTER_CMD_INIT: SpikeSorterCommand.ValueType  # 5
global___SpikeSorterCommand = SpikeSorterCommand

class _SpikeSorterSubCommand:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SpikeSorterSubCommandEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SpikeSorterSubCommand.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    SORTER_SUBCMD_NULL: _SpikeSorterSubCommand.ValueType  # 0
    """only valid subcommand"""

class SpikeSorterSubCommand(_SpikeSorterSubCommand, metaclass=_SpikeSorterSubCommandEnumTypeWrapper):
    """subcommands are deprecated."""

SORTER_SUBCMD_NULL: SpikeSorterSubCommand.ValueType  # 0
"""only valid subcommand"""
global___SpikeSorterSubCommand = SpikeSorterSubCommand

class _SpikeSorterMode:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SpikeSorterModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SpikeSorterMode.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    SORTER_MODE_STREAM: _SpikeSorterMode.ValueType  # 0
    SORTER_MODE_BATCH: _SpikeSorterMode.ValueType  # 1

class SpikeSorterMode(_SpikeSorterMode, metaclass=_SpikeSorterModeEnumTypeWrapper): ...

SORTER_MODE_STREAM: SpikeSorterMode.ValueType  # 0
SORTER_MODE_BATCH: SpikeSorterMode.ValueType  # 1
global___SpikeSorterMode = SpikeSorterMode

class _SpikeSorterStateSystem:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SpikeSorterStateSystemEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SpikeSorterStateSystem.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    SYS_ON: _SpikeSorterStateSystem.ValueType  # 0
    SYS_OFF: _SpikeSorterStateSystem.ValueType  # 1
    SYS_NOT_CONFIGURED: _SpikeSorterStateSystem.ValueType  # 2

class SpikeSorterStateSystem(_SpikeSorterStateSystem, metaclass=_SpikeSorterStateSystemEnumTypeWrapper): ...

SYS_ON: SpikeSorterStateSystem.ValueType  # 0
SYS_OFF: SpikeSorterStateSystem.ValueType  # 1
SYS_NOT_CONFIGURED: SpikeSorterStateSystem.ValueType  # 2
global___SpikeSorterStateSystem = SpikeSorterStateSystem

class _SpkSortIOtype:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SpkSortIOtypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SpkSortIOtype.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    SPK_SORT_IO_NETWORK: _SpkSortIOtype.ValueType  # 0
    SPK_SORT_IO_TRAINER: _SpkSortIOtype.ValueType  # 1
    SPK_SORT_IO_NETWORK_AND_TRAINER: _SpkSortIOtype.ValueType  # 2

class SpkSortIOtype(_SpkSortIOtype, metaclass=_SpkSortIOtypeEnumTypeWrapper):
    """====================="""

SPK_SORT_IO_NETWORK: SpkSortIOtype.ValueType  # 0
SPK_SORT_IO_TRAINER: SpkSortIOtype.ValueType  # 1
SPK_SORT_IO_NETWORK_AND_TRAINER: SpkSortIOtype.ValueType  # 2
global___SpkSortIOtype = SpkSortIOtype

class _SpkSortIOtarget:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SpkSortIOtargetEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SpkSortIOtarget.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    SPK_SORT_IO_FSYS: _SpkSortIOtarget.ValueType  # 0
    SPK_SORT_IO_CLOUD: _SpkSortIOtarget.ValueType  # 1

class SpkSortIOtarget(_SpkSortIOtarget, metaclass=_SpkSortIOtargetEnumTypeWrapper): ...

SPK_SORT_IO_FSYS: SpkSortIOtarget.ValueType  # 0
SPK_SORT_IO_CLOUD: SpkSortIOtarget.ValueType  # 1
global___SpkSortIOtarget = SpkSortIOtarget

class _SpkSortIOmode:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SpkSortIOmodeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SpkSortIOmode.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    SPK_SORT_IO_SAVE: _SpkSortIOmode.ValueType  # 0
    SPK_SORT_IO_LOAD: _SpkSortIOmode.ValueType  # 1

class SpkSortIOmode(_SpkSortIOmode, metaclass=_SpkSortIOmodeEnumTypeWrapper): ...

SPK_SORT_IO_SAVE: SpkSortIOmode.ValueType  # 0
SPK_SORT_IO_LOAD: SpkSortIOmode.ValueType  # 1
global___SpkSortIOmode = SpkSortIOmode

class _RasterMode:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _RasterModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_RasterMode.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    CHANNELS: _RasterMode.ValueType  # 0
    NEURONS: _RasterMode.ValueType  # 1

class RasterMode(_RasterMode, metaclass=_RasterModeEnumTypeWrapper): ...

CHANNELS: RasterMode.ValueType  # 0
NEURONS: RasterMode.ValueType  # 1
global___RasterMode = RasterMode

class _DashElement:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _DashElementEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_DashElement.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    ENABLED_PORTS: _DashElement.ValueType  # 1
    GENERAL: _DashElement.ValueType  # 2
    PORT_STATS: _DashElement.ValueType  # 3
    SITE_STATS: _DashElement.ValueType  # 4
    SITE_PANEL: _DashElement.ValueType  # 5
    NEURON_STATS: _DashElement.ValueType  # 6
    NEURON_PANEL: _DashElement.ValueType  # 7
    AI: _DashElement.ValueType  # 8

class DashElement(_DashElement, metaclass=_DashElementEnumTypeWrapper): ...

ENABLED_PORTS: DashElement.ValueType  # 1
GENERAL: DashElement.ValueType  # 2
PORT_STATS: DashElement.ValueType  # 3
SITE_STATS: DashElement.ValueType  # 4
SITE_PANEL: DashElement.ValueType  # 5
NEURON_STATS: DashElement.ValueType  # 6
NEURON_PANEL: DashElement.ValueType  # 7
AI: DashElement.ValueType  # 8
global___DashElement = DashElement

class _SpikeSorterCriterionLevel:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SpikeSorterCriterionLevelEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SpikeSorterCriterionLevel.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    SORTER_LEAST: _SpikeSorterCriterionLevel.ValueType  # 0
    SORTER_LESS: _SpikeSorterCriterionLevel.ValueType  # 1
    SORTER_BALANCED: _SpikeSorterCriterionLevel.ValueType  # 2
    SORTER_MORE: _SpikeSorterCriterionLevel.ValueType  # 3
    SORTER_MOST: _SpikeSorterCriterionLevel.ValueType  # 4

class SpikeSorterCriterionLevel(_SpikeSorterCriterionLevel, metaclass=_SpikeSorterCriterionLevelEnumTypeWrapper): ...

SORTER_LEAST: SpikeSorterCriterionLevel.ValueType  # 0
SORTER_LESS: SpikeSorterCriterionLevel.ValueType  # 1
SORTER_BALANCED: SpikeSorterCriterionLevel.ValueType  # 2
SORTER_MORE: SpikeSorterCriterionLevel.ValueType  # 3
SORTER_MOST: SpikeSorterCriterionLevel.ValueType  # 4
global___SpikeSorterCriterionLevel = SpikeSorterCriterionLevel

class _SS_STAT:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _SS_STATEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_SS_STAT.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    MEAN: _SS_STAT.ValueType  # 0
    SD: _SS_STAT.ValueType  # 1
    MODE: _SS_STAT.ValueType  # 2
    MIN: _SS_STAT.ValueType  # 3
    MAX: _SS_STAT.ValueType  # 4
    MODE_COUNT: _SS_STAT.ValueType  # 5
    MEDIAN: _SS_STAT.ValueType  # 6
    Q25: _SS_STAT.ValueType  # 7
    Q75: _SS_STAT.ValueType  # 8
    SKEW: _SS_STAT.ValueType  # 9
    """skewness"""
    KURTOSIS: _SS_STAT.ValueType  # 10
    """excess kurtosis"""
    N: _SS_STAT.ValueType  # 11

class SS_STAT(_SS_STAT, metaclass=_SS_STATEnumTypeWrapper):
    """====================
    SPIKE SORTER DASHBOARD MESSAGES
    ====================
    """

MEAN: SS_STAT.ValueType  # 0
SD: SS_STAT.ValueType  # 1
MODE: SS_STAT.ValueType  # 2
MIN: SS_STAT.ValueType  # 3
MAX: SS_STAT.ValueType  # 4
MODE_COUNT: SS_STAT.ValueType  # 5
MEDIAN: SS_STAT.ValueType  # 6
Q25: SS_STAT.ValueType  # 7
Q75: SS_STAT.ValueType  # 8
SKEW: SS_STAT.ValueType  # 9
"""skewness"""
KURTOSIS: SS_STAT.ValueType  # 10
"""excess kurtosis"""
N: SS_STAT.ValueType  # 11
global___SS_STAT = SS_STAT

class _InputFeatureType:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _InputFeatureTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_InputFeatureType.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    FTR_TYPE_WFM: _InputFeatureType.ValueType  # 0
    FTR_TYPE_SPD: _InputFeatureType.ValueType  # 1
    FTR_TYPE_WFM_POS: _InputFeatureType.ValueType  # 2
    FTR_TYPE_SPD_POS: _InputFeatureType.ValueType  # 3

class InputFeatureType(_InputFeatureType, metaclass=_InputFeatureTypeEnumTypeWrapper): ...

FTR_TYPE_WFM: InputFeatureType.ValueType  # 0
FTR_TYPE_SPD: InputFeatureType.ValueType  # 1
FTR_TYPE_WFM_POS: InputFeatureType.ValueType  # 2
FTR_TYPE_SPD_POS: InputFeatureType.ValueType  # 3
global___InputFeatureType = InputFeatureType

@typing.final
class ExportSpikesRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    DEST_FIELD_NUMBER: builtins.int
    ISFORCE_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    isForce: builtins.bool
    """overwrite existing file"""
    @property
    def dest(self) -> common_pb2.FileDescriptor:
        """file descriptor"""

    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        dest: common_pb2.FileDescriptor | None = ...,
        isForce: builtins.bool | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["dest", b"dest", "isForce", b"isForce", "spikeSorterID", b"spikeSorterID"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["dest", b"dest", "isForce", b"isForce", "spikeSorterID", b"spikeSorterID"]) -> None: ...

global___ExportSpikesRequest = ExportSpikesRequest

@typing.final
class SpikeSorterLaunchRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    DSOURCEID_FIELD_NUMBER: builtins.int
    SOURCE_FIELD_NUMBER: builtins.int
    CLUSTERERPARAMS_FIELD_NUMBER: builtins.int
    FEATUREPARAMS_FIELD_NUMBER: builtins.int
    DISCOVERNOISE_FIELD_NUMBER: builtins.int
    ISAUTOON_FIELD_NUMBER: builtins.int
    NBRPATTERN_FIELD_NUMBER: builtins.int
    SINKDSRCID_FIELD_NUMBER: builtins.int
    dsourceID: builtins.str
    discoverNoise: builtins.bool
    isAutoOn: builtins.bool
    nbrPattern: builtins.int
    sinkDsrcID: builtins.str
    """the filename/id of the resultant sort"""
    @property
    def source(self) -> common_pb2.FileDescriptor: ...
    @property
    def clustererParams(self) -> global___SpikeSorterClustererParamsRequest: ...
    @property
    def featureParams(self) -> global___SpikeSorterFeatureParamsRequest: ...
    def __init__(
        self,
        *,
        dsourceID: builtins.str | None = ...,
        source: common_pb2.FileDescriptor | None = ...,
        clustererParams: global___SpikeSorterClustererParamsRequest | None = ...,
        featureParams: global___SpikeSorterFeatureParamsRequest | None = ...,
        discoverNoise: builtins.bool | None = ...,
        isAutoOn: builtins.bool | None = ...,
        nbrPattern: builtins.int | None = ...,
        sinkDsrcID: builtins.str | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["clustererParams", b"clustererParams", "discoverNoise", b"discoverNoise", "dsourceID", b"dsourceID", "featureParams", b"featureParams", "isAutoOn", b"isAutoOn", "nbrPattern", b"nbrPattern", "sinkDsrcID", b"sinkDsrcID", "source", b"source"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["clustererParams", b"clustererParams", "discoverNoise", b"discoverNoise", "dsourceID", b"dsourceID", "featureParams", b"featureParams", "isAutoOn", b"isAutoOn", "nbrPattern", b"nbrPattern", "sinkDsrcID", b"sinkDsrcID", "source", b"source"]) -> None: ...

global___SpikeSorterLaunchRequest = SpikeSorterLaunchRequest

@typing.final
class SpikeSorterIsAnyActiveRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKESORTERIDS_FIELD_NUMBER: builtins.int
    @property
    def spikeSorterIDs(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
    def __init__(
        self,
        *,
        spikeSorterIDs: collections.abc.Iterable[builtins.str] | None = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing.Literal["spikeSorterIDs", b"spikeSorterIDs"]) -> None: ...

global___SpikeSorterIsAnyActiveRequest = SpikeSorterIsAnyActiveRequest

@typing.final
class SpikeSorterIsAnyActiveReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    ISANYACTIVE_FIELD_NUMBER: builtins.int
    ACTIVESPIKESORTERID_FIELD_NUMBER: builtins.int
    isAnyActive: builtins.bool
    activeSpikeSorterID: builtins.str
    def __init__(
        self,
        *,
        isAnyActive: builtins.bool | None = ...,
        activeSpikeSorterID: builtins.str | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["activeSpikeSorterID", b"activeSpikeSorterID", "isAnyActive", b"isAnyActive"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["activeSpikeSorterID", b"activeSpikeSorterID", "isAnyActive", b"isAnyActive"]) -> None: ...

global___SpikeSorterIsAnyActiveReply = SpikeSorterIsAnyActiveReply

@typing.final
class SpikeSorterCommandRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    CMD_FIELD_NUMBER: builtins.int
    SUBCMD_FIELD_NUMBER: builtins.int
    CLUSTERERPARAMS_FIELD_NUMBER: builtins.int
    FEATUREPARAMS_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    cmd: global___SpikeSorterCommand.ValueType
    subCmd: global___SpikeSorterSubCommand.ValueType
    @property
    def clustererParams(self) -> global___SpikeSorterClustererParamsRequest: ...
    @property
    def featureParams(self) -> global___SpikeSorterFeatureParamsRequest: ...
    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        cmd: global___SpikeSorterCommand.ValueType | None = ...,
        subCmd: global___SpikeSorterSubCommand.ValueType | None = ...,
        clustererParams: global___SpikeSorterClustererParamsRequest | None = ...,
        featureParams: global___SpikeSorterFeatureParamsRequest | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["clustererParams", b"clustererParams", "cmd", b"cmd", "featureParams", b"featureParams", "spikeSorterID", b"spikeSorterID", "subCmd", b"subCmd"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["clustererParams", b"clustererParams", "cmd", b"cmd", "featureParams", b"featureParams", "spikeSorterID", b"spikeSorterID", "subCmd", b"subCmd"]) -> None: ...

global___SpikeSorterCommandRequest = SpikeSorterCommandRequest

@typing.final
class SpikeSorterState(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SYS_FIELD_NUMBER: builtins.int
    FRACCOMPLETE_FIELD_NUMBER: builtins.int
    MSG_FIELD_NUMBER: builtins.int
    ISON_FIELD_NUMBER: builtins.int
    ERRORMSG_FIELD_NUMBER: builtins.int
    WARNMSG_FIELD_NUMBER: builtins.int
    sys: global___SpikeSorterStateSystem.ValueType
    fracComplete: builtins.float
    msg: builtins.str
    isOn: builtins.bool
    errorMsg: builtins.str
    warnMsg: builtins.str
    def __init__(
        self,
        *,
        sys: global___SpikeSorterStateSystem.ValueType | None = ...,
        fracComplete: builtins.float | None = ...,
        msg: builtins.str | None = ...,
        isOn: builtins.bool | None = ...,
        errorMsg: builtins.str | None = ...,
        warnMsg: builtins.str | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["errorMsg", b"errorMsg", "fracComplete", b"fracComplete", "isOn", b"isOn", "msg", b"msg", "sys", b"sys", "warnMsg", b"warnMsg"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["errorMsg", b"errorMsg", "fracComplete", b"fracComplete", "isOn", b"isOn", "msg", b"msg", "sys", b"sys", "warnMsg", b"warnMsg"]) -> None: ...

global___SpikeSorterState = SpikeSorterState

@typing.final
class SpkSortIOreq(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    TYPE_FIELD_NUMBER: builtins.int
    TARGET_FIELD_NUMBER: builtins.int
    MODE_FIELD_NUMBER: builtins.int
    type: global___SpkSortIOtype.ValueType
    target: global___SpkSortIOtarget.ValueType
    mode: global___SpkSortIOmode.ValueType
    def __init__(
        self,
        *,
        type: global___SpkSortIOtype.ValueType | None = ...,
        target: global___SpkSortIOtarget.ValueType | None = ...,
        mode: global___SpkSortIOmode.ValueType | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["mode", b"mode", "target", b"target", "type", b"type"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["mode", b"mode", "target", b"target", "type", b"type"]) -> None: ...

global___SpkSortIOreq = SpkSortIOreq

@typing.final
class SpikeSorterLaunchReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    SORTERTYPE_FIELD_NUMBER: builtins.int
    MSG_FIELD_NUMBER: builtins.int
    DESC_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    sorterType: global___SpikeSorterType.ValueType
    msg: builtins.str
    @property
    def desc(self) -> common_pb2.FileDescriptor: ...
    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        sorterType: global___SpikeSorterType.ValueType | None = ...,
        msg: builtins.str | None = ...,
        desc: common_pb2.FileDescriptor | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["desc", b"desc", "msg", b"msg", "sorterType", b"sorterType", "spikeSorterID", b"spikeSorterID"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["desc", b"desc", "msg", b"msg", "sorterType", b"sorterType", "spikeSorterID", b"spikeSorterID"]) -> None: ...

global___SpikeSorterLaunchReply = SpikeSorterLaunchReply

@typing.final
class GetSpikeSorterIDsRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    STREAMGROUPID_FIELD_NUMBER: builtins.int
    streamGroupID: builtins.str
    def __init__(
        self,
        *,
        streamGroupID: builtins.str | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["streamGroupID", b"streamGroupID"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["streamGroupID", b"streamGroupID"]) -> None: ...

global___GetSpikeSorterIDsRequest = GetSpikeSorterIDsRequest

@typing.final
class GetSpikeSorterIDsReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKESORTERIDS_FIELD_NUMBER: builtins.int
    @property
    def spikeSorterIDs(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
    def __init__(
        self,
        *,
        spikeSorterIDs: collections.abc.Iterable[builtins.str] | None = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing.Literal["spikeSorterIDs", b"spikeSorterIDs"]) -> None: ...

global___GetSpikeSorterIDsReply = GetSpikeSorterIDsReply

@typing.final
class SpikeSorterGetRasterDataRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    TIMEWINDOW_FIELD_NUMBER: builtins.int
    PLOTWIDTHPOINTS_FIELD_NUMBER: builtins.int
    COMPONENTID_FIELD_NUMBER: builtins.int
    TIMERANGE_FIELD_NUMBER: builtins.int
    MODE_FIELD_NUMBER: builtins.int
    LABELEDONLY_FIELD_NUMBER: builtins.int
    PRIMARYSITEONLY_FIELD_NUMBER: builtins.int
    NTVCHANIDX_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    timeWindow: builtins.float
    plotWidthPoints: builtins.float
    componentID: builtins.str
    mode: global___RasterMode.ValueType
    labeledOnly: builtins.bool
    primarySiteOnly: builtins.bool
    @property
    def timeRange(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """optional; uses server-tracked time range if not specified"""

    @property
    def ntvChanIdx(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
        """optional; overrides server-side selected channels when non-empty"""

    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        timeWindow: builtins.float | None = ...,
        plotWidthPoints: builtins.float | None = ...,
        componentID: builtins.str | None = ...,
        timeRange: collections.abc.Iterable[builtins.float] | None = ...,
        mode: global___RasterMode.ValueType | None = ...,
        labeledOnly: builtins.bool | None = ...,
        primarySiteOnly: builtins.bool | None = ...,
        ntvChanIdx: collections.abc.Iterable[builtins.int] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["componentID", b"componentID", "labeledOnly", b"labeledOnly", "mode", b"mode", "plotWidthPoints", b"plotWidthPoints", "primarySiteOnly", b"primarySiteOnly", "spikeSorterID", b"spikeSorterID", "timeWindow", b"timeWindow"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["componentID", b"componentID", "labeledOnly", b"labeledOnly", "mode", b"mode", "ntvChanIdx", b"ntvChanIdx", "plotWidthPoints", b"plotWidthPoints", "primarySiteOnly", b"primarySiteOnly", "spikeSorterID", b"spikeSorterID", "timeRange", b"timeRange", "timeWindow", b"timeWindow"]) -> None: ...

global___SpikeSorterGetRasterDataRequest = SpikeSorterGetRasterDataRequest

@typing.final
class SpikeSorterRasterDataReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKETIMESTAMPS_FIELD_NUMBER: builtins.int
    TIMERANGE_FIELD_NUMBER: builtins.int
    TIMESTAMPRANGE_FIELD_NUMBER: builtins.int
    GPIODATA_FIELD_NUMBER: builtins.int
    GPIOSHAPE_FIELD_NUMBER: builtins.int
    GPIOData: builtins.bytes
    @property
    def spikeTimestamps(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[biointerface_pb2.SpikeTimestamp]: ...
    @property
    def timeRange(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def timeStampRange(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
    @property
    def GPIOShape(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
    def __init__(
        self,
        *,
        spikeTimestamps: collections.abc.Iterable[biointerface_pb2.SpikeTimestamp] | None = ...,
        timeRange: collections.abc.Iterable[builtins.float] | None = ...,
        timeStampRange: collections.abc.Iterable[builtins.int] | None = ...,
        GPIOData: builtins.bytes | None = ...,
        GPIOShape: collections.abc.Iterable[builtins.int] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["GPIOData", b"GPIOData"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["GPIOData", b"GPIOData", "GPIOShape", b"GPIOShape", "spikeTimestamps", b"spikeTimestamps", "timeRange", b"timeRange", "timeStampRange", b"timeStampRange"]) -> None: ...

global___SpikeSorterRasterDataReply = SpikeSorterRasterDataReply

@typing.final
class SpikeSorterStandardRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    STREAMGROUPID_FIELD_NUMBER: builtins.int
    SPIKESORTERID_FIELD_NUMBER: builtins.int
    streamGroupID: builtins.str
    spikeSorterID: builtins.str
    def __init__(
        self,
        *,
        streamGroupID: builtins.str | None = ...,
        spikeSorterID: builtins.str | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["spikeSorterID", b"spikeSorterID", "streamGroupID", b"streamGroupID"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["spikeSorterID", b"spikeSorterID", "streamGroupID", b"streamGroupID"]) -> None: ...

global___SpikeSorterStandardRequest = SpikeSorterStandardRequest

@typing.final
class SpikeSorterDashboardRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    DASHELEMENTS_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    @property
    def dashElements(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[global___DashElement.ValueType]: ...
    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        dashElements: collections.abc.Iterable[global___DashElement.ValueType] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["spikeSorterID", b"spikeSorterID"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["dashElements", b"dashElements", "spikeSorterID", b"spikeSorterID"]) -> None: ...

global___SpikeSorterDashboardRequest = SpikeSorterDashboardRequest

@typing.final
class SpikeSorterDynamic(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    @typing.final
    class Criteria(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        DETECT_FIELD_NUMBER: builtins.int
        TRAIN_FIELD_NUMBER: builtins.int
        SORT_FIELD_NUMBER: builtins.int
        detect: global___SpikeSorterCriterionLevel.ValueType
        """0=least stringent, 2=default, 4=most stringent"""
        train: global___SpikeSorterCriterionLevel.ValueType
        sort: global___SpikeSorterCriterionLevel.ValueType
        def __init__(
            self,
            *,
            detect: global___SpikeSorterCriterionLevel.ValueType | None = ...,
            train: global___SpikeSorterCriterionLevel.ValueType | None = ...,
            sort: global___SpikeSorterCriterionLevel.ValueType | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing.Literal["detect", b"detect", "sort", b"sort", "train", b"train"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing.Literal["detect", b"detect", "sort", b"sort", "train", b"train"]) -> None: ...

    @typing.final
    class UpdatePeriodSec(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        DETECT_FIELD_NUMBER: builtins.int
        TRAIN_FIELD_NUMBER: builtins.int
        SORT_FIELD_NUMBER: builtins.int
        detect: builtins.float
        """0=least stringent, 2=default, 4=most stringent"""
        train: builtins.float
        sort: builtins.float
        def __init__(
            self,
            *,
            detect: builtins.float | None = ...,
            train: builtins.float | None = ...,
            sort: builtins.float | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing.Literal["detect", b"detect", "sort", b"sort", "train", b"train"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing.Literal["detect", b"detect", "sort", b"sort", "train", b"train"]) -> None: ...

    ISENABLED_FIELD_NUMBER: builtins.int
    UPDATEPERIODSEC_FIELD_NUMBER: builtins.int
    CRITERIA_FIELD_NUMBER: builtins.int
    isEnabled: builtins.bool
    @property
    def updatePeriodSec(self) -> global___SpikeSorterDynamic.UpdatePeriodSec: ...
    @property
    def criteria(self) -> global___SpikeSorterDynamic.Criteria: ...
    def __init__(
        self,
        *,
        isEnabled: builtins.bool | None = ...,
        updatePeriodSec: global___SpikeSorterDynamic.UpdatePeriodSec | None = ...,
        criteria: global___SpikeSorterDynamic.Criteria | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["criteria", b"criteria", "isEnabled", b"isEnabled", "updatePeriodSec", b"updatePeriodSec"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["criteria", b"criteria", "isEnabled", b"isEnabled", "updatePeriodSec", b"updatePeriodSec"]) -> None: ...

global___SpikeSorterDynamic = SpikeSorterDynamic

@typing.final
class SpikeSorterSetDynamicRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    @typing.final
    class VariantEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str
        @property
        def value(self) -> global___SpikeSorterDynamic: ...
        def __init__(
            self,
            *,
            key: builtins.str | None = ...,
            value: global___SpikeSorterDynamic | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ...

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    VARIANT_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    @property
    def variant(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___SpikeSorterDynamic]:
        """key is variant ID"""

    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        variant: collections.abc.Mapping[builtins.str, global___SpikeSorterDynamic] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["spikeSorterID", b"spikeSorterID"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["spikeSorterID", b"spikeSorterID", "variant", b"variant"]) -> None: ...

global___SpikeSorterSetDynamicRequest = SpikeSorterSetDynamicRequest

@typing.final
class SpikeSorterGetDynamicReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    @typing.final
    class VariantEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str
        @property
        def value(self) -> global___SpikeSorterDynamic: ...
        def __init__(
            self,
            *,
            key: builtins.str | None = ...,
            value: global___SpikeSorterDynamic | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ...

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    ROOTVARIANTID_FIELD_NUMBER: builtins.int
    VARIANT_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    rootVariantID: builtins.str
    @property
    def variant(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___SpikeSorterDynamic]:
        """key is variant ID"""

    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        rootVariantID: builtins.str | None = ...,
        variant: collections.abc.Mapping[builtins.str, global___SpikeSorterDynamic] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["rootVariantID", b"rootVariantID", "spikeSorterID", b"spikeSorterID"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["rootVariantID", b"rootVariantID", "spikeSorterID", b"spikeSorterID", "variant", b"variant"]) -> None: ...

global___SpikeSorterGetDynamicReply = SpikeSorterGetDynamicReply

@typing.final
class GetSpikeSorterParamCommandReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    REC_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    @property
    def rec(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[common_pb2.SpikeSorterParamCommandRecord]:
        """ascending order by NtvChanIdx"""

    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        rec: collections.abc.Iterable[common_pb2.SpikeSorterParamCommandRecord] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["spikeSorterID", b"spikeSorterID"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["rec", b"rec", "spikeSorterID", b"spikeSorterID"]) -> None: ...

global___GetSpikeSorterParamCommandReply = GetSpikeSorterParamCommandReply

@typing.final
class ClusterMapOutliers(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    MILD_FIELD_NUMBER: builtins.int
    EXTREME_FIELD_NUMBER: builtins.int
    @property
    def mild(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def extreme(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    def __init__(
        self,
        *,
        mild: collections.abc.Iterable[builtins.float] | None = ...,
        extreme: collections.abc.Iterable[builtins.float] | None = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing.Literal["extreme", b"extreme", "mild", b"mild"]) -> None: ...

global___ClusterMapOutliers = ClusterMapOutliers

@typing.final
class ClusterMapQuartiles(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    Q1_FIELD_NUMBER: builtins.int
    Q2_FIELD_NUMBER: builtins.int
    Q3_FIELD_NUMBER: builtins.int
    q1: builtins.float
    q2: builtins.float
    q3: builtins.float
    def __init__(
        self,
        *,
        q1: builtins.float | None = ...,
        q2: builtins.float | None = ...,
        q3: builtins.float | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["q1", b"q1", "q2", b"q2", "q3", b"q3"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["q1", b"q1", "q2", b"q2", "q3", b"q3"]) -> None: ...

global___ClusterMapQuartiles = ClusterMapQuartiles

@typing.final
class ClusterMapStats(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    CENTROIDCENTER_FIELD_NUMBER: builtins.int
    CENTROIDSD_FIELD_NUMBER: builtins.int
    CENTROIDSDNORM_FIELD_NUMBER: builtins.int
    INTRACENTROIDDIST_FIELD_NUMBER: builtins.int
    NUMSPIKES_FIELD_NUMBER: builtins.int
    centroidSdNorm: builtins.float
    numSpikes: builtins.int
    @property
    def centroidCenter(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def centroidSd(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def intraCentroidDist(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    def __init__(
        self,
        *,
        centroidCenter: collections.abc.Iterable[builtins.float] | None = ...,
        centroidSd: collections.abc.Iterable[builtins.float] | None = ...,
        centroidSdNorm: builtins.float | None = ...,
        intraCentroidDist: collections.abc.Iterable[builtins.float] | None = ...,
        numSpikes: builtins.int | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["centroidSdNorm", b"centroidSdNorm", "numSpikes", b"numSpikes"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["centroidCenter", b"centroidCenter", "centroidSd", b"centroidSd", "centroidSdNorm", b"centroidSdNorm", "intraCentroidDist", b"intraCentroidDist", "numSpikes", b"numSpikes"]) -> None: ...

global___ClusterMapStats = ClusterMapStats

@typing.final
class ClusterMapRecord(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    LABEL_FIELD_NUMBER: builtins.int
    STATS_FIELD_NUMBER: builtins.int
    NUMSPIKESTRAINCACHE_FIELD_NUMBER: builtins.int
    label: builtins.int
    numSpikesTrainCache: builtins.int
    @property
    def stats(self) -> global___ClusterMapStats: ...
    def __init__(
        self,
        *,
        label: builtins.int | None = ...,
        stats: global___ClusterMapStats | None = ...,
        numSpikesTrainCache: builtins.int | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["label", b"label", "numSpikesTrainCache", b"numSpikesTrainCache", "stats", b"stats"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["label", b"label", "numSpikesTrainCache", b"numSpikesTrainCache", "stats", b"stats"]) -> None: ...

global___ClusterMapRecord = ClusterMapRecord

@typing.final
class SpikeSortSiteStatus(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    NTVCHANIDX_FIELD_NUMBER: builtins.int
    ORDEREDLABELS_FIELD_NUMBER: builtins.int
    CLUSTER_FIELD_NUMBER: builtins.int
    NUMSPIKES_FIELD_NUMBER: builtins.int
    ZETA_FIELD_NUMBER: builtins.int
    AGGREGATESPIKERATE_FIELD_NUMBER: builtins.int
    ntvChanIdx: builtins.int
    aggregateSpikeRate: builtins.float
    """(labeled+unlabeled)/dur"""
    @property
    def orderedLabels(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
    @property
    def cluster(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ClusterMapRecord]:
        """one for each labeled neuron"""

    @property
    def numSpikes(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
        """sorted labeled spikes, unlabeled spikes, labeled+unlabeled"""

    @property
    def zeta(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """tbd quality metric"""

    def __init__(
        self,
        *,
        ntvChanIdx: builtins.int | None = ...,
        orderedLabels: collections.abc.Iterable[builtins.int] | None = ...,
        cluster: collections.abc.Iterable[global___ClusterMapRecord] | None = ...,
        numSpikes: collections.abc.Iterable[builtins.int] | None = ...,
        zeta: collections.abc.Iterable[builtins.float] | None = ...,
        aggregateSpikeRate: builtins.float | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["aggregateSpikeRate", b"aggregateSpikeRate", "ntvChanIdx", b"ntvChanIdx"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["aggregateSpikeRate", b"aggregateSpikeRate", "cluster", b"cluster", "ntvChanIdx", b"ntvChanIdx", "numSpikes", b"numSpikes", "orderedLabels", b"orderedLabels", "zeta", b"zeta"]) -> None: ...

global___SpikeSortSiteStatus = SpikeSortSiteStatus

@typing.final
class SpikeSortPhaseStatus(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    TIMERANGE_FIELD_NUMBER: builtins.int
    CHUNKINDEX_FIELD_NUMBER: builtins.int
    UPDATEPERIOD_FIELD_NUMBER: builtins.int
    BETA_FIELD_NUMBER: builtins.int
    ISCOMPLETE_FIELD_NUMBER: builtins.int
    FRACTIONCOMPLETE_FIELD_NUMBER: builtins.int
    chunkIndex: builtins.int
    updatePeriod: builtins.float
    beta: builtins.float
    isComplete: builtins.bool
    fractionComplete: builtins.float
    @property
    def timeRange(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    def __init__(
        self,
        *,
        timeRange: collections.abc.Iterable[builtins.float] | None = ...,
        chunkIndex: builtins.int | None = ...,
        updatePeriod: builtins.float | None = ...,
        beta: builtins.float | None = ...,
        isComplete: builtins.bool | None = ...,
        fractionComplete: builtins.float | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["beta", b"beta", "chunkIndex", b"chunkIndex", "fractionComplete", b"fractionComplete", "isComplete", b"isComplete", "updatePeriod", b"updatePeriod"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["beta", b"beta", "chunkIndex", b"chunkIndex", "fractionComplete", b"fractionComplete", "isComplete", b"isComplete", "timeRange", b"timeRange", "updatePeriod", b"updatePeriod"]) -> None: ...

global___SpikeSortPhaseStatus = SpikeSortPhaseStatus

@typing.final
class SpikeSortNbrIdxList(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    NTVCHANIDXS_FIELD_NUMBER: builtins.int
    @property
    def ntvChanIdxs(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
    def __init__(
        self,
        *,
        ntvChanIdxs: collections.abc.Iterable[builtins.int] | None = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing.Literal["ntvChanIdxs", b"ntvChanIdxs"]) -> None: ...

global___SpikeSortNbrIdxList = SpikeSortNbrIdxList

@typing.final
class SpikeSorterStatusReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    STATE_FIELD_NUMBER: builtins.int
    BIOINTERFACEID_FIELD_NUMBER: builtins.int
    DATASOURCEID_FIELD_NUMBER: builtins.int
    SAMPFREQ_FIELD_NUMBER: builtins.int
    ENABLEDNTVCHANIDX_FIELD_NUMBER: builtins.int
    PHASE_FIELD_NUMBER: builtins.int
    ENABLEDSITE_FIELD_NUMBER: builtins.int
    PROBEYIELD_FIELD_NUMBER: builtins.int
    SORTSTATS_FIELD_NUMBER: builtins.int
    DATASOURCETIMERANGE_FIELD_NUMBER: builtins.int
    BIOINTERFACETIMERANGE_FIELD_NUMBER: builtins.int
    NUMNEURONS_FIELD_NUMBER: builtins.int
    biointerfaceID: builtins.str
    datasourceID: builtins.str
    sampFreq: builtins.float
    probeYield: builtins.float
    numNeurons: builtins.int
    @property
    def state(self) -> global___SpikeSorterState: ...
    @property
    def enabledNtvChanIdx(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
        """ordered same as enabledSite"""

    @property
    def phase(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SpikeSortPhaseStatus]: ...
    @property
    def enabledSite(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SpikeSortSiteStatus]: ...
    @property
    def sortStats(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """neurons/site statistics: min, max, mean, sd, mode, count"""

    @property
    def datasourceTimeRange(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def biointerfaceTimeRange(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    def __init__(
        self,
        *,
        state: global___SpikeSorterState | None = ...,
        biointerfaceID: builtins.str | None = ...,
        datasourceID: builtins.str | None = ...,
        sampFreq: builtins.float | None = ...,
        enabledNtvChanIdx: collections.abc.Iterable[builtins.int] | None = ...,
        phase: collections.abc.Iterable[global___SpikeSortPhaseStatus] | None = ...,
        enabledSite: collections.abc.Iterable[global___SpikeSortSiteStatus] | None = ...,
        probeYield: builtins.float | None = ...,
        sortStats: collections.abc.Iterable[builtins.float] | None = ...,
        datasourceTimeRange: collections.abc.Iterable[builtins.float] | None = ...,
        biointerfaceTimeRange: collections.abc.Iterable[builtins.float] | None = ...,
        numNeurons: builtins.int | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["biointerfaceID", b"biointerfaceID", "datasourceID", b"datasourceID", "numNeurons", b"numNeurons", "probeYield", b"probeYield", "sampFreq", b"sampFreq", "state", b"state"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["biointerfaceID", b"biointerfaceID", "biointerfaceTimeRange", b"biointerfaceTimeRange", "datasourceID", b"datasourceID", "datasourceTimeRange", b"datasourceTimeRange", "enabledNtvChanIdx", b"enabledNtvChanIdx", "enabledSite", b"enabledSite", "numNeurons", b"numNeurons", "phase", b"phase", "probeYield", b"probeYield", "sampFreq", b"sampFreq", "sortStats", b"sortStats", "state", b"state"]) -> None: ...

global___SpikeSorterStatusReply = SpikeSorterStatusReply

@typing.final
class SpikeSorterStatusVariantsReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    VARIANTS_FIELD_NUMBER: builtins.int
    @property
    def variants(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SpikeSorterStatusReply]: ...
    def __init__(
        self,
        *,
        variants: collections.abc.Iterable[global___SpikeSorterStatusReply] | None = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing.Literal["variants", b"variants"]) -> None: ...

global___SpikeSorterStatusVariantsReply = SpikeSorterStatusVariantsReply

@typing.final
class SpikeSorterClassifierSpec(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    ALPHA_FIELD_NUMBER: builtins.int
    ALPHABIAS_FIELD_NUMBER: builtins.int
    DIMOUTPUTLAYER_FIELD_NUMBER: builtins.int
    ERRORTOLERANCE_FIELD_NUMBER: builtins.int
    HIDDENLAYERFACTOR_FIELD_NUMBER: builtins.int
    ID_FIELD_NUMBER: builtins.int
    INITBIASSTDDEV_FIELD_NUMBER: builtins.int
    INITWEIGHTSTDDEV_FIELD_NUMBER: builtins.int
    ISMASKING_FIELD_NUMBER: builtins.int
    L1LAMBDA_FIELD_NUMBER: builtins.int
    MINIBATCHSIZE_FIELD_NUMBER: builtins.int
    MAXNUMSAMPLES_FIELD_NUMBER: builtins.int
    NUMEPOCHS_FIELD_NUMBER: builtins.int
    NUMSAMPLESTESTMSE_FIELD_NUMBER: builtins.int
    NUMCONCURRENTMODELS_FIELD_NUMBER: builtins.int
    LABELNOISELEVEL_FIELD_NUMBER: builtins.int
    alpha: builtins.float
    alphaBias: builtins.float
    dimOutputLayer: builtins.int
    errorTolerance: builtins.float
    hiddenLayerFactor: builtins.float
    iD: builtins.str
    initBiasStdDev: builtins.float
    initWeightStdDev: builtins.float
    isMasking: builtins.bool
    l1lambda: builtins.float
    minibatchSize: builtins.int
    maxNumSamples: builtins.int
    numEpochs: builtins.int
    numSamplesTestMSE: builtins.int
    numConcurrentModels: builtins.int
    labelNoiseLevel: builtins.float
    def __init__(
        self,
        *,
        alpha: builtins.float | None = ...,
        alphaBias: builtins.float | None = ...,
        dimOutputLayer: builtins.int | None = ...,
        errorTolerance: builtins.float | None = ...,
        hiddenLayerFactor: builtins.float | None = ...,
        iD: builtins.str | None = ...,
        initBiasStdDev: builtins.float | None = ...,
        initWeightStdDev: builtins.float | None = ...,
        isMasking: builtins.bool | None = ...,
        l1lambda: builtins.float | None = ...,
        minibatchSize: builtins.int | None = ...,
        maxNumSamples: builtins.int | None = ...,
        numEpochs: builtins.int | None = ...,
        numSamplesTestMSE: builtins.int | None = ...,
        numConcurrentModels: builtins.int | None = ...,
        labelNoiseLevel: builtins.float | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["alpha", b"alpha", "alphaBias", b"alphaBias", "dimOutputLayer", b"dimOutputLayer", "errorTolerance", b"errorTolerance", "hiddenLayerFactor", b"hiddenLayerFactor", "iD", b"iD", "initBiasStdDev", b"initBiasStdDev", "initWeightStdDev", b"initWeightStdDev", "isMasking", b"isMasking", "l1lambda", b"l1lambda", "labelNoiseLevel", b"labelNoiseLevel", "maxNumSamples", b"maxNumSamples", "minibatchSize", b"minibatchSize", "numConcurrentModels", b"numConcurrentModels", "numEpochs", b"numEpochs", "numSamplesTestMSE", b"numSamplesTestMSE"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["alpha", b"alpha", "alphaBias", b"alphaBias", "dimOutputLayer", b"dimOutputLayer", "errorTolerance", b"errorTolerance", "hiddenLayerFactor", b"hiddenLayerFactor", "iD", b"iD", "initBiasStdDev", b"initBiasStdDev", "initWeightStdDev", b"initWeightStdDev", "isMasking", b"isMasking", "l1lambda", b"l1lambda", "labelNoiseLevel", b"labelNoiseLevel", "maxNumSamples", b"maxNumSamples", "minibatchSize", b"minibatchSize", "numConcurrentModels", b"numConcurrentModels", "numEpochs", b"numEpochs", "numSamplesTestMSE", b"numSamplesTestMSE"]) -> None: ...

global___SpikeSorterClassifierSpec = SpikeSorterClassifierSpec

@typing.final
class SpikeSorterVariantSpec(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    ID_FIELD_NUMBER: builtins.int
    SITECONFIGID_FIELD_NUMBER: builtins.int
    CLASSIFIERSPEC_FIELD_NUMBER: builtins.int
    iD: builtins.str
    siteConfigID: builtins.str
    @property
    def classifierSpec(self) -> global___SpikeSorterClassifierSpec: ...
    def __init__(
        self,
        *,
        iD: builtins.str | None = ...,
        siteConfigID: builtins.str | None = ...,
        classifierSpec: global___SpikeSorterClassifierSpec | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["classifierSpec", b"classifierSpec", "iD", b"iD", "siteConfigID", b"siteConfigID"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["classifierSpec", b"classifierSpec", "iD", b"iD", "siteConfigID", b"siteConfigID"]) -> None: ...

global___SpikeSorterVariantSpec = SpikeSorterVariantSpec

@typing.final
class SpikeSorterSpec(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    DATASOURCEID_FIELD_NUMBER: builtins.int
    BIOINTERFACEID_FIELD_NUMBER: builtins.int
    MAXNUMSITENEIGHBORS_FIELD_NUMBER: builtins.int
    NEIGHBORRADIUSUM_FIELD_NUMBER: builtins.int
    VARIANT_FIELD_NUMBER: builtins.int
    SEED_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    datasourceID: builtins.str
    biointerfaceID: builtins.str
    maxNumSiteNeighbors: builtins.int
    neighborRadiusUm: builtins.float
    seed: builtins.int
    """required SpikeSorterMode mode = 7;"""
    @property
    def variant(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SpikeSorterVariantSpec]: ...
    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        datasourceID: builtins.str | None = ...,
        biointerfaceID: builtins.str | None = ...,
        maxNumSiteNeighbors: builtins.int | None = ...,
        neighborRadiusUm: builtins.float | None = ...,
        variant: collections.abc.Iterable[global___SpikeSorterVariantSpec] | None = ...,
        seed: builtins.int | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["biointerfaceID", b"biointerfaceID", "datasourceID", b"datasourceID", "maxNumSiteNeighbors", b"maxNumSiteNeighbors", "neighborRadiusUm", b"neighborRadiusUm", "seed", b"seed", "spikeSorterID", b"spikeSorterID"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["biointerfaceID", b"biointerfaceID", "datasourceID", b"datasourceID", "maxNumSiteNeighbors", b"maxNumSiteNeighbors", "neighborRadiusUm", b"neighborRadiusUm", "seed", b"seed", "spikeSorterID", b"spikeSorterID", "variant", b"variant"]) -> None: ...

global___SpikeSorterSpec = SpikeSorterSpec

@typing.final
class SpikeSorterGetConfigReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPEC_FIELD_NUMBER: builtins.int
    AIUPDATEPERIOD_FIELD_NUMBER: builtins.int
    ORDEREDVARIANTIDS_FIELD_NUMBER: builtins.int
    ROOTVARIANTID_FIELD_NUMBER: builtins.int
    SORTERSTATUS_FIELD_NUMBER: builtins.int
    aIupdatePeriod: builtins.float
    rootVariantID: builtins.str
    @property
    def spec(self) -> global___SpikeSorterSpec: ...
    @property
    def orderedVariantIDs(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
    @property
    def sorterStatus(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SpikeSorterStatusReply]:
        """required SpikesStatusReply biointerfaceStatus = 5;  // biointerface of root variant
        status of all variants
        """

    def __init__(
        self,
        *,
        spec: global___SpikeSorterSpec | None = ...,
        aIupdatePeriod: builtins.float | None = ...,
        orderedVariantIDs: collections.abc.Iterable[builtins.str] | None = ...,
        rootVariantID: builtins.str | None = ...,
        sorterStatus: collections.abc.Iterable[global___SpikeSorterStatusReply] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["aIupdatePeriod", b"aIupdatePeriod", "rootVariantID", b"rootVariantID", "spec", b"spec"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["aIupdatePeriod", b"aIupdatePeriod", "orderedVariantIDs", b"orderedVariantIDs", "rootVariantID", b"rootVariantID", "sorterStatus", b"sorterStatus", "spec", b"spec"]) -> None: ...

global___SpikeSorterGetConfigReply = SpikeSorterGetConfigReply

@typing.final
class SpikeSorterVizRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class _VType:
        ValueType = typing.NewType("ValueType", builtins.int)
        V: typing_extensions.TypeAlias = ValueType

    class _VTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[SpikeSorterVizRequest._VType.ValueType], builtins.type):
        DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
        VIZ_SPIKESORT_TRAIN_SPIKES: SpikeSorterVizRequest._VType.ValueType  # 0

    class VType(_VType, metaclass=_VTypeEnumTypeWrapper): ...
    VIZ_SPIKESORT_TRAIN_SPIKES: SpikeSorterVizRequest.VType.ValueType  # 0

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    VARIANTID_FIELD_NUMBER: builtins.int
    NTVCHANIDX_FIELD_NUMBER: builtins.int
    SPIKELABELS_FIELD_NUMBER: builtins.int
    VIZTYPE_FIELD_NUMBER: builtins.int
    ISYAUTOSCALE_FIELD_NUMBER: builtins.int
    YLIM_FIELD_NUMBER: builtins.int
    FIGDIR_FIELD_NUMBER: builtins.int
    NUMSPIKES_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    variantID: builtins.str
    vizType: global___SpikeSorterVizRequest.VType.ValueType
    isYAutoScale: builtins.bool
    figDir: builtins.str
    numSpikes: builtins.int
    @property
    def ntvChanIdx(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
    @property
    def spikeLabels(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
        """len(0) ==> all labels"""

    @property
    def yLim(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        variantID: builtins.str | None = ...,
        ntvChanIdx: collections.abc.Iterable[builtins.int] | None = ...,
        spikeLabels: collections.abc.Iterable[builtins.int] | None = ...,
        vizType: global___SpikeSorterVizRequest.VType.ValueType | None = ...,
        isYAutoScale: builtins.bool | None = ...,
        yLim: collections.abc.Iterable[builtins.float] | None = ...,
        figDir: builtins.str | None = ...,
        numSpikes: builtins.int | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["figDir", b"figDir", "isYAutoScale", b"isYAutoScale", "numSpikes", b"numSpikes", "spikeSorterID", b"spikeSorterID", "variantID", b"variantID", "vizType", b"vizType"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["figDir", b"figDir", "isYAutoScale", b"isYAutoScale", "ntvChanIdx", b"ntvChanIdx", "numSpikes", b"numSpikes", "spikeLabels", b"spikeLabels", "spikeSorterID", b"spikeSorterID", "variantID", b"variantID", "vizType", b"vizType", "yLim", b"yLim"]) -> None: ...

global___SpikeSorterVizRequest = SpikeSorterVizRequest

@typing.final
class SpikeSorterClustererParamsRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    POSINFLUENCEFRAC_FIELD_NUMBER: builtins.int
    WFMSHAPEINFLUENCEFRAC_FIELD_NUMBER: builtins.int
    EPS_FIELD_NUMBER: builtins.int
    MINPTS_FIELD_NUMBER: builtins.int
    DISABLED_FIELD_NUMBER: builtins.int
    posInfluenceFrac: builtins.float
    wfmShapeInfluenceFrac: builtins.float
    eps: builtins.float
    minPts: builtins.int
    disabled: builtins.bool
    def __init__(
        self,
        *,
        posInfluenceFrac: builtins.float | None = ...,
        wfmShapeInfluenceFrac: builtins.float | None = ...,
        eps: builtins.float | None = ...,
        minPts: builtins.int | None = ...,
        disabled: builtins.bool | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["disabled", b"disabled", "eps", b"eps", "minPts", b"minPts", "posInfluenceFrac", b"posInfluenceFrac", "wfmShapeInfluenceFrac", b"wfmShapeInfluenceFrac"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["disabled", b"disabled", "eps", b"eps", "minPts", b"minPts", "posInfluenceFrac", b"posInfluenceFrac", "wfmShapeInfluenceFrac", b"wfmShapeInfluenceFrac"]) -> None: ...

global___SpikeSorterClustererParamsRequest = SpikeSorterClustererParamsRequest

@typing.final
class SpikeSorterFeatureParamsRequest(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    NUMFEATURES_FIELD_NUMBER: builtins.int
    FEATURETYPE_FIELD_NUMBER: builtins.int
    LATENTDIM_FIELD_NUMBER: builtins.int
    RESAMPLEWFMLEN_FIELD_NUMBER: builtins.int
    numFeatures: builtins.int
    featureType: global___InputFeatureType.ValueType
    latentDim: builtins.int
    resampleWfmLen: builtins.int
    def __init__(
        self,
        *,
        numFeatures: builtins.int | None = ...,
        featureType: global___InputFeatureType.ValueType | None = ...,
        latentDim: builtins.int | None = ...,
        resampleWfmLen: builtins.int | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["featureType", b"featureType", "latentDim", b"latentDim", "numFeatures", b"numFeatures", "resampleWfmLen", b"resampleWfmLen"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["featureType", b"featureType", "latentDim", b"latentDim", "numFeatures", b"numFeatures", "resampleWfmLen", b"resampleWfmLen"]) -> None: ...

global___SpikeSorterFeatureParamsRequest = SpikeSorterFeatureParamsRequest

@typing.final
class SpikeSorterFeatureParamsReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SPIKESORTERID_FIELD_NUMBER: builtins.int
    FEATURETYPE_FIELD_NUMBER: builtins.int
    MAXNUMFEATURES_FIELD_NUMBER: builtins.int
    NUMFEATURES_FIELD_NUMBER: builtins.int
    POSINFLUENCEFRAC_FIELD_NUMBER: builtins.int
    WFMSHAPEINFLUENCEFRAC_FIELD_NUMBER: builtins.int
    ISCLUSTERINGDISABLED_FIELD_NUMBER: builtins.int
    spikeSorterID: builtins.str
    featureType: global___InputFeatureType.ValueType
    maxNumFeatures: builtins.int
    numFeatures: builtins.int
    posInfluenceFrac: builtins.float
    wfmShapeInfluenceFrac: builtins.float
    isClusteringDisabled: builtins.bool
    def __init__(
        self,
        *,
        spikeSorterID: builtins.str | None = ...,
        featureType: global___InputFeatureType.ValueType | None = ...,
        maxNumFeatures: builtins.int | None = ...,
        numFeatures: builtins.int | None = ...,
        posInfluenceFrac: builtins.float | None = ...,
        wfmShapeInfluenceFrac: builtins.float | None = ...,
        isClusteringDisabled: builtins.bool | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["featureType", b"featureType", "isClusteringDisabled", b"isClusteringDisabled", "maxNumFeatures", b"maxNumFeatures", "numFeatures", b"numFeatures", "posInfluenceFrac", b"posInfluenceFrac", "spikeSorterID", b"spikeSorterID", "wfmShapeInfluenceFrac", b"wfmShapeInfluenceFrac"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["featureType", b"featureType", "isClusteringDisabled", b"isClusteringDisabled", "maxNumFeatures", b"maxNumFeatures", "numFeatures", b"numFeatures", "posInfluenceFrac", b"posInfluenceFrac", "spikeSorterID", b"spikeSorterID", "wfmShapeInfluenceFrac", b"wfmShapeInfluenceFrac"]) -> None: ...

global___SpikeSorterFeatureParamsReply = SpikeSorterFeatureParamsReply

@typing.final
class SpikeSorterDashboardReply(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    @typing.final
    class PortStatsEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str
        @property
        def value(self) -> global___IndicoDashboardPortStats: ...
        def __init__(
            self,
            *,
            key: builtins.str | None = ...,
            value: global___IndicoDashboardPortStats | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ...

    @typing.final
    class SitePanelEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str
        @property
        def value(self) -> global___IndicoDashboardSiteIndicators: ...
        def __init__(
            self,
            *,
            key: builtins.str | None = ...,
            value: global___IndicoDashboardSiteIndicators | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ...

    @typing.final
    class NeuronPanelEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str
        @property
        def value(self) -> global___IndicoDashboardNeuronIndicators: ...
        def __init__(
            self,
            *,
            key: builtins.str | None = ...,
            value: global___IndicoDashboardNeuronIndicators | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ...

    ENABLEDPORTS_FIELD_NUMBER: builtins.int
    GENERAL_FIELD_NUMBER: builtins.int
    SITESTATS_FIELD_NUMBER: builtins.int
    PORTSTATS_FIELD_NUMBER: builtins.int
    SITEPANEL_FIELD_NUMBER: builtins.int
    NEURONPANEL_FIELD_NUMBER: builtins.int
    AI_FIELD_NUMBER: builtins.int
    @property
    def enabledPorts(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[common_pb2.Port.ValueType]:
        """list of ports having enabled sites sorted in ascending order"""

    @property
    def general(self) -> global___SpikeSorterDashboardGeneralRec:
        """general metrics"""

    @property
    def siteStats(self) -> global___IndicoDashboardSiteStats:
        """aggregated over all sites"""

    @property
    def portStats(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___IndicoDashboardPortStats]:
        """aggregated over all sites"""

    @property
    def sitePanel(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___IndicoDashboardSiteIndicators]: ...
    @property
    def neuronPanel(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___IndicoDashboardNeuronIndicators]: ...
    @property
    def aI(self) -> global___SpikeSorterDashboardAI: ...
    def __init__(
        self,
        *,
        enabledPorts: collections.abc.Iterable[common_pb2.Port.ValueType] | None = ...,
        general: global___SpikeSorterDashboardGeneralRec | None = ...,
        siteStats: global___IndicoDashboardSiteStats | None = ...,
        portStats: collections.abc.Mapping[builtins.str, global___IndicoDashboardPortStats] | None = ...,
        sitePanel: collections.abc.Mapping[builtins.str, global___IndicoDashboardSiteIndicators] | None = ...,
        neuronPanel: collections.abc.Mapping[builtins.str, global___IndicoDashboardNeuronIndicators] | None = ...,
        aI: global___SpikeSorterDashboardAI | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["aI", b"aI", "general", b"general", "siteStats", b"siteStats"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["aI", b"aI", "enabledPorts", b"enabledPorts", "general", b"general", "neuronPanel", b"neuronPanel", "portStats", b"portStats", "sitePanel", b"sitePanel", "siteStats", b"siteStats"]) -> None: ...

global___SpikeSorterDashboardReply = SpikeSorterDashboardReply

@typing.final
class SpikeSorterDashboardGeneralRec(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    STATE_FIELD_NUMBER: builtins.int
    SORTERTYPE_FIELD_NUMBER: builtins.int
    SORTERID_FIELD_NUMBER: builtins.int
    DATASOURCEID_FIELD_NUMBER: builtins.int
    TIMERANGE_FIELD_NUMBER: builtins.int
    NUMTOTALSITES_FIELD_NUMBER: builtins.int
    NUMENABLEDSITES_FIELD_NUMBER: builtins.int
    NUMACTIVESITES_FIELD_NUMBER: builtins.int
    NUMNEURONS_FIELD_NUMBER: builtins.int
    PROBEYIELD_FIELD_NUMBER: builtins.int
    SITEYIELD_FIELD_NUMBER: builtins.int
    NUMSPIKESPROCESSED_FIELD_NUMBER: builtins.int
    NUMSPIKESLABELED_FIELD_NUMBER: builtins.int
    SORTEFFICIENCY_FIELD_NUMBER: builtins.int
    SINKDESC_FIELD_NUMBER: builtins.int
    sorterType: global___SpikeSorterType.ValueType
    """sorter mode"""
    sorterID: builtins.str
    """sorter UID"""
    datasourceID: builtins.str
    """source UID"""
    numTotalSites: builtins.int
    numEnabledSites: builtins.int
    numActiveSites: builtins.int
    numNeurons: builtins.int
    probeYield: builtins.float
    """fraction, numActiveSites/numEnabledSites"""
    siteYield: builtins.float
    """fraction, numNeurons/numActiveSites"""
    numSpikesProcessed: builtins.int
    numSpikesLabeled: builtins.int
    sortEfficiency: builtins.float
    @property
    def state(self) -> global___SpikeSorterState: ...
    @property
    def timeRange(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """[start, end] sec"""

    @property
    def sinkDesc(self) -> common_pb2.FileDescriptor: ...
    def __init__(
        self,
        *,
        state: global___SpikeSorterState | None = ...,
        sorterType: global___SpikeSorterType.ValueType | None = ...,
        sorterID: builtins.str | None = ...,
        datasourceID: builtins.str | None = ...,
        timeRange: collections.abc.Iterable[builtins.float] | None = ...,
        numTotalSites: builtins.int | None = ...,
        numEnabledSites: builtins.int | None = ...,
        numActiveSites: builtins.int | None = ...,
        numNeurons: builtins.int | None = ...,
        probeYield: builtins.float | None = ...,
        siteYield: builtins.float | None = ...,
        numSpikesProcessed: builtins.int | None = ...,
        numSpikesLabeled: builtins.int | None = ...,
        sortEfficiency: builtins.float | None = ...,
        sinkDesc: common_pb2.FileDescriptor | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["datasourceID", b"datasourceID", "numActiveSites", b"numActiveSites", "numEnabledSites", b"numEnabledSites", "numNeurons", b"numNeurons", "numSpikesLabeled", b"numSpikesLabeled", "numSpikesProcessed", b"numSpikesProcessed", "numTotalSites", b"numTotalSites", "probeYield", b"probeYield", "sinkDesc", b"sinkDesc", "siteYield", b"siteYield", "sortEfficiency", b"sortEfficiency", "sorterID", b"sorterID", "sorterType", b"sorterType", "state", b"state"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["datasourceID", b"datasourceID", "numActiveSites", b"numActiveSites", "numEnabledSites", b"numEnabledSites", "numNeurons", b"numNeurons", "numSpikesLabeled", b"numSpikesLabeled", "numSpikesProcessed", b"numSpikesProcessed", "numTotalSites", b"numTotalSites", "probeYield", b"probeYield", "sinkDesc", b"sinkDesc", "siteYield", b"siteYield", "sortEfficiency", b"sortEfficiency", "sorterID", b"sorterID", "sorterType", b"sorterType", "state", b"state", "timeRange", b"timeRange"]) -> None: ...

global___SpikeSorterDashboardGeneralRec = SpikeSorterDashboardGeneralRec

@typing.final
class SpikeSorterDashboardAI(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    BETA_FIELD_NUMBER: builtins.int
    ESTIMATEDREADERCOMPLETESEC_FIELD_NUMBER: builtins.int
    INTERSESSIONDURSEC_FIELD_NUMBER: builtins.int
    INTERSESSIONSTART_FIELD_NUMBER: builtins.int
    SESSIONDURSEC_FIELD_NUMBER: builtins.int
    SESSIONSTART_FIELD_NUMBER: builtins.int
    SESSIONIDX_FIELD_NUMBER: builtins.int
    STARTTIME_FIELD_NUMBER: builtins.int
    beta: builtins.float
    estimatedReaderCompleteSec: builtins.float
    interSessionDurSec: builtins.float
    interSessionStart: builtins.str
    sessionDurSec: builtins.float
    sessionStart: builtins.str
    sessionIdx: builtins.int
    startTime: builtins.str
    def __init__(
        self,
        *,
        beta: builtins.float | None = ...,
        estimatedReaderCompleteSec: builtins.float | None = ...,
        interSessionDurSec: builtins.float | None = ...,
        interSessionStart: builtins.str | None = ...,
        sessionDurSec: builtins.float | None = ...,
        sessionStart: builtins.str | None = ...,
        sessionIdx: builtins.int | None = ...,
        startTime: builtins.str | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["beta", b"beta", "estimatedReaderCompleteSec", b"estimatedReaderCompleteSec", "interSessionDurSec", b"interSessionDurSec", "interSessionStart", b"interSessionStart", "sessionDurSec", b"sessionDurSec", "sessionIdx", b"sessionIdx", "sessionStart", b"sessionStart", "startTime", b"startTime"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["beta", b"beta", "estimatedReaderCompleteSec", b"estimatedReaderCompleteSec", "interSessionDurSec", b"interSessionDurSec", "interSessionStart", b"interSessionStart", "sessionDurSec", b"sessionDurSec", "sessionIdx", b"sessionIdx", "sessionStart", b"sessionStart", "startTime", b"startTime"]) -> None: ...

global___SpikeSorterDashboardAI = SpikeSorterDashboardAI

@typing.final
class IndicoDashboardSiteStats(google.protobuf.message.Message):
    """metrics aggregated over all sites"""

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SNR_FIELD_NUMBER: builtins.int
    NOISE_FIELD_NUMBER: builtins.int
    NEURONYIELD_FIELD_NUMBER: builtins.int
    NUMNEURONS_FIELD_NUMBER: builtins.int
    numNeurons: builtins.int
    @property
    def snr(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """as SS_STAT enum, w/o mode"""

    @property
    def noise(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """as SS_STAT enum, w/o mode"""

    @property
    def neuronYield(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """as SS_STAT enum"""

    def __init__(
        self,
        *,
        snr: collections.abc.Iterable[builtins.float] | None = ...,
        noise: collections.abc.Iterable[builtins.float] | None = ...,
        neuronYield: collections.abc.Iterable[builtins.float] | None = ...,
        numNeurons: builtins.int | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["numNeurons", b"numNeurons"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["neuronYield", b"neuronYield", "noise", b"noise", "numNeurons", b"numNeurons", "snr", b"snr"]) -> None: ...

global___IndicoDashboardSiteStats = IndicoDashboardSiteStats

@typing.final
class IndicoDashboardPortStats(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    SNR_FIELD_NUMBER: builtins.int
    NOISE_FIELD_NUMBER: builtins.int
    NEURONYIELD_FIELD_NUMBER: builtins.int
    SORTEFFICIENCY_FIELD_NUMBER: builtins.int
    NUMENABLEDSITES_FIELD_NUMBER: builtins.int
    NUMNEURONS_FIELD_NUMBER: builtins.int
    sortEfficiency: builtins.float
    """percent"""
    numEnabledSites: builtins.int
    numNeurons: builtins.int
    """port yield"""
    @property
    def snr(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """as SS_STAT enum, w/o mode"""

    @property
    def noise(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """as SS_STAT enum, w/o mode"""

    @property
    def neuronYield(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """as SS_STAT enum"""

    def __init__(
        self,
        *,
        snr: collections.abc.Iterable[builtins.float] | None = ...,
        noise: collections.abc.Iterable[builtins.float] | None = ...,
        neuronYield: collections.abc.Iterable[builtins.float] | None = ...,
        sortEfficiency: builtins.float | None = ...,
        numEnabledSites: builtins.int | None = ...,
        numNeurons: builtins.int | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["numEnabledSites", b"numEnabledSites", "numNeurons", b"numNeurons", "sortEfficiency", b"sortEfficiency"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["neuronYield", b"neuronYield", "noise", b"noise", "numEnabledSites", b"numEnabledSites", "numNeurons", b"numNeurons", "snr", b"snr", "sortEfficiency", b"sortEfficiency"]) -> None: ...

global___IndicoDashboardPortStats = IndicoDashboardPortStats

@typing.final
class IndicoDashboardSiteIndicators(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    NTVCHANIDX_FIELD_NUMBER: builtins.int
    SNR_FIELD_NUMBER: builtins.int
    NOISE_FIELD_NUMBER: builtins.int
    NEURONYIELD_FIELD_NUMBER: builtins.int
    SORTEFFICIENCY_FIELD_NUMBER: builtins.int
    SPIKERATE_FIELD_NUMBER: builtins.int
    POSPROBEX_FIELD_NUMBER: builtins.int
    POSPROBEY_FIELD_NUMBER: builtins.int
    POSPROBEZ_FIELD_NUMBER: builtins.int
    SITENUM_FIELD_NUMBER: builtins.int
    @property
    def ntvChanIdx(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
        """not intended to be plotted"""

    @property
    def snr(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def noise(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def neuronYield(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def sortEfficiency(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def spikeRate(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def posProbeX(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def posProbeY(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def posProbeZ(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def siteNum(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
    def __init__(
        self,
        *,
        ntvChanIdx: collections.abc.Iterable[builtins.int] | None = ...,
        snr: collections.abc.Iterable[builtins.float] | None = ...,
        noise: collections.abc.Iterable[builtins.float] | None = ...,
        neuronYield: collections.abc.Iterable[builtins.float] | None = ...,
        sortEfficiency: collections.abc.Iterable[builtins.float] | None = ...,
        spikeRate: collections.abc.Iterable[builtins.float] | None = ...,
        posProbeX: collections.abc.Iterable[builtins.float] | None = ...,
        posProbeY: collections.abc.Iterable[builtins.float] | None = ...,
        posProbeZ: collections.abc.Iterable[builtins.float] | None = ...,
        siteNum: collections.abc.Iterable[builtins.int] | None = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing.Literal["neuronYield", b"neuronYield", "noise", b"noise", "ntvChanIdx", b"ntvChanIdx", "posProbeX", b"posProbeX", "posProbeY", b"posProbeY", "posProbeZ", b"posProbeZ", "siteNum", b"siteNum", "snr", b"snr", "sortEfficiency", b"sortEfficiency", "spikeRate", b"spikeRate"]) -> None: ...

global___IndicoDashboardSiteIndicators = IndicoDashboardSiteIndicators

@typing.final
class IndicoDashboardNeuronIndicators(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    NEURONID_FIELD_NUMBER: builtins.int
    SNR_FIELD_NUMBER: builtins.int
    SPIKERATE_FIELD_NUMBER: builtins.int
    POSPROBEX_FIELD_NUMBER: builtins.int
    POSPROBEY_FIELD_NUMBER: builtins.int
    POSPROBEZ_FIELD_NUMBER: builtins.int
    SITENUM_FIELD_NUMBER: builtins.int
    SPIKELABEL_FIELD_NUMBER: builtins.int
    @property
    def neuronID(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
        """not intended to be plotted"""

    @property
    def snr(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def spikeRate(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def posProbeX(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def posProbeY(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def posProbeZ(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def siteNum(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
    @property
    def spikeLabel(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
    def __init__(
        self,
        *,
        neuronID: collections.abc.Iterable[builtins.str] | None = ...,
        snr: collections.abc.Iterable[builtins.float] | None = ...,
        spikeRate: collections.abc.Iterable[builtins.float] | None = ...,
        posProbeX: collections.abc.Iterable[builtins.float] | None = ...,
        posProbeY: collections.abc.Iterable[builtins.float] | None = ...,
        posProbeZ: collections.abc.Iterable[builtins.float] | None = ...,
        siteNum: collections.abc.Iterable[builtins.int] | None = ...,
        spikeLabel: collections.abc.Iterable[builtins.int] | None = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing.Literal["neuronID", b"neuronID", "posProbeX", b"posProbeX", "posProbeY", b"posProbeY", "posProbeZ", b"posProbeZ", "siteNum", b"siteNum", "snr", b"snr", "spikeLabel", b"spikeLabel", "spikeRate", b"spikeRate"]) -> None: ...

global___IndicoDashboardNeuronIndicators = IndicoDashboardNeuronIndicators

@typing.final
class SpikeSorterDashboardSiteDesc(google.protobuf.message.Message):
    """!! (provisionally) deprecated"""

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    PORT_FIELD_NUMBER: builtins.int
    NTVCHANIDX_FIELD_NUMBER: builtins.int
    POSPROBE_FIELD_NUMBER: builtins.int
    POSBRAIN_FIELD_NUMBER: builtins.int
    SNRMAX_FIELD_NUMBER: builtins.int
    SNRMIN_FIELD_NUMBER: builtins.int
    NOISELEVEL_FIELD_NUMBER: builtins.int
    NUMNEURONS_FIELD_NUMBER: builtins.int
    INDICOCLUSTER_FIELD_NUMBER: builtins.int
    PILEWAVEFORMMINVALUE_FIELD_NUMBER: builtins.int
    PILEWAVEFORMMAXVALUE_FIELD_NUMBER: builtins.int
    port: common_pb2.Port.ValueType
    ntvChanIdx: builtins.int
    """site index"""
    snrMax: builtins.float
    snrMin: builtins.float
    noiseLevel: builtins.float
    numNeurons: builtins.int
    """aka 'neuron yield'"""
    pileWaveformMinValue: builtins.float
    pileWaveformMaxValue: builtins.float
    @property
    def posProbe(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """x, y, z"""

    @property
    def posBrain(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """x, y, z"""

    @property
    def indicoCluster(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ClusterMapRecord]: ...
    def __init__(
        self,
        *,
        port: common_pb2.Port.ValueType | None = ...,
        ntvChanIdx: builtins.int | None = ...,
        posProbe: collections.abc.Iterable[builtins.float] | None = ...,
        posBrain: collections.abc.Iterable[builtins.float] | None = ...,
        snrMax: builtins.float | None = ...,
        snrMin: builtins.float | None = ...,
        noiseLevel: builtins.float | None = ...,
        numNeurons: builtins.int | None = ...,
        indicoCluster: collections.abc.Iterable[global___ClusterMapRecord] | None = ...,
        pileWaveformMinValue: builtins.float | None = ...,
        pileWaveformMaxValue: builtins.float | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["noiseLevel", b"noiseLevel", "ntvChanIdx", b"ntvChanIdx", "numNeurons", b"numNeurons", "pileWaveformMaxValue", b"pileWaveformMaxValue", "pileWaveformMinValue", b"pileWaveformMinValue", "port", b"port", "snrMax", b"snrMax", "snrMin", b"snrMin"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["indicoCluster", b"indicoCluster", "noiseLevel", b"noiseLevel", "ntvChanIdx", b"ntvChanIdx", "numNeurons", b"numNeurons", "pileWaveformMaxValue", b"pileWaveformMaxValue", "pileWaveformMinValue", b"pileWaveformMinValue", "port", b"port", "posBrain", b"posBrain", "posProbe", b"posProbe", "snrMax", b"snrMax", "snrMin", b"snrMin"]) -> None: ...

global___SpikeSorterDashboardSiteDesc = SpikeSorterDashboardSiteDesc

@typing.final
class SpikeSorterDashboardNeuronDesc(google.protobuf.message.Message):
    """!! (provisionally) deprecated"""

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    PORT_FIELD_NUMBER: builtins.int
    DESC_FIELD_NUMBER: builtins.int
    SNR_FIELD_NUMBER: builtins.int
    ISIHMAX_FIELD_NUMBER: builtins.int
    ISIHARGMAXSEC_FIELD_NUMBER: builtins.int
    ISIHARGMAXIDX_FIELD_NUMBER: builtins.int
    ISIHMEAN_FIELD_NUMBER: builtins.int
    ISIHSD_FIELD_NUMBER: builtins.int
    port: common_pb2.Port.ValueType
    snr: builtins.float
    IsihMax: builtins.float
    IsihArgmaxSec: builtins.float
    IsihArgmaxIdx: builtins.int
    IsihMean: builtins.float
    IsihSd: builtins.float
    @property
    def desc(self) -> biointerface_pb2.NeuronDescriptor: ...
    def __init__(
        self,
        *,
        port: common_pb2.Port.ValueType | None = ...,
        desc: biointerface_pb2.NeuronDescriptor | None = ...,
        snr: builtins.float | None = ...,
        IsihMax: builtins.float | None = ...,
        IsihArgmaxSec: builtins.float | None = ...,
        IsihArgmaxIdx: builtins.int | None = ...,
        IsihMean: builtins.float | None = ...,
        IsihSd: builtins.float | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["IsihArgmaxIdx", b"IsihArgmaxIdx", "IsihArgmaxSec", b"IsihArgmaxSec", "IsihMax", b"IsihMax", "IsihMean", b"IsihMean", "IsihSd", b"IsihSd", "desc", b"desc", "port", b"port", "snr", b"snr"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["IsihArgmaxIdx", b"IsihArgmaxIdx", "IsihArgmaxSec", b"IsihArgmaxSec", "IsihMax", b"IsihMax", "IsihMean", b"IsihMean", "IsihSd", b"IsihSd", "desc", b"desc", "port", b"port", "snr", b"snr"]) -> None: ...

global___SpikeSorterDashboardNeuronDesc = SpikeSorterDashboardNeuronDesc

@typing.final
class SpikeSorterDashboardNeuronDetail(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    DESC_FIELD_NUMBER: builtins.int
    TEMPLATEWAVEFORM_FIELD_NUMBER: builtins.int
    TEMPLATESDWAVEFORM_FIELD_NUMBER: builtins.int
    PILEWAVEFORMDATA_FIELD_NUMBER: builtins.int
    NUMSAMPLESPILEWAVEFORM_FIELD_NUMBER: builtins.int
    NUMPILEWAVEFORMS_FIELD_NUMBER: builtins.int
    ISIH_FIELD_NUMBER: builtins.int
    numSamplesPileWaveform: builtins.int
    numPileWaveforms: builtins.int
    @property
    def desc(self) -> biointerface_pb2.NeuronDescriptor: ...
    @property
    def templateWaveform(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def templateSdWaveform(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
    @property
    def pileWaveformData(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """Matrix"""

    @property
    def isih(self) -> biointerface_pb2.NeuronHistData: ...
    def __init__(
        self,
        *,
        desc: biointerface_pb2.NeuronDescriptor | None = ...,
        templateWaveform: collections.abc.Iterable[builtins.float] | None = ...,
        templateSdWaveform: collections.abc.Iterable[builtins.float] | None = ...,
        pileWaveformData: collections.abc.Iterable[builtins.float] | None = ...,
        numSamplesPileWaveform: builtins.int | None = ...,
        numPileWaveforms: builtins.int | None = ...,
        isih: biointerface_pb2.NeuronHistData | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["desc", b"desc", "isih", b"isih", "numPileWaveforms", b"numPileWaveforms", "numSamplesPileWaveform", b"numSamplesPileWaveform"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["desc", b"desc", "isih", b"isih", "numPileWaveforms", b"numPileWaveforms", "numSamplesPileWaveform", b"numSamplesPileWaveform", "pileWaveformData", b"pileWaveformData", "templateSdWaveform", b"templateSdWaveform", "templateWaveform", b"templateWaveform"]) -> None: ...

global___SpikeSorterDashboardNeuronDetail = SpikeSorterDashboardNeuronDetail

@typing.final
class SpikeSorterDashboardSiteDetail(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    DESC_FIELD_NUMBER: builtins.int
    ORDEREDSPIKELABEL_FIELD_NUMBER: builtins.int
    NEURON_FIELD_NUMBER: builtins.int
    @property
    def desc(self) -> global___SpikeSorterDashboardSiteDesc: ...
    @property
    def orderedSpikeLabel(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
    @property
    def neuron(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SpikeSorterDashboardNeuronDetail]: ...
    def __init__(
        self,
        *,
        desc: global___SpikeSorterDashboardSiteDesc | None = ...,
        orderedSpikeLabel: collections.abc.Iterable[builtins.int] | None = ...,
        neuron: collections.abc.Iterable[global___SpikeSorterDashboardNeuronDetail] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["desc", b"desc"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["desc", b"desc", "neuron", b"neuron", "orderedSpikeLabel", b"orderedSpikeLabel"]) -> None: ...

global___SpikeSorterDashboardSiteDetail = SpikeSorterDashboardSiteDetail
