def METHOD_NAME(self, new_config):
    # Configure top level
    for key, config_val in new_config.items():
        if key not in self.config:
            AssertionError("Gave bad config...")
        else:
            self.config[key] = config_val
    # Configure children
    for i in range(self.interconnect_output_ports):
        addr_gen_config = {}
        addr_gen_config["starting_addr"] = self.config[f"address_gen_{i}_starting_addr"]
        addr_gen_config["dimensionality"] = self.config[f"address_gen_{i}_dimensionality"]
        for j in range(self.iterator_support):
            addr_gen_config[f"strides_{j}"] = self.config[f"address_gen_{i}_strides_{j}"]
            addr_gen_config[f"ranges_{j}"] = self.config[f"address_gen_{i}_ranges_{j}"]
        self.addr_gens[i].METHOD_NAME(addr_gen_config)