Class: Chemicalml::Convention::Molecular::Constraints::BondAtomRefs2ShouldBeDistinct

Inherits:
Constraint::NodeConstraint show all
Defined in:
lib/chemicalml/convention/molecular/constraints/bond_atom_refs2_should_be_distinct.rb

Overview

A <bond>'s atomRefs2 SHOULD reference two distinct atom ids. A self-bond (a1 a1) is chemically meaningless. Warning severity — there are edge cases in non-classical chemistry (e.g. agostic interactions).

Instance Method Summary collapse

Methods inherited from Constraint::NodeConstraint

#check

Instance Method Details

#check_node(node, _path) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/chemicalml/convention/molecular/constraints/bond_atom_refs2_should_be_distinct.rb', line 15

def check_node(node, _path)
  ids = parse_refs(node.atom_refs2)
  return [] if ids.size < 2
  return [] if ids.uniq.size == ids.size

  duplicates = ids.group_by { |i| i }.select { |_, v| v.size > 1 }.keys
  [violation(path: yield_path(node),
             message: "bond #{node.id.inspect} atomRefs2 should reference two distinct atoms; " \
                      "duplicate ids: #{duplicates.inspect}",
             severity: :warning,
             value: node.atom_refs2)]
end