cython

Форк
0
/
cythonscope.pyx 
165 строк · 4.4 Кб
1
cimport cython
2

3
from cython cimport _testscope as tester
4
from cython cimport TestClass, _testclass_new as TestClass_New
5
from cython cimport test_call, test_dep
6
from cython.view cimport _testscope as viewtester
7

8
from cpython cimport PyObject
9

10
cdef extern from *:
11
    # TestClass stuff
12
    cdef struct __pyx_TestClass_obj:
13
        int value
14

15
    # Type pointer
16
    cdef PyObject *TestClassType "__pyx_TestClass_type"
17

18
    # This is a cdef function
19
    cdef __pyx_TestClass_New(int)
20

21
    # These are methods and therefore have no prototypes
22
    cdef __pyx_TestClass_cdef_method(TestClass self, int value)
23
    cdef __pyx_TestClass_cpdef_method(TestClass self, int value, int skip_dispatch)
24
    cdef __pyx_TestClass_def_method(object self, object value)
25

26
    cdef __pyx_TestClass_cdef_cname(TestClass self, int value)
27
    cdef __pyx_TestClass_cpdef_cname(TestClass self, int value, int skip_dispatch)
28
    cdef __pyx_TestClass_def_cname(object self, object value)
29

30
    cdef __pyx_test_dep(object)
31
    cdef __pyx_test_call_other_cy_util(object)
32

33

34
def test_cdef_cython_utility():
35
    """
36
    >>> test_cdef_cython_utility()
37
    hello from cython scope, value=4
38
    hello from cython.view scope, value=4
39
    hello from cython scope, value=3
40
    hello from cython.view scope, value=3
41
    """
42
    print cython._testscope(4)
43
    print cython.view._testscope(4)
44
    print tester(3)
45
    print viewtester(3)
46

47
def test_cdef_class_cython_utility():
48
    """
49
    >>> test_cdef_class_cython_utility()
50
    7
51
    14
52
    TestClass(20)
53
    TestClass(50)
54
    """
55
    cdef __pyx_TestClass_obj *objstruct
56

57
    obj =  TestClass_New(7)
58
    objstruct = <__pyx_TestClass_obj *> obj
59
    print objstruct.value
60

61
    obj =  __pyx_TestClass_New(14)
62
    objstruct = <__pyx_TestClass_obj *> obj
63
    print objstruct.value
64

65
    print (<object> TestClassType)(20)
66
    print TestClass(50)
67

68
def test_extclass_c_methods():
69
    """
70
    >>> test_extclass_c_methods()
71
    Hello from cdef_method 1
72
    Hello from cpdef_method 2
73
    Hello from def_method 3
74
    Hello from cdef_cname_method 4
75
    Hello from cpdef_cname_method 5
76
    Hello from def_cname_method 6
77
    Hello from cdef_method 1
78
    Hello from cpdef_method 2
79
    Hello from def_method 3
80
    Hello from cdef_cname_method 4
81
    Hello from cpdef_cname_method 5
82
    Hello from def_cname_method 6
83
    """
84
    cdef TestClass obj1 = TestClass(11)
85
    cdef TestClass obj2 = TestClass_New(22)
86

87
    __pyx_TestClass_cdef_method(obj1, 1)
88
    __pyx_TestClass_cpdef_method(obj1, 2, True)
89
    __pyx_TestClass_def_method(obj1, 3)
90

91
    __pyx_TestClass_cdef_cname(obj1, 4)
92
    __pyx_TestClass_cpdef_cname(obj1, 5, True)
93
    __pyx_TestClass_def_cname(obj1, 6)
94

95
    __pyx_TestClass_cdef_method(obj2, 1)
96
    __pyx_TestClass_cpdef_method(obj2, 2, True)
97
    __pyx_TestClass_def_method(obj2, 3)
98

99
    __pyx_TestClass_cdef_cname(obj2, 4)
100
    __pyx_TestClass_cpdef_cname(obj2, 5, True)
101
    __pyx_TestClass_def_cname(obj2, 6)
102

103
def test_extclass_cython_methods():
104
    """
105
    >>> test_extclass_cython_methods()
106
    Hello from cdef_method 1
107
    Hello from cpdef_method 2
108
    Hello from def_method 3
109
    Hello from cdef_cname_method 4
110
    Hello from cpdef_cname_method 5
111
    Hello from def_cname_method 6
112
    Hello from cdef_method 1
113
    Hello from cpdef_method 2
114
    Hello from def_method 3
115
    Hello from cdef_cname_method 4
116
    Hello from cpdef_cname_method 5
117
    Hello from def_cname_method 6
118
    """
119
    cdef TestClass obj1 = TestClass(11)
120
    cdef TestClass obj2 = TestClass_New(22)
121

122
    obj1.cdef_method(1)
123
    obj1.cpdef_method(2)
124
    obj1.def_method(3)
125
    obj1.cdef_cname_method(4)
126
    obj1.cpdef_cname_method(5)
127
    obj1.def_cname_method(6)
128

129
    obj2.cdef_method(1)
130
    obj2.cpdef_method(2)
131
    obj2.def_method(3)
132
    obj2.cdef_cname_method(4)
133
    obj2.cpdef_cname_method(5)
134
    obj2.def_cname_method(6)
135

136
def test_cython_utility_dep():
137
    """
138
    >>> test_cython_utility_dep()
139
    test_dep first
140
    test_call
141
    test_dep second
142
    test_dep third
143
    test_call
144
    test_dep fourth
145
    """
146
    test_dep('first')
147
    test_call('second')
148
    __pyx_test_dep('third')
149
    __pyx_test_call_other_cy_util('fourth')
150

151
def viewobjs():
152
    """
153
    >>> viewobjs()
154
    <strided and direct or indirect>
155
    <strided and direct>
156
    <strided and indirect>
157
    <contiguous and direct>
158
    <contiguous and indirect>
159
    """
160
    print cython.view.generic
161
    print cython.view.strided
162
    print cython.view.indirect
163
    #print cython.view.generic_contiguous
164
    print cython.view.contiguous
165
    print cython.view.indirect_contiguous
166

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.