def topology(self):
        """
        Returns the structure (topology) of the cluster as tuples.

        Output from cl.data::

                [<Cluster@0.833333333333(['CVS',
                 <Cluster@0.818181818182(['34.xls',
                 <Cluster@0.789473684211([<Cluster@0.555555555556(['0.txt',
                 <Cluster@0.181818181818(['ChangeLog', 'ChangeLog.txt'])>])>,
                 <Cluster@0.684210526316(['20060730.py',
                 <Cluster@0.684210526316(['.cvsignore',
                 <Cluster@0.647058823529(['About.py', <Cluster@0.625(['.idlerc',
                 '.pylint.d'])>])>])>])>])>])>])>]

        Corresponding output from cl.topo()::

                ('CVS', ('34.xls', (('0.txt', ('ChangeLog', 'ChangeLog.txt')),
                ('20060730.py', ('.cvsignore', ('About.py',
                ('.idlerc', '.pylint.d')))))))
        """

        left = self.items[0]
        right = self.items[1]

        if isinstance(left, Cluster):
            first = left.topology()
        else:
            first = left

        if isinstance(right, Cluster):
            second = right.topology()
        else:
            second = right

        return first, second
Returns the structure (topology) of the cluster as tuples.

        Output from cl.data::

                [<Cluster@0.833333333333(['CVS',
                 <Cluster@0.818181818182(['34.xls',
                 <Cluster@0.789473684211([<Cluster@0.555555555556(['0.txt',
                 <Cluster@0.181818181818(['ChangeLog', 'ChangeLog.txt'])>])>,
                 <Cluster@0.684210526316(['20060730.py',
                 <Cluster@0.684210526316(['.cvsignore',
                 <Cluster@0.647058823529(['About.py', <Cluster@0.625(['.idlerc',
                 '.pylint.d'])>])>])>])>])>])>])>]

        Corresponding output from cl.topo()::

                ('CVS', ('34.xls', (('0.txt', ('ChangeLog', 'ChangeLog.txt')),
                ('20060730.py', ('.cvsignore', ('About.py',
                ('.idlerc', '.pylint.d')))))))