code: def predicate_with_side_args(side_arguments: List[str]) -> Callable:  # pylint: disable=invalid-name
      
      def decorator(function: Callable) -> Callable:
          setattr(function, '_side_arguments', side_arguments)
          return predicate(function)
      return decorator
docs: Like :func:`predicate`, but used when some of the arguments to the function are meant to be
      provided by the decoder or other state, instead of from the language.  For example, you might
      want to have a function use the decoder's attention over some input text when a terminal was
      predicted.  That attention won't show up in the language productions.  Use this decorator, and
      pass in the required state to :func:`DomainLanguage.execute_action_sequence`, if you need to
      ignore some arguments when doing grammar induction.
  
      In order for this to work out, the side arguments `must` be after any non-side arguments.  This
      is because we use ``*args`` to pass the non-side arguments, and ``**kwargs`` to pass the side
      arguments, and python requires that ``*args`` be before ``**kwargs``.