changeset 211:9656f663ca94

Remove files and change pyeval
author genuinelucifer
date Thu, 26 May 2016 12:58:35 -0700
parents 04f786b778fc
children dbdf80450a1d
files @pyobj/dummy.m @pyobj/pyobj.m pyeval.cc
diffstat 3 files changed, 4 insertions(+), 263 deletions(-) [+]
line wrap: on
line diff
--- a/@pyobj/dummy.m	Thu May 26 12:48:37 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-%% 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 @@pyobj dummy (@var{x})
-%% Does nothing, stores doctests for now.
-%%
-%%
-%% Simple example:
-%% @example
-%% @group
-%% pyexec('g = 6')
-%% g = pyobj.fromPythonVarName('g');
-%%
-%% sort(whatmethods(g))
-%%   @result{} ans =
-%%     @{
-%%       [1,1] = bit_length
-%%       [1,2] = conjugate
-%%       [1,1] = denominator
-%%       [1,2] = imag
-%%       [1,3] = numerator
-%%       [1,4] = real
-%%      @}
-%%
-%% g.numerator
-%%   @result{} ans =  6
-%% g.denominator
-%%   @result{} ans =  1
-%% @end group
-%% @end example
-%%
-%%
-%% You can delete an object in Python and it will persist:
-%% @example
-%% @group
-%% pyexec('d = dict(one=1, two=2)')
-%% x = pyobj.fromPythonVarName('d')
-%%   @result{} x =
-%%       [PyObject id ...]
-%%       @{'two': 2, 'one': 1@}
-%%
-%% % oops, overwrote d in Python:
-%% pyexec('d = 42')
-%%
-%% % but have no fear, we still have a reference to it:
-%% x
-%%   @result{} x =
-%%       [PyObject id ...]
-%%       @{'two': 2, 'one': 1@}
-%% @end group
-%% @end example
-%%
-%% We can accesss ``callables'' (methods) of objects:
-%% @example
-%% @group
-%% x.keys()
-%%   @result{} ans =
-%%       @{
-%%         [1,1] = two
-%%         [1,2] = one
-%%       @}
-%% @end group
-%% @end example
-%%
-%% @code{pyeval} returns a @@pyobj for things it cannot convert to
-%% Octave-native objects:
-%% @example
-%% @group
-%% pyexec('import sys')
-%% sysmodule = pyeval('sys')
-%%   @result{} sysmodule =
-%%       [PyObject id ...]
-%%       <module 'sys' (built-in)>
-%% @end group
-%% @end example
-%%
-%% After you have the object, you can access its properties:
-%% @example
-%% @group
-%% sysmodule.version
-%%   @result{} ans = ...
-%% @end group
-%% @end example
-%%
-%%
-%% TODO: this should return a cell array with a double, a string,
-%% and an @@pyobj in it:
-%% @example
-%% @group
-%% pyeval('[42, "hello", sys]')         % doctest: +XFAIL
-%%   @result{} ans =
-%%       @{
-%%         [1,1] =  42
-%%         [1,2] = hello
-%%         [1,3] =
-%%           [PyObject id ...]
-%%           <module 'sys' (built-in)>
-%%       @}
-%% @end group
-%% @end example
-%%
-%% @seealso{pyobj}
-%% @end defmethod
-
-function dummy (x)
-
-end
--- a/@pyobj/pyobj.m	Thu May 26 12:48:37 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-%% 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
-%% @defun  pyobj (@var{s})
-%% Wrap a Python object.
-%%
-%% TODO: where/how to document classdef classes?
-%%
-%% @seealso{pyexec, pyeval}
-%% @end defun
-
-classdef pyobj < handle
-  properties
-    id
-  end
-
-  methods(Static)
-    function x = fromPythonVarName(pyvarname)
-      % if @var{pyvarname} is a string, its assumed to be a variable
-      % name, e.g., previously created with pyexec.  This must exist
-      % at the time of construction but it can disappear later (we
-      % will keep track of the reference).
-      if (~ ischar(pyvarname))
-        error('pyobj: currently we only take variable names as input')
-      end
-      cmd = sprintf ([ ...
-        'if not ("__InOct__" in vars() or "__InOct__" in globals()):\n' ...
-        '  __InOct__ = dict()\n' ...
-        '__InOct__[hex(id(%s))] = %s' ], ...
-        pyvarname, pyvarname);
-      pyexec (cmd);
-      id = pyeval (['hex(id(' pyvarname '))']);
-      x = pyobj(id);
-    end
-  end
-
-
-  methods
-    function x = pyobj(id)
-      % warning: not intended for casual use: you must also insert
-      % the object into the Python `__InOct__` dict with key `id`.
-      x.id = id;
-    end
-
-    function delete(x)
-      % called on clear of the last reference---for subclasses of
-      % handle; not called at all for "value classes".
-      % FIXME: #46497 this is never called!
-      %save('proof_of_delete', 6, x.id)
-      disp ('delete')
-      % throws KeyError if it wasn't in there for some reason
-      cmd = sprintf ('__InOct__.pop("%s")', x.id);
-      pyexec (cmd);
-    end
-
-    function force_delete (x)
-      % Manual workaround for #46497: call right before @code{clear x}.  But
-      % be careful, @code{x} needs to be the last reference: don't do this:
-      % @example
-      % d = pyobj (...);
-      % d2 = d;
-      % force_delete (d)
-      % clear d
-      % d2
-      %   @print{} ... KeyError ...
-      % @end example
-      delete(x)
-    end
-
-    dummy (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)))
-    end
-
-    function s = whatclass(x)
-      s = pyeval (sprintf ('str(__InOct__["%s"].__class__)', x.id));
-    end
-
-    function lst = whatmethods(x)
-      % filter the output of `dir(x)`
-      % properties only:
-      % [a for a in dir(x) if not callable(getattr(x, a)) and not a.startswith("__")]
-      cmd = sprintf ( ...
-        '[a for a in dir(__InOct__["%s"]) if not a.startswith("__")]', ...
-        x.id);
-      lst = pyeval (cmd);
-    end
-
-    function r = subsref(x, idx)
-      s = '';
-      for i=1:length(idx)
-        t = idx(i);
-        switch t.type
-          case '()'
-            if ( ! isempty (t.subs))
-              t
-              error('not implemented: function calls with arguments')
-            end
-            s = sprintf ('%s()', s);
-          case '.'
-            assert(ischar(t.subs))
-            s = sprintf ('%s.%s', s, t.subs);
-          otherwise
-            t
-            error('not implemented')
-        end
-      end
-      r = pyeval (sprintf ('__InOct__["%s"]%s', x.id, s));
-    end
-
-  end
-end
--- a/pyeval.cc	Thu May 26 12:48:37 2016 -0700
+++ b/pyeval.cc	Thu May 26 12:58:35 2016 -0700
@@ -78,7 +78,7 @@
       object builtins = main_module.attr ("__builtins__");
       // hex(id(res))
       object idtmp = builtins.attr("hex")(builtins.attr("id")(res));
-      id = extract<std::string> (idtmp);
+      id = extrac<std::string> (idtmp);
 
       // FIXME: currently, we cannot return the raw object to octave...
       if (! res.is_none ())
@@ -90,14 +90,14 @@
     }
   catch (pytave::object_convert_exception const &)
     {
-      printf ("pyeval: could not convert return value to Octave-native object, making pyobj...\n");
+      printf ("pyeval: could not convert return value to Octave-native object, making pyobject...\n");
       // Ensure we have a __InOct__ dict, and then put `res` into it
       exec ("if not (\"__InOct__\" in vars() or \"__InOct__\" in globals()):\n"
             "  __InOct__ = dict()\n",
             main_namespace, main_namespace);
       main_namespace["__InOct__"][id] = res;
-      // Create @pyobj
-      retval = feval ("pyobj", ovl (id), 1);
+      // Create @pyobject
+      retval = feval ("pyobject", ovl (id), 1);
     }
   catch (error_already_set const &)
     {