code: def assert_no_replicas_deprovisioned(
      replica_tags_1: Iterable[str], replica_tags_2: Iterable[str]
  ) -> None:
      """
      Checks whether any replica tags from replica_tags_1 are absent from
      replica_tags_2. Assumes that this indicates replicas were de-provisioned.
  
      replica_tags_1: Replica tags of running replicas at the first timestep
      replica_tags_2: Replica tags of running replicas at the second timestep
      """
  
      replica_tags_1, replica_tags_2 = set(replica_tags_1), set(
          replica_tags_2
      )
      num_matching_replicas = len(
          replica_tags_1.intersection(replica_tags_2)
      )
  
      print(
          f"{num_matching_replicas} replica(s) stayed provisioned between "
          f"both deployments. All {len(replica_tags_1)} replica(s) were "
          f"expected to stay provisioned. "
          f"{len(replica_tags_1) - num_matching_replicas} replica(s) were "
          f"de-provisioned."
      )
  
      assert len(replica_tags_1) == num_matching_replicas
  
imports: import asyncio
  import logging
  import os
  import sys
  import tempfile
  import time
  import zipfile
  from typing import Dict, Iterable, List
  from unittest import mock
  import pytest
  import requests
  import ray
  import ray.util.state
  from ray import serve
  from ray._private.test_utils import SignalActor, wait_for_condition
  from ray.serve._private.common import ApplicationStatus, DeploymentID, DeploymentStatus, DeploymentStatusInfo, DeploymentStatusTrigger, ReplicaState
  from ray.serve._private.constants import SERVE_DEFAULT_APP_NAME, SERVE_NAMESPACE
  from ray.serve._private.controller import ServeController
  from ray.serve.config import AutoscalingConfig
  from ray.serve.generated.serve_pb2 import DeploymentStatusInfo
  from ray.serve.schema import ServeDeploySchema
label_desc: Use image node_id 8 for calling a global function with example usage: assert_no_replicas_deprovisioned(replica_tags_1, replica_tags_2) without return types