"""
This type stub file was generated by pyright.
"""

import unittest

""" Implementation of the RECAP algorithm from Lewell et al. JCICS *38* 511-522 (1998)

The published algorithm is implemented more or less without
modification. The results are returned as a hierarchy of nodes instead
of just as a set of fragments. The hope is that this will allow a bit
more flexibility in working with the results.

For example:
>>> from rdkit import Chem
>>> from rdkit.Chem import Recap
>>> m = Chem.MolFromSmiles('C1CC1Oc1ccccc1-c1ncc(OC)cc1')
>>> res = Recap.RecapDecompose(m)
>>> res
<...Chem.Recap.RecapHierarchyNode object at ...>
>>> sorted(res.children.keys())
['*C1CC1', '*c1ccc(OC)cn1', '*c1ccccc1-c1ccc(OC)cn1', '*c1ccccc1OC1CC1']
>>> sorted(res.GetAllChildren().keys())
['*C1CC1', '*c1ccc(OC)cn1', '*c1ccccc1*', '*c1ccccc1-c1ccc(OC)cn1', '*c1ccccc1OC1CC1']

To get the standard set of RECAP results, use GetLeaves():
>>> leaves=res.GetLeaves()
>>> sorted(leaves.keys())
['*C1CC1', '*c1ccc(OC)cn1', '*c1ccccc1*']
>>> leaf = leaves['*C1CC1']
>>> leaf.mol
<...Chem.rdchem.Mol object at ...>


"""
reactionDefs = ...
reactions = ...
class RecapHierarchyNode:
    """ This class is used to hold the Recap hiearchy
    """
    mol = ...
    children = ...
    parents = ...
    smiles = ...
    def __init__(self, mol) -> None:
        ...
    
    def GetAllChildren(self): # -> dict[Unknown, Unknown]:
        " returns a dictionary, keyed by SMILES, of children "
        ...
    
    def GetLeaves(self): # -> dict[Unknown, Unknown]:
        " returns a dictionary, keyed by SMILES, of leaf (terminal) nodes "
        ...
    
    def getUltimateParents(self): # -> list[RecapHierarchyNode]:
        """ returns all the nodes in the hierarchy tree that contain this
            node as a child
        """
        ...
    
    def __del__(self): # -> None:
        ...
    


def RecapDecompose(mol, allNodes=..., minFragmentSize=..., onlyUseReactions=...): # -> RecapHierarchyNode:
    """ returns the recap decomposition for a molecule """
    ...

if __name__ == '__main__':
    class TestCase(unittest.TestCase):
        def test1(self): # -> None:
            ...
        
        def test2(self): # -> None:
            ...
        
        def test3(self): # -> None:
            ...
        
        def testSFNetIssue1801871(self): # -> None:
            ...
        
        def testSFNetIssue1804418(self): # -> None:
            ...
        
        def testMinFragmentSize(self): # -> None:
            ...
        
        def testAmideRxn(self): # -> None:
            ...
        
        def testEsterRxn(self): # -> None:
            ...
        
        def testUreaRxn(self): # -> None:
            ...
        
        def testAmineRxn(self): # -> None:
            ...
        
        def testEtherRxn(self): # -> None:
            ...
        
        def testOlefinRxn(self): # -> None:
            ...
        
        def testAromNAliphCRxn(self): # -> None:
            ...
        
        def testLactamNAliphCRxn(self): # -> None:
            ...
        
        def testAromCAromCRxn(self): # -> None:
            ...
        
        def testAromNAromCRxn(self): # -> None:
            ...
        
        def testSulfonamideRxn(self): # -> None:
            ...
        
        def testSFNetIssue1881803(self): # -> None:
            ...
        
    
    
