# mypy: disable-error-code="misc, override, attr-defined, no-redef, assignment"

import Nodes3DAPI.DynamicParameterUtil as DynamicParameterUtil
import PyFnAttribute as FnAttribute
import PyFnGeolib as FnGeolib
import PyFnGeolibServices as FnGeolibServices
import LoggingAPI as LoggingAPI
import Naming as Naming
import NodegraphAPI as NodegraphAPI
import PyFnAttribute
import Nodes3DAPI.TimingUtils as TimingUtils
import Nodes3DAPI.TransformUtil as TransformUtil
import typing
from Nodes3DAPI_cmodule import BuildAttrListFromDynamicParameterGroup as BuildAttrListFromDynamicParameterGroup
from UI4.FormMaster.GenericAssignParameterPolicy_geolib3 import g_policyRegistrationCallback as g_policyRegistrationCallback
from _typeshed import Incomplete
from types import ModuleType
from typing import ClassVar, Set, Tuple

__attrTypeClasses: dict

class BaseOpChainInterface:
    FnAttribute: ClassVar[ModuleType] = ...
    FnGeolib: ClassVar[ModuleType] = ...
    def __init__(self, port: NodegraphAPI.Port, graphState: NodegraphAPI.GraphState) -> None: ...
    def addOpSystemArgs(self, gb: PyFnAttribute.GroupBuilder): ...
    def buildAttrFromParam(self, param: NodegraphAPI.Parameter, multisample: bool = ..., numberType: type[PyFnAttribute.FloatAttribute] = ..., groupInherit: bool = ..., includeEmptyGroups: bool = ...): ...
    def buildAttrListForEnableableParameters(self, enclosingGroupParam: NodegraphAPI.Parameter): ...
    def getExclusiveToNameAndAttribute(self): ...
    def getFrameTime(self) -> float: ...
    def getGraphState(self) -> NodegraphAPI.GraphState: ...
    def getModifiedFrameTime(self) -> float: ...
    def getNumSamples(self) -> int: ...
    def getOutputPortName(self) -> str: ...
    def getShutterClose(self) -> float: ...
    def getShutterOpen(self) -> float: ...
    def getTransformAsAttribute(self) -> PyFnAttribute.GroupAttribute: ...

class NodeTypeBuilder:
    class OpChainInterface(BaseOpChainInterface):
        FAIL: ClassVar[int] = ...
        NO_OP: ClassVar[int] = ...
        SKIP: ClassVar[int] = ...
        def __init__(self, opChainInterface) -> None: ...
        def addInputRequest(self, inputPortName, graphState: NodegraphAPI.GraphState, invalidInputBehavior: int = ...): ...
        def appendOp(self, opType, opArgs: Incomplete | None = ...): ...
        def setExplicitInputRequestsEnabled(self, state): ...
        def setMinRequiredInputs(self, value): ...
    _NodeTypeBuilder__queuedPolicyRootValues: ClassVar[dict] = ...
    _NodeTypeBuilder__registeredTypes: ClassVar[dict] = ...
    def __init__(self, nodeTypeName: str) -> None: ...
    @classmethod
    def SetGenericAssignPolicyRegistrationCallback(cls, callback): ...
    def addInteractiveTransformCallbacks(self, gb: PyFnAttribute.GroupBuilder): ...
    def addMakeInteractiveParameter(self, gb: PyFnAttribute.GroupBuilder): ...
    def addTimingParameters(self, gb: PyFnAttribute.GroupBuilder): ...
    def addTransformParameters(self, gb: PyFnAttribute.GroupBuilder): ...
    def build(self): ...
    def setAddParameterHintsFnc(self, fnc: typing.Callable): ...
    def setAppendToParametersOpChainFnc(self, fnc): ...
    def setBuildOpChainFnc(self, fnc): ...
    def setBuildParametersFnc(self, fnc: typing.Callable): ...
    def setCustomMethod(self, fncName: str, fnc: typing.Callable): ...
    def setGenericAssignRoots(self, paramRoot: str, attrRoot: str): ...
    def setGetInputPortAndGraphStateFnc(self, fnc: typing.Callable): ...
    def setGetScenegraphLocationFnc(self, fnc: typing.Callable): ...
    def setHintsForNode(self, hints: dict): ...
    def setHintsForParameter(self, paramPath: str, hints: dict): ...
    def setInputPortNames(self, names: typing.Sequence[str]): ...
    def setIsHiddenFromMenus(self, state: bool): ...
    def setNodeTypeVersion(self, nodeTypeVersion): ...
    def setNodeTypeVersionUpdateFnc(self, nodeTypeVersion, updateFnc): ...
    def setOutputPortNames(self, names: typing.Sequence[str]): ...
    def setParametersTemplateAttr(self, groupAttr: PyFnAttribute.GroupAttribute, forceArrayNames: tuple = ...): ...

class OpChainInterface(BaseOpChainInterface):
    FAIL: ClassVar[int] = ...
    NO_OP: ClassVar[int] = ...
    SKIP: ClassVar[int] = ...
    def __init__(self, opChainInterface) -> None: ...
    def addInputRequest(self, inputPortName, graphState: NodegraphAPI.GraphState, invalidInputBehavior: int = ...): ...
    def appendOp(self, opType, opArgs: Incomplete | None = ...): ...
    def setExplicitInputRequestsEnabled(self, state): ...
    def setMinRequiredInputs(self, value): ...

class ParametersOpChainInterface(BaseOpChainInterface):
    def __init__(self, port: NodegraphAPI.Port, graphState: NodegraphAPI.GraphState) -> None: ...
    def appendOp(self, opType, opArgs: Incomplete | None = ...): ...
    def getOps(self): ...

def _addParameterHints(self, attrName, inputDict): ...
def _getIncomingSceneOpAndLocation(self, port: NodegraphAPI.Port, graphState: NodegraphAPI.GraphState, transaction): ...
def _getOpChain(self, interface): ...
def _getScenegraphLocation(self, frameTime: Incomplete | None = ...): ...
def _getStaticAttrHintsForIncomingSceneQuery(self, attrPath): ...
def _getStaticDefaultAttrForIncomingSceneQuery(self, attrPath): ...
def _init(self): ...
def _isForcedArray(self, data, groupParam, name): ...
def _paramFromAttr(self, groupParam, groupAttr): ...
