code: def rotation_period(b, component, solve_for=None, **kwargs):
      
      hier = b.get_hierarchy()
      if not len(hier.get_value()):
          # TODO: change to custom error type to catch in bundle.add_component
          # TODO: check whether the problem is 0 hierarchies or more than 1
          raise NotImplementedError("constraint for comp_sma requires hierarchy")
  
      component_ps = _get_system_ps(b, component)
  
      parentorbit = hier.get_parent_of(component)
      parentorbit_ps = _get_system_ps(b, parentorbit)
  
      metawargs = component_ps.meta
      metawargs.pop('qualifier')
      period_star = b.get_parameter(qualifier='period', **metawargs)
      syncpar_star = b.get_parameter(qualifier='syncpar', **metawargs)
  
  
      metawargs = parentorbit_ps.meta
      metawargs.pop('qualifier')
      period_orbit = b.get_parameter(qualifier='period', **metawargs)
  
      if solve_for in [None, period_star]:
          lhs = period_star
          rhs = period_orbit / syncpar_star
  
      elif solve_for == syncpar_star:
          lhs = syncpar_star
          rhs = period_orbit / period_star
  
      elif solve_for == period_orbit:
          lhs = period_orbit
          rhs = syncpar_star * period_star
  
      else:
          raise NotImplementedError
  
      return lhs, rhs, {'component': component}
docs: Create a constraint for the rotation period of a star given its orbital
      period and synchronicity parameters.
  
      :parameter b: the :class:`phoebe.frontend.bundle.Bundle`
      :parameter str component: the label of the star in which this
          constraint should be built
      :parameter str solve_for:  if 'period@star' should not be the derived/constrained
          parameter, provide which other parameter should be derived
          (ie 'syncpar@star', 'period@orbit')
      :returns: lhs (Parameter), rhs (ConstraintParameter), args (list of arguments
          that were passed to this function)