new_contents: # mode: run
  # tag: openmp, pure3.6
  
  import cython
  from cython.parallel import prange, parallel
  
  
  def prange_regression(n: cython.int, data: list):
      """
      >>> prange_regression(10, list(range(1, 4)))
      19
      """
      s: cython.int = 0
      i: cython.int
      d: cython.int[3] = data
  
      for i in prange(n, num_threads=3, nogil=True):
          s += d[i % 3]
      return s
  
  
  def prange_with_gil(n: cython.int, x):
      """
      >>> sum(3*i for i in range(10))
      135
      >>> prange_with_gil(10, 3)
      135
      """
      i: cython.int
      s: cython.int = 0
  
      for i in prange(n, num_threads=3, nogil=True):
          with cython.gil:
              s += x * i
  
      return s
  
  
  @cython.cfunc
  def use_nogil(x, i: cython.int) -> cython.int:
      cx: cython.int = x
      with cython.nogil:
          return cx * i
  
  
  def prange_with_gil_call_nogil(n: cython.int, x):
      """
      >>> sum(3*i for i in range(10))
      135
      >>> prange_with_gil(10, 3)
      135
      """
      i: cython.int
      s: cython.int = 0
  
      for i in prange(n, num_threads=3, nogil=True):
          with cython.gil:
              s += use_nogil(x, i)
  
      return s
  
subject: Add a pure Python OpenMP test to make sure everything works from pure Python mode.