Mercurial > pytave
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 |