
from __future__ import generator_stop

# "generator_stop" was only added in Py3.5.


def with_outer_raising(*args):
    """
    >>> x = with_outer_raising(1, 2, 3)
    >>> try:
    ...     list(x())
    ... except RuntimeError:
    ...     print("OK!")
    ... else:
    ...     print("NOT RAISED!")
    OK!
    """
    def generator():
        for i in args:
            yield i
        raise StopIteration
    return generator


def anno_gen(x: 'int') -> 'float':
    """
    >>> gen = anno_gen(2)
    >>> next(gen)
    2.0
    >>> ret, arg = sorted(anno_gen.__annotations__.items())
    >>> print(ret[0]); print(ret[1])
    return
    float
    >>> print(arg[0]); print(arg[1])
    x
    int
    """
    yield float(x)


from __future__ import generator_stop

# "generator_stop" was only added in Py3.5.


def with_outer_raising(*args):
    """
    >>> x = with_outer_raising(1, 2, 3)
    >>> try:
    ...     list(x())
    ... except RuntimeError:
    ...     print("OK!")
    ... else:
    ...     print("NOT RAISED!")
    OK!
    """
    def generator():
        for i in args:
            yield i
        raise StopIteration
    return generator


def anno_gen(x: 'int') -> 'float':
    """
    >>> gen = anno_gen(2)
    >>> next(gen)
    2.0
    >>> ret, arg = sorted(anno_gen.__annotations__.items())
    >>> print(ret[0]); print(str(ret[1]).strip("'"))  # strip makes it pass with/without PEP563
    return
    float
    >>> print(arg[0]); print(str(arg[1]).strip("'"))
    x
    int
    """
    yield float(x)

Make annotation tests work with non-evaluated annotations (GH-4050)
Make annotation tests work with non-evaluated annotations (GH-4050)

Backported from 3dc2b9dfc23638fbef2558d619709b5235d5df08
Partial fix for https://github.com/cython/cython/issues/3919

  
  from __future__ import generator_stop
  
  # "generator_stop" was only added in Py3.5.
  
  
  def with_outer_raising(*args):
      """
      >>> x = with_outer_raising(1, 2, 3)
      >>> try:
      ...     list(x())
      ... except RuntimeError:
      ...     print("OK!")
      ... else:
      ...     print("NOT RAISED!")
      OK!
      """
      def generator():
          for i in args:
              yield i
          raise StopIteration
      return generator
  
  
  def anno_gen(x: 'int') -> 'float':
      """
      >>> gen = anno_gen(2)
      >>> next(gen)
      2.0
      >>> ret, arg = sorted(anno_gen.__annotations__.items())
-     >>> print(ret[0]); print(ret[1])
+     >>> print(ret[0]); print(str(ret[1]).strip("'"))  # strip makes it pass with/without PEP563
      return
      float
-     >>> print(arg[0]); print(arg[1])
+     >>> print(arg[0]); print(str(arg[1]).strip("'"))
      x
      int
      """
      yield float(x)
  
Make annotation tests work with non-evaluated annotations (GH-4050)
## Code Before:

from __future__ import generator_stop

# "generator_stop" was only added in Py3.5.


def with_outer_raising(*args):
    """
    >>> x = with_outer_raising(1, 2, 3)
    >>> try:
    ...     list(x())
    ... except RuntimeError:
    ...     print("OK!")
    ... else:
    ...     print("NOT RAISED!")
    OK!
    """
    def generator():
        for i in args:
            yield i
        raise StopIteration
    return generator


def anno_gen(x: 'int') -> 'float':
    """
    >>> gen = anno_gen(2)
    >>> next(gen)
    2.0
    >>> ret, arg = sorted(anno_gen.__annotations__.items())
    >>> print(ret[0]); print(ret[1])
    return
    float
    >>> print(arg[0]); print(arg[1])
    x
    int
    """
    yield float(x)

## Instruction:
Make annotation tests work with non-evaluated annotations (GH-4050)
## Code After:

from __future__ import generator_stop

# "generator_stop" was only added in Py3.5.


def with_outer_raising(*args):
    """
    >>> x = with_outer_raising(1, 2, 3)
    >>> try:
    ...     list(x())
    ... except RuntimeError:
    ...     print("OK!")
    ... else:
    ...     print("NOT RAISED!")
    OK!
    """
    def generator():
        for i in args:
            yield i
        raise StopIteration
    return generator


def anno_gen(x: 'int') -> 'float':
    """
    >>> gen = anno_gen(2)
    >>> next(gen)
    2.0
    >>> ret, arg = sorted(anno_gen.__annotations__.items())
    >>> print(ret[0]); print(str(ret[1]).strip("'"))  # strip makes it pass with/without PEP563
    return
    float
    >>> print(arg[0]); print(str(arg[1]).strip("'"))
    x
    int
    """
    yield float(x)
