def METHOD_NAME():
  node_feature_mat_size = NUM_VERTICES * NUM_FEATS
  edge_index_mat_size = NUM_EDGES * 2
  targets = 10
  slice_points = [0,
                  node_feature_mat_size,
                  node_feature_mat_size + edge_index_mat_size,
                  node_feature_mat_size + edge_index_mat_size + targets]
  if DISTCONV_ENABLED:
    node_ft_dims = [NUM_VERTICES, NUM_FEATS, 1]
    source_ind_dims = [NUM_EDGES, 1, 1]
    target_ind_dims = [NUM_EDGES, 1, 1]
  else:
    node_ft_dims = [NUM_VERTICES, NUM_FEATS]
    source_ind_dims = [NUM_EDGES, 1]
    target_ind_dims = [NUM_EDGES, 1]
  _inputs = lbann.Input(data_field='samples')
  sliced_inputs = lbann.Slice(_inputs, slice_points=slice_points)
  node_features = lbann.Reshape(lbann.Identity(sliced_inputs), dims=node_ft_dims, name='node_feature_matrix')
  edge_indices = lbann.Reshape(lbann.Identity(sliced_inputs), dims=[2, NUM_EDGES])
  targets = lbann.Identity(sliced_inputs)
  sliced_indices = lbann.Slice(edge_indices, axis=0, slice_points=[NUM_EDGES])
  source_indices = lbann.Reshape(lbann.Identity(sliced_indices), dims=source_ind_dims)
  target_indices = lbann.Reshape(lbann.Identity(sliced_indices), dims=target_ind_dims)
  if DISTCONV_ENABLED:
    x = lbann.ChannelwiseFullyConnected(node_features, parallel_strategy=create_parallel_strategy(NUM_NODES))
    x = lbann.Relu(x, parallel_strategy=create_parallel_strategy(NUM_NODES))
    x = lbann.Gather(x, source_indices, parallel_strategy=create_parallel_strategy(NUM_NODES))
    x = lbann.Scatter(x, target_indices, dims=node_ft_dims, parallel_strategy=create_parallel_strategy(NUM_NODES))
  else:
    x = lbann.ChannelwiseFullyConnected(node_features)
    x = lbann.Relu()
    x = lbann.Gather(x, source_indices)
    x = lbann.Scatter(x, target_indices, dims=node_ft_dims)
  average_vector = lbann.Constant(value=1 / NUM_VERTICES, num_neurons=[1, NUM_VERTICES], name="Average_Vector")
  x = lbann.MatMul(average_vector, x, name="Node_Feature_Reduction")
  x = lbann.FullyConnected(x, num_neurons=targets)
  probs = lbann.Softmax(x, name="Softmax")
  loss = lbann.CrossEntropy(probs, targets, name="Cross_Entropy_Loss")
  print_model = lbann.CallbackPrintModelDescription()  # Prints initial Model after Setup
  gpu_usage = lbann.CallbackGPUMemoryUsage()
  callbacks = [print_model, gpu_usage]
  model = lbann.Model(NUM_EPOCHS,
                      layers=lbann.traverse_layer_graph(_inputs),
                      objective_function=loss,
                      callbacks=callbacks)
  opt = lbann.SGD(learn_rate=1e-3)
  data_reader = make_data_reader()
  trainer = lbann.Trainer(mini_batch_size=MINI_BATCH_SIZE)
  kwargs = lbann.contrib.args.get_scheduler_kwargs(args)
  lbann.contrib.launcher.run(trainer, model, data_reader, opt, **kwargs)