code: def _evaluate_markers(markers, environment):
      # type: (List[Any], Dict[str, str]) -> bool
      groups = [[]]  # type: List[List[bool]]
  
      for marker in markers:
          assert isinstance(marker, (list, tuple, string_types))
  
          if isinstance(marker, list):
              groups[-1].append(_evaluate_markers(marker, environment))
          elif isinstance(marker, tuple):
              lhs, op, rhs = marker
  
              if isinstance(lhs, Variable):
                  lhs_value = _get_env(environment, lhs.value)
                  rhs_value = rhs.value
              else:
                  lhs_value = lhs.value
                  rhs_value = _get_env(environment, rhs.value)
  
              groups[-1].append(_eval_op(lhs_value, op, rhs_value))
          else:
              assert marker in ["and", "or"]
              if marker == "or":
                  groups.append([])
  
      return any(all(item) for item in groups)
  
imports: from __future__ import absolute_import, division, print_function
  import operator
  import os
  import platform
  import sys
  from pyparsing import Forward, Group, Literal, ParseException, ParseResults, QuotedString, ZeroOrMore, stringEnd, stringStart
  from ._compat import string_types
  from ._typing import TYPE_CHECKING
  from .specifiers import InvalidSpecifier, Specifier
label_desc: Use image node_id 5 for calling a global function with example usage: _evaluate_markers(markers, environment) and returns: any