class_docstr: Abstract base class for all musculotendon classes to inherit from.
  
  Explanation
  ===========
  
  A musculotendon generates a contractile force based on its activation,
  length, and shortening velocity. This abstract base class is to be inherited
  by all musculotendon subclasses that implement different characteristic
  musculotendon curves. Characteristic musculotendon curves are required for
  the tendon force-length, passive fiber force-length, active fiber force-
  length, and fiber force-velocity relationships.
  
  Parameters
  ==========
  
  name : str
      The name identifier associated with the musculotendon. This name is used
      as a suffix when automatically generated symbols are instantiated. It
      must be a string of nonzero length.
  pathway : PathwayBase
      The pathway that the actuator follows. This must be an instance of a
      concrete subclass of ``PathwayBase``, e.g. ``LinearPathway``.
  activation_dynamics : ActivationBase
      The activation dynamics that will be modeled within the musculotendon.
      This must be an instance of a concrete subclass of ``ActivationBase``,
      e.g. ``FirstOrderActivationDeGroote2016``.
  musculotendon_dynamics : MusculotendonFormulation | int
      The formulation of musculotendon dynamics that should be used
      internally, i.e. rigid or elastic tendon model, the choice of
      musculotendon state etc. This must be a member of the integer
      enumeration ``MusculotendonFormulation`` or an integer that can be cast
      to a member. To use a rigid tendon formulation, set this to
      ``MusculotendonFormulation.RIGID_TENDON`` (or the integer value ``0``,
      which will be cast to the enumeration member). There are four possible
      formulations for an elastic tendon model. To use an explicit formulation
      with the fiber length as the state, set this to
      ``MusculotendonFormulation.FIBER_LENGTH_EXPLICIT`` (or the integer value
      ``1``). To use an explicit formulation with the tendon force as the
      state, set this to ``MusculotendonFormulation.TENDON_FORCE_EXPLICIT``
      (or the integer value ``2``). To use an implicit formulation with the
      fiber length as the state, set this to
      ``MusculotendonFormulation.FIBER_LENGTH_IMPLICIT`` (or the integer value
      ``3``). To use an implicit formulation with the tendon force as the
      state, set this to ``MusculotendonFormulation.TENDON_FORCE_IMPLICIT``
      (or the integer value ``4``). The default is
      ``MusculotendonFormulation.RIGID_TENDON``, which corresponds to a rigid
      tendon formulation.
  tendon_slack_length : Expr | None
      The length of the tendon when the musculotendon is in its unloaded
      state. In a rigid tendon model the tendon length is the tendon slack
      length. In all musculotendon models, tendon slack length is used to
      normalize tendon length to give
      :math:`\tilde{l}^T = \frac{l^T}{l^T_{slack}}`.
  peak_isometric_force : Expr | None
      The maximum force that the muscle fiber can produce when it is
      undergoing an isometric contraction (no lengthening velocity). In all
      musculotendon models, peak isometric force is used to normalized tendon
      and muscle fiber force to give
      :math:`\tilde{F}^T = \frac{F^T}{F^M_{max}}`.
  optimal_fiber_length : Expr | None
      The muscle fiber length at which the muscle fibers produce no passive
      force and their maximum active force. In all musculotendon models,
      optimal fiber length is used to normalize muscle fiber length to give
      :math:`\tilde{l}^M = \frac{l^M}{l^M_{opt}}`.
  maximal_fiber_velocity : Expr | None
      The fiber velocity at which, during muscle fiber shortening, the muscle
      fibers are unable to produce any active force. In all musculotendon
      models, maximal fiber velocity is used to normalize muscle fiber
      extension velocity to give :math:`\tilde{v}^M = \frac{v^M}{v^M_{max}}`.
  optimal_pennation_angle : Expr | None
      The pennation angle when muscle fiber length equals the optimal fiber
      length.
  fiber_damping_coefficient : Expr | None
      The coefficient of damping to be used in the damping element in the
      muscle fiber model.
  with_defaults : bool
      Whether ``with_defaults`` alternate constructors should be used when
      automatically constructing child classes. Default is ``False``.
