code: def test_summary(tracker: NodeProviderAvailabilityTracker):
      exc = NodeLaunchException(
          "DontFeelLikeIt", "This seems like a lot of work.", exc_info
      )
      tracker.update_node_availability("my-node-a", 0, exc)
  
      tracker.update_node_availability("my-node-b", 1, None)
  
      summary = tracker.summary()
  
      expected = {
          "my-node-a": NodeAvailabilityRecord(
              node_type="my-node-a",
              is_available=False,
              last_checked_timestamp=0,
              unavailable_node_information=UnavailableNodeInformation(
                  category="DontFeelLikeIt",
                  description="This seems like a lot of work.",
              ),
          ),
          "my-node-b": NodeAvailabilityRecord(
              node_type="my-node-b",
              is_available=True,
              last_checked_timestamp=1,
              unavailable_node_information=None,
          ),
      }
  
      assert summary.node_availabilities == expected
  
file_path: ray/python/ray/tests/test_node_provider_availability_tracker.py
imports: import datetime
  import dataclasses
  import os
  import sys
  import pytest
  from ray.autoscaler.node_launch_exception import NodeLaunchException
  from ray.autoscaler._private.node_provider_availability_tracker import NodeProviderAvailabilityTracker, NodeAvailabilitySummary, NodeAvailabilityRecord, UnavailableNodeInformation
label_desc: Use image node_id 7 for calling a global function with example usage: test_summary(tracker) without return types