code: def _check_remote_version_compatibility(self):
      from aim.__version__ import __version__ as client_version
      import grpc
  
      error_message_template = (
          "The Aim Remote tracking server version ({}) "
          "is not compatible with the Aim client version ({})."
          "Please upgrade either the Aim Client or the Aim Remote."
      )
  
      warning_message_template = (
          "The Aim Remote tracking server version ({}) "
          "and the Aim client version ({}) do not match."
          "Consider upgrading either the client or remote tracking server."
      )
  
      try:
          remote_version = self.get_version()
      except grpc.RpcError as e:
          if e.code() == grpc.StatusCode.UNIMPLEMENTED:
              remote_version = "<3.15.0"
          else:
              raise
  
      # server doesn't yet have the `get_version()` method implemented
      if remote_version == "<3.15.0":
          RuntimeError(
              error_message_template.format(
                  remote_version, client_version
              )
          )
  
      # compare versions
      if client_version == remote_version:
          return
  
      # if the server has a newer version always force to upgrade the client
      if client_version < remote_version:
          raise RuntimeError(
              error_message_template.format(
                  remote_version, client_version
              )
          )
  
      # for other mismatching versions throw a warning for now
      logger.warning(
          warning_message_template.format(
              remote_version, client_version
          )
      )
  
imports: import logging
  import os
  import threading
  import uuid
  import weakref
  from collections import defaultdict
  from copy import deepcopy
  from typing import Tuple
  import aim.ext.transport.proto.remote_tracking_pb2
  import aim.ext.transport.proto.remote_router_pb2
  import aim.ext.transport.proto.remote_tracking_pb2_grpc
  import aim.ext.transport.proto.remote_router_pb2_grpc
  from aim.ext.transport.message_utils import pack_stream, unpack_stream, raise_exception
  from aim.ext.transport.rpc_queue import RpcQueueWithRetry
  from aim.ext.transport.heartbeat import RPCHeartbeatSender
  from aim.ext.transport.config import AIM_CLIENT_SSL_CERTIFICATES_FILE, AIM_RT_MAX_MESSAGE_SIZE, AIM_RT_DEFAULT_MAX_MESSAGE_SIZE, AIM_CLIENT_QUEUE_MAX_MEMORY
  from aim.storage.treeutils import encode_tree, decode_tree
label_desc: Use image node_id 6 for calling the Client obj's underlying member method code with example usage: obj._check_remote_version_compatibility() without return types