disable raise ... from ... unittest in py3 (but other syntax checks still work)
[cython.git] / tests / run / closure_decorators_T478.pyx
1 __doc__ = """
2     >>> Num(13).is_prime()
3     args (Num(13),) kwds {}
4     True
5     >>> Num(13).is_prime(True)
6     args (Num(13), True) kwds {}
7     True
8     >>> Num(15).is_prime(print_factors=True)
9     args (Num(15),) kwds {'print_factors': True}
10     3 5
11     False
12 """
13
14 def print_args(func):
15     def f(*args, **kwds):
16         print "args", args, "kwds", kwds
17         return func(*args, **kwds)
18     return f
19
20
21 cdef class Num:
22
23     cdef int n
24
25     def __init__(self, n):
26         self.n = n
27
28     def __repr__(self):
29         return "Num(%s)" % self.n
30
31     @print_args
32     def is_prime(self, bint print_factors=False):
33         if self.n == 2:
34             return True
35         elif self.n < 2:
36             return False
37         elif self.n % 2 == 0:
38             if print_factors:
39                 print 2, self.n // 2
40         cdef int i = 3
41         while i*i <= self.n:
42             if self.n % i == 0:
43                 if print_factors:
44                     print i, self.n // i
45                 return False
46             i += 2
47         return True