-
Notifications
You must be signed in to change notification settings - Fork 601
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
feat(pyarrow): support __arrow_c_schema__
on ibis.Schema
objects
#9665
Conversation
pytest.importorskip("pyarrow") | ||
schema = sch.Schema({"a": dt.int64, "b": dt.string, "c": dt.boolean}) | ||
# smoketest, since no way to create schema from capsule in current pyarrow | ||
assert schema.__arrow_c_schema__() is not None |
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.
pa.schema
will use the __arrow_c_schema__
method for recent pyarrow (v15+ I think).
I sometimes use a wrapper class in tests to ensure it sees only the __arrow_c_schema__
method:
class CSchemaWrapper:
def __init__(obj):
self.obj = obj
def __arrow_c_schema__(self):
return self.obj.__arrow_c_schema__()
then check
pa.schema(CSchemaWrapper(schema))
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.
fwiw, I tried this (pa.schema(ibis_schema)
) with the ibis 9.2.0 and pyarrow 17.0 and alas, no dice:
File [~/test-hook/lib/python3.11/site-packages/pyarrow/types.pxi:5360](https://notebooks.freenome.net/user/mcorley/lab/tree/test-hook/lib/python3.11/site-packages/pyarrow/types.pxi#line=5359), in pyarrow.lib.schema()
File [~/test-hook/lib/python3.11/site-packages/pyarrow/types.pxi:3541](https://notebooks.freenome.net/user/mcorley/lab/tree/test-hook/lib/python3.11/site-packages/pyarrow/types.pxi#line=3540), in pyarrow.lib.field()
File [~/test-hook/lib/python3.11/site-packages/pyarrow/types.pxi:5301](https://notebooks.freenome.net/user/mcorley/lab/tree/test-hook/lib/python3.11/site-packages/pyarrow/types.pxi#line=5300), in pyarrow.lib.ensure_type()
TypeError: DataType expected, got <class 'ibis.expr.datatypes.core.String'>
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.
There's something odd going on with our base classes and whatever mechanism that pyarrow is using to invoke the method.
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.
Arg, pyarrow first checks whether the input is a Mapping
and then checks whether __arrow_c_schema__
exists 😞
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.
Seems like this functionality is broken in pyarrow: an object can't be both a mapping and implement the __arrow_c_schema__
interface.
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.
Opened up apache/arrow#43388 to track this.
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.
In the meantime I'll add an xfail
ing test that will start to pass once this is addressed.
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.
Part of #9660.