code: def _route_sub_path(self, http_method: str, sub_path: str):
      handlers = self._method_to_handlers[http_method.lower()]
      method, kwargs = None, None
      for handler_method, web_api_def in handlers.items():
          match = web_api_def.sub_pattern_compiled.match(sub_path)
          if match is not None:
              if web_api_def.arg_filter is not None:
                  if not all(
                      self.get_argument(k, None) == v
                      for k, v in web_api_def.arg_filter.items()
                  ):
                      continue
                  method, kwargs = handler_method, dict(
                      match.groupdict()
                  )
              elif method is None:
                  # method matched with arg_filter shall not be overwritten
                  method, kwargs = handler_method, dict(
                      match.groupdict()
                  )
      if method is not None:
          return method, kwargs
      else:
          raise web.HTTPError(
              404,
              f"{sub_path} does not match any defined APIs "
              f"with method {http_method.upper()}",
          )
  
imports: import asyncio
  import functools
  import inspect
  import logging
  import re
  import sys
  import urllib.parse
  from collections import defaultdict
  from typing import Callable, Dict, List, NamedTuple, Optional, Type, Union
  from tornado import httpclient, web
  from tornado.simple_httpclient import HTTPRequest, HTTPTimeoutError
  from ...lib.aio import alru_cache
  from ...utils import serialize_serializable, deserialize_serializable
label_desc: Use image node_id 7 for calling the MarsServiceWebAPIHandler obj's underlying member method code with example usage: obj._route_sub_path(http_method, sub_path) and returns: method,  kwargs