comparison @pyobject/subsref.m @ 327:15c20ab4b80a

Do not automatically convert Python integer types to Octave (see issue #56) * python_to_octave.cc (pytave::pyobj_to_octvalue): Drop automatic conversion of Python int and long types to Octave. * @pyobject/pyobject.m (pyobject.length, pyobject.size): Cast values to double. Adapt %!tests to changes. * @pyobject/cell.m, @pyobject/dummy.m, @pyobject/subsasgn.m, @pyobject/subsref.m, pycall.cc, pyeval.cc: Adapt usage examples and %!tests to changes.
author Mike Miller <mtmiller@octave.org>
date Sat, 13 Aug 2016 21:24:29 -0700
parents a511d43e1fc0
children fe6b9e618c98
comparison
equal deleted inserted replaced
326:37df9bd607ed 327:15c20ab4b80a
112 endfunction 112 endfunction
113 113
114 114
115 %!test 115 %!test
116 %! % list indexing 116 %! % list indexing
117 %! L = pyeval ("[10, 20]"); 117 %! L = pyeval ("[10., 20.]");
118 %! assert (L{1}, 10) 118 %! assert (L{1}, 10)
119 %! assert (L{2}, 20) 119 %! assert (L{2}, 20)
120 120
121 %!test 121 %!test
122 %! % list indexing, slice 122 %! % list indexing, slice
123 %! L = pyeval ("[10, 20, [30, 40]]"); 123 %! L = pyeval ("[10., 20., [30., 40.]]");
124 %! L2 = L{:}; 124 %! L2 = L{:};
125 %! assert (L2{1}, 10) 125 %! assert (L2{1}, 10)
126 %! assert (L2{2}, 20) 126 %! assert (L2{2}, 20)
127 %! assert (L2{3}{1}, 30) 127 %! assert (L2{3}{1}, 30)
128 %! assert (L2{3}{2}, 40) 128 %! assert (L2{3}{2}, 40)
129 129
130 %!test 130 %!test
131 %! % list indexing, nested list 131 %! % list indexing, nested list
132 %! L = pyeval ("[1, 2, [10, 11, 12]]"); 132 %! L = pyeval ("[1., 2., [10., 11., 12.]]");
133 %! assert (L{2}, 2) 133 %! assert (L{2}, 2)
134 %! assert (L{3}{1}, 10) 134 %! assert (L{3}{1}, 10)
135 %! assert (L{3}{3}, 12) 135 %! assert (L{3}{3}, 12)
136 136
137 %!test 137 %!test
138 %! % list indexing, assign to vars 138 %! % list indexing, assign to vars
139 %! L = pyeval ("[1, 2, 'Octave']"); 139 %! L = pyeval ("[1., 2., 'Octave']");
140 %! [a, b, c] = L{:}; 140 %! [a, b, c] = L{:};
141 %! assert (a, 1) 141 %! assert (a, 1)
142 %! assert (b, 2) 142 %! assert (b, 2)
143 %! assert (c, "Octave") 143 %! assert (c, "Octave")
144 144
145 %!test 145 %!test
146 %! % 2D array indexing 146 %! % 2D array indexing
147 %! A = pyobject ([1 2; 3 4]); 147 %! A = pyobject ([1. 2.; 3. 4.]);
148 %! assert (A{1, 1}, 1) 148 %! assert (A{1, 1}, 1)
149 %! assert (A{2, 1}, 3) 149 %! assert (A{2, 1}, 3)
150 %! assert (A{1, 2}, 2) 150 %! assert (A{1, 2}, 2)
151 151
152 ## Test element indexing on array.array types 152 ## Test element indexing on array.array types
156 %! assert (a{2}, 12) 156 %! assert (a{2}, 12)
157 %! assert (a{end}, 14) 157 %! assert (a{end}, 14)
158 158
159 %!test 159 %!test
160 %! % dict: str key access 160 %! % dict: str key access
161 %! d = pyeval ("{'one':1, 5:5, 6:6}"); 161 %! d = pyeval ("{'one':1., 5:5, 6:6}");
162 %! assert (d{"one"}, 1) 162 %! assert (d{"one"}, 1)
163 163
164 %!test 164 %!test
165 %! % dict: integer key access 165 %! % dict: integer key access
166 %! d = pyeval ("{5:42, 6:42}"); 166 %! d = pyeval ("{5:42., 6:42.}");
167 %! assert (d{6}, 42) 167 %! assert (d{6}, 42)
168 168
169 %!test 169 %!test
170 %! % dict: integer key should not subtract one 170 %! % dict: integer key should not subtract one
171 %! d = pyeval ("{5:40, 6:42}"); 171 %! d = pyeval ("{5:40., 6:42.}");
172 %! assert (d{6}, 42) 172 %! assert (d{6}, 42)
173 173
174 %!test 174 %!test
175 %! % dict: floating point keys should work 175 %! % dict: floating point keys should work
176 %! d = pyeval ("{5.5:'ok'}"); 176 %! d = pyeval ("{5.5:'ok'}");
177 %! assert (d{5.5}, "ok") 177 %! assert (d{5.5}, "ok")
178 178
179 %!test 179 %!test
180 %! % dict: make sure key ":" doesn't break anything 180 %! % dict: make sure key ":" doesn't break anything
181 %! d = pyeval ("{'a':1, ':':2}"); 181 %! d = pyeval ("{'a':1., ':':2.}");
182 %! assert (d{'a'}, 1) 182 %! assert (d{'a'}, 1)
183 %! assert (d{':'}, 2) 183 %! assert (d{':'}, 2)
184 184
185 %!test 185 %!test
186 %! % method call with args 186 %! % method call with args
197 %! sa (42) 197 %! sa (42)
198 %! assert (length (s) == 3) 198 %! assert (length (s) == 3)
199 199
200 %!test 200 %!test
201 %! % callable can return something 201 %! % callable can return something
202 %! s = pyeval ("set({1, 2})"); 202 %! s = pyeval ("set({1., 2.})");
203 %! v = s.pop (); 203 %! v = s.pop ();
204 %! assert (length (s) == 1) 204 %! assert (length (s) == 1)
205 %! assert (v == 1 || v == 2) 205 %! assert (v == 1 || v == 2)
206 206
207 %!test 207 %!test
233 %! a = f (); 233 %! a = f ();
234 %! assert (length (a) == 3) 234 %! assert (length (a) == 3)
235 235
236 %!test 236 %!test
237 %! % multiple return values: separate them 237 %! % multiple return values: separate them
238 %! f = pyeval ("lambda: (1, 2, 3)"); 238 %! f = pyeval ("lambda: (1., 2., 3.)");
239 %! [a, b, c] = f (); 239 %! [a, b, c] = f ();
240 %! assert (a, 1) 240 %! assert (a, 1)
241 %! assert (b, 2) 241 %! assert (b, 2)
242 %! assert (c, 3) 242 %! assert (c, 3)
243 243