input: Write a Python function to apply Canny Edge Detection on an image using given Gaussian, Sobel filters, and edge tracing methods. 
  assert np.array_equal(cannyEdgeDetector(sample_image, 1.4), expected_edges_1.4)
  assert np.array_equal(cannyEdgeDetector(sample_image, 0.7), expected_edges_0.7)
  assert np.array_equal(cannyEdgeDetector(sample_image, 2.0), expected_edges_2.0)
output: import numpy as np
  from scipy.ndimage import gaussian_filter, sobel
  from skimage.feature import canny
  
  def cannyEdgeDetector(image, sigma):
      # Apply Gaussian filter to smooth the image
      smoothed_image = gaussian_filter(image, sigma=sigma)
  
      # Apply Sobel filter to get the gradients
      sobel_x = sobel(smoothed_image, axis=0)
      sobel_y = sobel(smoothed_image, axis=1)
      
      # Compute the gradient magnitude and direction
      gradient_magnitude = np.hypot(sobel_x, sobel_y)
      gradient_direction = np.arctan2(sobel_y, sobel_x)
      
      # Apply Canny edge detection
      edges = canny(smoothed_image, sigma=sigma)
      
      return edges