bugGNU Octave - Bugs: bug #55976, cat, repmat, and reshape don't...

 
 

bug #55976: cat, repmat, and reshape don't work for classdef objects

Submitter:  Andrew Janke <apjanke>
Submitted:  Fri 22 Mar 2019 12:52:24 AM UTC
   
 
Category:  Classdef Severity:  3 - Normal
Priority:  5 - Normal Item Group:  Incorrect Result
Status:  None Assigned to:  None
Originator Name:  Open/Closed:  * Open
Release:  * 4.4.1 Operating System:  * Any
Fixed Release:  None Planned Release:  None
* Mandatory Fields

Add a New Comment Rich Markup
   

Tue 26 Mar 2019 11:06:30 PM UTC, comment #3: 

Oh, wait, I can do it with indexing: `x = MyObject; empty_obj = x([]);`.

Andrew Janke <apjanke>
Tue 26 Mar 2019 09:27:27 PM UTC, comment #2: 

One downside of this is that I can't figure out how to create an empty array of default-implementation struct-organized objects. The normal way to do this in Matlab seems to be `repmat(MyObject, [0 0])`, but without repmat, I can't do that.

This means that for default-implementation struct-organized classes, I can't represent the empty set with the appropriate type, and have to fall back on using double `[]`, which doesn't have the same operations as the class, so clients have to include special-case logic for empties.

Andrew Janke <apjanke>
Fri 22 Mar 2019 12:53:08 AM UTC, comment #1: 

Related: bug #44665.

Andrew Janke <apjanke>
Fri 22 Mar 2019 12:52:24 AM UTC, original submission:  

It seems that cat, its [...] equivalent, reshape, and repmat are not working for classdef objects. This is a bummer, because these are kind of basic elements of OOP M-code programming if you're not going to go all the way and make planar-organized objects.

Lets's say I have a class packajoozle.internalVersion with properties string, elements, and suffix. https://github.com/apjanke/octave-packajoozle/blob/679b4afc3e5e706f6b9ca259705102d0edc077e6/inst/%2Bpackajoozle/%2Binternal/Version.m It does not override size, cat, reshape, numel, or any of the other structural methods; it is a regular struct-organized object.

Trying to do [...], reshape, or repmat on it produces an Octave error.


>> addpath('~/local/repos/octave-packajoozle/inst')
>> ver = packajoozle.internal.Version('1.2.3')
ver =
1.2.3

>> [ver ver ver]
warning: struct: converting a classdef object into a struct overrides the access restrictions defined for properties. All properties are returned, including private and protected ones.
warning: struct: converting a classdef object into a struct overrides the access restrictions defined for properties. All properties are returned, including private and protected ones.
warning: struct: converting a classdef object into a struct overrides the access restrictions defined for properties. All properties are returned, including private and protected ones.
error: octave_base_value::parent_class_name_list(): wrong type argument 'object'
>> repmat(ver, [0 0])
error: octave_base_value::resize (): wrong type argument 'object'
error: called from
    repmat at line 108 column 9
>> repmat(ver, [4 1])
error: octave_base_value::reshape (): wrong type argument 'object'
error: called from
    repmat at line 111 column 9
>> reshape(ver, [1 1])
error: octave_base_value::reshape (): wrong type argument 'object'
>> ver(2) = ver
ver =
1-by-2 packajoozle.internal.Version

>>


That's from Octave 4.4.1. Same thing happens in Octave 5.1.0 and Octave default 6.0.0 (hg id: 1771bed38482 + patches).

Andrew Janke <apjanke>

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by mmuetzel (Updated the item)
  • -email is unavailable- added by apjanke (Submitted the item)
  •  

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

    Only group members can vote.

     

    Follows 1 latest change.

    Date Changed by Updated Field Previous Value => Replaced by
    2024-01-23 mmuetzel CategoryInterpreter Classdef

    Back to the top

    Powered by Savane 3.13-f8d8.
    Corresponding source code