view @pyobject/cell.m @ 302:de98627cf8ae

Minor fixes for failing doctests * @pyobject/cell.m: Fix doctest failure. * @pyobject/methods.m: More robust doctest.
author Colin Macdonald <cbm@m.fsf.org>
date Wed, 03 Aug 2016 21:11:14 -0700
parents df1bddece9d5
children 3afd890fff6d
line wrap: on
line source

## Copyright (C) 2016 Colin B. Macdonald
##
## 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.
##
## 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 cell (@var{x})
## Convert an iterable Python object to a cell array.
##
## For example, by default Python lists are not automatically
## converted into native Octave objects:
## @example
## @group
## L = pyeval ("[10, 20, 'hello']")
##   @result{} L = [pyobject ...]
##
##       [10, 20, 'hello']
## @end group
## @end example
##
## However, we can convert the list to a cell array:
## @example
## @group
## C = cell (L)
##   @result{} C =
##     @{
##       [1,1] =  10
##       [1,2] =  20
##       [1,3] = hello
##     @}
## @end group
## @end example
##
## The conversion is not recursive, in the following sense:
## @example
## @group
## L = pyeval ("[10, 20, [33, 44], 50]");
## C = cell (L)
##   @result{} C =
##     @{
##       [1,1] =  10
##       [1,2] =  20
##             = [pyobject ...]
##
##                 [33, 44]
##
##       [1,4] =  50
##     @}
## @end group
## @end example
##
## @seealso{cell2mat}
## @end defmethod


function c = cell (x)
  ## FIXME: subsref should take care of this case
  if (length (x) == 0)
    c = cell (0, 1);
    return
  endif
  c = subsref (x, struct ("type", "{}", "subs", {{":"}}));
endfunction


%!test
%! L = pyeval ("(1, 2, 3)");
%! C = cell (L);
%! assert (iscell (C))
%! assert (C, {1, 2, 3})