code: def parse_sdf(sdf):
      sdf_out = {}
      sdf = sdf.split("\n")
      (
          sdf_out["name"],
          sdf_out["details"],
          sdf_out["comment"],
      ) = _parse_header(sdf)
      sdf_out["n_atoms"], sdf_out["n_bonds"] = _parse_counts_line(sdf)
      sdf_out["atoms"] = _parse_atoms_block(sdf, sdf_out["n_atoms"])
      sdf_out["bonds"] = _parse_bonds_block(
          sdf, sdf_out["n_atoms"], sdf_out["n_bonds"]
      )
      sdf_out["properties"] = _parse_properties(
          sdf, sdf_out["n_atoms"], sdf_out["n_bonds"]
      )
      sdf_out["data"] = _parse_data_fields(sdf)
      return sdf_out
  
imports: import ast
  import sys
  import joblib
  import networkx
  import numpy
  import pandas
  import scipy.sparse
  from spektral.data.graph import Graph
label_desc: Use image node_id 20 for calling a global function with example usage: parse_sdf(sdf) and returns: sdf_out