-
Notifications
You must be signed in to change notification settings - Fork 3.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GH-37472: [MATLAB] Implement the isequal()
method on arrow.type.Type
#37474
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the pull request!
isequal()
method on arrow.type.Type
isequal()
method on arrow.type.Type
+1 |
After merging your PR, Conbench analyzed the 5 benchmarking runs that have been run so far on merge-commit 602083b. There were no benchmark performance regressions. 🎉 The full Conbench report has more details. It also includes information about possible false positives for unstable benchmarks that are known to sometimes produce them. |
…LAB class (#37617) ### Rationale for this change Following on to #37474, #37446, and #37525, we should implement `isequal` for the `arrow.type.Field` MATLAB class. ### What changes are included in this PR? 1. Implemented the `isequal` method for `arrow.type.Field` ### Are these changes tested? Yes. Add new unit tests to `tField.m` ### Are there any user-facing changes? Yes. Users can now call `isequal` on `arrow.type.Field`s to determine if two fields are equal. **Example** ```matlab >> f1 = arrow.field("A", arrow.time32(TimeUnit="Second")); >> f2 = arrow.field("B", arrow.time32(TimeUnit="Second")); >> f3 = arrow.field("A", arrow.time32(TimeUnit="Millisecond")); >> isequal(f1, f1) ans = logical 1 % Name properties differ >> isequal(f1, f2) ans = logical 0 % Type properties differ >> isequal(f1, f3) ans = logical 0 ``` ### Future Directions 1. #37568 2. #37570 * Closes: #37569 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
… MATLAB class (#37619) ### Rationale for this change Following on to #37474, #37446, and #37525, we should implement `isequal` for the `arrow.tabular.Schema` MATLAB class. ### What changes are included in this PR? 1. Updated `arrow.tabular.Schema` class to inherit from `matlab.mixin.Scalar`. 2. Added `isequal` method to `arrow.tabular.Schema`. ### Are these changes tested? Yes. Added `isequal` unit tests to `tSchema.m` ### Are there any user-facing changes? Yes. Users can now compare two `arrow.tabular.Schema` objects via `isequal`. **Example** ```matlab >> schema1 = arrow.schema([arrow.field("A", arrow.uint8), arrow.field("B", arrow.uint16)]); >> schema2 = arrow.schema([arrow.field("A", arrow.uint8), arrow.field("B", arrow.uint16)]); >> schema3 = arrow.schema([arrow.field("A", arrow.uint8)]); >> isequal(schema1, schema2) ans = logical 1 >> isequal(schema1, schema3) ans = logical 0 ``` ### Future Directions 1. #37570 * Closes: #37568 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…atch` MATLAB class (#37627) ### Rationale for this change Following on to #37474, #37446, and #37525, we should implement `isequal` for the `arrow.tabular.RecordBatch` MATLAB class. ### What changes are included in this PR? 1. Implemented `isequal` method for `arrow.tabular.RecordBatch` ### Are these changes tested? Yes. Added `isequal` unit tests to `tRecordBatch.m`. ### Are there any user-facing changes? Yes, users can now use `isequal` to compare `arrow.tabular.RecordBatch`es. **Example** ```matlab >> t1 = table(1, "A", false, VariableNames=["Number", "String", "Logical"]); >> t2 = table([1; 2], ["A"; "B"], [false; false], VariableNames=["Number", "String", "Logical"]); >> rb1 = arrow.recordBatch(t1); >> rb2 = arrow.recordBatch(t2); >> rb3 = arrow.recordBatch(t1); >> isequal(rb1, rb2) ans = logical 0 >> isequal(rb1, rb3) ans = logical 1 ``` ### Future Directions 1. #37628 * Closes: #37570 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…MATLAB class (#37629) ### Rationale for this change Following on to #37474, #37446, #37525, and #37627, we should implement `isequal` for the arrow.tabular.Table` MATLAB class. ### What changes are included in this PR? 1. Add new function `arrow.internal.tabular.isequal` that both `arrow.tabular.RecordBatch` and `arrow.tabular.Table` can use to implement their `isequal` methods. 2. Modified `arrow.tabular.RecordBatch` to use the new `isequal` package function to implement its `isequal` method. 3. Implemented the `isequal` method for `arrow.tabular.Table` using the new `isequal` package function. ### Are these changes tested? Yes, added `isequal` unit tests to `tTable.m` ### Are there any user-facing changes? Yes. Users can now compare `arrow.tabular.Table`s using `isequal`: ```matlab >> t1 = table(1, "A", false, VariableNames=["Number", "String", "Logical"]); >> t2 = table([1; 2], ["A"; "B"], [false; false], VariableNames=["Number", "String", "Logical"]); >> tbl1 = arrow.table(t1); >> tbl2 = arrow.table(t2); >> tbl3 = arrow.table(t1); >> isequal(tbl1, tbl2) ans = logical 0 >> isequal(tbl1, tbl3) ans = logical 1 ``` * Closes: #37628 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…ype.Type` (apache#37474) ### Rationale for this change Currently, it's not possible to determine if two `arrow.type.Type` instances are equal because the `isequal()` method always returns `false` by default: ```matlab >> t = arrow.int32() t = Int32Type with properties: ID: Int32 % Compare a with itself >> tf = isequal(t, t) tf = logical 0 ``` ### What changes are included in this PR? 1. Implemented the `isequal` method on all concrete subclasses of `arrow.type.Type` 2. Added a new method called `isEqual()` on the `arrow::matlab::type::proxy::Type` class. **Example Usage** ```matlab >> t1 = arrow.timestamp(TimeUnit="Second"); >> t2 = arrow.timestamp(TimeUnit="Microsecond"); >> t3 = arrow.timestamp(TimeUnit="Second"); % Compare t1 and t2 >> tf1 = isequal(t1, t2) tf1 = logical 0 % Compare t1 and t3 >> tf2 = isequal(t1, t3) tf2 = logical 1 ``` ### Are these changes tested? Yes. Added test cases verifying `isequal` behaves as expected for all concrete subclasses of `arrow.type.Type`. ### Are there any user-facing changes? Yes. Users can now use the `isequal` method to compare `arrow.type.Type` instances for equality. ### Future Directions 1. Implement the `isequal` method for `arrow.type.Field` 2. Implement the `isequal` method for `arrow.tabular.Schema` * Closes: apache#37472 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…d` MATLAB class (apache#37617) ### Rationale for this change Following on to apache#37474, apache#37446, and apache#37525, we should implement `isequal` for the `arrow.type.Field` MATLAB class. ### What changes are included in this PR? 1. Implemented the `isequal` method for `arrow.type.Field` ### Are these changes tested? Yes. Add new unit tests to `tField.m` ### Are there any user-facing changes? Yes. Users can now call `isequal` on `arrow.type.Field`s to determine if two fields are equal. **Example** ```matlab >> f1 = arrow.field("A", arrow.time32(TimeUnit="Second")); >> f2 = arrow.field("B", arrow.time32(TimeUnit="Second")); >> f3 = arrow.field("A", arrow.time32(TimeUnit="Millisecond")); >> isequal(f1, f1) ans = logical 1 % Name properties differ >> isequal(f1, f2) ans = logical 0 % Type properties differ >> isequal(f1, f3) ans = logical 0 ``` ### Future Directions 1. apache#37568 2. apache#37570 * Closes: apache#37569 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…chema` MATLAB class (apache#37619) ### Rationale for this change Following on to apache#37474, apache#37446, and apache#37525, we should implement `isequal` for the `arrow.tabular.Schema` MATLAB class. ### What changes are included in this PR? 1. Updated `arrow.tabular.Schema` class to inherit from `matlab.mixin.Scalar`. 2. Added `isequal` method to `arrow.tabular.Schema`. ### Are these changes tested? Yes. Added `isequal` unit tests to `tSchema.m` ### Are there any user-facing changes? Yes. Users can now compare two `arrow.tabular.Schema` objects via `isequal`. **Example** ```matlab >> schema1 = arrow.schema([arrow.field("A", arrow.uint8), arrow.field("B", arrow.uint16)]); >> schema2 = arrow.schema([arrow.field("A", arrow.uint8), arrow.field("B", arrow.uint16)]); >> schema3 = arrow.schema([arrow.field("A", arrow.uint8)]); >> isequal(schema1, schema2) ans = logical 1 >> isequal(schema1, schema3) ans = logical 0 ``` ### Future Directions 1. apache#37570 * Closes: apache#37568 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…ecordBatch` MATLAB class (apache#37627) ### Rationale for this change Following on to apache#37474, apache#37446, and apache#37525, we should implement `isequal` for the `arrow.tabular.RecordBatch` MATLAB class. ### What changes are included in this PR? 1. Implemented `isequal` method for `arrow.tabular.RecordBatch` ### Are these changes tested? Yes. Added `isequal` unit tests to `tRecordBatch.m`. ### Are there any user-facing changes? Yes, users can now use `isequal` to compare `arrow.tabular.RecordBatch`es. **Example** ```matlab >> t1 = table(1, "A", false, VariableNames=["Number", "String", "Logical"]); >> t2 = table([1; 2], ["A"; "B"], [false; false], VariableNames=["Number", "String", "Logical"]); >> rb1 = arrow.recordBatch(t1); >> rb2 = arrow.recordBatch(t2); >> rb3 = arrow.recordBatch(t1); >> isequal(rb1, rb2) ans = logical 0 >> isequal(rb1, rb3) ans = logical 1 ``` ### Future Directions 1. apache#37628 * Closes: apache#37570 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…able` MATLAB class (apache#37629) ### Rationale for this change Following on to apache#37474, apache#37446, apache#37525, and apache#37627, we should implement `isequal` for the arrow.tabular.Table` MATLAB class. ### What changes are included in this PR? 1. Add new function `arrow.internal.tabular.isequal` that both `arrow.tabular.RecordBatch` and `arrow.tabular.Table` can use to implement their `isequal` methods. 2. Modified `arrow.tabular.RecordBatch` to use the new `isequal` package function to implement its `isequal` method. 3. Implemented the `isequal` method for `arrow.tabular.Table` using the new `isequal` package function. ### Are these changes tested? Yes, added `isequal` unit tests to `tTable.m` ### Are there any user-facing changes? Yes. Users can now compare `arrow.tabular.Table`s using `isequal`: ```matlab >> t1 = table(1, "A", false, VariableNames=["Number", "String", "Logical"]); >> t2 = table([1; 2], ["A"; "B"], [false; false], VariableNames=["Number", "String", "Logical"]); >> tbl1 = arrow.table(t1); >> tbl2 = arrow.table(t2); >> tbl3 = arrow.table(t1); >> isequal(tbl1, tbl2) ans = logical 0 >> isequal(tbl1, tbl3) ans = logical 1 ``` * Closes: apache#37628 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…ype.Type` (apache#37474) ### Rationale for this change Currently, it's not possible to determine if two `arrow.type.Type` instances are equal because the `isequal()` method always returns `false` by default: ```matlab >> t = arrow.int32() t = Int32Type with properties: ID: Int32 % Compare a with itself >> tf = isequal(t, t) tf = logical 0 ``` ### What changes are included in this PR? 1. Implemented the `isequal` method on all concrete subclasses of `arrow.type.Type` 2. Added a new method called `isEqual()` on the `arrow::matlab::type::proxy::Type` class. **Example Usage** ```matlab >> t1 = arrow.timestamp(TimeUnit="Second"); >> t2 = arrow.timestamp(TimeUnit="Microsecond"); >> t3 = arrow.timestamp(TimeUnit="Second"); % Compare t1 and t2 >> tf1 = isequal(t1, t2) tf1 = logical 0 % Compare t1 and t3 >> tf2 = isequal(t1, t3) tf2 = logical 1 ``` ### Are these changes tested? Yes. Added test cases verifying `isequal` behaves as expected for all concrete subclasses of `arrow.type.Type`. ### Are there any user-facing changes? Yes. Users can now use the `isequal` method to compare `arrow.type.Type` instances for equality. ### Future Directions 1. Implement the `isequal` method for `arrow.type.Field` 2. Implement the `isequal` method for `arrow.tabular.Schema` * Closes: apache#37472 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…d` MATLAB class (apache#37617) ### Rationale for this change Following on to apache#37474, apache#37446, and apache#37525, we should implement `isequal` for the `arrow.type.Field` MATLAB class. ### What changes are included in this PR? 1. Implemented the `isequal` method for `arrow.type.Field` ### Are these changes tested? Yes. Add new unit tests to `tField.m` ### Are there any user-facing changes? Yes. Users can now call `isequal` on `arrow.type.Field`s to determine if two fields are equal. **Example** ```matlab >> f1 = arrow.field("A", arrow.time32(TimeUnit="Second")); >> f2 = arrow.field("B", arrow.time32(TimeUnit="Second")); >> f3 = arrow.field("A", arrow.time32(TimeUnit="Millisecond")); >> isequal(f1, f1) ans = logical 1 % Name properties differ >> isequal(f1, f2) ans = logical 0 % Type properties differ >> isequal(f1, f3) ans = logical 0 ``` ### Future Directions 1. apache#37568 2. apache#37570 * Closes: apache#37569 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…chema` MATLAB class (apache#37619) ### Rationale for this change Following on to apache#37474, apache#37446, and apache#37525, we should implement `isequal` for the `arrow.tabular.Schema` MATLAB class. ### What changes are included in this PR? 1. Updated `arrow.tabular.Schema` class to inherit from `matlab.mixin.Scalar`. 2. Added `isequal` method to `arrow.tabular.Schema`. ### Are these changes tested? Yes. Added `isequal` unit tests to `tSchema.m` ### Are there any user-facing changes? Yes. Users can now compare two `arrow.tabular.Schema` objects via `isequal`. **Example** ```matlab >> schema1 = arrow.schema([arrow.field("A", arrow.uint8), arrow.field("B", arrow.uint16)]); >> schema2 = arrow.schema([arrow.field("A", arrow.uint8), arrow.field("B", arrow.uint16)]); >> schema3 = arrow.schema([arrow.field("A", arrow.uint8)]); >> isequal(schema1, schema2) ans = logical 1 >> isequal(schema1, schema3) ans = logical 0 ``` ### Future Directions 1. apache#37570 * Closes: apache#37568 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…ecordBatch` MATLAB class (apache#37627) ### Rationale for this change Following on to apache#37474, apache#37446, and apache#37525, we should implement `isequal` for the `arrow.tabular.RecordBatch` MATLAB class. ### What changes are included in this PR? 1. Implemented `isequal` method for `arrow.tabular.RecordBatch` ### Are these changes tested? Yes. Added `isequal` unit tests to `tRecordBatch.m`. ### Are there any user-facing changes? Yes, users can now use `isequal` to compare `arrow.tabular.RecordBatch`es. **Example** ```matlab >> t1 = table(1, "A", false, VariableNames=["Number", "String", "Logical"]); >> t2 = table([1; 2], ["A"; "B"], [false; false], VariableNames=["Number", "String", "Logical"]); >> rb1 = arrow.recordBatch(t1); >> rb2 = arrow.recordBatch(t2); >> rb3 = arrow.recordBatch(t1); >> isequal(rb1, rb2) ans = logical 0 >> isequal(rb1, rb3) ans = logical 1 ``` ### Future Directions 1. apache#37628 * Closes: apache#37570 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
…able` MATLAB class (apache#37629) ### Rationale for this change Following on to apache#37474, apache#37446, apache#37525, and apache#37627, we should implement `isequal` for the arrow.tabular.Table` MATLAB class. ### What changes are included in this PR? 1. Add new function `arrow.internal.tabular.isequal` that both `arrow.tabular.RecordBatch` and `arrow.tabular.Table` can use to implement their `isequal` methods. 2. Modified `arrow.tabular.RecordBatch` to use the new `isequal` package function to implement its `isequal` method. 3. Implemented the `isequal` method for `arrow.tabular.Table` using the new `isequal` package function. ### Are these changes tested? Yes, added `isequal` unit tests to `tTable.m` ### Are there any user-facing changes? Yes. Users can now compare `arrow.tabular.Table`s using `isequal`: ```matlab >> t1 = table(1, "A", false, VariableNames=["Number", "String", "Logical"]); >> t2 = table([1; 2], ["A"; "B"], [false; false], VariableNames=["Number", "String", "Logical"]); >> tbl1 = arrow.table(t1); >> tbl2 = arrow.table(t2); >> tbl3 = arrow.table(t1); >> isequal(tbl1, tbl2) ans = logical 0 >> isequal(tbl1, tbl3) ans = logical 1 ``` * Closes: apache#37628 Authored-by: Sarah Gilmore <sgilmore@mathworks.com> Signed-off-by: Kevin Gurney <kgurney@mathworks.com>
Rationale for this change
Currently, it's not possible to determine if two
arrow.type.Type
instances are equal because theisequal()
method always returnsfalse
by default:What changes are included in this PR?
isequal
method on all concrete subclasses ofarrow.type.Type
isEqual()
on thearrow::matlab::type::proxy::Type
class.Example Usage
Are these changes tested?
Yes. Added test cases verifying
isequal
behaves as expected for all concrete subclasses ofarrow.type.Type
.Are there any user-facing changes?
Yes. Users can now use the
isequal
method to comparearrow.type.Type
instances for equality.Future Directions
isequal
method forarrow.type.Field
isequal
method forarrow.tabular.Schema
isequal()
method onarrow.type.Type
#37472