code: def _platform_index_lowering(
      ctx: mlir.LoweringRuleContext,
      *,
      platforms: Sequence[Sequence[str]],
      has_default: bool,
  ):
      def lower_constant(
          ctx: mlir.LoweringRuleContext, *, i: int
      ) -> mlir.ir.Value:
          return mlir.ir_constants(np.int32(i))
  
      platform_rules: dict[str, mlir.LoweringRule] = {}
      for i, ps in enumerate(platforms):
          rule = partial(lower_constant, i=i)
          for p in ps:
              platform_rules[p] = rule
  
      default_rule = (
          partial(lower_constant, i=len(platforms))
          if has_default
          else None
      )
      return mlir.lower_per_platform(
          ctx,
          f"platform_index(platforms={platforms}, has_default={has_default})",
          platform_rules,
          default_rule,
          effects.no_effects,
      )
  
imports: from __future__ import annotations
  import collections
  from collections.abc import Sequence
  import functools
  from functools import partial
  import inspect
  import itertools
  import operator
  from typing import Any, Callable, TypeVar
  from jax.tree_util import tree_flatten, tree_unflatten
  from jax._src import ad_util
  from jax._src import config
  from jax._src import core
  from jax._src import dispatch
  from jax._src import dtypes
  from jax._src import effects
  from jax._src import linear_util
  from jax._src import source_info_util
  from jax._src import util
  from jax._src.state.discharge import register_discharge_rule, discharge_state
  from jax._src.state.types import AbstractRef, RefEffect
  from jax._src.core import ConcreteArray, raise_to_shaped, replace_jaxpr_effects
  from jax._src.interpreters import ad
  from jax._src.interpreters import batching
  from jax._src.interpreters import mlir
  from jax._src.interpreters import partial_eval
  from jax._src.interpreters import xla
  from jax._src.lax import lax
  from jax._src.traceback_util import api_boundary
  from jax._src.util import safe_map, split_list, partition_list
  from jax._src.lib.mlir import ir
  from jax._src.lib.mlir.dialects import hlo
  import numpy
  from jax._src.lax.control_flow.common import _abstractify, _avals_short, _check_tree_and_avals, _initial_style_jaxprs_with_common_consts, _make_closed_jaxpr, _prune_zeros, _typecheck_param
label_desc: Use image node_id 27 for calling a global function with example usage: _platform_index_lowering(ctx) and returns: mlir, mlir