rdkit.VLib.Filter module — The RDKit 2025.09.6 documentation

# rdkit.VLib.Filter module

class rdkit.VLib.Filter.FilterNode(func=None, negate=0, **kwargs)

  Bases: `VLibNode`

  base class for nodes which filter their input

  Assumptions:

  > - filter function takes a number of arguments equal to the number of inputs we have. It returns a bool

  > - inputs (parents) can be stepped through in lockstep

  > - we return a tuple if there’s more than one input

  Usage Example:

  >     >>> from rdkit.VLib.Supply import SupplyNode
  >     >>> def func(a,b):
  >     ...   return a+b < 5
  >     >>> filt = FilterNode(func=func)
  >     >>> suppl1 = SupplyNode(contents=[1,2,3,3])
  >     >>> suppl2 = SupplyNode(contents=[1,2,3,1])
  >     >>> filt.AddParent(suppl1)
  >     >>> filt.AddParent(suppl2)
  >     >>> v = [x for x in filt]
  >     >>> v
  >     [(1, 1), (2, 2), (3, 1)]
  >     >>> filt.reset()
  >     >>> v = [x for x in filt]
  >     >>> v
  >     [(1, 1), (2, 2), (3, 1)]
  >     >>> filt.Destroy()

  > Negation is also possible:

  >     >>> filt = FilterNode(func=func,negate=1)
  >     >>> suppl1 = SupplyNode(contents=[1,2,3,3])
  >     >>> suppl2 = SupplyNode(contents=[1,2,3,1])
  >     >>> filt.AddParent(suppl1)
  >     >>> filt.AddParent(suppl2)
  >     >>> v = [x for x in filt]
  >     >>> v
  >     [(3, 3)]
  >     >>> filt.Destroy()

  > With no function, just return the inputs:

  >     >>> filt = FilterNode()
  >     >>> suppl1 = SupplyNode(contents=[1,2,3,3])
  >     >>> filt.AddParent(suppl1)
  >     >>> v = [x for x in filt]
  >     >>> v
  >     [1, 2, 3, 3]
  >     >>> filt.Destroy()

  Negate()
  SetNegate(state)
  next()

    part of the iterator interface

    raises StopIteration on failure