code: def testMinimizePeakMemoryList(self):
      mtf_graph = mtf.Graph()
      mesh = mtf.Mesh(mtf_graph, "my_mesh")
      x = mtf.Constant(
          mesh,
          0,
          shape=mtf.convert_to_shape("a:3,b:4"),
          dtype=tf.int32,
          name="X",
      ).outputs[0]
      y = mtf.Constant(
          mesh,
          0,
          shape=mtf.convert_to_shape("b:4,c:5"),
          dtype=tf.int32,
          name="Y",
      ).outputs[0]
      mtf.EinsumOperation(
          [x, y], mtf.convert_to_shape("a:3,b:4,c:5"), name="Z"
      )
      w = mtf.EinsumOperation(
          [x, y], mtf.convert_to_shape("a:3,c:5"), name="W"
      ).outputs[0]
      mtf.BroadcastOperation(
          w, mtf.convert_to_shape("a:3,b:4,c:5"), name="V"
      )
  
      graph = graph_interface.GraphInterface(mtf_graph)
      graph.set_tensor_final("Z:0")
      graph.set_tensor_final("V:0")
      schedule = list(scheduler.minimize_peak_memory(graph, "LIST"))
  
      # List Scheduler prefers to schedule things that free the most memory.
      # When nothing is scheduled:
      #   X frees -12 entries.
      #   Y frees -20 entries.
      # After [X] scheduled:
      #   Y frees -20 entries.
      # After [X, Y] scheduled:
      #   Z frees -60 entries.
      #   W frees -15 entries.
      # After [X, Y, W] scheduled:
      #   Z frees -28 entries.
      #   V frees -45 entries.
      # Hence the schedule should be [X, Y, W, Z, V].
      self.assertEqual(schedule, [0, 1, 3, 2, 4])
  
file_path: mesh/mesh_tensorflow/auto_mtf/scheduler_test.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from absl.testing import parameterized
  import mesh_tensorflow
  from mesh_tensorflow.auto_mtf import graph_interface
  from mesh_tensorflow.auto_mtf import scheduler
  import tensorflow.compat.v1
label_desc: Use image node_id 2 for calling the SchedulerTest obj's underlying member method code with example usage: obj.testMinimizePeakMemoryList() without return types