code: def test_custom_metrics_edge_cases(metric_mock):
      # None or empty boundaries are not allowed.
      with pytest.raises(ValueError):
          Histogram("hist")
  
      with pytest.raises(ValueError):
          Histogram("hist", boundaries=[])
  
      # Empty name is not allowed.
      with pytest.raises(ValueError):
          Counter("")
  
      # The tag keys must be a tuple type.
      with pytest.raises(TypeError):
          Counter("name", tag_keys=("a"))
  
      with pytest.raises(ValueError):
          Histogram("hist", boundaries=[-1, 1, 2])
  
      with pytest.raises(ValueError):
          Histogram("hist", boundaries=[0, 1, 2])
  
      with pytest.raises(ValueError):
          Histogram("hist", boundaries=[-1, -0.5, -0.1])
  
imports: import signal
  import json
  import os
  import pathlib
  import sys
  import requests
  from pprint import pformat
  from unittest.mock import MagicMock
  import numpy
  import pytest
  import ray
  from ray.util.state import list_nodes
  from ray._private.metrics_agent import PrometheusServiceDiscoveryWriter
  from ray._private.ray_constants import PROMETHEUS_SERVICE_DISCOVERY_FILE
  from ray._private.test_utils import SignalActor, fetch_prometheus, fetch_prometheus_metrics, get_log_batch, wait_for_condition, raw_metrics
  from ray.autoscaler._private.constants import AUTOSCALER_METRIC_PORT
  from ray.dashboard.consts import DASHBOARD_METRIC_PORT
  from ray.util.metrics import Counter, Gauge, Histogram
label_desc: Use image node_id 12 for calling a global function with example usage: test_custom_metrics_edge_cases(metric_mock) without return types