# HG changeset patch # User Colin Macdonald # Date 1464383614 25200 # Node ID 3b2b7db7d709878cb1c906cc08996539d33389b8 # Parent 521ea032680e511a71dfad01c5716b7ad842207f Improve display * @pyobject/display.m: custom display method * @pyobject.m: disp method can return string * @pyobject/dummy.m: update doctests diff -r 521ea032680e -r 3b2b7db7d709 @pyobject/display.m --- /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 . + +%% -*- 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 ...] +%% +%% +%% +%% @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 diff -r 521ea032680e -r 3b2b7db7d709 @pyobject/dummy.m --- 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 ...] %% %% @end group %% @end example diff -r 521ea032680e -r 3b2b7db7d709 @pyobject/pyobject.m --- 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)