Commits


sgilmore10 authored and GitHub committed f44f7685638
GH-35676: [MATLAB] Add an `InferNulls` name-value pair for controlling null value inference during construction of `arrow.array.Array` (#35827) ### Rationale for this change This change lets users control toggle the automatic null-value detection behavior. By default, values MATLAB considers to be missing (e.g. `NaN` for `double`, `<missing>` for `string`, and `NaT` for `datetime`) will be treated as `null` values. Users can toggle this behavior on and off using the `InferNulls` name-value pair. **Example** ```matlab >> matlabArray = [1 NaN 3]' matlabArray = 1 NaN 3 % Treat NaN as a null value >> arrowArray1 = arrow.array.Float64Array(maltabArray, InferNulls=true) arrowArray1 = [ 1, null, 3 ] % Don't treat NaN as a null value >> arrowArray2 = arrow.array.Float64Array(maltabArray, InferNulls=false) arrowArray2 = [ 1, nan, 3 ] ``` We've only added this nv-pair to `arrow.array.Float64Array` for now. We'll add this nv-pair to the other types in a followup changelist. ### What changes are included in this PR? 1. Added `InferNulls` name-value pair to `arrow.array.Float64Array`. 2. Added common validation function `arrow.args.validateTypeAndShape` to remove duplicate validation code among the numeric classes. 3. Added a function called `arrow.args.parseValidElements` that the `arrow.array.<Type>Array` classes will be able to share for generating the logical mask of valid elements. ### Are these changes tested? Yes, we added a test pointed called `InferNulls` to the test class`tFloat64Array.m`. ### Are there any user-facing changes? Yes, users can now control how `NaN` values are treated when creating an `arrow.array.Float64Array`. ### Future Directions 1. Add a name-value pair to allow users to specify the valid elements themselves. 2. Extend null support to other numeric types. 3. We've been working on adding error-handling support to `mathworks/libmexclass`. We have a prototype to do this using status-like and result-like objects already pushed to a [branch](https://github.com/mathworks/libmexclass/tree/33). Once this branch is merged with the `main` branch of `mathworks/libmexclass`, we'll port it over. ### Notes Thank you @ kevingurney for all the help with this PR! * Closes: #35676 Lead-authored-by: Sarah Gilmore <sgilmore@mathworks.com> Co-authored-by: Kevin Gurney <kgurney@mathworks.com> Signed-off-by: Sutou Kouhei <kou@clear-code.com>