code: def test_memory_release_shuffle(shutdown_only):
      # TODO(ekl) why is this flaky? Due to eviction delay?
      error = None
      for trial in range(3):
          print("Try", trial)
          try:
              info = ray.init(num_cpus=1, object_store_memory=1800e6)
              ds = ray.data.range(10)
  
              # Should get fused into single stage.
              ds = ds.map(
                  lambda x: {
                      "data": np.ones(100 * 1024 * 1024, dtype=np.uint8)
                  }
              )
              ds.random_shuffle().materialize()
              meminfo = memory_summary(
                  info.address_info["address"], stats_only=True
              )
              assert "Spilled" not in meminfo, meminfo
              return
          except Exception as e:
              error = e
              print("Failed", e)
          finally:
              ray.shutdown()
      raise error
  
imports: import os
  from typing import List
  import numpy
  import pandas
  import pytest
  import ray
  from ray._private.internal_api import memory_summary
  from ray.data import Dataset
  from ray.data.block import BlockMetadata
  from ray.data.context import DataContext
  from ray.data.datasource import Datasource, ReadTask
  from ray.data.datasource.csv_datasource import CSVDatasource
  from ray.data.tests.util import column_udf, extract_values
  from ray.tests.conftest import *
label_desc: Use image node_id 5 for calling a global function with example usage: test_memory_release_shuffle(shutdown_only) without return types