Creates an iterator over one of the index dimensions of the object.

        Example::

            for l in s.generate('layer',remove_dimensions=False,resolution=2):
                # taking two layers at a time
                print l

            remove_dimensions: False
                Whether the labels that are used for generation should be removed from the generated objects.
            resolution:     None
                If set to an integer, the dimension used for generation will be split into parts of size `resolution`.
            bins:           None
                If set to an integer, the dimension used for generation will be split into `bins` many, equal parts.
            reversed:       True
                Whether argument list should be reversed, such that the first argument is rotated first.
            fuzzy:
                Whether to match the label perfectly or use fuzzy search. Can also be specified by
                prepending the label name with a '~'

def generate(self,*args,**kwargs):
        """
        Creates an iterator over one of the index dimensions of the object.

        Example::

            for l in s.generate('layer',remove_dimensions=False,resolution=2):
                # taking two layers at a time
                print l

            remove_dimensions: False
                Whether the labels that are used for generation should be removed from the generated objects.
            resolution:     None
                If set to an integer, the dimension used for generation will be split into parts of size `resolution`.
            bins:           None
                If set to an integer, the dimension used for generation will be split into `bins` many, equal parts.
            reversed:       True
                Whether argument list should be reversed, such that the first argument is rotated first.
            fuzzy:
                Whether to match the label perfectly or use fuzzy search. Can also be specified by
                prepending the label name with a '~'
        """
        constraints = []
        remove_dimensions = kwargs.pop('remove_dimensions',False)
        resolution = kwargs.get('resolution',None) 
        bins = kwargs.get('bins',None) 
        if len(args) == 0:
            generator_indizes = range(1,len(self.labels))
        else:
            if kwargs.get("fuzzy",False):
                generator_indizes = [kk for k in args for kk in self.find_labels('~'+k)]
            else:
                generator_indizes = [kk for k in args for kk in self.find_labels(k)]
        if kwargs.get("reversed",True):
            generator_indizes = list(reversed(generator_indizes))
        kwargs.pop('reversed',None)
        kwargs.pop('fuzzy',None)
        generator_ranges = cartesian([self.constraint_range_dict(i,**kwargs) for i in generator_indizes])
        remaining_label_dimensions = [i for i,l in enumerate(self.labels) if i not in generator_indizes]
        for generator_t in generator_ranges:
            constraints = {}
            for ri, i in enumerate(generator_indizes):
                constraints.update(generator_t[ri])
            yield self(remove_dimensions=remove_dimensions,**constraints)