Mercurial > pytave
annotate @pyobject/pyobject.m @ 245:72a2f508f2d8
maint: Use Octave keywords for ending code blocks
* @pyobject/dummy.m: Use "endfunction" instead of "end".
* @pyobject/pyobject.m: Use "endproperties" instead of "end".
* @pyobject/subsref.m: Use "endif" instead of "end".
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Wed, 27 Jul 2016 17:01:28 -0700 |
parents | 9da4ca336dda |
children | 4acc64f89d67 |
rev | line source |
---|---|
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
1 ## Copyright (C) 2016 Colin B. Macdonald |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
2 ## |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
3 ## This file is part of PyTave. |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
4 ## |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
5 ## OctSymPy is free software; you can redistribute it and/or modify |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
6 ## it under the terms of the GNU General Public License as published |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
7 ## by the Free Software Foundation; either version 3 of the License, |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
8 ## or (at your option) any later version. |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
9 ## |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
10 ## This software is distributed in the hope that it will be useful, |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
11 ## but WITHOUT ANY WARRANTY; without even the implied warranty |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
12 ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
13 ## the GNU General Public License for more details. |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
14 ## |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
15 ## You should have received a copy of the GNU General Public |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
16 ## License along with this software; see the file COPYING. |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
17 ## If not, see <http://www.gnu.org/licenses/>. |
209 | 18 |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
19 ## -*- texinfo -*- |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
20 ## @documentencoding UTF-8 |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
21 ## @defun pyobject (@var{s}) |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
22 ## Wrap a Python object. |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
23 ## |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
24 ## TODO: where/how to document classdef classes? |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
25 ## |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
26 ## @seealso{pyexec, pyeval} |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
27 ## @end defun |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
28 |
209 | 29 |
30 classdef pyobject < handle | |
31 properties | |
32 id | |
245
72a2f508f2d8
maint: Use Octave keywords for ending code blocks
Mike Miller <mtmiller@octave.org>
parents:
236
diff
changeset
|
33 endproperties |
209 | 34 |
218
02da92723889
Change style, close to Octave conventions
Colin Macdonald <cbm@m.fsf.org>
parents:
217
diff
changeset
|
35 methods (Static) |
02da92723889
Change style, close to Octave conventions
Colin Macdonald <cbm@m.fsf.org>
parents:
217
diff
changeset
|
36 function x = fromPythonVarName (pyvarname) |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
37 # Warning: just for testing, may be removed without notice! |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
38 # If @var{pyvarname} is a string, its assumed to be a variable |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
39 # name, e.g., previously created with pyexec. This must exist |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
40 # at the time of construction but it can disappear later (we |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
41 # will keep track of the reference). |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
42 if (! ischar (pyvarname)) |
227
c56b85f405ba
maint: apply Octave whitespace rules
Mike Miller <mtmiller@octave.org>
parents:
224
diff
changeset
|
43 error ("pyobject: currently we only take variable names as input") |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
44 endif |
209 | 45 cmd = sprintf ([ ... |
46 'if not ("__InOct__" in vars() or "__InOct__" in globals()):\n' ... | |
217
69abda471c67
Attempt at moving pyobject from octave to python
Colin Macdonald <cbm@m.fsf.org>
parents:
216
diff
changeset
|
47 ' __InOct__ = dict()\n' ... |
69abda471c67
Attempt at moving pyobject from octave to python
Colin Macdonald <cbm@m.fsf.org>
parents:
216
diff
changeset
|
48 ' # FIXME: make it accessible elsewhere?\n' ... |
69abda471c67
Attempt at moving pyobject from octave to python
Colin Macdonald <cbm@m.fsf.org>
parents:
216
diff
changeset
|
49 ' import __main__\n' ... |
69abda471c67
Attempt at moving pyobject from octave to python
Colin Macdonald <cbm@m.fsf.org>
parents:
216
diff
changeset
|
50 ' __main__.__InOct__ = __InOct__\n' ... |
209 | 51 '__InOct__[hex(id(%s))] = %s' ], ... |
52 pyvarname, pyvarname); | |
53 pyexec (cmd); | |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
54 id = pyeval (["hex(id(" pyvarname "))"]); |
218
02da92723889
Change style, close to Octave conventions
Colin Macdonald <cbm@m.fsf.org>
parents:
217
diff
changeset
|
55 x = pyobject (id); |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
56 endfunction |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
57 endmethods |
209 | 58 |
59 | |
60 methods | |
218
02da92723889
Change style, close to Octave conventions
Colin Macdonald <cbm@m.fsf.org>
parents:
217
diff
changeset
|
61 function x = pyobject (id) |
209 | 62 % warning: not intended for casual use: you must also insert |
63 % the object into the Python `__InOct__` dict with key `id`. | |
64 x.id = id; | |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
65 endfunction |
209 | 66 |
218
02da92723889
Change style, close to Octave conventions
Colin Macdonald <cbm@m.fsf.org>
parents:
217
diff
changeset
|
67 function delete (x) |
223
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
68 # Called on clear of the last reference---for subclasses of |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
69 # handle; not called at all for "value classes". |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
70 # |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
71 # FIXME: #46497 this is never called! |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
72 # Workaround: call @code{delete(x)} right before @code{clear x}. But |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
73 # be careful, @code{x} needs to be the last reference: don't do this: |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
74 # @example |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
75 # d = pyobject (...); |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
76 # d2 = d; |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
77 # delete (d) |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
78 # clear d |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
79 # d2 |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
80 # @print{} ... KeyError ... |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
81 # @end example |
209 | 82 |
223
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
83 #disp ("delete") |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
84 |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
85 # throws KeyError if it wasn't in there for some reason |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
86 cmd = sprintf ("__InOct__.pop('%s')", x.id); |
06835a3e3384
pyobject: remove unnecessary forcedelete method
Colin Macdonald <cbm@m.fsf.org>
parents:
222
diff
changeset
|
87 pyexec (cmd) |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
88 endfunction |
209 | 89 |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
90 # methods defined in external files |
209 | 91 dummy (x) |
216 | 92 display (x) |
221
a76d75683455
pyobject: split subsref to its own file, reformat
Colin Macdonald <cbm@m.fsf.org>
parents:
220
diff
changeset
|
93 subsref (x, idx) |
209 | 94 |
95 function r = getid (x) | |
96 r = x.id; | |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
97 endfunction |
209 | 98 |
218
02da92723889
Change style, close to Octave conventions
Colin Macdonald <cbm@m.fsf.org>
parents:
217
diff
changeset
|
99 function varargout = disp (x) |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
100 s = pyeval (sprintf ("str(__InOct__['%s'])", x.id)); |
216 | 101 if (nargout == 0) |
102 disp (s) | |
103 else | |
104 varargout = {s}; | |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
105 endif |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
106 endfunction |
209 | 107 |
218
02da92723889
Change style, close to Octave conventions
Colin Macdonald <cbm@m.fsf.org>
parents:
217
diff
changeset
|
108 function s = whatclass (x) |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
109 s = pyeval (sprintf ("str(__InOct__['%s'].__class__)", x.id)); |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
110 endfunction |
209 | 111 |
218
02da92723889
Change style, close to Octave conventions
Colin Macdonald <cbm@m.fsf.org>
parents:
217
diff
changeset
|
112 function vargout = help (x) |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
113 idx = struct ("type", ".", "subs", "__doc__"); |
218
02da92723889
Change style, close to Octave conventions
Colin Macdonald <cbm@m.fsf.org>
parents:
217
diff
changeset
|
114 s = subsref (x, idx); |
213
a54ab59c491d
merge genuinelucifer/cbm_pytave to macdonald/cbm_pytave
Colin Macdonald <cbm@m.fsf.org>
parents:
209
diff
changeset
|
115 if (nargout == 0) |
218
02da92723889
Change style, close to Octave conventions
Colin Macdonald <cbm@m.fsf.org>
parents:
217
diff
changeset
|
116 disp (s) |
213
a54ab59c491d
merge genuinelucifer/cbm_pytave to macdonald/cbm_pytave
Colin Macdonald <cbm@m.fsf.org>
parents:
209
diff
changeset
|
117 else |
a54ab59c491d
merge genuinelucifer/cbm_pytave to macdonald/cbm_pytave
Colin Macdonald <cbm@m.fsf.org>
parents:
209
diff
changeset
|
118 vargout = {s}; |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
119 endif |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
120 endfunction |
236
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
121 |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
122 function len = length (x) |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
123 try |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
124 len = pycall ("len", x); |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
125 catch |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
126 len = 1; |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
127 end_try_catch |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
128 endfunction |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
129 endmethods |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
130 endclassdef |
213
a54ab59c491d
merge genuinelucifer/cbm_pytave to macdonald/cbm_pytave
Colin Macdonald <cbm@m.fsf.org>
parents:
209
diff
changeset
|
131 |
224
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
132 |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
133 %!test |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
134 %! pyexec ("import sys") |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
135 %! A = pyeval ("sys"); |
7feece80fbfa
pyobject: Octave-style formatting, minor edits
Colin Macdonald <cbm@m.fsf.org>
parents:
223
diff
changeset
|
136 %! assert (isa (A, "pyobject")) |
236
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
137 |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
138 %!test |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
139 %! pyobj = pyeval ("{1:2, 2:3, 3:4}"); |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
140 %! assert (isa (pyobj, "pyobject")) |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
141 %! assert (length (pyobj), 3) |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
142 |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
143 %!test |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
144 %! pyexec ("import sys"); |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
145 %! pyobj = pyeval ("sys"); |
9da4ca336dda
Add 'length' property to @pyobject (fixes issue #9)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
227
diff
changeset
|
146 %! assert (length (pyobj), 1) |