def createL2456Columns(network, networkConfig):
  """
  Create a network consisting of multiple L2456 columns as described in
  the file comments above.
  """

  # Create each column
  numCorticalColumns = networkConfig["numCorticalColumns"]
  for i in xrange(numCorticalColumns):
    networkConfigCopy = copy.deepcopy(networkConfig)
    randomSeedBase = networkConfigCopy["randomSeedBase"]
    networkConfigCopy["L2Params"]["seed"] = randomSeedBase + i
    networkConfigCopy["L4Params"]["seed"] = randomSeedBase + i
    networkConfigCopy["L5Params"]["seed"] = randomSeedBase + i
    networkConfigCopy["L6Params"]["seed"] = randomSeedBase + i
    networkConfigCopy["L2Params"][
      "numOtherCorticalColumns"] = numCorticalColumns - 1
    networkConfigCopy["L5Params"][
      "numOtherCorticalColumns"] = numCorticalColumns - 1

    suffix = "_" + str(i)
    network = _createL2456Column(network, networkConfigCopy, suffix)

  # Now connect the L2 columns laterally to every other L2 column, and
  # the same for L5 columns.
  for i in range(networkConfig["numCorticalColumns"]):
    suffixSrc = "_" + str(i)
    for j in range(networkConfig["numCorticalColumns"]):
      if i != j:
        suffixDest = "_" + str(j)
        network.link(
            "L2Column" + suffixSrc, "L2Column" + suffixDest,
            "UniformLink", "",
            srcOutput="feedForwardOutput", destInput="lateralInput")
        network.link(
            "L5Column" + suffixSrc, "L5Column" + suffixDest,
            "UniformLink", "",
            srcOutput="feedForwardOutput", destInput="lateralInput")

  enableProfiling(network)

  return network
Create a network consisting of multiple L2456 columns as described in
  the file comments above.