code: def __init__(
      self, vocab, hidden_size, latent_size, depth, stereo=True
  ):
      super(JTNNVAEBO, self).__init__()
      self.vocab = vocab
      self.hidden_size = hidden_size
      self.latent_size = latent_size
      self.depth = depth
  
      self.embedding = nn.Embedding(vocab.size(), hidden_size)
      self.jtnn = JTNNEncoderBO(vocab, hidden_size, self.embedding)
      self.jtmpn = JTMPN(hidden_size, depth)
      self.mpn = MPN(hidden_size, depth)
      self.decoder = JTNNDecoderBO(
          vocab, hidden_size, latent_size / 2, self.embedding
      )
  
      self.T_mean = nn.Linear(hidden_size, latent_size / 2)
      self.T_var = nn.Linear(hidden_size, latent_size / 2)
      self.G_mean = nn.Linear(hidden_size, latent_size / 2)
      self.G_var = nn.Linear(hidden_size, latent_size / 2)
  
      self.assm_loss = nn.CrossEntropyLoss(size_average=False)
      self.use_stereo = stereo
      if stereo:
          self.stereo_loss = nn.CrossEntropyLoss(size_average=False)
  
imports: import torch
  import torch.nn
  from .mol_tree import Vocab, MolTree
  from .nnutils import create_var
  from .jtnn_enc_bo import JTNNEncoderBO
  from .jtnn_dec import JTNNDecoder
  from .mpn import MPN, mol2graph
  from .jtmpn import JTMPN
  from .chemutils import enum_assemble, set_atommap, copy_edit_mol, attach_mols, atom_equal, decode_stereo
  import rdkit
  import rdkit.Chem
  from rdkit import DataStructs
  from rdkit.Chem import AllChem
  import copy
  import math
label_desc: Use image node_id 1 to create a new JTNNVAEBO object from inherited base classes: nn with example: obj = JTNNVAEBO(vocab, hidden_size, latent_size, depth, stereo)