# HG changeset patch # User Mike Miller # Date 1493400858 25200 # Node ID 6c316b5f30f7f42b3f961da6fd7c54dbc9cfcc8b # Parent 692cecebc71f5ebd26c68f37a50523c268952f64 Convert empty 1-D or 2-D arrays to Python array.array (fixes issue #69) * oct-py-types.cc (pytave::make_py_array): Also convert arrays with zero columns or zero rows. * octave_to_python.cc (pytave::octvalue_to_pyobj): Convert numeric arrays with zero columns or zero rows with make_py_array. * @pyobject/pyobject.m: Add %!tests. diff -r 692cecebc71f -r 6c316b5f30f7 @pyobject/pyobject.m --- a/@pyobject/pyobject.m Fri Apr 28 10:13:04 2017 -0700 +++ b/@pyobject/pyobject.m Fri Apr 28 10:34:18 2017 -0700 @@ -382,7 +382,9 @@ %!assert (isa (pyobject ("a string"), "py.str")) %!assert (isa (pyobject (struct ()), "py.dict")) %!assert (isa (pyobject (cell ()), "py.tuple")) +%!assert (isa (pyobject ([]), "py.array.array")) %!assert (isa (pyobject ([1, 2, 3, 4]), "py.array.array")) +%!assert (isa (pyobject ([1; 2; 3; 4]), "py.array.array")) %!assert (all (isa (pyobject (0), {"pyobject", "py.float", "py.numbers.Number"}))) ## Test conversion method pyobject.int64 diff -r 692cecebc71f -r 6c316b5f30f7 oct-py-types.cc --- a/oct-py-types.cc Fri Apr 28 10:13:04 2017 -0700 +++ b/oct-py-types.cc Fri Apr 28 10:34:18 2017 -0700 @@ -281,7 +281,7 @@ make_py_array (const octave_value& value) { if (value.is_numeric_type () && ! value.is_complex_type () - && value.ndims () == 2 && (value.columns () == 1 || value.rows () == 1)) + && value.ndims () == 2 && (value.columns () <= 1 || value.rows () <= 1)) { if (value.is_double_type ()) return make_py_array (value.array_value ()); diff -r 692cecebc71f -r 6c316b5f30f7 octave_to_python.cc --- a/octave_to_python.cc Fri Apr 28 10:13:04 2017 -0700 +++ b/octave_to_python.cc Fri Apr 28 10:34:18 2017 -0700 @@ -183,7 +183,7 @@ py_object = object (handle (obj)); } else if (octvalue.is_numeric_type () && octvalue.ndims () == 2 - && (octvalue.columns () == 1 || octvalue.rows () == 1)) + && (octvalue.columns () <= 1 || octvalue.rows () <= 1)) { PyObject *obj = make_py_array (octvalue); py_object = object (handle (obj));