from typing import Optional, Protocol class SimIK(Protocol): def addElement(self,environmentHandle:int, ikGroupHandle:int, tipDummyHandle:int)->int: ... def addElementFromScene(self,environmentHandle:int, ikGroup:int, baseHandle:int, tipHandle:int, targetHandle:int, constraints:int)->tuple[int, dict, dict]: ... def computeGroupJacobian(self,environmentHandle:int, ikGroupHandle:int)->tuple[list[float], list[float]]: ... def computeJacobian(self,environmentHandle:int, baseObject:int, lastJoint:int, constraints:int, tipMatrix:list[float], targetMatrix:Optional[list[float]] = None, constrBaseMatrix:Optional[list[float]] = None)->tuple[list[float], list[float]]: ... def createDebugOverlay(self,environmentHandle:int, tipHandle:int, baseHandle:Optional[int] = None)->int: ... def createDummy(self,environmentHandle:int, dummyName:Optional[str] = None)->int: ... def createEnvironment(self,flags:Optional[int] = None)->int: ... def createGroup(self,environmentHandle:int, ikGroupName:Optional[str] = None)->int: ... def createJoint(self,environmentHandle:int, jointType:int, jointName:Optional[str] = None)->int: ... def doesGroupExist(self,environmentHandle:int, ikGroupName:str)->bool: ... def doesObjectExist(self,environmentHandle:int, objectName:str)->bool: ... def duplicateEnvironment(self,environmentHandle:int)->int: ... def eraseDebugOverlay(self,debugObject:int)->None: ... def eraseEnvironment(self,environmentHandle:int)->None: ... def eraseObject(self,environmentHandle:int, objectHandle:int)->None: ... def findConfig(self,environmentHandle:int, ikGroupHandle:int, jointHandles:list[int], thresholdDist:Optional[float] = None, maxTime:Optional[float] = None, metric:Optional[list[float]] = None, validationCallback:Optional[str] = None, auxData:Optional[dict] = None)->list[float]: ... def generatePath(self,environmentHandle:int, ikGroupHandle:int, jointHandles:list[int], tipHandle:int, pathPointCount:int, validationCallback:Optional[str] = None, auxData:Optional[dict] = None)->list[float]: ... def getAlternateConfigs(self,environmentHandle:int, jointHandles:list[int], lowLimits:Optional[list[float]] = None, ranges:Optional[list[float]] = None)->list[float]: ... def getElementBase(self,environmentHandle:int, ikGroupHandle:int, elementHandle:int)->tuple[int, int]: ... def getElementConstraints(self,environmentHandle:int, ikGroupHandle:int, elementHandle:int)->int: ... def getElementFlags(self,environmentHandle:int, ikGroupHandle:int, elementHandle:int)->int: ... def getElementPrecision(self,environmentHandle:int, ikGroupHandle:int, elementHandle:int)->list[float]: ... def getElementWeights(self,environmentHandle:int, ikGroupHandle:int, elementHandle:int)->list[float]: ... def getFailureDescription(self,reason:int)->str: ... def getGroupCalculation(self,environmentHandle:int, ikGroupHandle:int)->tuple[int, float, int]: ... def getGroupFlags(self,environmentHandle:int, ikGroupHandle:int)->int: ... def getGroupHandle(self,environmentHandle:int, ikGroupName:str)->int: ... def getGroupJointLimitHits(self,environmentHandle:int, ikGroupHandle:int)->tuple[list[int], list[float]]: ... def getGroupJoints(self,environmentHandle:int, ikGroupHandle:int)->list[int]: ... def getJointDependency(self,environmentHandle:int, jointHandle:int)->tuple[int, float, float]: ... def getJointInterval(self,environmentHandle:int, jointHandle:int)->tuple[bool, list[float]]: ... def getJointLimitMargin(self,environmentHandle:int, jointHandle:int)->float: ... def getJointMatrix(self,environmentHandle:int, jointHandle:int)->list[float]: ... def getJointMaxStepSize(self,environmentHandle:int, jointHandle:int)->float: ... def getJointMode(self,environmentHandle:int, jointHandle:int)->int: ... def getJointPosition(self,environmentHandle:int, jointHandle:int)->float: ... def getJointScrewLead(self,environmentHandle:int, jointHandle:int)->float: ... def getJointTransformation(self,environmentHandle:int, jointHandle:int)->tuple[list[float], list[float], list[float]]: ... def getJointType(self,environmentHandle:int, jointHandle:int)->int: ... def getJointWeight(self,environmentHandle:int, jointHandle:int)->float: ... def getObjectHandle(self,environmentHandle:int, objectName:str)->int: ... def getObjectMatrix(self,environmentHandle:int, objectHandle:int, relativeToObjectHandle:Optional[int] = None)->list[float]: ... def getObjectParent(self,environmentHandle:int, objectHandle:int)->int: ... def getObjectPose(self,environmentHandle:int, objectHandle:int, relativeToObjectHandle:Optional[int] = None)->list[float]: ... def getObjectTransformation(self,environmentHandle:int, objectHandle:int, relativeToObjectHandle:Optional[int] = None)->tuple[list[float], list[float], list[float]]: ... def getObjectType(self,environmentHandle:int, objectHandle:int)->int: ... def getObjects(self,environmentHandle:int, index:int)->tuple[int, str, bool, int]: ... def getTargetDummy(self,environmentHandle:int, dummyHandle:int)->int: ... def handleGroup(self,environmentHandle:int, ikGroup:int, options:Optional[dict] = None)->tuple[int, int, list[float]]: ... def handleGroups(self,environmentHandle:int, ikGroups:list[int], options:Optional[dict] = None)->tuple[int, int, list[float]]: ... def load(self,environmentHandle:int, data:str)->None: ... def save(self,environmentHandle:int)->str: ... def setElementBase(self,environmentHandle:int, ikGroupHandle:int, elementHandle:int, baseHandle:int, constraintsBaseHandle:Optional[int] = None)->None: ... def setElementConstraints(self,environmentHandle:int, ikGroupHandle:int, elementHandle:int, constraints:int)->None: ... def setElementFlags(self,environmentHandle:int, ikGroupHandle:int, elementHandle:int, flags:int)->None: ... def setElementPrecision(self,environmentHandle:int, ikGroupHandle:int, elementHandle:int, precision:list[float])->None: ... def setElementWeights(self,environmentHandle:int, ikGroupHandle:int, elementHandle:int, weights:list[float])->None: ... def setGroupCalculation(self,environmentHandle:int, ikGroupHandle:int, method:int, damping:float, maxIterations:int)->None: ... def setGroupFlags(self,environmentHandle:int, ikGroupHandle:int, flags:int)->None: ... def setJointDependency(self,environmentHandle:int, jointHandle:int, masterJointHandle:int, offset:Optional[float] = None, mult:Optional[float] = None, callback:Optional[str] = None)->None: ... def setJointInterval(self,environmentHandle:int, jointHandle:int, cyclic:bool, interval:Optional[list[float]] = None)->None: ... def setJointLimitMargin(self,environmentHandle:int, jointHandle:int, margin:float)->None: ... def setJointMaxStepSize(self,environmentHandle:int, jointHandle:int, stepSize:float)->None: ... def setJointMode(self,environmentHandle:int, jointHandle:int, jointMode:int)->None: ... def setJointPosition(self,environmentHandle:int, jointHandle:int, position:float)->None: ... def setJointScrewLead(self,environmentHandle:int, jointHandle:int, lead:float)->None: ... def setJointWeight(self,environmentHandle:int, jointHandle:int, weight:float)->None: ... def setObjectMatrix(self,environmentHandle:int, objectHandle:int, matrix:list[float], relativeToObjectHandle:Optional[int] = None)->None: ... def setObjectParent(self,environmentHandle:int, objectHandle:int, parentObjectHandle:int, keepInPlace:Optional[bool] = None)->None: ... def setObjectPose(self,environmentHandle:int, objectHandle:int, pose:list[float], relativeToObjectHandle:Optional[int] = None)->None: ... def setObjectTransformation(self,environmentHandle:int, objectHandle:int, position:list[float], eulerOrQuaternion:list[float], relativeToObjectHandle:Optional[int] = None)->None: ... def setSphericalJointMatrix(self,environmentHandle:int, jointHandle:int, matrix:list[float])->None: ... def setSphericalJointRotation(self,environmentHandle:int, jointHandle:int, eulerOrQuaternion:list[float])->None: ... def setTargetDummy(self,environmentHandle:int, dummyHandle:int, targetDummyHandle:int)->None: ... def syncFromSim(self,environmentHandle:int, ikGroups:list[int])->None: ... def syncToSim(self,environmentHandle:int, ikGroups:list[int])->None: ...