docstr: Since cost is used as a tie-breaker
  and is an optimization for inference time
  we will punt on it for now. Instead we
  will just use the assumption that all
  variables in X and Y are binary and thus
  use a weight of 2.
  TODO: come back to this and compute
  actual weights
docstr_tok: ["Since","cost","is","used","as","a","tie-breaker","and","is","an","optimization","for","inference","time","we","will","punt","on","it","for","now",".","Instead","we","will","just","use","the","assumption","that","all","variables","in","X","and","Y","are","binary","and","thus","use","a","weight","of","2",".","TODO",":","come","back","to","this","and","compute","actual","weights"]
code: def cost(self):
      """Since cost is used as a tie-breaker
      and is an optimization for inference time
      we will punt on it for now. Instead we
      will just use the assumption that all
      variables in X and Y are binary and thus
      use a weight of 2.
      TODO: come back to this and compute
      actual weights
      """
      return 2 ** len(self.X.nodes) + 2 ** len(self.Y.nodes)
  
imports: import copy
  import heapq
  import logging
  from collections import defaultdict
  from io import StringIO
  from itertools import combinations, product
  from random import choice, random
  from .exceptions import VariableNotInGraphError, VariableValueNotInDomainError
  from .graph import Node, UndirectedGraph, UndirectedNode, connect
  from .utils import get_args, get_original_factors
label_desc: Use image node_id 3 for calling the SepSet obj's underlying member method code with example usage: obj.cost() and returns: unknown