The features for each type of atom or bond are learned while training the machine learning model. Messages are produced by summing over the product of atom and bond features of each neighboring atom. Features are updated using a gated recurrent unit (GRU) module, which generates the new atom features considering both the new message and all previous feature values for that atom. We apply the message and update functions 6 times. After these layers we generate a set of features for each atom that reflect its properties and those of up to the sixth-nearest neighbors.