class_docstr: Parse input objects from the user into a metric query specification.
  
  Input objects are converted into *ResolverInput objects and then passed to the query resolver. The query resolver
  returns concrete specs corresponding to the request input / issues with query resolution.
  
  TODO: Add fuzzy match results.
class_docstr_tok: ["Parse","input","objects","from","the","user","into","a","metric","query","specification",".","Input","objects","are","converted","into","*","ResolverInput","objects","and","then","passed","to","the","query","resolver",".","The","query","resolver","returns","concrete","specs","corresponding","to","the","request","input","\/","issues","with","query","resolution",".","TODO",":","Add","fuzzy","match","results","."]
code: def _parse_order_by_names(
      self,
      order_by_names: Sequence[str],
  ) -> Sequence[ResolverInputForOrderByItem]:
      resolver_inputs: List[ResolverInputForOrderByItem] = []
  
      for order_by_name in order_by_names:
          possible_inputs: List[
              Union[ResolverInputForMetric, ResolverInputForGroupByItem]
          ] = []
          if order_by_name[0] == "-":
              descending = True
              order_by_name_without_prefix = order_by_name[1:]
          else:
              descending = False
              order_by_name_without_prefix = order_by_name
  
          for (
              group_by_item_naming_scheme
          ) in self._group_by_item_naming_schemes:
              if group_by_item_naming_scheme.input_str_follows_scheme(
                  order_by_name_without_prefix
              ):
                  possible_inputs.append(
                      ResolverInputForGroupByItem(
                          input_obj=order_by_name,
                          input_obj_naming_scheme=group_by_item_naming_scheme,
                          spec_pattern=group_by_item_naming_scheme.spec_pattern(
                              order_by_name_without_prefix
                          ),
                      )
                  )
                  break
  
          for metric_naming_scheme in self._metric_naming_schemes:
              if metric_naming_scheme.input_str_follows_scheme(
                  order_by_name_without_prefix
              ):
                  possible_inputs.append(
                      ResolverInputForMetric(
                          input_obj=order_by_name,
                          naming_scheme=metric_naming_scheme,
                          spec_pattern=metric_naming_scheme.spec_pattern(
                              order_by_name_without_prefix
                          ),
                      )
                  )
  
          resolver_inputs.append(
              ResolverInputForOrderByItem(
                  input_obj=order_by_name,
                  possible_inputs=tuple(possible_inputs),
                  descending=descending,
              )
          )
  
      return resolver_inputs
  
imports: from __future__ import annotations
  import datetime
  import logging
  from typing import List, Optional, Sequence, Tuple, Union
  import pandas
  from dbt_semantic_interfaces.implementations.filters.where_filter import PydanticWhereFilter, PydanticWhereFilterIntersection
  from dbt_semantic_interfaces.pretty_print import pformat_big_objects
  from dbt_semantic_interfaces.protocols import SavedQuery
  from dbt_semantic_interfaces.protocols.where_filter import WhereFilter
  from dbt_semantic_interfaces.type_enums import TimeGranularity
  from metricflow.assert_one_arg import assert_at_most_one_arg_set
  from metricflow.filters.merge_where import merge_to_single_where_filter
  from metricflow.filters.time_constraint import TimeRangeConstraint
  from metricflow.mf_logging.formatting import indent
  from metricflow.mf_logging.pretty_print import mf_pformat
  from metricflow.mf_logging.runtime import log_runtime
  from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup
  from metricflow.naming.dunder_scheme import DunderNamingScheme
  from metricflow.naming.metric_scheme import MetricNamingScheme
  from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme
  from metricflow.protocols.query_parameter import GroupByParameter, MetricQueryParameter, OrderByQueryParameter, SavedQueryParameter
  from metricflow.query.group_by_item.filter_spec_resolution.filter_pattern_factory import DefaultWhereFilterPatternFactory, WhereFilterPatternFactory
  from metricflow.query.group_by_item.group_by_item_resolver import GroupByItemResolver
  from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag
  from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet
  from metricflow.query.issues.parsing.string_input_parsing_issue import StringInputParsingIssue
  from metricflow.query.query_exceptions import InvalidQueryException
  from metricflow.query.query_resolution import InputToIssueSetMapping, InputToIssueSetMappingItem
  from metricflow.query.query_resolver import MetricFlowQueryResolver
  from metricflow.query.resolver_inputs.base_resolver_inputs import MetricFlowQueryResolverInput
  from metricflow.query.resolver_inputs.query_resolver_inputs import InvalidStringInput, ResolverInputForGroupByItem, ResolverInputForLimit, ResolverInputForMetric, ResolverInputForMinMaxOnly, ResolverInputForOrderByItem, ResolverInputForQuery, ResolverInputForQueryLevelWhereFilterIntersection
  from metricflow.specs.patterns.base_time_grain import BaseTimeGrainPattern
  from metricflow.specs.patterns.metric_time_pattern import MetricTimePattern
  from metricflow.specs.patterns.none_date_part import NoneDatePartPattern
  from metricflow.specs.specs import InstanceSpec, InstanceSpecSet, MetricFlowQuerySpec, TimeDimensionSpec
  from metricflow.time.time_granularity import adjust_to_end_of_period, adjust_to_start_of_period, is_period_end, is_period_start
label_desc: Use image node_id 6 for calling the MetricFlowQueryParser obj's underlying member method code with example usage: obj._parse_order_by_names(order_by_names) and returns: resolver_inputs