Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

# Automatically generated by /home/embray/src/sagemath/sage/src/sage_setup/autogen/interpreters/generator.py. Do not edit! 

from cpython.number cimport PyNumber_Divide, PyNumber_TrueDivide 

from sage.misc.superseded import deprecation 

cdef public object py_divide_helper(object left, object right): 

try: 

return PyNumber_TrueDivide(left, right) 

except TypeError: 

IF PY_MAJOR_VERSION < 3: 

res = PyNumber_Divide(left, right) 

deprecation(24805, "use of __truediv__ should be " 

"preferred over __div__") 

return res 

ELSE: 

raise 

  

  

from cpython.ref cimport PyObject 

cdef extern from "Python.h": 

void Py_DECREF(PyObject *o) 

void Py_INCREF(PyObject *o) 

void Py_CLEAR(PyObject *o) 

  

object PyList_New(Py_ssize_t len) 

ctypedef struct PyListObject: 

PyObject **ob_item 

  

ctypedef struct PyTupleObject: 

PyObject **ob_item 

  

from cysignals.memory cimport check_allocarray, sig_free 

  

from sage.ext.fast_callable cimport Wrapper 

  

cdef extern from "sage/ext/interpreters/interp_py.c": 

object interp_py(PyObject** args, 

PyObject** constants, 

PyObject** stack, 

int* code) 

cdef class Wrapper_py(Wrapper): 

# attributes are declared in corresponding .pxd file 

  

def __init__(self, args): 

Wrapper.__init__(self, args, metadata) 

cdef int i 

cdef int count 

count = args['args'] 

self._n_args = count 

val = args['constants'] 

self._n_constants = len(val) 

self._list_constants = PyList_New(self._n_constants) 

self._constants = (<PyListObject *>self._list_constants).ob_item 

for i in range(len(val)): 

self._constants[i] = <PyObject *>val[i]; Py_INCREF(self._constants[i]) 

count = args['stack'] 

self._n_stack = count 

self._list_stack = PyList_New(self._n_stack) 

self._stack = (<PyListObject *>self._list_stack).ob_item 

val = args['code'] 

self._n_code = len(val) 

self._code = <int*>check_allocarray(self._n_code, sizeof(int)) 

for i in range(len(val)): 

self._code[i] = val[i] 

  

def __dealloc__(self): 

cdef int i 

if self._code: 

sig_free(self._code) 

  

def __call__(self, *args): 

if self._n_args != len(args): raise ValueError 

try: 

return interp_py((<PyTupleObject*>args).ob_item 

, self._constants 

, self._stack 

, self._code 

) 

except BaseException: 

for i in range(self._n_stack): 

Py_CLEAR(self._stack[i]) 

raise 

  

  

from sage.ext.fast_callable import CompilerInstrSpec, InterpreterMetadata 

metadata = InterpreterMetadata(by_opname={ 

'load_arg': 

(CompilerInstrSpec(0, 1, ['args']), 0), 

'load_const': 

(CompilerInstrSpec(0, 1, ['constants']), 1), 

'return': 

(CompilerInstrSpec(1, 0, []), 2), 

'py_call': 

(CompilerInstrSpec(0, 1, ['constants', 'n_inputs']), 3), 

'add': 

(CompilerInstrSpec(2, 1, []), 4), 

'sub': 

(CompilerInstrSpec(2, 1, []), 5), 

'mul': 

(CompilerInstrSpec(2, 1, []), 6), 

'div': 

(CompilerInstrSpec(2, 1, []), 7), 

'floordiv': 

(CompilerInstrSpec(2, 1, []), 8), 

'pow': 

(CompilerInstrSpec(2, 1, []), 9), 

'ipow': 

(CompilerInstrSpec(1, 1, ['constants']), 10), 

'neg': 

(CompilerInstrSpec(1, 1, []), 11), 

'invert': 

(CompilerInstrSpec(1, 1, []), 12), 

'abs': 

(CompilerInstrSpec(1, 1, []), 13), 

}, 

by_opcode=[ 

('load_arg', 

CompilerInstrSpec(0, 1, ['args'])), 

('load_const', 

CompilerInstrSpec(0, 1, ['constants'])), 

('return', 

CompilerInstrSpec(1, 0, [])), 

('py_call', 

CompilerInstrSpec(0, 1, ['constants', 'n_inputs'])), 

('add', 

CompilerInstrSpec(2, 1, [])), 

('sub', 

CompilerInstrSpec(2, 1, [])), 

('mul', 

CompilerInstrSpec(2, 1, [])), 

('div', 

CompilerInstrSpec(2, 1, [])), 

('floordiv', 

CompilerInstrSpec(2, 1, [])), 

('pow', 

CompilerInstrSpec(2, 1, [])), 

('ipow', 

CompilerInstrSpec(1, 1, ['constants'])), 

('neg', 

CompilerInstrSpec(1, 1, [])), 

('invert', 

CompilerInstrSpec(1, 1, [])), 

('abs', 

CompilerInstrSpec(1, 1, [])), 

], 

ipow_range=True)