class_docstr: Mixin class providing convenience methods for column expansion.
docstr: Tabu nodes are:
      1. all user defined connections to original feature column
  
  Args:
      idx_group: The group of indices which correspond to a single
      expanded column.
  
      tabu_nodes: The list of tabu_nodes to be updated.
  
  Returns:
      Updated tabu_nodes
docstr_tok: ["Tabu","nodes","are",":","1.","all","user","defined","connections","to","original","feature","column","Args",":","idx_group",":","The","group","of","indices","which","correspond","to","a","single","expanded","column",".","tabu_nodes",":","The","list","of","tabu_nodes","to","be","updated",".","Returns",":","Updated","tabu_nodes"]
code: def update_tabu_nodes(
      idx_group: List[int], tabu_nodes: List[int]
  ) -> List[Tuple[int, int]]:
      """
      Tabu nodes are:
          1. all user defined connections to original feature column
  
      Args:
          idx_group: The group of indices which correspond to a single
          expanded column.
  
          tabu_nodes: The list of tabu_nodes to be updated.
  
      Returns:
          Updated tabu_nodes
      """
      if tabu_nodes is None:
          return tabu_nodes
  
      # copy to prevent mutations
      tabu_nodes = deepcopy(tabu_nodes)
  
      new_tabu_nodes = []
      for i in tabu_nodes:
          # NOTE: the first element in the idx_group is guaranteed as self.idx
          if i == idx_group[0]:
              new_tabu_nodes += idx_group[1:]
      # add on the new tabu nodes
      tabu_nodes += new_tabu_nodes
      return tabu_nodes
  
imports: import itertools
  from abc import ABCMeta, abstractmethod
  from copy import deepcopy
  from typing import Dict, List, Tuple
  import numpy
  import torch
  from causalnex.structure.structuremodel import StructureModel
label_desc: Use image node_id 3 for calling the ExpandColumnsMixin obj's underlying member method code with example usage: obj.update_tabu_nodes(idx_group, tabu_nodes) and returns: tabu_nodes, tabu_nodes