示例#1
0
            def get_ready_result(is_ready):

                for i in is_ready:
                    (smiles, outcomes) = self.pending_results[i].get(timeout=0.2)
                    self.pending_results[i].forget()
                    result = ForwardResult(smiles)
                    for outcome in outcomes:
                        result.add_product(ForwardProduct(smiles_list=outcome['smiles_list'], smiles=outcome['smiles'],
                                                          template_ids=outcome[
                                                              'template_ids'],
                                                          num_examples=outcome[
                                                              'num_examples'],
                                                          edits=outcome['edits']))
                    yield result, is_ready
示例#2
0
    def get_candidate_edits(self, smiles):

        candidate_edits = []
        stiched_result = ForwardResult(smiles)
        rct_temp = Chem.MolFromSmiles(smiles)
        [a.ClearProp('molAtomMapNumber') for a in rct_temp.GetAtoms()]
        split_smiles = Chem.MolToSmiles(rct_temp).split('.')
        print('SPLIT SMILES FOR GET_CANDIDATE_EDITS: {}'.format(split_smiles))
        all_results = []
        is_ready = [
            i for (i, res) in enumerate(self.pending_results) if res.ready()
        ]
        while self.waiting_for_results():
            try:
                for result, is_ready in self.get_ready_result(is_ready):
                    for product in result.products:
                        if product.smiles not in split_smiles:
                            stiched_result.add_product(product)
                    '''
                    products = result.get_products()
                    for product in products:
                        self.add_product(all_results, candidate_edits, product)
                    '''
                time.sleep(0.5)
                self.pending_results = [
                    res for (i, res) in enumerate(self.pending_results)
                    if i not in is_ready
                ]
                is_ready = [
                    i for (i, res) in enumerate(self.pending_results)
                    if res.ready()
                ]
            except Exception as e:
                print(e)
                pass

        for product in stiched_result.products:
            all_results.append(product.as_dict())
            candidate_edits.append((product.get_smiles(), product.get_edits()))

        self.stop_expansion()
        return (all_results, candidate_edits)