def METHOD_NAME(arguments, connection):
  total_columns = arguments.input_count + arguments.output_count + arguments.unused_count
  # Create some random data using a gaussian distribution.
  numpy.random.seed(arguments.seed)
  data = numpy.random.normal(size=(arguments.row_count, total_columns))
  # Force a somewhat-linear relationship between the inputs and outputs.
  for i in range(arguments.input_count, arguments.input_count + min(arguments.input_count, arguments.output_count)):
    data[:, i] = data[:, 0] ** i
  # Optionally make some columns constant.
  for i in range(arguments.constant_input_count):
    data[:,i] = data[0,i]
  for i in range(arguments.input_count, arguments.input_count + arguments.constant_output_count):
    data[:,i] = data[0,i]
  # Optionally duplicate some columns to create rank-deficient data.
  for i in range(1, 1 + arguments.duplicate_input_count):
    data[:,i] = data[:,0]
  for i in range(1 + arguments.input_count, 1 + arguments.input_count + arguments.duplicate_output_count):
    data[:,i] = data[:, arguments.input_count]
  # Create a new project to contain our model.
  pid = connection.find_or_create_project(arguments.project_name)
  # Create the new, empty model.
  mid = connection.post_project_models(pid, "cca", arguments.model_name, arguments.marking)
  # Upload our observations as "data-table".
  connection.put_model_arrayset(mid, "data-table")
  # Start our single "data-table" array.
  dimensions = [dict(name="row", end=arguments.row_count)]
  attributes = [dict(name="%s%s" % (arguments.column_prefix, column), type="float64") for column in range(total_columns)]
  connection.put_model_arrayset_array(mid, "data-table", 0, dimensions, attributes)
  # Upload data into the array.
  for i in range(total_columns):
    connection.put_model_arrayset_data(mid, "data-table", "0/%s/..." % i, [data.T[i]])
  # Store the remaining parameters.
  connection.put_model_parameter(mid, "input-columns", list(range(0, arguments.input_count)))
  connection.put_model_parameter(mid, "output-columns", 
    list(range(arguments.input_count, arguments.input_count + arguments.output_count)))
  connection.put_model_parameter(mid, "scale-inputs", False)
  # Signal that we're done uploading data to the model.  This lets Slycat Web
  # Server know that it can start computation.
  connection.post_model_finish(mid)
  # Wait until the model is ready.
  connection.join_model(mid)
  # Supply the user with a direct link to the new model.
  host = arguments.host
  if arguments.port:
      host = host + ":" + arguments.port
  slycat.web.client.log.info("Your new model is located at %s/models/%s" % (host, mid))
  return mid