 
   public var pythonObject: PythonObject {
     _ = Python // Ensure Python is initialized.
-    return PythonObject(sliceStart: lowerBound, stop: nil, step: nil)
+    return Python.slice(lowerBound, Python.None, Python.None)
   }
 }
 

}

//===----------------------------------------------------------------------===//
// Helpers for Python slice and tuple types
//===----------------------------------------------------------------------===//

private func pySlice(_ start: PythonConvertible?,
                     _ stop: PythonConvertible?,
                     _ step: PythonConvertible? = nil) -> OwnedPyObjectPointer {
  let startP = start?.ownedPyObject
  let stopP = stop?.ownedPyObject
  let stepP = step?.ownedPyObject

  // `PySlice_New` takes each operand at +0, and returns +1.
  let result = PySlice_New(startP, stopP, stepP)!

  Py_DecRef(startP)
  Py_DecRef(stopP)
  Py_DecRef(stepP) // `Py_DecRef` is `nil` safe.
  return result
}

// Create a Python tuple object with the specified elements.
private func pyTuple<T : Collection>(_ vals: T) -> OwnedPyObjectPointer


  public var magnitude: PythonObject {
    return self < 0 ? -self : self
  }
}

extension PythonObject : Strideable {
  public typealias Stride = PythonObject

  public func distance(to other: PythonObject) -> Stride {
    return other - self
  }

  public func advanced(by stride: Stride) -> PythonObject {
    return self + stride
  }
}

