code: def apply_poisson_noise(data, random_state=None):
      
  
      data = np.asanyarray(data)
      if np.any(data < 0):
          raise ValueError('data must not contain any negative values')
  
      prng = check_random_state(random_state)
  
      return prng.poisson(data)
docs: Apply Poisson noise to an array, where the value of each element in
      the input array represents the expected number of counts.
  
      Each pixel in the output array is generated by drawing a random
      sample from a Poisson distribution whose expectation value is given
      by the pixel value in the input array.
  
      Parameters
      ----------
      data : array-like
          The array on which to apply Poisson noise.  Every pixel in the
          array must have a positive value (i.e. counts).
  
      random_state : int or `~numpy.random.RandomState`, optional
          Pseudo-random number generator state used for random sampling.
  
      Returns
      -------
      result : `~numpy.ndarray`
          The data array after applying Poisson noise.
  
      See Also
      --------
      make_noise_image
  
      Examples
      --------
      .. plot::
          :include-source:
  
          from photutils.datasets import make_4gaussians_image
          from photutils.datasets import apply_poisson_noise
          data1 = make_4gaussians_image(noise=False)
          data2 = apply_poisson_noise(data1, random_state=12345)
  
          # plot the images
          import matplotlib.pyplot as plt
          fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 8))
          ax1.imshow(data1, origin='lower', interpolation='nearest')
          ax1.set_title('Original image')
          ax2.imshow(data2, origin='lower', interpolation='nearest')
          ax2.set_title('Original image with Poisson noise applied')