Class PyMemoryView

All Implemented Interfaces:
Serializable, BufferProtocol, Traverseproc

public class PyMemoryView extends PySequence implements BufferProtocol, Traverseproc
Class implementing the Python memoryview type. It provides a wrapper around the Jython buffer API.
See Also:
  • Field Details

    • TYPE

      public static final PyType TYPE
  • Constructor Details

    • PyMemoryView

      public PyMemoryView(BufferProtocol pybuf) throws ClassCastException
      Construct a PyMemoryView from an object bearing the BufferProtocol interface. If this object is already an exported buffer, the memoryview takes a new lease on it. The buffer so obtained will be writable if the underlying object permits it.
      Parameters:
      pybuf - buffer exported by some underlying object
      Throws:
      ClassCastException - in cases where pybuf.getBuffer does so.
  • Method Details

    • __tojava__

      public Object __tojava__(Class<?> c)
      Description copied from class: PyObject
      Equivalent to the Jython __tojava__ method. Tries to coerce this object to an instance of the requested Java class. Returns the special object Py.NoConversion if this PyObject can not be converted to the desired Java class.
      Overrides:
      __tojava__ in class PySequence
      Parameters:
      c - the Class to convert this PyObject to.
    • obj

      public PyObject obj()
    • format

      public String format()
    • itemsize

      public int itemsize()
    • shape

      public PyObject shape()
    • ndim

      public int ndim()
    • strides

      public PyObject strides()
    • suboffsets

      public PyObject suboffsets()
    • readonly

      public boolean readonly()
    • tobytes

      public PyString tobytes()
      Implementation of Python tobytes(). Return the data in the buffer as a byte string (an object of class str).
      Returns:
      byte string of buffer contents.
    • tolist

      public PyList tolist()
      Implementation of Python tolist(). Return the data in the buffer as a list where the elements are an appropriate type (int in the case of a byte-oriented buffer, which is the only case presently supported).
      Returns:
      a list of buffer contents.
    • __len__

      public int __len__()
      Description copied from class: PyObject
      Equivalent to the standard Python __len__ method. Part of the mapping discipline.
      Overrides:
      __len__ in class PyObject
      Returns:
      the length of the object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class PyObject
    • __eq__

      public PyObject __eq__(PyObject other)
      Description copied from class: PyObject
      Equivalent to the standard Python __eq__ method.
      Overrides:
      __eq__ in class PySequence
      Parameters:
      other - the object to compare this with.
      Returns:
      the result of the comparison.
    • __ne__

      public PyObject __ne__(PyObject other)
      Description copied from class: PyObject
      Equivalent to the standard Python __ne__ method.
      Overrides:
      __ne__ in class PySequence
      Parameters:
      other - the object to compare this with.
      Returns:
      the result of the comparison.
    • __lt__

      public PyObject __lt__(PyObject other)
      Description copied from class: PyObject
      Equivalent to the standard Python __lt__ method.
      Overrides:
      __lt__ in class PySequence
      Parameters:
      other - the object to compare this with.
      Returns:
      the result of the comparison.
    • __le__

      public PyObject __le__(PyObject other)
      Description copied from class: PyObject
      Equivalent to the standard Python __le__ method.
      Overrides:
      __le__ in class PySequence
      Parameters:
      other - the object to compare this with.
      Returns:
      the result of the comparison.
    • __ge__

      public PyObject __ge__(PyObject other)
      Description copied from class: PyObject
      Equivalent to the standard Python __ge__ method.
      Overrides:
      __ge__ in class PySequence
      Parameters:
      other - the object to compare this with.
      Returns:
      the result of the comparison.
    • __gt__

      public PyObject __gt__(PyObject other)
      Description copied from class: PyObject
      Equivalent to the standard Python __gt__ method.
      Overrides:
      __gt__ in class PySequence
      Parameters:
      other - the object to compare this with.
      Returns:
      the result of the comparison.
    • __enter__

      public PyObject __enter__()
      Called at the start of a context-managed suite (supporting the with clause).
      Returns:
      this object
    • __exit__

      public boolean __exit__(PyObject type, PyObject value, PyObject traceback)
      Called at the end of a context-managed suite (supporting the with clause), and will release the memoryview.
      Returns:
      false
    • getBuffer

      public PyBuffer getBuffer(int flags)
      Method by which the consumer requests the buffer from the exporter. The consumer provides information on its ability to understand buffer navigation. Each consumer requesting a buffer in this way, when it has finished using it, should make a corresponding call to PyBuffer.release() on the buffer it obtained, or PyBuffer.close() using try-with-resources, since some objects alter their behaviour while buffers are exported.

      The PyBuffer returned from this method is just the one on which the memoryview was first constructed. The Jython buffer API is such that sharing directly is safe (as long as the get-release discipline is observed).

      Specified by:
      getBuffer in interface BufferProtocol
      Parameters:
      flags - specifying features demanded and the navigational capabilities of the consumer
      Returns:
      exported buffer
    • release

      public void release()
      Request a release of the underlying buffer exposed by the memoryview object. Many objects take special actions when a view is held on them (for example, a bytearray would temporarily forbid resizing); therefore, calling release() is handy to remove these restrictions (and free any dangling resources) as soon as possible.

      After this method has been called, any further operation on the view raises a ValueError (except release() itself which can be called multiple times with the same effect as just one call).

      This becomes an exposed method in CPython from 3.2. The Jython implementation of memoryview follows the Python 3.3 design internally and therefore safely anticipates Python 3 in exposing memoryview.release along with the related context-management behaviour.

    • memoryview_release

      public final void memoryview_release()
    • pyset

      public void pyset(int index, PyObject value) throws PyException
      Sets the indexed element of the memoryview to the given value, treating the operation as assignment to a slice of length one. This is different from the same operation on a byte array, where the assigned value must be an int: here it must have the buffer API and length one. This is an extension point called by PySequence in its implementation of PySequence.__setitem__(int, org.python.core.PyObject) It is guaranteed by PySequence that the index is within the bounds of the memoryview. Any other clients calling pyset(int, PyObject) must make the same guarantee.
      Parameters:
      index - index of the element to set.
      value - to set this element to, regarded as a buffer of length one unit.
      Throws:
      PyException - AttributeError if value cannot be converted to an integer
      PyException - ValueError if value<0 or value>255
    • traverse

      public int traverse(Visitproc visit, Object arg)
      Description copied from interface: Traverseproc
      Traverses all directly contained PyObjects. Like in CPython, arg must be passed unmodified to visit as its second parameter. If Visitproc.visit(PyObject, Object) returns nonzero, this return value must be returned immediately by traverse. Visitproc.visit(PyObject, Object) must not be called with a null PyObject-argument.
      Specified by:
      traverse in interface Traverseproc
    • refersDirectlyTo

      public boolean refersDirectlyTo(PyObject ob)
      Description copied from interface: Traverseproc
      Optional operation. Should only be implemented if it is more efficient than calling Traverseproc.traverse(Visitproc, Object) with a visitproc that just watches out for ob. Must return false if ob is null.
      Specified by:
      refersDirectlyTo in interface Traverseproc