code: def test_sanity_negative_index(self):
      im1 = hopper()
      im2 = Image.new(im1.mode, im1.size, 0)
  
      width, height = im1.size
      assert im1.getpixel((0, 0)) == im1.getpixel((-width, -height))
      assert im1.getpixel((-1, -1)) == im1.getpixel(
          (width - 1, height - 1)
      )
  
      for y in range(-1, -im1.size[1] - 1, -1):
          for x in range(-1, -im1.size[0] - 1, -1):
              pos = x, y
              im2.putpixel(pos, im1.getpixel(pos))
  
      assert_image_equal(im1, im2)
  
      im2 = Image.new(im1.mode, im1.size, 0)
      im2.readonly = 1
  
      for y in range(-1, -im1.size[1] - 1, -1):
          for x in range(-1, -im1.size[0] - 1, -1):
              pos = x, y
              im2.putpixel(pos, im1.getpixel(pos))
  
      assert not im2.readonly
      assert_image_equal(im1, im2)
  
      im2 = Image.new(im1.mode, im1.size, 0)
  
      pix1 = im1.load()
      pix2 = im2.load()
  
      for y in range(-1, -im1.size[1] - 1, -1):
          for x in range(-1, -im1.size[0] - 1, -1):
              pix2[x, y] = pix1[x, y]
  
      assert_image_equal(im1, im2)
  
imports: import ctypes
  import os
  import subprocess
  import sys
  import sysconfig
  import pytest
  from setuptools.command.build_ext import new_compiler
  from PIL import Image
  from .helper import assert_image_equal, hopper, is_win32, on_ci
label_desc: Use image node_id 2 for calling the TestImagePutPixel obj's underlying member method code with example usage: obj.test_sanity_negative_index() without return types