class_docstr_tok: ["Abstract","base","class","for","all","musculotendon","classes","to","inherit","from",".","Explanation","===========","A","musculotendon","generates","a","contractile","force","based","on","its","activation",",","length",",","and","shortening","velocity",".","This","abstract","base","class","is","to","be","inherited","by","all","musculotendon","subclasses","that","implement","different","characteristic","musculotendon","curves",".","Characteristic","musculotendon","curves","are","required","for","the","tendon","force-length",",","passive","fiber","force-length",",","active","fiber","force-","length",",","and","fiber","force-velocity","relationships",".","Parameters","==========","name",":","str","The","name","identifier","associated","with","the","musculotendon",".","This","name","is","used","as","a","suffix","when","automatically","generated","symbols","are","instantiated",".","It","must","be","a","string","of","nonzero","length",".","pathway",":","PathwayBase","The","pathway","that","the","actuator","follows",".","This","must","be","an","instance","of","a","concrete","subclass","of","``","PathwayBase","``",",","e.g",".","``","LinearPathway","``",".","activation_dynamics",":","ActivationBase","The","activation","dynamics","that","will","be","modeled","within","the","musculotendon",".","This","must","be","an","instance","of","a","concrete","subclass","of","``","ActivationBase","``",",","e.g",".","``","FirstOrderActivationDeGroote2016","``",".","musculotendon_dynamics",":","MusculotendonFormulation","|","int","The","formulation","of","musculotendon","dynamics","that","should","be","used","internally",",","i.e",".","rigid","or","elastic","tendon","model",",","the","choice","of","musculotendon","state","etc",".","This","must","be","a","member","of","the","integer","enumeration","``","MusculotendonFormulation","``","or","an","integer","that","can","be","cast","to","a","member",".","To","use","a","rigid","tendon","formulation",",","set","this","to","``","MusculotendonFormulation.RIGID_TENDON","``","(","or","the","integer","value","``","0","``",",","which","will","be","cast","to","the","enumeration","member",")",".","There","are","four","possible","formulations","for","an","elastic","tendon","model",".","To","use","an","explicit","formulation","with","the","fiber","length","as","the","state",",","set","this","to","``","MusculotendonFormulation.FIBER_LENGTH_EXPLICIT","``","(","or","the","integer","value","``","1","``",")",".","To","use","an","explicit","formulation","with","the","tendon","force","as","the","state",",","set","this","to","``","MusculotendonFormulation.TENDON_FORCE_EXPLICIT","``","(","or","the","integer","value","``","2","``",")",".","To","use","an","implicit","formulation","with","the","fiber","length","as","the","state",",","set","this","to","``","MusculotendonFormulation.FIBER_LENGTH_IMPLICIT","``","(","or","the","integer","value","``","3","``",")",".","To","use","an","implicit","formulation","with","the","tendon","force","as","the","state",",","set","this","to","``","MusculotendonFormulation.TENDON_FORCE_IMPLICIT","``","(","or","the","integer","value","``","4","``",")",".","The","default","is","``","MusculotendonFormulation.RIGID_TENDON","``",",","which","corresponds","to","a","rigid","tendon","formulation",".","tendon_slack_length",":","Expr","|","None","The","length","of","the","tendon","when","the","musculotendon","is","in","its","unloaded","state",".","In","a","rigid","tendon","model","the","tendon","length","is","the","tendon","slack","length",".","In","all","musculotendon","models",",","tendon","slack","length","is","used","to","normalize","tendon","length","to","give",":","math",":","`","\\tilde","{","l","}","^T","=","\\frac","{","l^T","}","{","l^T_","{","slack","}","}","`",".","peak_isometric_force",":","Expr","|","None","The","maximum","force","that","the","muscle","fiber","can","produce","when","it","is","undergoing","an","isometric","contraction","(","no","lengthening","velocity",")",".","In","all","musculotendon","models",",","peak","isometric","force","is","used","to","normalized","tendon","and","muscle","fiber","force","to","give",":","math",":","`","\\tilde","{","F","}","^T","=","\\frac","{","F^T","}","{","F^M_","{","max","}","}","`",".","optimal_fiber_length",":","Expr","|","None","The","muscle","fiber","length","at","which","the","muscle","fibers","produce","no","passive","force","and","their","maximum","active","force",".","In","all","musculotendon","models",",","optimal","fiber","length","is","used","to","normalize","muscle","fiber","length","to","give",":","math",":","`","\\tilde","{","l","}","^M","=","\\frac","{","l^M","}","{","l^M_","{","opt","}","}","`",".","maximal_fiber_velocity",":","Expr","|","None","The","fiber","velocity","at","which",",","during","muscle","fiber","shortening",",","the","muscle","fibers","are","unable","to","produce","any","active","force",".","In","all","musculotendon","models",",","maximal","fiber","velocity","is","used","to","normalize","muscle","fiber","extension","velocity","to","give",":","math",":","`","\\tilde","{","v","}","^M","=","\\frac","{","v^M","}","{","v^M_","{","max","}","}","`",".","optimal_pennation_angle",":","Expr","|","None","The","pennation","angle","when","muscle","fiber","length","equals","the","optimal","fiber","length",".","fiber_damping_coefficient",":","Expr","|","None","The","coefficient","of","damping","to","be","used","in","the","damping","element","in","the","muscle","fiber","model",".","with_defaults",":","bool","Whether","``","with_defaults","``","alternate","constructors","should","be","used","when","automatically","constructing","child","classes",".","Default","is","``","False","``","."]
docstr: Ordered column matrix of non-time varying symbols present in ``M``
  and ``F``.
  
  Explanation
  ===========
  
  Only symbolic constants are returned. If a numeric type (e.g. ``Float``)
  has been used instead of ``Symbol`` for a constant then that attribute
  will not be included in the matrix returned by this property. This is
  because the primary use of this property attribute is to provide an
  ordered sequence of the still-free symbols that require numeric values
  during code generation.
  
  The alias ``constants`` can also be used to access the same attribute.
