def connected_sites( self, site_labels=None ):
        """
        Searches the lattice to find sets of sites that are contiguously neighbouring.
        Mutually exclusive sets of contiguous sites are returned as Cluster objects.

        Args:
            site_labels (:obj:(List(Str)|Set(Str)|Str), optional): Labels for sites to be considered in the search.
                This can be a list::

                    [ 'A', 'B' ]

                a set::

                    ( 'A', 'B' )

                or a string::

                    'A'.

        Returns:
            (List(Cluster)): List of Cluster objects for groups of contiguous sites.
        """
        if site_labels:
           selected_sites = self.select_sites( site_labels )
        else:
           selected_sites = self.sites
        initial_clusters = [ cluster.Cluster( [ site ] ) for site in selected_sites ]
        if site_labels:
            blocking_sites = self.site_labels - set( site_labels )
            for c in initial_clusters:
                c.remove_sites_from_neighbours( blocking_sites )
        final_clusters = []
        while initial_clusters: # loop until initial_clusters is empty
            this_cluster = initial_clusters.pop(0)
            while this_cluster.neighbours:
                neighbouring_clusters = [ c for c in initial_clusters if this_cluster.is_neighbouring( c ) ] 
                for nc in neighbouring_clusters:
                    initial_clusters.remove( nc )
                    this_cluster = this_cluster.merge( nc ) 
            final_clusters.append( this_cluster )
        return final_clusters
Searches the lattice to find sets of sites that are contiguously neighbouring.
        Mutually exclusive sets of contiguous sites are returned as Cluster objects.

        Args:
            site_labels (:obj:(List(Str)|Set(Str)|Str), optional): Labels for sites to be considered in the search.
                This can be a list::

                    [ 'A', 'B' ]

                a set::

                    ( 'A', 'B' )

                or a string::

                    'A'.

        Returns:
            (List(Cluster)): List of Cluster objects for groups of contiguous sites.