[
https://issues.apache.org/jira/browse/ARROW-15765?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17500816#comment-17500816
]
Vibhatha Lakmal Abeykoon edited comment on ARROW-15765 at 3/3/22, 2:59 PM:
---------------------------------------------------------------------------
[~apitrou] [~jorisvandenbossche] [~westonpace]
This is a very naive attempt on extracting types on a so-called class which
extends the Generics. The following example reflects extracting types from such
a class.
{code:java}
from typing import Any, List
import inspectfrom typing import TypeVar, Generic
T = TypeVar('T')
class Array(object):
def __init__(self, data: List[Any]):
self._data = data
@property
def data(self):
return self._data
def __repr__(self):
str1 = ""
for datum in self.data:
str1 += str(datum) + ", "
return str1
class ArrayLike(Array, Generic[T]):
def __init__(self, data:List[Any]):
super(data)
class DataType(object):
def __init__(self):
pass
class Int32Type(DataType):
def __init__(self):
self._type_id = "int32"
@property
def id(self):
return self._type_id
# test
a : Array = None
data : List[int] = [10, 20 , 30]
b: ArrayLike[Int32Type] = Array(data)
print(b)
# define a function with the generics
def sample_udf(array: ArrayLike[Int32Type]) -> ArrayLike[Int32Type]:
return arraysig = inspect.signature(sample_udf)
input_types = sig.parameters.values()
annotations = [val.annotation for val in input_types]
annotation = annotations[0]
inner_type = annotation.__args__[0]
inner_typeouter_type = annotation.__origin__
outer_typeexpr_arg = inner_type == Int32Type
assert(expr_arg)
expr_outer = outer_type == ArrayLike
assert(expr_outer) {code}
was (Author: vibhatha):
[~apitrou] [~jorisvandenbossche] [~westonpace]
This is a very naive attempt on extracting types on a so-called class which
extends the Generics. The following example reflects extracting types from such
a class.
{code:java}
from typing import Any, List
import inspectfrom typing import TypeVar, Generic
T = TypeVar('T')
class Array(object):
def __init__(self, data: List[Any]):
self._data = data
@property
def data(self):
return self._data
def __repr__(self):
str1 = ""
for datum in self.data:
str1 += str(datum) + ", "
return str1
class ArrayLike(Array, Generic[T]):
def __init__(self, data:List[Any]):
super(data)
class DataType(object):
def __init__(self):
pass
class Int32Type(DataType):
def __init__(self):
self._type_id = "int32"
@property
def id(self):
return self._type_id
#test
a : Array = None
data : List[int] = [10, 20 , 30]
b: ArrayLike[Int32Type] = Array(data)
print(b)
# define a function with the generics
def sample_udf(array: ArrayLike[Int32Type]) -> ArrayLike[Int32Type]:
return arraysig = inspect.signature(sample_udf)
input_types = sig.parameters.values()
annotations = [val.annotation for val in input_types]
annotation = annotations[0]
inner_type = annotation.__args__[0]
inner_typeouter_type = annotation.__origin__
outer_typeexpr_arg = inner_type == Int32Type
assert(expr_arg)
expr_outer = outer_type == ArrayLike
assert(expr_outer) {code}
> [Python] Extracting Type information from Python Objects
> --------------------------------------------------------
>
> Key: ARROW-15765
> URL: https://issues.apache.org/jira/browse/ARROW-15765
> Project: Apache Arrow
> Issue Type: Improvement
> Components: C++, Python
> Reporter: Vibhatha Lakmal Abeykoon
> Assignee: Vibhatha Lakmal Abeykoon
> Priority: Major
>
> When creating user defined functions or similar exercises where we want to
> extract the Arrow data types from the type hints, the existing Python API
> have some limitations.
> An example case is as follows;
> {code:java}
> def function(array1: pa.Int64Array, arrya2: pa.Int64Array) -> pa.Int64Array:
> return pc.call_function("add", [array1, array2])
> {code}
> We want to extract the fact that array1 is an `pa.Array` of `pa.Int32Type`.
> At the moment there doesn't exist a straightforward manner to get this done.
> So the idea is to expose this feature to Python.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)