code: def encode_from_smiles(self, smiles_list):
      tree_batch = [MolTree(s) for s in smiles_list]
      _, jtenc_holder, mpn_holder = tensorize(
          tree_batch, self.vocab, assm=False
      )
      tree_vecs, _, mol_vecs = self.encode(jtenc_holder, mpn_holder)
      return torch.cat([tree_vecs, mol_vecs], dim=-1)
  
imports: import copy
  import math
  import torch
  import torch.nn
  import torch.nn.functional
  import rdkit
  import rdkit.Chem
  from .mol_tree import MolTree
  from .nnutils import create_var
  from .jtnn_enc import JTNNEncoder
  from .jtnn_dec import JTNNDecoder
  from .mpn import MPN
  from .jtmpn import JTMPN
  from .datautils import tensorize
  from .chemutils import enum_assemble, set_atommap, copy_edit_mol, attach_mols
label_desc: Use image node_id 3 for calling the JTNNVAE obj's underlying member method code with example usage: obj.encode_from_smiles(smiles_list) and returns: torch