class_docstr: Container for all keypoints on a single image.
  
  Parameters
  ----------
  keypoints : list of imgaug.augmentables.kps.Keypoint
      List of keypoints on the image.
  
  shape : tuple of int
      The shape of the image on which the objects are placed, i.e. the
      result of ``image.shape``.
      Should include the number of channels, not only height and width.
  
  Examples
  --------
  >>> import numpy as np
  >>> from imgaug.augmentables.kps import Keypoint, KeypointsOnImage
  >>>
  >>> image = np.zeros((70, 70))
  >>> kps = [Keypoint(x=10, y=20), Keypoint(x=34, y=60)]
  >>> kps_oi = KeypointsOnImage(kps, shape=image.shape)
class_docstr_tok: ["Container","for","all","keypoints","on","a","single","image",".","Parameters","--","--","--","--","--","keypoints",":","list","of","imgaug.augmentables.kps.Keypoint","List","of","keypoints","on","the","image",".","shape",":","tuple","of","int","The","shape","of","the","image","on","which","the","objects","are","placed",",","i.e",".","the","result","of","``","image.shape","``",".","Should","include","the","number","of","channels",",","not","only","height","and","width",".","Examples","--","--","--","--",">",">",">","import","numpy","as","np",">",">",">","from","imgaug.augmentables.kps","import","Keypoint",",","KeypointsOnImage",">",">",">",">",">",">","image","=","np.zeros","(","(","70",",","70",")",")",">",">",">","kps","=","[","Keypoint","(","x=10",",","y=20",")",",","Keypoint","(","x=34",",","y=60",")","]",">",">",">","kps_oi","=","KeypointsOnImage","(","kps",",","shape=image.shape",")"]
docstr: Modify the keypoint coordinates of this instance in-place.
  
  .. note::
  
      This currently expects that `xy` contains exactly as many
      coordinates as there are keypoints in this instance. Otherwise,
      an ``AssertionError`` will be raised.
  
  Added in 0.4.0.
  
  Parameters
  ----------
  xy : (N, 2) ndarray or iterable of iterable of number
      Coordinates of ``N`` keypoints on an image, given as a ``(N,2)``
      array of xy-coordinates. ``N`` must match the number of keypoints
      in this instance.
  
  Returns
  -------
  KeypointsOnImage
      This instance itself, with updated keypoint coordinates.
      Note that the instance was modified in-place.
docstr_tok: ["Modify","the","keypoint","coordinates","of","this","instance","in-place",".","..","note",":",":","This","currently","expects","that","`","xy","`","contains","exactly","as","many","coordinates","as","there","are","keypoints","in","this","instance",".","Otherwise",",","an","``","AssertionError","``","will","be","raised",".","Added","in","0.4.0",".","Parameters","--","--","--","--","--","xy",":","(","N",",","2",")","ndarray","or","iterable","of","iterable","of","number","Coordinates","of","``","N","``","keypoints","on","an","image",",","given","as","a","``","(","N,2",")","``","array","of","xy-coordinates",".","``","N","``","must","match","the","number","of","keypoints","in","this","instance",".","Returns","--","--","--","-","KeypointsOnImage","This","instance","itself",",","with","updated","keypoint","coordinates",".","Note","that","the","instance","was","modified","in-place","."]
code: def fill_from_xy_array_(self, xy):
      """Modify the keypoint coordinates of this instance in-place.
  
      .. note::
  
          This currently expects that `xy` contains exactly as many
          coordinates as there are keypoints in this instance. Otherwise,
          an ``AssertionError`` will be raised.
  
      Added in 0.4.0.
  
      Parameters
      ----------
      xy : (N, 2) ndarray or iterable of iterable of number
          Coordinates of ``N`` keypoints on an image, given as a ``(N,2)``
          array of xy-coordinates. ``N`` must match the number of keypoints
          in this instance.
  
      Returns
      -------
      KeypointsOnImage
          This instance itself, with updated keypoint coordinates.
          Note that the instance was modified in-place.
  
      """
      xy = np.array(xy, dtype=np.float32)
  
      # note that np.array([]) is (0,), not (0, 2)
      assert xy.shape[0] == 0 or (
          xy.ndim == 2 and xy.shape[-1] == 2
      ), (  # pylint: disable=unsubscriptable-object
          "Expected input array to have shape (N,2), "
          "got shape %s." % (xy.shape,)
      )
  
      assert len(xy) == len(self.keypoints), (
          "Expected to receive as many keypoint coordinates as there are "
          "currently keypoints in this instance. Got %d, expected %d."
          % (len(xy), len(self.keypoints))
      )
  
      for kp, (x, y) in zip(self.keypoints, xy):
          kp.x = x
          kp.y = y
  
      return self
  
imports: from __future__ import print_function, division, absolute_import
  import numpy
  import scipy.spatial.distance
  import six.moves
  from ..None import imgaug
  from .base import IAugmentable
  from .utils import normalize_imglike_shape, project_coords, _remove_out_of_image_fraction_, _handle_on_image_shape
label_desc: Use image node_id 20 for calling the KeypointsOnImage obj's underlying member method code with example usage: obj.fill_from_xy_array_(xy) and returns: self