Baunsgaard commented on code in PR #1857:
URL: https://github.com/apache/systemds/pull/1857#discussion_r1252995503


##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;

Review Comment:
   check with other implementations. This one does not return Nan i think, but 
0 .
   I am not 100% sure.



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);

Review Comment:
   should not be enough. 
   
   we need to assign m as well. so add reading and writing m
   
   also we need to write the ordinal of the Ragged array and add the 
construction of these to the ArraryFractory and in fact throw some error on 
readFields here.
   
   Take a look at OptionalArray for inspiration.



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){

Review Comment:
   getter methods that does nothing but return in the top of the file bellow 
constructor (i don't follow this always, but good to try to.)



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, double value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, String value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void setFromOtherType(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherType'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherType(rl, ru, value);

Review Comment:
   else reallocate



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, double value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);

Review Comment:
   else, reallocate _a to to index size.



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, double value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, String value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);

Review Comment:
   else, reallocate _a to to index size.



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, double value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, String value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void setFromOtherType(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherType'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherType(rl, ru, value);
        }
 
        @Override
        public void set(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)

Review Comment:
   reallocate



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, double value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, String value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void setFromOtherType(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherType'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherType(rl, ru, value);
        }
 
        @Override
        public void set(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       if(value instanceof RaggedArray)
+                               _a.set(rl, ru, ((RaggedArray) 
value).getInnerArray());
+                       else if(_a.getClass() == value.getClass())
+                               _a.set(rl, ru, value);
+                       else
+                               throw new RuntimeException("RaggedArray set: 
value type should be same to RaggedArray type " + _a.getClass());
        }
 
+
        @Override
        public void set(int rl, int ru, Array<T> value, int rlSrc) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       if(value instanceof RaggedArray)
+                               _a.set(rl, ru, ((RaggedArray) 
value).getInnerArray(), rlSrc);
+                       else if(_a.getClass() == value.getClass())
+                               _a.set(rl, ru, value, rlSrc);
+                       else
+                               throw new RuntimeException("RaggedArray set: 
value type should be same to RaggedArray type " + _a.getClass());
+
        }
 
        @Override
        public void setNz(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 
'setNz'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setNz(rl, ru, value);
        }
 
        @Override
        public void setFromOtherTypeNz(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherTypeNz'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherTypeNz(rl, ru, value);
        }
 
        @Override
        public void append(String value) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               _a.append(value);

Review Comment:
   not valid. append appends to the end. this means in this case reallocate the 
entire thing and then append one element in the end.



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, double value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, String value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void setFromOtherType(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherType'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherType(rl, ru, value);
        }
 
        @Override
        public void set(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       if(value instanceof RaggedArray)
+                               _a.set(rl, ru, ((RaggedArray) 
value).getInnerArray());
+                       else if(_a.getClass() == value.getClass())
+                               _a.set(rl, ru, value);
+                       else
+                               throw new RuntimeException("RaggedArray set: 
value type should be same to RaggedArray type " + _a.getClass());
        }
 
+
        @Override
        public void set(int rl, int ru, Array<T> value, int rlSrc) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       if(value instanceof RaggedArray)
+                               _a.set(rl, ru, ((RaggedArray) 
value).getInnerArray(), rlSrc);
+                       else if(_a.getClass() == value.getClass())
+                               _a.set(rl, ru, value, rlSrc);
+                       else
+                               throw new RuntimeException("RaggedArray set: 
value type should be same to RaggedArray type " + _a.getClass());
+
        }
 
        @Override
        public void setNz(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 
'setNz'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setNz(rl, ru, value);
        }
 
        @Override
        public void setFromOtherTypeNz(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherTypeNz'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherTypeNz(rl, ru, value);
        }
 
        @Override
        public void append(String value) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               _a.append(value);
+               super._size += 1;
        }
 
        @Override
        public void append(T value) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               _a.append(value);
+               super._size += 1;
        }
 
        @Override
        public Array<T> append(Array<T> other) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               super._size += other._size;
+               return _a.append(other);
        }
 
        @Override
        public Array<T> slice(int rl, int ru) {
-               throw new NotImplementedException("Unimplemented method 
'slice'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       return _a.slice(rl, ru);
+               else if(rl >= 0 && ru >= _a._size )
+                       return _a.slice(rl, _a._size - 1);
+               return null;
        }
 
        @Override
        public void reset(int size) {
-               throw new NotImplementedException("Unimplemented method 
'reset'");
+               _a.reset(size);
+               super._size = size;
        }
 
        @Override
        public byte[] getAsByteArray() {
-               throw new NotImplementedException("Unimplemented method 
'getAsByteArray'");
+               return _a.getAsByteArray();
        }
 
        @Override
        public ValueType getValueType() {
-               throw new NotImplementedException("Unimplemented method 
'getValueType'");
+               return _a.getValueType();
        }
 
        @Override
        public Pair<ValueType, Boolean> analyzeValueType() {
-               throw new NotImplementedException("Unimplemented method 
'analyzeValueType'");
+               return _a.analyzeValueType();
        }
 
        @Override
        public FrameArrayType getFrameArrayType() {
-               throw new NotImplementedException("Unimplemented method 
'getFrameArrayType'");
+               return FrameArrayType.RAGGED;
        }
 
        @Override
        public long getExactSerializedSize() {
-               throw new NotImplementedException("Unimplemented method 
'getExactSerializedSize'");
+               return _a.getExactSerializedSize();

Review Comment:
   + int size.



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, double value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, String value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void setFromOtherType(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherType'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherType(rl, ru, value);
        }
 
        @Override
        public void set(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       if(value instanceof RaggedArray)
+                               _a.set(rl, ru, ((RaggedArray) 
value).getInnerArray());
+                       else if(_a.getClass() == value.getClass())
+                               _a.set(rl, ru, value);
+                       else
+                               throw new RuntimeException("RaggedArray set: 
value type should be same to RaggedArray type " + _a.getClass());
        }
 
+
        @Override
        public void set(int rl, int ru, Array<T> value, int rlSrc) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       if(value instanceof RaggedArray)
+                               _a.set(rl, ru, ((RaggedArray) 
value).getInnerArray(), rlSrc);
+                       else if(_a.getClass() == value.getClass())
+                               _a.set(rl, ru, value, rlSrc);
+                       else
+                               throw new RuntimeException("RaggedArray set: 
value type should be same to RaggedArray type " + _a.getClass());
+
        }
 
        @Override
        public void setNz(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 
'setNz'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setNz(rl, ru, value);
        }
 
        @Override
        public void setFromOtherTypeNz(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherTypeNz'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherTypeNz(rl, ru, value);
        }
 
        @Override
        public void append(String value) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               _a.append(value);
+               super._size += 1;
        }
 
        @Override
        public void append(T value) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               _a.append(value);
+               super._size += 1;
        }
 
        @Override
        public Array<T> append(Array<T> other) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               super._size += other._size;
+               return _a.append(other);
        }
 
        @Override
        public Array<T> slice(int rl, int ru) {
-               throw new NotImplementedException("Unimplemented method 
'slice'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       return _a.slice(rl, ru);
+               else if(rl >= 0 && ru >= _a._size )
+                       return _a.slice(rl, _a._size - 1);
+               return null;
        }
 
        @Override
        public void reset(int size) {
-               throw new NotImplementedException("Unimplemented method 
'reset'");
+               _a.reset(size);
+               super._size = size;
        }
 
        @Override
        public byte[] getAsByteArray() {
-               throw new NotImplementedException("Unimplemented method 
'getAsByteArray'");
+               return _a.getAsByteArray();
        }
 
        @Override
        public ValueType getValueType() {
-               throw new NotImplementedException("Unimplemented method 
'getValueType'");
+               return _a.getValueType();
        }
 
        @Override
        public Pair<ValueType, Boolean> analyzeValueType() {
-               throw new NotImplementedException("Unimplemented method 
'analyzeValueType'");
+               return _a.analyzeValueType();
        }
 
        @Override
        public FrameArrayType getFrameArrayType() {
-               throw new NotImplementedException("Unimplemented method 
'getFrameArrayType'");
+               return FrameArrayType.RAGGED;
        }
 
        @Override
        public long getExactSerializedSize() {
-               throw new NotImplementedException("Unimplemented method 
'getExactSerializedSize'");
+               return _a.getExactSerializedSize();
        }
 
        @Override
        protected Array<Boolean> changeTypeBitSet() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeBitSet'");
+               return _a.changeTypeBitSet();
        }
 
        @Override
        protected Array<Boolean> changeTypeBoolean() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeBoolean'");
+               return _a.changeTypeBoolean();
        }
 
        @Override
        protected Array<Double> changeTypeDouble() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeDouble'");
+               return _a.changeTypeDouble();
        }
 
        @Override
        protected Array<Float> changeTypeFloat() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeFloat'");
+               return _a.changeTypeFloat();
        }
 
        @Override
        protected Array<Integer> changeTypeInteger() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeInteger'");
+               return _a.changeTypeInteger();
        }
 
        @Override
        protected Array<Long> changeTypeLong() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeLong'");
+               return _a.changeTypeLong();
        }
 
        @Override
        protected Array<String> changeTypeString() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeString'");
+               return _a.changeTypeString();
        }
 
        @Override
        protected Array<Character> changeTypeCharacter() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeCharacter'");
+               return _a.changeTypeCharacter();
        }
 
        @Override
        public void fill(String val) {
-               throw new NotImplementedException("Unimplemented method 
'fill'");
+               _a.fill(val);

Review Comment:
   not correct, also fill the ragged part therefore reallocate.



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, double value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, String value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void setFromOtherType(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherType'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherType(rl, ru, value);
        }
 
        @Override
        public void set(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       if(value instanceof RaggedArray)
+                               _a.set(rl, ru, ((RaggedArray) 
value).getInnerArray());
+                       else if(_a.getClass() == value.getClass())
+                               _a.set(rl, ru, value);
+                       else
+                               throw new RuntimeException("RaggedArray set: 
value type should be same to RaggedArray type " + _a.getClass());
        }
 
+
        @Override
        public void set(int rl, int ru, Array<T> value, int rlSrc) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       if(value instanceof RaggedArray)
+                               _a.set(rl, ru, ((RaggedArray) 
value).getInnerArray(), rlSrc);
+                       else if(_a.getClass() == value.getClass())
+                               _a.set(rl, ru, value, rlSrc);
+                       else
+                               throw new RuntimeException("RaggedArray set: 
value type should be same to RaggedArray type " + _a.getClass());
+
        }
 
        @Override
        public void setNz(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 
'setNz'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setNz(rl, ru, value);
        }
 
        @Override
        public void setFromOtherTypeNz(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherTypeNz'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherTypeNz(rl, ru, value);
        }
 
        @Override
        public void append(String value) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               _a.append(value);
+               super._size += 1;
        }
 
        @Override
        public void append(T value) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               _a.append(value);
+               super._size += 1;
        }
 
        @Override
        public Array<T> append(Array<T> other) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               super._size += other._size;
+               return _a.append(other);
        }
 
        @Override
        public Array<T> slice(int rl, int ru) {
-               throw new NotImplementedException("Unimplemented method 
'slice'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       return _a.slice(rl, ru);
+               else if(rl >= 0 && ru >= _a._size )
+                       return _a.slice(rl, _a._size - 1);
+               return null;
        }
 
        @Override
        public void reset(int size) {
-               throw new NotImplementedException("Unimplemented method 
'reset'");
+               _a.reset(size);
+               super._size = size;
        }
 
        @Override
        public byte[] getAsByteArray() {
-               throw new NotImplementedException("Unimplemented method 
'getAsByteArray'");
+               return _a.getAsByteArray();
        }
 
        @Override
        public ValueType getValueType() {
-               throw new NotImplementedException("Unimplemented method 
'getValueType'");
+               return _a.getValueType();
        }
 
        @Override
        public Pair<ValueType, Boolean> analyzeValueType() {
-               throw new NotImplementedException("Unimplemented method 
'analyzeValueType'");
+               return _a.analyzeValueType();
        }
 
        @Override
        public FrameArrayType getFrameArrayType() {
-               throw new NotImplementedException("Unimplemented method 
'getFrameArrayType'");
+               return FrameArrayType.RAGGED;
        }
 
        @Override
        public long getExactSerializedSize() {
-               throw new NotImplementedException("Unimplemented method 
'getExactSerializedSize'");
+               return _a.getExactSerializedSize();
        }
 
        @Override
        protected Array<Boolean> changeTypeBitSet() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeBitSet'");
+               return _a.changeTypeBitSet();
        }
 
        @Override
        protected Array<Boolean> changeTypeBoolean() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeBoolean'");
+               return _a.changeTypeBoolean();
        }
 
        @Override
        protected Array<Double> changeTypeDouble() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeDouble'");
+               return _a.changeTypeDouble();
        }
 
        @Override
        protected Array<Float> changeTypeFloat() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeFloat'");
+               return _a.changeTypeFloat();
        }
 
        @Override
        protected Array<Integer> changeTypeInteger() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeInteger'");
+               return _a.changeTypeInteger();
        }
 
        @Override
        protected Array<Long> changeTypeLong() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeLong'");
+               return _a.changeTypeLong();
        }
 
        @Override
        protected Array<String> changeTypeString() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeString'");
+               return _a.changeTypeString();
        }
 
        @Override
        protected Array<Character> changeTypeCharacter() {
-               throw new NotImplementedException("Unimplemented method 
'changeTypeCharacter'");
+               return _a.changeTypeCharacter();
        }
 
        @Override
        public void fill(String val) {
-               throw new NotImplementedException("Unimplemented method 
'fill'");
+               _a.fill(val);
        }
 
        @Override
        public void fill(T val) {
-               throw new NotImplementedException("Unimplemented method 
'fill'");
+               _a.fill(val);
        }
 
        @Override
        public boolean isShallowSerialize() {
-               throw new NotImplementedException("Unimplemented method 
'isShallowSerialize'");
+               return _a.isShallowSerialize();
        }
 
        @Override
        public boolean isEmpty() {
-               throw new NotImplementedException("Unimplemented method 
'isEmpty'");
+               return _a.isEmpty();
        }
 
        @Override
        public Array<T> select(int[] indices) {
-               throw new NotImplementedException("Unimplemented method 
'select'");
+               return _a.select(Arrays.stream(indices).filter(x -> x < _size 
&& x >= 0).toArray());

Review Comment:
   no filter. also include indexes inside the ragged part, just as null.



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);

Review Comment:
   and write a LOG.warn("Something")



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);

Review Comment:
   else, reallocate _a to to index size.



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();

Review Comment:
   throw exception on this one. since the API expects to get the full array of 
size m.



##########
src/main/java/org/apache/sysds/runtime/frame/data/columns/RaggedArray.java:
##########
@@ -49,207 +49,261 @@ public class RaggedArray<T> extends Array<T> {
         */
        public RaggedArray(T[] a, int m) {
                super(m);
-               throw new NotImplementedException();
+               this._a = ArrayFactory.create(a);
+       }
+
+       public RaggedArray(Array<T> a, int m) {
+               super(m);
+               this._a = a;
        }
 
        @Override
        public void write(DataOutput out) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'write'");
+               _a.write(out);
        }
 
        @Override
        public void readFields(DataInput in) throws IOException {
-               throw new NotImplementedException("Unimplemented method 
'readFields'");
+               _a.readFields(in);
        }
 
        @Override
        public T get(int index) {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               if (index > super._size || index < 0)
+                       throw new ArrayIndexOutOfBoundsException("Index " + 
index + " out of bounds " + super._size);
+               return index < _a._size ? _a.get(index) : null;
+
+       }
+
+       protected Array<T> getInnerArray(){
+               return _a;
        }
 
        @Override
        public Object get() {
-               throw new NotImplementedException("Unimplemented method 'get'");
+               return _a.get();
        }
 
        @Override
        public double getAsDouble(int i) {
-               throw new NotImplementedException("Unimplemented method 
'getAsDouble'");
+               return i < _a._size ? _a.getAsDouble(i) : Double.NaN;
+       }
+
+       @Override
+       public double getAsNaNDouble(int i) {
+               return i < _a._size ? _a.getAsNaNDouble(i) : Double.NaN;
        }
 
        @Override
        public void set(int index, T value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, double value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void set(int index, String value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if (index < _a._size)
+                       _a.set(index, value);
        }
 
        @Override
        public void setFromOtherType(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherType'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherType(rl, ru, value);
        }
 
        @Override
        public void set(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       if(value instanceof RaggedArray)
+                               _a.set(rl, ru, ((RaggedArray) 
value).getInnerArray());
+                       else if(_a.getClass() == value.getClass())
+                               _a.set(rl, ru, value);
+                       else
+                               throw new RuntimeException("RaggedArray set: 
value type should be same to RaggedArray type " + _a.getClass());
        }
 
+
        @Override
        public void set(int rl, int ru, Array<T> value, int rlSrc) {
-               throw new NotImplementedException("Unimplemented method 'set'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       if(value instanceof RaggedArray)
+                               _a.set(rl, ru, ((RaggedArray) 
value).getInnerArray(), rlSrc);
+                       else if(_a.getClass() == value.getClass())
+                               _a.set(rl, ru, value, rlSrc);
+                       else
+                               throw new RuntimeException("RaggedArray set: 
value type should be same to RaggedArray type " + _a.getClass());
+
        }
 
        @Override
        public void setNz(int rl, int ru, Array<T> value) {
-               throw new NotImplementedException("Unimplemented method 
'setNz'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setNz(rl, ru, value);
        }
 
        @Override
        public void setFromOtherTypeNz(int rl, int ru, Array<?> value) {
-               throw new NotImplementedException("Unimplemented method 
'setFromOtherTypeNz'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       _a.setFromOtherTypeNz(rl, ru, value);
        }
 
        @Override
        public void append(String value) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               _a.append(value);
+               super._size += 1;
        }
 
        @Override
        public void append(T value) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               _a.append(value);
+               super._size += 1;
        }
 
        @Override
        public Array<T> append(Array<T> other) {
-               throw new NotImplementedException("Unimplemented method 
'append'");
+               super._size += other._size;
+               return _a.append(other);
        }
 
        @Override
        public Array<T> slice(int rl, int ru) {
-               throw new NotImplementedException("Unimplemented method 
'slice'");
+               if(rl >= 0 && rl < _a._size && ru < _a._size)
+                       return _a.slice(rl, ru);
+               else if(rl >= 0 && ru >= _a._size )
+                       return _a.slice(rl, _a._size - 1);
+               return null;
        }
 
        @Override
        public void reset(int size) {
-               throw new NotImplementedException("Unimplemented method 
'reset'");
+               _a.reset(size);
+               super._size = size;
        }
 
        @Override
        public byte[] getAsByteArray() {
-               throw new NotImplementedException("Unimplemented method 
'getAsByteArray'");
+               return _a.getAsByteArray();

Review Comment:
   throw some exception here. this will not work, since the caller expects the 
byte array to be certain m size * nBytes per value.



##########
src/test/java/org/apache/sysds/test/component/frame/array/FrameArrayTests.java:
##########
@@ -1779,6 +1782,22 @@ protected static Array<?> createDDC(FrameArrayType t, 
int size, int seed) {
                        case CHARACTER:
                                return DDCArray
                                        
.compressToDDC(ArrayFactory.create(generateRandomCharacterNUniqueLengthOpt(size,
 seed, nUnique)));
+                       case RAGGED:
+                               Random rand = new Random(seed);
+                               switch(rand.nextInt(7)) {
+                                       case 0:
+                                               return 
ArrayFactory.create(generateRandomIntegerOpt(size, seed), size);

Review Comment:
   we have to test ragged dedicated with smaller arrays inside the ragged part.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to