Giter Site home page Giter Site logo

janus's Issues

multiprocessing in windows

Hi.
I was run the code, but I met errors in all codes that used multiprocessing.
As I know these errors came from the difference of OS.

Since I use Windows, I wonder how to correct the code for Windows.

Thanks.

Enquiring on multi-objective fitness function

Hi, I would like to ask if there are multiple objectives which I want the fitness function to fulfil, how would I write out the function because the example on the README.md is only for one objective (logP)?

Thank you! :D

freeze_support runtime error with provided example

Hello, I'm trying out JANUS and if I just run the example inside the tests as provided I get

  File "/Users/nsofroniew/opt/anaconda3/envs/chem/lib/python3.9/multiprocessing/spawn.py", line 134, in _check_not_importing_main
    raise RuntimeError('''
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

This can be fixed by wrapping the creation and running of the JANUS agent and inside

if __name__ == '__main__':
    torch.multiprocessing.freeze_support()

see for a similar fix pytorch/pytorch#5858 (comment)

I'm happy to submit a PR to fix if you like - it will be very simple

error in numpy/ list multiplication inside mutate_smi_list

Hello, I am trying to run the provided example, but get the following error

$ python ./example.py
    Unique and valid fragments generated: 107308
    Unique and valid fragments generated: 107308
On generation 0/200
/Users/nsofroniew/opt/anaconda3/envs/chem/lib/python3.9/site-packages/janus/janus.py:457: RuntimeWarning: overflow encountered in power
  prob_ = 1.0 / (3.0 ** ((F_50_val - fitness) / (F_50_val - F_25_val)) + 1)
    (Explr) Top Fitness: 15.811199999999957
    (Explr) Top Smile: CCCCCCCCCCCCCCCCOP(=O)(O)Oc1ccc(C=Cc2ccc(OP(=O)(O)OCCCCCCCCCCCCCCCC)cc2)cc1
Traceback (most recent call last):
  File "/Users/nsofroniew/Documents/code/chem/janus/tests/./example.py", line 81, in <module>
  File "/Users/nsofroniew/opt/anaconda3/envs/chem/lib/python3.9/site-packages/janus/janus.py", line 317, in run
    mut_smi_loc = self.mutate_smi_list(smiles_local_search, "local")
  File "/Users/nsofroniew/opt/anaconda3/envs/chem/lib/python3.9/site-packages/janus/janus.py", line 137, in mutate_smi_list
    smi_list = smi_list * num_random_samples
numpy.core._exceptions._UFuncNoLoopError: ufunc 'multiply' did not contain a loop with signature matching types (dtype('<U98'), dtype('int64')) -> None

It looks like smi_list has become a numpy array, which is unintended and it should be a list. This can be fixed by making this line

smi_list = smi_list * num_random_samples
be

    smi_list = list(smi_list) * num_random_samples

There could be other, more desirable fixes that avoid this problem altogether. I am happy to submit a PR if this fix is desired though.

Save all molecules from each generation

I am running the experiments for N generations but the model only gives the generated molecules of N-th generation. How can I also save the molecules from previous generation?

Unhandled exceptions and KeyError

I tried running JANUS.py but got a number of exceptions. In addition, the script terminated with a KeyError.

Initial population obtained!
Forming Fragments!
    Fragment creation: 0/10000
    Fragment creation: 1000/10000
    Fragment creation: 2000/10000
    Fragment creation: 3000/10000
    Fragment creation: 4000/10000
    Fragment creation: 5000/10000
    Fragment creation: 6000/10000
    Fragment creation: 7000/10000
    Fragment creation: 8000/10000
    Fragment creation: 9000/10000
Process Process-5:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 205, in calc_parr_prop
    props_collect[property_name][smile] = get_prop_material(smile, alphabet=alphabet, num_random_samples=num_random_samples, num_mutations=num_mutations)  # TODO: TESTING
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in get_prop_material
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in 
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 59, in decoder
    rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 147, in _derive_mol_from_symbols
    _raise_decoder_error(selfies, symbol)
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 179, in _raise_decoder_error
    raise DecoderError(err_msg)
selfies.exceptions.DecoderError: invalid symbol '[Branch3_1]'
	SELFIES: [S][C][=N][N][=C][Branch1][Ring1][C][C][C][Branch1][#Branch1][O][C][Branch1][C][C][=O][C][Branch1][C][C][Branch1][C][C][C][N][N][N][Branch3_1][C][C][=C][=C][Branch1][C][N][C][=C][Ring1][#Branch1][C][#Branch1][N]
Process Process-7:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 205, in calc_parr_prop
    props_collect[property_name][smile] = get_prop_material(smile, alphabet=alphabet, num_random_samples=num_random_samples, num_mutations=num_mutations)  # TODO: TESTING
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in get_prop_material
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in 
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 59, in decoder
    rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 124, in _derive_mol_from_symbols
    _raise_decoder_error(selfies, symbol)
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 179, in _raise_decoder_error
    raise DecoderError(err_msg)
selfies.exceptions.DecoderError: invalid symbol '[Expl=Ring3]'
	SELFIES: [C][Expl=Ring3][=C][Branch2][Ring1][=Branch1][C][=C][C][=C][Branch1][#C][C][=C][Ring1][=Branch1][C][=C][C][=C][C][=C][Ring1][=Branch1][Ring1][=C][F][C][Branch1][C][C][C][C][C][N][Branch1][=Branch2][S][Branch1][C][C][=Branch1][C][=O][=O][C][C][Ring1][#Branch2][C][N][Branch1][Branch1][C][C][C][C][C][C][C][C]
Process Process-4:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 205, in calc_parr_prop
    props_collect[property_name][smile] = get_prop_material(smile, alphabet=alphabet, num_random_samples=num_random_samples, num_mutations=num_mutations)  # TODO: TESTING
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in get_prop_material
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in 
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 59, in decoder
    rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 116, in _derive_mol_from_symbols
    init_state=binit_state, root_atom=prev_atom, rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 147, in _derive_mol_from_symbols
    _raise_decoder_error(selfies, symbol)
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 179, in _raise_decoder_error
    raise DecoderError(err_msg)
selfies.exceptions.DecoderError: invalid symbol '[Branch1_3]'
	SELFIES: [C][C][=C][Branch1][=Branch1][C][C][=Ring1][=Branch1][Branch1_3][C][C][=C][C][=C][Branch1][C][C][=C][C][=C][Branch1][C][N][C][=N][Ring1][#Branch1][#Branch2][C][N][C][O][C][C][Ring1][=Branch1][C][Branch1][C][O][=C][C][=C][Ring1][=C][O][Ring1][P]
Process Process-6:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 205, in calc_parr_prop
    props_collect[property_name][smile] = get_prop_material(smile, alphabet=alphabet, num_random_samples=num_random_samples, num_mutations=num_mutations)  # TODO: TESTING
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in get_prop_material
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in 
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 59, in decoder
    rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 116, in _derive_mol_from_symbols
    init_state=binit_state, root_atom=prev_atom, rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 147, in _derive_mol_from_symbols
    _raise_decoder_error(selfies, symbol)
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 179, in _raise_decoder_error
    raise DecoderError(err_msg)
selfies.exceptions.DecoderError: invalid symbol '[Branch3_2]'
	SELFIES: [C][C][=Branch1][#C][=C][C][=C][C][=Ring1][=Branch1][C][Branch1][C][F][Branch1][C][F][F][C][C][Branch1][C][C][=N][N][C][=Branch1][C][C][C][N][C][C][C][Branch1][C][N][C][C][Ring1][#Branch1][C][O][=C][C][Branch1][O][C][Branch3_2][C][N][C][C][O][C][C][Ring1][=Branch1][=O]
Process Process-8:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 205, in calc_parr_prop
    props_collect[property_name][smile] = get_prop_material(smile, alphabet=alphabet, num_random_samples=num_random_samples, num_mutations=num_mutations)  # TODO: TESTING
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in get_prop_material
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in 
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 59, in decoder
    rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 116, in _derive_mol_from_symbols
    init_state=binit_state, root_atom=prev_atom, rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 116, in _derive_mol_from_symbols
    init_state=binit_state, root_atom=prev_atom, rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 147, in _derive_mol_from_symbols
    _raise_decoder_error(selfies, symbol)
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 179, in _raise_decoder_error
    raise DecoderError(err_msg)
selfies.exceptions.DecoderError: invalid symbol '[Branch2_1]'
	SELFIES: [C][=Branch1][C][=O][Branch1][C][O][C][N][C][=Branch1][C][=O][C][Branch2][Ring1][=Branch1][N][C][=Branch1][C][=O][C][Branch1][N][C][=C][C][=C][C][Branch2_1][Ring2][=N][Ring1][=Branch1][N][=N][O][C][Ring2][Ring1][C][S][C][C][=Ring2][Ring1][=Branch1][S][C][S][N][=C][Branch1][Ring2][N][=Ring1][Branch1][S][C][C][N]
Process Process-11:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 205, in calc_parr_prop
    props_collect[property_name][smile] = get_prop_material(smile, alphabet=alphabet, num_random_samples=num_random_samples, num_mutations=num_mutations)  # TODO: TESTING
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in get_prop_material
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in 
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 59, in decoder
    rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 147, in _derive_mol_from_symbols
    _raise_decoder_error(selfies, symbol)
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 179, in _raise_decoder_error
    raise DecoderError(err_msg)
selfies.exceptions.DecoderError: invalid symbol '[Branch2_3]'
	SELFIES: [C][C][=C][C][Branch1][=C][C][N][Branch1][C][C][N][C][=Branch1][C][=O][C][S][C][C][C][Ring1][#Branch1][=C][C][=Ring1][O][C][=C][C][=C][C][=C][Ring1][=Branch1][O][C][=C][Branch2_3][Branch1]
Process Process-10:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 205, in calc_parr_prop
    props_collect[property_name][smile] = get_prop_material(smile, alphabet=alphabet, num_random_samples=num_random_samples, num_mutations=num_mutations)  # TODO: TESTING
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in get_prop_material
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in 
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 59, in decoder
    rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 116, in _derive_mol_from_symbols
    init_state=binit_state, root_atom=prev_atom, rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 116, in _derive_mol_from_symbols
    init_state=binit_state, root_atom=prev_atom, rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 147, in _derive_mol_from_symbols
    _raise_decoder_error(selfies, symbol)
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 179, in _raise_decoder_error
    raise DecoderError(err_msg)
selfies.exceptions.DecoderError: invalid symbol '[Branch3_3]'
	SELFIES: [F][C][=C][C][=C][Branch2][Ring2][O][C][N][C][Branch2][Ring2][Ring2][C][Branch1][#C][C][C][=C][Branch1][=Branch2][C][=C][C][=C][C][=Branch1][C][=O][N][Branch1][C][C][Branch3_3][C][Branch1][C][F][C][=Ring1][#Branch1][F][=N][C][C][Ring1][C][N][C][C][N][C][C][Ring1][=Branch1][=C][=N][C][=Branch1][Branch1][=N][C][=Ring1][=Branch1][N][Branch1][C][C][C][=O][C][=C][Ring2][Ring1][=N]
Process Process-9:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 205, in calc_parr_prop
    props_collect[property_name][smile] = get_prop_material(smile, alphabet=alphabet, num_random_samples=num_random_samples, num_mutations=num_mutations)  # TODO: TESTING
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in get_prop_material
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in 
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 59, in decoder
    rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 116, in _derive_mol_from_symbols
    init_state=binit_state, root_atom=prev_atom, rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 116, in _derive_mol_from_symbols
    init_state=binit_state, root_atom=prev_atom, rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 147, in _derive_mol_from_symbols
    _raise_decoder_error(selfies, symbol)
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 179, in _raise_decoder_error
    raise DecoderError(err_msg)
selfies.exceptions.DecoderError: invalid symbol '[Branch3_3]'
	SELFIES: [C][C][Branch1][#Branch2][C][=C][C][=Branch1][Ring2][=C][=Branch1][F][=N][C][=C][Branch2][Ring2][Branch1][N][Branch1][Branch2][C][=N][C][Ring1][=Branch1][=Ring1][=C][N][=C][C][=C][C][=C][Branch1][P][C][=Branch1][Ring2][=C][Ring1][=Branch1][C][Branch3_3][C][N][=C][C][=C][C][=Ring1][=Branch1][O][C][O]
On generation 0/200
    (Explr) Top Fitness: 1.0
    (Explr) Top Smile: C=C1N=CC=C(N=CNc2ccc(N)cc2)N=C(C)[SH]1C
Process Process-27:
Traceback (most recent call last):
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 205, in calc_parr_prop
    props_collect[property_name][smile] = get_prop_material(smile, alphabet=alphabet, num_random_samples=num_random_samples, num_mutations=num_mutations)  # TODO: TESTING
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in get_prop_material
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/software/JANUS/mutate_parr.py", line 129, in 
    mutated_smiles = [decoder(x) for x in mutated_sf]
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 59, in decoder
    rings=rings
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 147, in _derive_mol_from_symbols
    _raise_decoder_error(selfies, symbol)
  File "/home/ubuntu/anaconda3/envs/reinvent.v3.2/lib/python3.7/site-packages/selfies/decoder.py", line 179, in _raise_decoder_error
    raise DecoderError(err_msg)
selfies.exceptions.DecoderError: invalid symbol '[Branch3_2]'
	SELFIES: [C][O][=C][N][C][N][C][=Branch1][C][=O][N][Branch1][=Branch1][N+1][=Branch1][C][=O][O-1][C][Ring1][=Branch2][N][Ring1][N][O][C][=C][C][C][N][C][N][C][N][C][=C][C][=C][Branch1][C][F][C][Branch1][C][F][=C][Ring1][Branch2][=N][C][Branch1][C][C][Branch3_2][Branch1][=Branch1][C][Branch1][C][C][=O][S][Ring1][=Branch2][=C][C][=Ring1][#Branch1][N][C][N][C][C][=C][C][=C][C][=C][Ring1][=Branch1][C][N][=C][Branch1][=C][SH1][Branch1][C][C][C][=C][C][=C][C][=C][Ring1][=Branch1][=Branch1][C][=C][N][=C][C][=Ring1][#Branch2][C]
Traceback (most recent call last):
  File "./JANUS.py", line 308, in 
    mut_smi_dict_local  = mut_smi_dict_local[population[top_idx]]
KeyError: 'C=C1N=CC=C(N=CNc2ccc(N)cc2)N=C(C)[SH]1C'

Creating same molecule across generations, what may be the problem?

Hi Janus team,

Very interesting algorithm. However, the algorithm seems to be stuck perhaps in only creating one kind of molecule for my starting data. I played with "81" as length max or "111" as max smiles length in example.py. Both options seem to be stuck in some kind of minima that it's spitting same molecule in RESULTS/generation_all_best.txt. Attached please find two generation_all_best.txt files, one from each filter. It keep generating same molecule at each generation.

With n=200 generations, I assumed we will have 200 different molecules. Can you please clarify what i should expect from the algorithm and what is the correct result file to look at? My results are below. 31 molecules generated so far with 81 length in example.py and 24 generated with 111 length in example.py. All look the same across generations and just seems to be long chains. Obviously, my starting structures are different from yours.

I have ~2400 molecules as starting structures and not sure what is the next step for me to be able to use JANUS. Should I use your starting structures and add mine to original 9999 structures to see better results?
Thanks so much,
JL
Email: [email protected]


With 81 length

Gen:0, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:1, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:2, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:3, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:4, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:5, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:6, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:7, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:8, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:9, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:10, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:11, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:12, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:13, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:14, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:15, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:16, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:17, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:18, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:19, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:20, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:21, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:22, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:23, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:24, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:25, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:26, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:27, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:28, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:29, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:30, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:31, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999


With 111 length:

Gen:0, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:1, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:2, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:3, CCCCCC=CCC=CCCCCCCCCN(CCCCCCCCC=CCC=CCCCCC)CCCNC(=O)c1cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)cc(C(=O)NCCCN(CCCCCCCCC=CCC=CCCCCC)CCCCCCCCC=CCC=CCCCCC)c1, 37.83329999999999
Gen:4, CCCCCCCCCCCCCCCCC=CCCCCCCCCCCCCCC(CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)CCSCCCCCCCCCC, 41.18149999999995
Gen:5, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC=CCCCCCCCCCCCCCCCCCSSCCCCCCCCC, 41.97379999999993
Gen:6, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC, 42.542899999999925
Gen:7, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC, 43.15699999999991
Gen:8, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC, 43.15699999999991
Gen:9, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC, 43.15699999999991
Gen:10, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC, 43.15699999999991
Gen:11, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC, 43.15699999999991
Gen:12, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC, 43.15699999999991
Gen:13, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC, 43.15699999999991
Gen:14, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC, 43.18139999999992
Gen:15, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSSSCCCCCCCCCCCC, 43.23609999999991
Gen:16, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSSSCCCCCCCCCCCC, 43.23609999999991
Gen:17, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCI, 43.519199999999906
Gen:18, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCI, 43.519199999999906
Gen:19, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCI, 43.519199999999906
Gen:20, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCI, 43.519199999999906
Gen:21, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCI, 43.519199999999906
Gen:22, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCI, 43.519199999999906
Gen:23, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSCCCCCCCSSSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCI, 43.5982999999999
Gen:24, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSSSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCI, 44.035399999999896

Question: How sensitive is the model to molecule initialization?

Hello, great work! I'm excited to try this out for a chemical design project I'm working on. One question that I had after reading the pre-print— how sensitive is the model to molecule initialization?

I read that you can start JANUS with random molecules or provide it with defined molecules. Did you perform any tests on what happens if the best molecule's scaffold was ablated from the initial bank of molecules? And how much, if at all, does rational initialization improve over random molecular initialization? Does this relate back to being trapped in local minima, and would the choice of initialization help explore more chemical space?

Thank you!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.