def test_split_file_odd(create_dummy_file): filename, split_files = create_dummy_file("\n".join(list("abcdefg"))) split_file(filename, 3) read_lines = [] for filename in split_files: assert os.path.exists(filename) with open(filename, "r") as fileobj: read_lines.append(fileobj.read()) assert read_lines[0] == "a\nb\nc" assert read_lines[1] == "d\ne" assert read_lines[2] == "f\ng"
def _multiprocess_smiles(args: argparse.Namespace) -> None: def create_cmd(index, filename): cmd_args = [ "aizynthcli", "--smiles", filename, "--config", args.config, "--output", hdf_files[index - 1], ] if args.policy: cmd_args.extend(["--policy", args.policy]) if args.stocks: cmd_args.append("--stocks") cmd_args.extend(args.stocks) if args.cluster: cmd_args.append("--cluster") return cmd_args if not os.path.exists(args.smiles): raise ValueError( "For multiprocessing execution the --smiles argument needs to be a filename" ) setup_logger(logging.INFO) filenames = split_file(args.smiles, args.nproc) hdf_files = [tempfile.mktemp(suffix=".hdf") for _ in range(args.nproc)] start_processes(filenames, "aizynthcli", create_cmd) if not all(os.path.exists(filename) for filename in hdf_files): raise FileNotFoundError( "Not all output files produced. Please check the individual log files: 'aizynthcli*.log'" ) cat_hdf_files(hdf_files, args.output or "output.hdf5")