code: def createNetwork(dataSource):
    
    with open(_PARAMS_PATH, "r") as f:
      modelParams = yaml.safe_load(f)["modelParams"]
  
    # Create a network that will hold the regions.
    network = Network()
  
    # Add a sensor region.
    network.addRegion("sensor", "py.RecordSensor", '{}')
  
    # Set the encoder and data source of the sensor region.
    sensorRegion = network.regions["sensor"].getSelf()
    sensorRegion.encoder = createEncoder(modelParams["sensorParams"]["encoders"])
    sensorRegion.dataSource = dataSource
  
    # Make sure the SP input width matches the sensor region output width.
    modelParams["spParams"]["inputWidth"] = sensorRegion.encoder.getWidth()
  
    # Add SP and TM regions.
    network.addRegion("SP", "py.SPRegion", json.dumps(modelParams["spParams"]))
    network.addRegion("TM", "py.TMRegion", json.dumps(modelParams["tmParams"]))
  
    # Add a classifier region.
    clName = "py.%s" % modelParams["clParams"].pop("regionName")
    network.addRegion("classifier", clName, json.dumps(modelParams["clParams"]))
  
    # Add all links
    createSensorToClassifierLinks(network, "sensor", "classifier")
    createDataOutLink(network, "sensor", "SP")
    createFeedForwardLink(network, "SP", "TM")
    createFeedForwardLink(network, "TM", "classifier")
    # Reset links are optional, since the sensor region does not send resets.
    createResetLink(network, "sensor", "SP")
    createResetLink(network, "sensor", "TM")
  
    # Make sure all objects are initialized.
    network.initialize()
  
    return network
docs: Create and initialize a network.