1
2cimport cython
3
4class A(object):
5    """
6    >>> a = A()
7    >>> a.f()
8    [2, 1]
9    >>> a.g()
10    (False, True)
11    """
12    def f(self):
13        self.refs = [3,2,1]
14        del self.refs[0]
15        return self.refs
16
17    def g(self):
18        self.a = 3
19        del self.a
20        return (hasattr(self, u"a"), hasattr(self, u"g"))
21
22def del_item(L, o):
23    """
24    >>> del_item({1: 'a', 2: 'b'}, 1)
25    {2: 'b'}
26    >>> del_item(list(range(10)), 2)
27    [0, 1, 3, 4, 5, 6, 7, 8, 9]
28    """
29    del L[o]
30    return L
31
32@cython.test_assert_path_exists('//DelStatNode//IndexNode//NoneCheckNode')
33def del_dict(dict D, o):
34    """
35    >>> del_dict({1: 'a', 2: 'b'}, 1)
36    {2: 'b'}
37    """
38    del D[o]
39    return D
40
41@cython.test_fail_if_path_exists('//NoneCheckNode')
42def del_dict_from_literal(o):
43    """
44    >>> del_dict_from_literal(1)
45    {2: 'b'}
46    """
47    D = {1: 'a', 2: 'b'}
48    del D[o]
49    return D
50
51def del_list(list L, o):
52    """
53    >>> del_list(list(range(5)), 3)
54    [0, 1, 2, 4]
55    """
56    del L[o]
57    return L
58
59def del_int(L, int i):
60    """
61    >>> del_int(list(range(5)), 3)
62    [0, 1, 2, 4]
63    >>> del_int({-1: 'neg', 1: 'pos'}, -1)
64    {1: 'pos'}
65    """
66    del L[i]
67    return L
68
69def del_list_int(L, int i):
70    """
71    >>> del_list_int(list(range(5)), 3)
72    [0, 1, 2, 4]
73    """
74    del L[i]
75    return L
76
77def del_temp_slice(a):
78    """
79    >>> class A(object):
80    ...     attr = [1,2,3]
81    >>> a = A()
82    >>> a.attr
83    [1, 2, 3]
84    >>> del_temp_slice(a)
85    []
86    >>> a.attr
87    []
88    >>> del_temp_slice(a)
89    []
90    >>> a.attr
91    []
92    """
93    while a.attr:
94        del a.attr[:]
95    return a.attr
96
97def del_local(a):
98    """
99    >>> del_local(object())
100    """
101    del a
102    assert 'a' not in locals()
103
104def del_seq(a, b, c):
105    """
106    >>> del_seq(1, 2, 3)
107    """
108    del a, (b, c)
109    assert 'a' not in locals()
110    assert 'b' not in locals()
111    assert 'c' not in locals()
112