code: def _csrlsvqr_hlo(
      platform,
      gpu_solver,
      dtype,
      data,
      indices,
      indptr,
      b,
      tol,
      reorder,
  ):
      """Sparse solver via QR decomposition. CUDA only."""
      b_type = ir.RankedTensorType(b.type)
      data_type = ir.RankedTensorType(data.type)
  
      n = b_type.shape[0]
      nnz = data_type.shape[0]
      opaque = gpu_solver.build_csrlsvqr_descriptor(
          np.dtype(dtype), n, nnz, reorder, tol
      )
  
      out = custom_call(
          f"{platform}solver_csrlsvqr",  # call_target_name
          result_types=[b.type],
          operands=[data, indptr, indices, b],
          backend_config=opaque,  # backend_config
          operand_layouts=[(0,), (0,), (0,), (0,)],  # operand_layouts
          result_layouts=[(0,)],  # result_layouts
      ).results
      return out
  
file_path: jax/jaxlib/gpu_solver.py
imports: from collections.abc import Sequence
  from functools import partial
  import importlib
  import math
  import jaxlib.mlir.ir
  import jaxlib.mlir.dialects.stablehlo
  import numpy
  from .gpu_common_utils import GpuLibNotLinkedError
  from jaxlib import xla_client
  from .hlo_helpers import DimensionSize, ShapeTypePair, mk_result_types_and_shapes, custom_call, ensure_hlo_s32, hlo_s32, dense_int_array
label_desc: Use image node_id 5 for calling a global function with example usage: _csrlsvqr_hlo(platform, gpu_solver, dtype, data, indices, indptr, b, tol, reorder) and returns: out