changeset 216:3b2b7db7d709

Improve display * @pyobject/display.m: custom display method * @pyobject.m: disp method can return string * @pyobject/dummy.m: update doctests
author Colin Macdonald <cbm@m.fsf.org>
date Fri, 27 May 2016 14:13:34 -0700
parents 521ea032680e
children 69abda471c67
files @pyobject/display.m @pyobject/dummy.m @pyobject/pyobject.m
diffstat 3 files changed, 73 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/@pyobject/display.m	Fri May 27 14:13:34 2016 -0700
@@ -0,0 +1,62 @@
+%% Copyright (C) 2016 Colin B. Macdonald
+%%
+%% This file is part of PyTave.
+%%
+%% OctSymPy is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published
+%% by the Free Software Foundation; either version 3 of the License,
+%% or (at your option) any later version.
+%%
+%% This software is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty
+%% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+%% the GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public
+%% License along with this software; see the file COPYING.
+%% If not, see <http://www.gnu.org/licenses/>.
+
+%% -*- texinfo -*-
+%% @documentencoding UTF-8
+%% @defmethod @@pyobject display (@var{x})
+%% Custom display for pyobjects.
+%%
+%% Example:
+%% @example
+%% @group
+%% pyexec('import sys')
+%% sysmodule = pyeval('sys')
+%%   @result{} sysmodule = [pyobject ...]
+%%
+%%       <module 'sys' (built-in)>
+%%
+%% @end group
+%% @end example
+%%
+%% @seealso{@@pyobject/disp}
+%% @end defmethod
+
+
+function display (x)
+
+  loose = eval('! __compactformat__ ()');
+
+  printf ('%s = [pyobject %s]\n', inputname (1), getid (x));
+  s = disp (x);
+  s = make_indented (s);
+  if (loose), printf('\n'); end
+  disp(s)
+  if (loose), printf('\n'); end
+
+end
+
+
+function s = make_indented(s, n)
+  if (nargin == 1)
+    n = 2;
+  end
+  pad = char (double (' ')*ones (1,n));
+  newl = sprintf('\n');
+  s = strrep (s, newl, [newl pad]);
+  s = [pad s];  % first line
+end
--- a/@pyobject/dummy.m	Fri May 27 14:10:08 2016 -0700
+++ b/@pyobject/dummy.m	Fri May 27 14:13:34 2016 -0700
@@ -52,8 +52,7 @@
 %% @group
 %% pyexec('d = dict(one=1, two=2)')
 %% x = pyobject.fromPythonVarName('d')
-%%   @result{} x =
-%%       [PyObject id ...]
+%%   @result{} x = [pyobject ...]
 %%       @{'two': 2, 'one': 1@}
 %%
 %% % oops, overwrote d in Python:
@@ -61,8 +60,7 @@
 %%
 %% % but have no fear, we still have a reference to it:
 %% x
-%%   @result{} x =
-%%       [PyObject id ...]
+%%   @result{} x = [pyobject ...]
 %%       @{'two': 2, 'one': 1@}
 %% @end group
 %% @end example
@@ -85,8 +83,7 @@
 %% @group
 %% pyexec('import sys')
 %% sysmodule = pyeval('sys')
-%%   @result{} sysmodule =
-%%       [PyObject id ...]
+%%   @result{} sysmodule = [pyobject ...]
 %%       <module 'sys' (built-in)>
 %% @end group
 %% @end example
--- a/@pyobject/pyobject.m	Fri May 27 14:10:08 2016 -0700
+++ b/@pyobject/pyobject.m	Fri May 27 14:13:34 2016 -0700
@@ -85,14 +85,19 @@
     end
 
     dummy (x)
+    display (x)
 
     function r = getid (x)
       r = x.id;
     end
 
-    function disp(x)
-      printf ('[PyObject id %s]\n', x.id);
-      disp (pyeval (sprintf ('str(__InOct__["%s"])', x.id)))
+    function varargout = disp(x)
+      s = pyeval (sprintf ('str(__InOct__["%s"])', x.id));
+      if (nargout == 0)
+        disp (s)
+      else
+        varargout = {s};
+      end
     end
 
     function s = whatclass(x)