Split original weights into self_weight (float) and neighbor_weights (dict[int, float]), so that the definition of neighbor inside the topology is consistent to the one of neighbor weights here.
Remove update_weights, and replace it with reset. The neighbor tensor to be reset is specified through neighbor_weights.
Ignore self_neighbor and reset value when neighbor_weights is not provided.
TODO: weight definition in the topology might require change as well.
TODO: weight definition in the topology might require change as well.