def infer_attributes(self, implications):
_LOGGER.log(<NUM_LIT:5>, "<STR_LIT>".<EOL>format(implications))<EOL>if not implications:<EOL><INDENT>return<EOL><DEDENT>for implier_name, implied in implications.items():<EOL><INDENT>_LOGGER.debug(<EOL>"<STR_LIT>", implier_name)<EOL>try:<EOL><INDENT>implier_value = self[implier_name]<EOL><DEDENT>except KeyError:<EOL><INDENT>_LOGGER.debug("<STR_LIT>", implier_name)<EOL>continue<EOL><DEDENT>try:<EOL><INDENT>implied_value_by_column = implied[implier_value]<EOL>_LOGGER.debug("<STR_LIT>",<EOL>implier_name, implier_value,<EOL>str(implied_value_by_column))<EOL>for colname, implied_value inimplied_value_by_column.items():<EOL><INDENT>_LOGGER.log(<NUM_LIT:5>, "<STR_LIT>",<EOL>colname, implied_value)<EOL>self.__setitem__(colname, implied_value)<EOL><DEDENT><DEDENT>except KeyError:<EOL><INDENT>_LOGGER.log(<EOL><NUM_LIT:5>, "<STR_LIT>",<EOL>implier_name, implier_value)<EOL><DEDENT><DEDENT>
Infer value for additional field(s) from other field(s).

Add columns/fields to the sample based on values in those already-set
that the sample's project defines as indicative of implications for
additional data elements for the sample.

:param Mapping implications: Project's implied columns data
:return None: this function mutates state and is strictly for effect