view @py/py.m @ 365:087e7bc3697f

Do not automatically convert Python strings to Octave strings (fixes issue #65) * python_to_octave.cc (pytave::pyobj_to_octvalue): Drop conversion of bytes and unicode objects. * __py_struct_from_dict__.cc (F__py_string_value__): New function. * @pyobject/char.m: Define outside class definition, use __py_string_value__. * @pyobject/pyobject.m: Delete previous pyobject.char definition. * @pyobject/methods.m: Apply char conversion to __name__ attribute. * @py/py.m, @pyobject/cell.m, @pyobject/dummy.m, @pyobject/subsasgn.m, @pyobject/subsref.m, pyargs.m, pycall.cc, pyeval.cc: Adapt examples and tests to changes.
author Mike Miller <mtmiller@octave.org>
date Thu, 25 Aug 2016 14:06:56 -0700
parents fe6b9e618c98
children
line wrap: on
line source

## Copyright (C) 2016 Mike Miller
##
## This file is part of Pytave.
##
## Pytave 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.
##
## Pytave 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 Pytave; see the file COPYING.  If not, see
## <http://www.gnu.org/licenses/>.

## -*- texinfo -*-
## @deftypefn  {} {} py
## @deftypefnx {} {} py.@var{pyname}
## Get the value of a Python object or call a Python function.
## @end deftypefn

function p = py ()
  p = class (struct (), "py");
endfunction

%!assert (py.math.sqrt (2), sqrt (2))
%!assert (ischar (char (py.sys.version)))

%!test
%! if (double (py.sys.hexversion) >= 0x03000000)
%!   assert (isobject (py.int (0)))
%! else
%!   assert (py.int (0), int64 (0))
%! endif

%!test
%! if (double (py.sys.hexversion) < 0x03000000)
%!   assert (py.int (2147483647), int64 (2147483647))
%! endif

%!test
%! if (double (py.sys.hexversion) < 0x03000000)
%!   assert (isobject (py.long (0)))
%! endif

%!test
%! if (double (py.sys.hexversion) >= 0x03000000)
%!   assert (isobject (py.int (2^100)))
%! else
%!   assert (isobject (py.long (2^100)))
%! endif

## Cannot use '@' to make a handle to a Python function
%!xtest
%! fn = @py.math.abs;
%! assert (fn (-3), 3)