Changeset 5007:cd82d77c6254 in orange


Ignore:
Timestamp:
07/23/08 21:12:00 (6 years ago)
Author:
janezd <janez.demsar@…>
Branch:
default
Convert:
b155ea0cc7c2122259940b2fb2f9de51eaf6ba19
Message:
  • added MOfNCounter
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/orngMisc.py

    r2829 r5007  
    8484 
    8585 
    86  
     86class MofNCounter: 
     87    def __init__(self, m, n): 
     88        if m > n: 
     89            raise TypeError, "Number of selected items exceeds the number of items" 
     90         
     91        self.state = None 
     92        self.m = m 
     93        self.n = n 
     94         
     95    def __iter__(self): 
     96        if self.state: 
     97            return self 
     98        else: 
     99            return MofNCounter(self.m, self.n) 
     100         
     101    def next(self): 
     102        if self.state: 
     103            m, n, state = self.m, self.n, self.state 
     104            for place in range(m-1, -1, -1): 
     105                if state[place] + m-1-place < n-1: 
     106                    state[place] += 1 
     107                    for place in range(place+1, m): 
     108                        state[place] = state[place-1] + 1 
     109                    break 
     110            else: 
     111                self.state = None 
     112                raise StopIteration, "MofNCounter: counting finished" 
     113        else: 
     114            self.state = range(self.m) 
     115             
     116        return self.state[:] 
     117              
    87118class NondecreasingCounter: 
    88119  def __init__(self, places): 
Note: See TracChangeset for help on using the changeset viewer.