docs: def requires(condition):
      """A function decorator to specify entry conditions for the function.
  
      Entry conditions should be a string, which will be evaluated as
      Python code.  Arguments of the function may be accessed by their
      name.
  
      The special syntax "-->" and "<-->" may be used to mean "if" and
      "if and only if", respectively.  They may not be contained within
      sub-expressions.
  
      Note that globals will not be included by default, and must be
      manually included using the "namespace" setting, set via
      settings.Settings.
  
      Example usage:
  
        | @requires("x >= y")
        | def subtract(x, y):
        |     ...
  
        | @accepts(l=List(Number), log_transform=Boolean)
        | @requires("log_transform == True --> min(l) > 0")
        | def process_list(l, log_transform=False):
        |     ...
      """
      def _decorator(func, condition=condition):
          # @requires decorator
          if U.has_fun_prop(func, "requires"):
              if not isinstance(U.get_fun_prop(func, "requires"), list):
                  raise E.InternalError("Invalid requires structure")
              base_requires = U.get_fun_prop(func, "requires")
          else:
              base_requires = []
          base_condition = condition
          if "<-->" in condition:
              condition_parts = condition.split("<-->")
              assert len(condition_parts) == 2, "Only one implies per statement in %s condition %s" % (condition, func.__qualname__)
              condition = "((%s) if (%s) else True) and ((%s) if (%s) else True)" % (condition_parts[1], condition_parts[0], condition_parts[0], condition_parts[1])
          elif "-->" in condition:
              condition_parts = condition.split("-->")
              assert len(condition_parts) == 2, "Only one implies per statement in %s condition %s" % (base_condition, func.__qualname__)
              condition = "(%s) if (%s) else True" % (condition_parts[1], condition_parts[0])
  
          U.set_fun_prop(func, "requires", [(compile(condition, '', 'eval'), condition)]+base_requires)
          return _wrap(func)
      return _decorator