docstr_tok: ["Ordered","column","matrix","of","non-time","varying","symbols","present","in","``","M","``","and","``","F","``",".","Explanation","===========","Only","symbolic","constants","are","returned",".","If","a","numeric","type","(","e.g",".","``","Float","``",")","has","been","used","instead","of","``","Symbol","``","for","a","constant","then","that","attribute","will","not","be","included","in","the","matrix","returned","by","this","property",".","This","is","because","the","primary","use","of","this","property","attribute","is","to","provide","an","ordered","sequence","of","the","still-free","symbols","that","require","numeric","values","during","code","generation",".","The","alias","``","constants","``","can","also","be","used","to","access","the","same","attribute","."]
code: def p(self):
      """Ordered column matrix of non-time varying symbols present in ``M``
      and ``F``.
  
      Explanation
      ===========
  
      Only symbolic constants are returned. If a numeric type (e.g. ``Float``)
      has been used instead of ``Symbol`` for a constant then that attribute
      will not be included in the matrix returned by this property. This is
      because the primary use of this property attribute is to provide an
      ordered sequence of the still-free symbols that require numeric values
      during code generation.
  
      The alias ``constants`` can also be used to access the same attribute.
  
      """
      musculotendon_constants = [
          self._l_T_slack,
          self._F_M_max,
          self._l_M_opt,
          self._v_M_max,
          self._alpha_opt,
          self._beta,
      ]
      musculotendon_constants = [
          c for c in musculotendon_constants if not c.is_number
      ]
      constants = [
          Matrix(musculotendon_constants)
          if musculotendon_constants
          else zeros(0, 1)
      ]
      for child in self._child_objects:
          constants.append(child.constants)
      constants.append(self._curve_constants)
      return Matrix.vstack(*constants)
  
imports: from abc import abstractmethod
  from enum import IntEnum, unique
  from sympy.core.numbers import Float, Integer
  from sympy.core.symbol import Symbol, symbols
  from sympy.functions.elementary.miscellaneous import sqrt
  from sympy.functions.elementary.trigonometric import cos, sin
  from sympy.matrices.dense import MutableDenseMatrix, diag, eye, zeros
  from sympy.physics.biomechanics.activation import ActivationBase
  from sympy.physics.biomechanics.curve import CharacteristicCurveCollection, FiberForceLengthActiveDeGroote2016, FiberForceLengthPassiveDeGroote2016, FiberForceLengthPassiveInverseDeGroote2016, FiberForceVelocityDeGroote2016, FiberForceVelocityInverseDeGroote2016, TendonForceLengthDeGroote2016, TendonForceLengthInverseDeGroote2016
  from sympy.physics.biomechanics._mixin import _NamedMixin
  from sympy.physics.mechanics.actuator import ForceActuator
  from sympy.physics.vector.functions import dynamicsymbols
label_desc: Use image node_id 32 for calling the MusculotendonBase obj's underlying member method code with example usage: obj.p() and returns: Matrix