1+ from typing import TYPE_CHECKING
2+
13from casadi import vertcat , MX , SX
24
35from ..models .protocols .holonomic_constraints import HolonomicConstraintsFcn
68from ..optimization .optimization_variable import OptimizationVariable
79from ..misc .parameters_types import AnyListOptional , CX , CXOptional , Str , Tuple
810
11+ if TYPE_CHECKING :
12+ from ..optimization .non_linear_program import NonLinearProgram
13+
914
1015class DynamicsFunctions :
1116 """
@@ -26,7 +31,7 @@ class DynamicsFunctions:
2631 """
2732
2833 @staticmethod
29- def get_fatigable_tau (nlp , states : CX , controls : CX ) -> CX :
34+ def get_fatigable_tau (nlp : "NonLinearProgram" , states : CX , controls : CX ) -> CX :
3035 """
3136 Apply the forward dynamics including (or not) the torque fatigue
3237
@@ -82,7 +87,7 @@ def get_fatigable_tau(nlp, states: CX, controls: CX) -> CX:
8287 @staticmethod
8388 def get_fatigue_states (
8489 states ,
85- nlp ,
90+ nlp : "NonLinearProgram" ,
8691 mus_activations ,
8792 ):
8893
@@ -141,7 +146,7 @@ def get(var: OptimizationVariable, cx: CX):
141146 return var .mapping .to_second .map (cx [var .index , :])
142147
143148 @staticmethod
144- def compute_qdot (nlp , q : CX , qdot : CX ):
149+ def compute_qdot (nlp : "NonLinearProgram" , q : CX , qdot : CX ):
145150 """
146151 Easy accessor to derivative of q
147152
@@ -175,7 +180,7 @@ def compute_qdot(nlp, q: CX, qdot: CX):
175180 return mapping .to_first .map (nlp .model .reshape_qdot ()(q , qdot , nlp .parameters .cx ))
176181
177182 @staticmethod
178- def compute_qddot (nlp , q : CX , qdot : CX , tau : CX , external_forces : CX ):
183+ def compute_qddot (nlp : "NonLinearProgram" , q : CX , qdot : CX , tau : CX , external_forces : CX ):
179184 """
180185 Easy accessor to derivative of qdot
181186
@@ -202,7 +207,7 @@ def compute_qddot(nlp, q: CX, qdot: CX, tau: CX, external_forces: CX):
202207
203208 @staticmethod
204209 def collect_tau (
205- nlp ,
210+ nlp : "NonLinearProgram" ,
206211 q : CX ,
207212 qdot : CX ,
208213 parameters : CX ,
@@ -231,7 +236,7 @@ def collect_tau(
231236 return tau
232237
233238 @staticmethod
234- def get_contact_defects (nlp , q : CX , qdot : CX , slope_qdot : CX ):
239+ def get_contact_defects (nlp : "NonLinearProgram" , q : CX , qdot : CX , slope_qdot : CX ):
235240 """
236241 Get the defects associated with implicit contacts.
237242
@@ -263,7 +268,9 @@ def get_contact_defects(nlp, q: CX, qdot: CX, slope_qdot: CX):
263268 return contact_defects
264269
265270 @staticmethod
266- def get_fatigue_defects (key : Str , dxdt_defects : CX , slopes : CX , nlp , states : CX , controls : CX ) -> Tuple [CX , CX ]:
271+ def get_fatigue_defects (
272+ key : Str , dxdt_defects : CX , slopes : CX , nlp : "NonLinearProgram" , states : CX , controls : CX
273+ ) -> Tuple [CX , CX ]:
267274 """
268275 Get the dxdt and slopes associated with fatigue elements.
269276 These are added to compute the defects in the case where there is fatigue.
@@ -302,7 +309,7 @@ def get_fatigue_defects(key: Str, dxdt_defects: CX, slopes: CX, nlp, states: CX,
302309 return dxdt_defects , slopes
303310
304311 @staticmethod
305- def get_external_forces_from_contacts (nlp , q , qdot , contact_types , external_forces : MX | SX ):
312+ def get_external_forces_from_contacts (nlp : "NonLinearProgram" , q , qdot , contact_types , external_forces : MX | SX ):
306313 """
307314 Get the external forces associated with the contacts defined in the model.
308315
@@ -353,7 +360,7 @@ def get_external_forces_from_contacts(nlp, q, qdot, contact_types, external_forc
353360
354361 @staticmethod
355362 def forward_dynamics (
356- nlp ,
363+ nlp : "NonLinearProgram" ,
357364 q : CX ,
358365 qdot : CX ,
359366 tau : CX ,
@@ -412,7 +419,7 @@ def forward_dynamics(
412419
413420 @staticmethod
414421 def inverse_dynamics (
415- nlp ,
422+ nlp : "NonLinearProgram" ,
416423 q : CX ,
417424 qdot : CX ,
418425 qddot : CX ,
@@ -472,7 +479,7 @@ def inverse_dynamics(
472479 return tau_var_mapping .map (tau )
473480
474481 @staticmethod
475- def compute_muscle_dot (nlp , muscle_excitations : CX , muscle_activations : CX ):
482+ def compute_muscle_dot (nlp : "NonLinearProgram" , muscle_excitations : CX , muscle_activations : CX ):
476483 """
477484 Easy accessor to derivative of muscle activations
478485
@@ -494,7 +501,7 @@ def compute_muscle_dot(nlp, muscle_excitations: CX, muscle_activations: CX):
494501
495502 @staticmethod
496503 def compute_tau_from_muscle (
497- nlp ,
504+ nlp : "NonLinearProgram" ,
498505 q : CX ,
499506 qdot : CX ,
500507 muscle_activations : CX ,
@@ -530,7 +537,7 @@ def compute_tau_from_muscle(
530537 return nlp .model .muscle_joint_torque ()(activations , q , qdot , nlp .parameters .cx )
531538
532539 @staticmethod
533- def no_states_mapping (nlp ):
540+ def no_states_mapping (nlp : "NonLinearProgram" ):
534541 for key in nlp .states .keys ():
535542 if nlp .variable_mappings [key ].actually_does_a_mapping ():
536543 raise NotImplementedError (
0 commit comments