[ https://issues.apache.org/jira/browse/ARROW-972?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16244881#comment-16244881 ]
ASF GitHub Bot commented on ARROW-972: -------------------------------------- pcmoritz commented on a change in pull request #1216: ARROW-972: UnionArray in pyarrow URL: https://github.com/apache/arrow/pull/1216#discussion_r149819821 ########## File path: python/pyarrow/types.pxi ########## @@ -1066,6 +1079,30 @@ def struct(fields): return pyarrow_wrap_data_type(struct_type) +def union(children_types, mode): + """ + Create UnionType from children types + """ + cdef: + Field f + DataType child_type + vector[shared_ptr[CField]] c_fields + vector[uint8_t] type_codes + shared_ptr[CDataType] union_type + int i + + for i, child_type in enumerate(children_types): + type_codes.push_back(i) + f = field(str(i), child_type) + c_fields.push_back(f.sp_field) + + if mode == UnionMode_SPARSE: Review comment: If we don't do this and plug mode in directly below, clang complains: ``` [ 33%] Building CXX object CMakeFiles/lib.dir/lib.cxx.o /Users/pcmoritz/arrow/python/build/temp.macosx-10.7-x86_64-3.5/lib.cxx:100873:100: error: invalid operands to binary expression ('enum arrow::UnionMode' and 'int') return (enum arrow::UnionMode) (((((enum arrow::UnionMode)digits[1]) << PyLong_SHIFT) | (enum arrow::UnionMode)digits[0])); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~ /Users/pcmoritz/arrow/python/build/temp.macosx-10.7-x86_64-3.5/lib.cxx:100882:102: error: invalid operands to binary expression ('enum arrow::UnionMode' and 'int') return (enum arrow::UnionMode) (((((((enum arrow::UnionMode)digits[2]) << PyLong_SHIFT) | (enum arrow::UnionMode)digits[1]) << PyLong_SHIFT) ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~ /Users/pcmoritz/arrow/python/build/temp.macosx-10.7-x86_64-3.5/lib.cxx:100891:104: error: invalid operands to binary expression ('enum arrow::UnionMode' and 'int') return (enum arrow::UnionMode) (((((((((enum arrow::UnionMode)digits[3]) << PyLong_SHIFT) | (enum arrow::UnionMode)digits[2]) << PyLong_SHIFT... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~ /Users/pcmoritz/arrow/python/build/temp.macosx-10.7-x86_64-3.5/lib.cxx:100929:130: error: invalid operands to binary expression ('enum arrow::UnionMode' and 'int') return (enum arrow::UnionMode) (((enum arrow::UnionMode)-1)*(((((enum arrow::UnionMode)digits[1]) << PyLong_SHIFT) | (enum arrow::UnionMode)d... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~ /Users/pcmoritz/arrow/python/build/temp.macosx-10.7-x86_64-3.5/lib.cxx:100938:101: error: invalid operands to binary expression ('enum arrow::UnionMode' and 'int') return (enum arrow::UnionMode) ((((((enum arrow::UnionMode)digits[1]) << PyLong_SHIFT) | (enum arrow::UnionMode)digits[0]))); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~ /Users/pcmoritz/arrow/python/build/temp.macosx-10.7-x86_64-3.5/lib.cxx:100947:132: error: invalid operands to binary expression ('enum arrow::UnionMode' and 'int') return (enum arrow::UnionMode) (((enum arrow::UnionMode)-1)*(((((((enum arrow::UnionMode)digits[2]) << PyLong_SHIFT) | (enum arrow::UnionMode... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~ /Users/pcmoritz/arrow/python/build/temp.macosx-10.7-x86_64-3.5/lib.cxx:100956:103: error: invalid operands to binary expression ('enum arrow::UnionMode' and 'int') return (enum arrow::UnionMode) ((((((((enum arrow::UnionMode)digits[2]) << PyLong_SHIFT) | (enum arrow::UnionMode)digits[1]) << PyLong_SHIFT) ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~ /Users/pcmoritz/arrow/python/build/temp.macosx-10.7-x86_64-3.5/lib.cxx:100965:134: error: invalid operands to binary expression ('enum arrow::UnionMode' and 'int') return (enum arrow::UnionMode) (((enum arrow::UnionMode)-1)*(((((((((enum arrow::UnionMode)digits[3]) << PyLong_SHIFT) | (enum arrow::UnionMo... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~ /Users/pcmoritz/arrow/python/build/temp.macosx-10.7-x86_64-3.5/lib.cxx:100974:105: error: invalid operands to binary expression ('enum arrow::UnionMode' and 'int') return (enum arrow::UnionMode) ((((((((((enum arrow::UnionMode)digits[3]) << PyLong_SHIFT) | (enum arrow::UnionMode)digits[2]) << PyLong_SHIFT... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~ 9 errors generated. ``` ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > [Python] Add test cases and basic APIs for UnionArray > ----------------------------------------------------- > > Key: ARROW-972 > URL: https://issues.apache.org/jira/browse/ARROW-972 > Project: Apache Arrow > Issue Type: New Feature > Components: Python > Affects Versions: 0.3.0 > Reporter: Wes McKinney > Assignee: Philipp Moritz > Labels: pull-request-available > Fix For: 0.8.0 > > > While this is implemented in C++, there isn't any API exposure yet in Python -- This message was sent by Atlassian JIRA (v6.4.14#64029)