Path: blob/main/singlestoredb/tests/test_ext_func_data.py
469 views
#!/usr/bin/env python1# type: ignore2"""Test external function data parsing and formatting"""3import json4import unittest56import numpy as np7import pandas as pd8import polars as pl9import pyarrow as pa10from numpy.testing import assert_array_equal11from parameterized import parameterized1213from singlestoredb.functions.ext import json as jsonx14from singlestoredb.functions.ext import rowdat_1151617TINYINT = 118UNSIGNED_TINYINT = -119SMALLINT = 220UNSIGNED_SMALLINT = -221MEDIUMINT = 922UNSIGNED_MEDIUMINT = -923INT = 324UNSIGNED_INT = -325BIGINT = 826UNSIGNED_BIGINT = -827FLOAT = 428DOUBLE = 529STRING = 25430BINARY = -2543132col_spec = [33('tiny', TINYINT),34('unsigned_tiny', UNSIGNED_TINYINT),35('short', SMALLINT),36('unsigned_short', UNSIGNED_SMALLINT),37('long', INT),38('unsigned_long', UNSIGNED_INT),39('float', FLOAT),40('double', DOUBLE),41('longlong', BIGINT),42('unsigned_longlong', UNSIGNED_BIGINT),43('int24', MEDIUMINT),44('unsigned_int24', UNSIGNED_MEDIUMINT),45('string', STRING),46('binary', BINARY),47]4849col_types = [x[1] for x in col_spec]50col_names = [x[0] for x in col_spec]5152numpy_row_ids = np.array([1, 2, 3, 4])53numpy_nulls = np.array([False, False, False, True])5455numpy_tiny_arr = np.array([-1, 100, 120, 0], dtype=np.int8)56numpy_unsigned_tiny_arr = np.array([1, 100, 130, 0], dtype=np.uint8)57numpy_short_arr = np.array([-1, 32700, 254, 0], dtype=np.int16)58numpy_unsigned_short_arr = np.array([1, 32800, 254, 0], dtype=np.uint16)59numpy_long_arr = np.array([-1, 2147483600, 254, 0], dtype=np.int32)60numpy_unsigned_long_arr = np.array([1, 2147483800, 254, 0], dtype=np.uint32)61numpy_float_arr = np.array([-1, 100, 3.14159, np.nan], dtype=np.float32)62numpy_double_arr = np.array([-1, 100, 3.14159, np.nan], dtype=np.float64)63numpy_longlong_arr = np.array([-1, 100, 9223372036854775000, 0], dtype=np.int64)64numpy_unsigned_longlong_arr = np.array([1, 100, 9223372036854776000, 0], dtype=np.uint64)65numpy_int24_arr = np.array([-1, 8388600, 254, 0], dtype=np.int32)66numpy_unsigned_int24_arr = np.array([1, 16777210, 254, 0], dtype=np.uint32)67numpy_string_arr = np.array(['hi', 'bye', 'foo', None], dtype=object)68numpy_binary_arr = np.array([b'hi', b'bye', b'foo', None], dtype=object)6970numpy_data = [71(numpy_tiny_arr, numpy_nulls),72(numpy_unsigned_tiny_arr, numpy_nulls),73(numpy_short_arr, numpy_nulls),74(numpy_unsigned_short_arr, numpy_nulls),75(numpy_long_arr, numpy_nulls),76(numpy_unsigned_long_arr, numpy_nulls),77(numpy_float_arr, numpy_nulls),78(numpy_double_arr, numpy_nulls),79(numpy_longlong_arr, numpy_nulls),80(numpy_unsigned_longlong_arr, numpy_nulls),81(numpy_int24_arr, numpy_nulls),82(numpy_unsigned_int24_arr, numpy_nulls),83(numpy_string_arr, numpy_nulls),84(numpy_binary_arr, numpy_nulls),85]8687polars_row_ids = pl.Series(None, [1, 2, 3, 4], dtype=pl.Int64)88polars_nulls = pl.Series(None, numpy_nulls, dtype=pl.Boolean)8990polars_tiny_arr = \91pl.Series(None, numpy_tiny_arr, dtype=pl.Int8)92polars_unsigned_tiny_arr = \93pl.Series(None, numpy_unsigned_tiny_arr, dtype=pl.UInt8)94polars_short_arr = \95pl.Series(None, numpy_short_arr, dtype=pl.Int16)96polars_unsigned_short_arr = \97pl.Series(None, numpy_unsigned_short_arr, dtype=pl.UInt16)98polars_long_arr = \99pl.Series(None, numpy_long_arr, dtype=pl.Int32)100polars_unsigned_long_arr = \101pl.Series(None, numpy_unsigned_long_arr, dtype=pl.UInt32)102polars_float_arr = \103pl.Series(None, numpy_float_arr, dtype=pl.Float32)104polars_double_arr = \105pl.Series(None, numpy_double_arr, dtype=pl.Float64)106polars_longlong_arr = \107pl.Series(None, numpy_longlong_arr, dtype=pl.Int64)108polars_unsigned_longlong_arr = \109pl.Series(None, numpy_unsigned_longlong_arr, dtype=pl.UInt64)110polars_int24_arr = \111pl.Series(None, numpy_int24_arr, dtype=pl.Int32)112polars_unsigned_int24_arr = \113pl.Series(None, numpy_unsigned_int24_arr, dtype=pl.UInt32)114polars_string_arr = \115pl.Series(None, numpy_string_arr.tolist(), dtype=pl.Utf8)116polars_binary_arr = \117pl.Series(None, numpy_binary_arr.tolist(), dtype=pl.Binary)118119polars_data = [120(polars_tiny_arr, polars_nulls),121(polars_unsigned_tiny_arr, polars_nulls),122(polars_short_arr, polars_nulls),123(polars_unsigned_short_arr, polars_nulls),124(polars_long_arr, polars_nulls),125(polars_unsigned_long_arr, polars_nulls),126(polars_float_arr, polars_nulls),127(polars_double_arr, polars_nulls),128(polars_longlong_arr, polars_nulls),129(polars_unsigned_longlong_arr, polars_nulls),130(polars_int24_arr, polars_nulls),131(polars_unsigned_int24_arr, polars_nulls),132(polars_string_arr, polars_nulls),133(polars_binary_arr, polars_nulls),134]135136pandas_row_ids = pl.Series(None, [1, 2, 3, 4], dtype=pl.Int64)137pandas_nulls = pl.Series(None, numpy_nulls, dtype=pl.Boolean)138139pandas_tiny_arr = \140pd.Series(numpy_tiny_arr, dtype=np.int8)141pandas_unsigned_tiny_arr = \142pd.Series(numpy_unsigned_tiny_arr, dtype=np.uint8)143pandas_short_arr = \144pd.Series(numpy_short_arr, dtype=np.int16)145pandas_unsigned_short_arr = \146pd.Series(numpy_unsigned_short_arr, dtype=np.uint16)147pandas_long_arr = \148pd.Series(numpy_long_arr, dtype=np.int32)149pandas_unsigned_long_arr = \150pd.Series(numpy_unsigned_long_arr, dtype=np.uint32)151pandas_float_arr = \152pd.Series(numpy_float_arr, dtype=np.float32)153pandas_double_arr = \154pd.Series(numpy_double_arr, dtype=np.float64)155pandas_longlong_arr = \156pd.Series(numpy_longlong_arr, dtype=np.int64)157pandas_unsigned_longlong_arr = \158pd.Series(numpy_unsigned_longlong_arr, dtype=np.uint64)159pandas_int24_arr = \160pd.Series(numpy_int24_arr, dtype=np.int32)161pandas_unsigned_int24_arr = \162pd.Series(numpy_unsigned_int24_arr, dtype=np.uint32)163pandas_string_arr = \164pd.Series(numpy_string_arr, dtype=object)165pandas_binary_arr = \166pd.Series(numpy_binary_arr, dtype=object)167168pandas_data = [169(pandas_tiny_arr, pandas_nulls),170(pandas_unsigned_tiny_arr, pandas_nulls),171(pandas_short_arr, pandas_nulls),172(pandas_unsigned_short_arr, pandas_nulls),173(pandas_long_arr, pandas_nulls),174(pandas_unsigned_long_arr, pandas_nulls),175(pandas_float_arr, pandas_nulls),176(pandas_double_arr, pandas_nulls),177(pandas_longlong_arr, pandas_nulls),178(pandas_unsigned_longlong_arr, pandas_nulls),179(pandas_int24_arr, pandas_nulls),180(pandas_unsigned_int24_arr, pandas_nulls),181(pandas_string_arr, pandas_nulls),182(pandas_binary_arr, pandas_nulls),183]184185pyarrow_row_ids = pa.array([1, 2, 3, 4], type=pa.int64())186pyarrow_nulls = pa.array(numpy_nulls, type=pa.bool_())187188pyarrow_tiny_arr = \189pa.array(numpy_tiny_arr, type=pa.int8(), mask=numpy_nulls)190pyarrow_unsigned_tiny_arr = \191pa.array(numpy_unsigned_tiny_arr, type=pa.uint8(), mask=numpy_nulls)192pyarrow_short_arr = \193pa.array(numpy_short_arr, type=pa.int16(), mask=numpy_nulls)194pyarrow_unsigned_short_arr = \195pa.array(numpy_unsigned_short_arr, type=pa.uint16(), mask=numpy_nulls)196pyarrow_long_arr = \197pa.array(numpy_long_arr, type=pa.int32(), mask=numpy_nulls)198pyarrow_unsigned_long_arr = \199pa.array(numpy_unsigned_long_arr, type=pa.uint32(), mask=numpy_nulls)200pyarrow_float_arr = \201pa.array(numpy_float_arr, type=pa.float32(), mask=numpy_nulls)202pyarrow_double_arr = \203pa.array(numpy_double_arr, type=pa.float64(), mask=numpy_nulls)204pyarrow_longlong_arr = \205pa.array(numpy_longlong_arr, type=pa.int64(), mask=numpy_nulls)206pyarrow_unsigned_longlong_arr = \207pa.array(numpy_unsigned_longlong_arr, type=pa.uint64(), mask=numpy_nulls)208pyarrow_int24_arr = \209pa.array(numpy_int24_arr, type=pa.int32(), mask=numpy_nulls)210pyarrow_unsigned_int24_arr = \211pa.array(numpy_unsigned_int24_arr, type=pa.uint32(), mask=numpy_nulls)212pyarrow_string_arr = \213pa.array(numpy_string_arr, type=pa.string(), mask=numpy_nulls)214pyarrow_binary_arr = \215pa.array(numpy_binary_arr, type=pa.binary(), mask=numpy_nulls)216217pyarrow_data = [218(pyarrow_tiny_arr, pyarrow_nulls),219(pyarrow_unsigned_tiny_arr, pyarrow_nulls),220(pyarrow_short_arr, pyarrow_nulls),221(pyarrow_unsigned_short_arr, pyarrow_nulls),222(pyarrow_long_arr, pyarrow_nulls),223(pyarrow_unsigned_long_arr, pyarrow_nulls),224(pyarrow_float_arr, pyarrow_nulls),225(pyarrow_double_arr, pyarrow_nulls),226(pyarrow_longlong_arr, pyarrow_nulls),227(pyarrow_unsigned_longlong_arr, pyarrow_nulls),228(pyarrow_int24_arr, pyarrow_nulls),229(pyarrow_unsigned_int24_arr, pyarrow_nulls),230(pyarrow_string_arr, pyarrow_nulls),231(pyarrow_binary_arr, pyarrow_nulls),232]233234py_row_ids = [1, 2, 3, 4]235py_col_data = [236[237-1, 1, -1, 1, -1, 1, -1.0,238-1.0, -1, 1, -1, 1, 'hi', b'hi',239],240[241100, 100, 32700, 32800, 2147483600, 2147483800, 100.0,242100.0, 100, 100, 8388600, 16777200, 'bye', b'bye',243],244[245120, 130, 254, 254, 254, 254, 3.14159, 3.14159,2469223372036854775000, 9223372036854776000, 254, 254, 'foo', b'foo',247],248[249None, None, None, None, None, None, None,250None, None, None, None, None, None, None,251],252]253254255def assert_py_equal(x, y):256"""Compare rows of Python elements."""257for i, (row_x, row_y) in enumerate(zip(x, y)):258for j, (col_x, col_y) in enumerate(zip(row_x, row_y)):259assert type(col_x) is type(col_y), f'{type(col_x)} != {type(col_y)}'260if isinstance(col_x, float):261assert col_x - col_y < 0.0005, f'{i},{j}: {col_x} != {col_y}'262else:263assert col_x == col_y, f'{i},{j}: {col_x} != {col_y}'264265266class TestRowdat1(unittest.TestCase):267268def test_numpy_accel(self):269dump_res = rowdat_1._dump_numpy_accel(270col_types, numpy_row_ids, numpy_data,271)272load_res = rowdat_1._load_numpy_accel(col_spec, dump_res)273274ids = load_res[0]275columns = load_res[1]276277assert_array_equal(ids, numpy_row_ids)278assert_array_equal(columns[0][0], numpy_tiny_arr, strict=True)279assert_array_equal(columns[1][0], numpy_unsigned_tiny_arr, strict=True)280assert_array_equal(columns[2][0], numpy_short_arr, strict=True)281assert_array_equal(columns[3][0], numpy_unsigned_short_arr, strict=True)282assert_array_equal(columns[4][0], numpy_long_arr, strict=True)283assert_array_equal(columns[5][0], numpy_unsigned_long_arr, strict=True)284assert_array_equal(columns[6][0], numpy_float_arr, strict=True)285assert_array_equal(columns[7][0], numpy_double_arr, strict=True)286assert_array_equal(columns[8][0], numpy_longlong_arr, strict=True)287assert_array_equal(columns[9][0], numpy_unsigned_longlong_arr, strict=True)288assert_array_equal(columns[10][0], numpy_int24_arr, strict=True)289assert_array_equal(columns[11][0], numpy_unsigned_int24_arr, strict=True)290assert_array_equal(columns[12][0], numpy_string_arr, strict=True)291assert_array_equal(columns[13][0], numpy_binary_arr, strict=True)292293def test_numpy(self):294dump_res = rowdat_1._dump_numpy(295col_types, numpy_row_ids, numpy_data,296)297load_res = rowdat_1._load_numpy(col_spec, dump_res)298299ids = load_res[0]300columns = load_res[1]301302assert_array_equal(ids, numpy_row_ids)303assert_array_equal(columns[0][0], numpy_tiny_arr, strict=True)304assert_array_equal(columns[1][0], numpy_unsigned_tiny_arr, strict=True)305assert_array_equal(columns[2][0], numpy_short_arr, strict=True)306assert_array_equal(columns[3][0], numpy_unsigned_short_arr, strict=True)307assert_array_equal(columns[4][0], numpy_long_arr, strict=True)308assert_array_equal(columns[5][0], numpy_unsigned_long_arr, strict=True)309assert_array_equal(columns[6][0], numpy_float_arr, strict=True)310assert_array_equal(columns[7][0], numpy_double_arr, strict=True)311assert_array_equal(columns[8][0], numpy_longlong_arr, strict=True)312assert_array_equal(columns[9][0], numpy_unsigned_longlong_arr, strict=True)313assert_array_equal(columns[10][0], numpy_int24_arr, strict=True)314assert_array_equal(columns[11][0], numpy_unsigned_int24_arr, strict=True)315assert_array_equal(columns[12][0], numpy_string_arr, strict=True)316assert_array_equal(columns[13][0], numpy_binary_arr, strict=True)317318@parameterized.expand([319('tinyint exceeds low', TINYINT, -129, ValueError),320('tinyint low', TINYINT, -128, -128),321('tinyint high', TINYINT, 127, 127),322('tinyint exceeds high', TINYINT, 128, ValueError),323('tinyint zero', TINYINT, 0, 0),324325('unsigned tinyint exceeds low', UNSIGNED_TINYINT, -1, ValueError),326('unsigned tinyint low', UNSIGNED_TINYINT, 0, 0),327('unsigned tinyint high', UNSIGNED_TINYINT, 255, 255),328('unsigned tinyint exceeds high', UNSIGNED_TINYINT, 256, ValueError),329('unsigned tinyint zero', UNSIGNED_TINYINT, 0, 0),330331('smallint exceeds low', SMALLINT, -32769, ValueError),332('smallint low', SMALLINT, -32768, -32768),333('smallint high', SMALLINT, 32767, 32767),334('smallint exceeds high', SMALLINT, 32768, ValueError),335('smallint zero', SMALLINT, 0, 0),336337('unsigned smallint exceeds low', UNSIGNED_SMALLINT, -1, ValueError),338('unsigned smallint low', UNSIGNED_SMALLINT, 0, 0),339('unsigned smallint high', UNSIGNED_SMALLINT, 65535, 65535),340('unsigned smallint exceeds high', UNSIGNED_SMALLINT, 65536, ValueError),341('unsigned smallint zero', UNSIGNED_SMALLINT, 0, 0),342343('mediumint exceeds low', MEDIUMINT, -8388609, ValueError),344('mediumint low', MEDIUMINT, -8388608, -8388608),345('mediumint high', MEDIUMINT, 8388607, 8388607),346('mediumint exceeds high', MEDIUMINT, 8388608, ValueError),347('mediumint zero', MEDIUMINT, 0, 0),348349('unsigned mediumint exceeds low', UNSIGNED_MEDIUMINT, -1, ValueError),350('unsigned mediumint low', UNSIGNED_MEDIUMINT, 0, 0),351('unsigned mediumint high', UNSIGNED_MEDIUMINT, 16777215, 16777215),352('unsigned mediumint exceeds high', UNSIGNED_MEDIUMINT, 16777216, ValueError),353('unsigned mediumint zero', UNSIGNED_MEDIUMINT, 0, 0),354355('int exceeds low', INT, -2147483649, ValueError),356('int low', INT, -2147483648, -2147483648),357('int high', INT, 2147483647, 2147483647),358('int exceeds high', INT, 2147483648, ValueError),359('int zero', INT, 0, 0),360361('unsigned int exceeds low', UNSIGNED_INT, -1, ValueError),362('unsigned int low', UNSIGNED_INT, 0, 0),363('unsigned int high', UNSIGNED_INT, 4294967295, 4294967295),364('unsigned int exceeds high', UNSIGNED_INT, 4294967296, ValueError),365('unsigned int zero', UNSIGNED_INT, 0, 0),366367('bigint exceeds low', BIGINT, -2**63 - 1, ValueError),368('bigint low', BIGINT, -2**63, -2**63),369('bigint high', BIGINT, 2**63 - 1, 2**63 - 1),370('bigint exceeds high', BIGINT, 2**63, ValueError),371('bigint zero', BIGINT, 0, 0),372373('unsigned bigint exceeds low', UNSIGNED_BIGINT, -1, ValueError),374('unsigned bigint low', UNSIGNED_BIGINT, 0, 0),375('unsigned bigint high', UNSIGNED_BIGINT, 2**64 - 1, 2**64 - 1),376('unsigned bigint exceeds high', UNSIGNED_BIGINT, 2**64, ValueError),377('unsigned bigint zero', UNSIGNED_BIGINT, 0, 0),378])379def test_numpy_accel_limits(self, name, dtype, data, res):380numpy_row_ids = np.array([1])381382arr = np.array([data])383384if type(res) is type and issubclass(res, Exception):385# Accelerated386with self.assertRaises(res, msg=f'Expected {res} for {data} in {dtype}'):387rowdat_1._dump_numpy_accel(388[dtype], numpy_row_ids, [(arr, None)],389)390391# Pure Python392if 'mediumint exceeds' in name:393pass394else:395with self.assertRaises(res, msg=f'Expected {res} for {data} in {dtype}'):396rowdat_1._dump_numpy(397[dtype], numpy_row_ids, [(arr, None)],398)399400else:401# Accelerated402dump_res = rowdat_1._dump_numpy_accel(403[dtype], numpy_row_ids, [(arr, None)],404)405load_res = rowdat_1._load_numpy_accel([('x', dtype)], dump_res)406assert load_res[1][0][0] == res, \407f'Expected {res} for {data}, but got {load_res[1][0][0]} in {dtype}'408409# Pure Python410dump_res = rowdat_1._dump_numpy(411[dtype], numpy_row_ids, [(arr, None)],412)413load_res = rowdat_1._load_numpy([('x', dtype)], dump_res)414assert load_res[1][0][0] == res, \415f'Expected {res} for {data}, but got {load_res[1][0][0]} in {dtype}'416417@parameterized.expand([418(419'tinyint from int64', TINYINT,420np.array([-128, 0, 127, 67], dtype=np.int64),421np.array([-128, 0, 127, 67], dtype=np.int8),422),423(424'unsigned tinyint from int64', UNSIGNED_TINYINT,425np.array([0, 255, 241], dtype=np.int64),426np.array([0, 255, 241], dtype=np.uint8),427),428(429'smallint from int64', SMALLINT,430np.array([-32768, 0, 32767, 25557], dtype=np.int64),431np.array([-32768, 0, 32767, 25557], dtype=np.int16),432),433(434'unsigned smallint from int64', UNSIGNED_SMALLINT,435np.array([0, 65535, 40513], dtype=np.int64),436np.array([0, 65535, 40513], dtype=np.uint16),437),438(439'mediumint from int64', MEDIUMINT,440np.array([-8388608, 0, 8388607, 999678], dtype=np.int64),441np.array([-8388608, 0, 8388607, 999678], dtype=np.int32),442),443(444'unsigned mediumint from int64', UNSIGNED_MEDIUMINT,445np.array([0, 16777215, 9996781], dtype=np.int64),446np.array([0, 16777215, 9996781], dtype=np.uint32),447),448(449'int from int64', INT,450np.array([-2147483648, 0, 2147483647, 1123867689], dtype=np.int64),451np.array([-2147483648, 0, 2147483647, 1123867689], dtype=np.int32),452),453(454'unsigned int from int64', UNSIGNED_INT,455np.array([0, 4294967295, 339826098], dtype=np.int64),456np.array([0, 4294967295, 339826098], dtype=np.uint32),457),458(459'bigint from int64', BIGINT,460np.array([-2**63, 0, 2**63 - 1, 9381123867689], dtype=np.int64),461np.array([-2**63, 0, 2**63 - 1, 9381123867689], dtype=np.int64),462),463(464'unsigned bigint from int64', UNSIGNED_BIGINT,465np.array([0, 2**63 - 1, 2**63 - 87629], dtype=np.int64),466np.array([0, 2**63 - 1, 2**63 - 87629], dtype=np.uint64),467),468(469'float from int64', FLOAT,470np.array([-2**63, 0, 2**63 - 1, 9381123867689], dtype=np.int64),471np.array([-2**63, 0, 2**63 - 1, 9381123867689], dtype=np.float32),472),473(474'double from int64', DOUBLE,475np.array([-2**63, 0, 2**63 - 1, 9381123867689], dtype=np.int64),476np.array([-2**63, 0, 2**63 - 1, 9381123867689], dtype=np.float64),477),478479(480'tinyint from int16', TINYINT,481np.array([-128, 0, 127, 67], dtype=np.int16),482np.array([-128, 0, 127, 67], dtype=np.int8),483),484(485'unsigned tinyint from int16', UNSIGNED_TINYINT,486np.array([0, 255, 241], dtype=np.int16),487np.array([0, 255, 241], dtype=np.uint8),488),489(490'smallint from int16', SMALLINT,491np.array([-32768, 0, 32767, 25557], dtype=np.int16),492np.array([-32768, 0, 32767, 25557], dtype=np.int16),493),494(495'unsigned smallint from int16', UNSIGNED_SMALLINT,496np.array([0, 32767, 25557], dtype=np.int16),497np.array([0, 32767, 25557], dtype=np.uint16),498),499(500'mediumint from int16', MEDIUMINT,501np.array([-32768, 0, 32767, 25557], dtype=np.int16),502np.array([-32768, 0, 32767, 25557], dtype=np.int32),503),504(505'unsigned mediumint from int16', UNSIGNED_MEDIUMINT,506np.array([0, 32767, 25557], dtype=np.int16),507np.array([0, 32767, 25557], dtype=np.uint32),508),509(510'int from int16', INT,511np.array([-32768, 0, 32767, 25557], dtype=np.int16),512np.array([-32768, 0, 32767, 25557], dtype=np.int32),513),514(515'unsigned int from int16', UNSIGNED_INT,516np.array([0, 32767, 25557], dtype=np.int16),517np.array([0, 32767, 25557], dtype=np.uint32),518),519(520'bigint from int16', BIGINT,521np.array([-32768, 0, 32767, 25557], dtype=np.int16),522np.array([-32768, 0, 32767, 25557], dtype=np.int64),523),524(525'unsigned bigint from int16', UNSIGNED_BIGINT,526np.array([0, 32767, 25557], dtype=np.int16),527np.array([0, 32767, 25557], dtype=np.uint64),528),529(530'float from int16', FLOAT,531np.array([-32768, 0, 32767, 25557], dtype=np.int16),532np.array([-32768, 0, 32767, 25557], dtype=np.float32),533),534(535'double from int16', DOUBLE,536np.array([-32768, 0, 32767, 25557], dtype=np.int16),537np.array([-32768, 0, 32767, 25557], dtype=np.float64),538),539540(541'tinyint from int32', TINYINT,542np.array([-128, 0, 127, 67], dtype=np.int32),543np.array([-128, 0, 127, 67], dtype=np.int8),544),545(546'unsigned tinyint from int32', UNSIGNED_TINYINT,547np.array([0, 255, 241], dtype=np.int32),548np.array([0, 255, 241], dtype=np.uint8),549),550(551'smallint from int32', SMALLINT,552np.array([-32768, 0, 32767, 25557], dtype=np.int32),553np.array([-32768, 0, 32767, 25557], dtype=np.int16),554),555(556'unsigned smallint from int32', UNSIGNED_SMALLINT,557np.array([0, 65535, 40513], dtype=np.int32),558np.array([0, 65535, 40513], dtype=np.uint16),559),560(561'mediumint from int32', MEDIUMINT,562np.array([-8388608, 0, 8388607, 999678], dtype=np.int32),563np.array([-8388608, 0, 8388607, 999678], dtype=np.int32),564),565(566'unsigned mediumint from int32', UNSIGNED_MEDIUMINT,567np.array([0, 16777215, 9996781], dtype=np.int32),568np.array([0, 16777215, 9996781], dtype=np.uint32),569),570(571'int from int32', INT,572np.array([-2147483648, 0, 2147483647, 1123867689], dtype=np.int32),573np.array([-2147483648, 0, 2147483647, 1123867689], dtype=np.int32),574),575(576'unsigned int from int32', UNSIGNED_INT,577np.array([0, 2147483647, 3398268], dtype=np.int32),578np.array([0, 2147483647, 3398268], dtype=np.uint32),579),580(581'bigint from int32', BIGINT,582np.array([-2147483648, 0, 2147483647, 789768920], dtype=np.int32),583np.array([-2147483648, 0, 2147483647, 789768920], dtype=np.int64),584),585(586'unsigned bigint from int32', UNSIGNED_BIGINT,587np.array([0, 2147483647, 987362899], dtype=np.int32),588np.array([0, 2147483647, 987362899], dtype=np.uint64),589),590(591'float from int32', FLOAT,592np.array([-2147483648, 0, 2147483647, 789768920], dtype=np.int32),593np.array([-2147483648, 0, 2147483647, 789768920], dtype=np.float32),594),595(596'double from int32', DOUBLE,597np.array([-2147483648, 0, 2147483647, 789768920], dtype=np.int32),598np.array([-2147483648, 0, 2147483647, 789768920], dtype=np.float64),599),600601(602'tinyint from int64', TINYINT,603np.array([-128, 0, 127, 67], dtype=np.int64),604np.array([-128, 0, 127, 67], dtype=np.int8),605),606(607'unsigned tinyint from int64', UNSIGNED_TINYINT,608np.array([0, 255, 241], dtype=np.int64),609np.array([0, 255, 241], dtype=np.uint8),610),611(612'smallint from int64', SMALLINT,613np.array([-32768, 0, 32767, 25557], dtype=np.int64),614np.array([-32768, 0, 32767, 25557], dtype=np.int16),615),616(617'unsigned smallint from int64', UNSIGNED_SMALLINT,618np.array([0, 65535, 40513], dtype=np.int64),619np.array([0, 65535, 40513], dtype=np.uint16),620),621(622'mediumint from int64', MEDIUMINT,623np.array([-8388608, 0, 8388607, 999678], dtype=np.int64),624np.array([-8388608, 0, 8388607, 999678], dtype=np.int32),625),626(627'unsigned mediumint from int64', UNSIGNED_MEDIUMINT,628np.array([0, 16777215, 9996781], dtype=np.int64),629np.array([0, 16777215, 9996781], dtype=np.uint32),630),631(632'int from int64', INT,633np.array([-2147483648, 0, 2147483647, 1123867689], dtype=np.int64),634np.array([-2147483648, 0, 2147483647, 1123867689], dtype=np.int32),635),636(637'unsigned int from int64', UNSIGNED_INT,638np.array([0, 2147483647, 3398268], dtype=np.int64),639np.array([0, 2147483647, 3398268], dtype=np.uint32),640),641(642'bigint from int64', BIGINT,643np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.int64),644np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.int64),645),646(647'unsigned bigint from int64', UNSIGNED_BIGINT,648np.array([0, 2**63 - 1, 987362899], dtype=np.int64),649np.array([0, 2**63 - 1, 987362899], dtype=np.uint64),650),651(652'float from int64', FLOAT,653np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.int64),654np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.float32),655),656(657'double from int64', DOUBLE,658np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.int64),659np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.float64),660),661662(663'tinyint from float32', TINYINT,664np.array([-128, 0, 127, 67], dtype=np.float32),665np.array([-128, 0, 127, 67], dtype=np.int8),666),667(668'unsigned tinyint from float32', UNSIGNED_TINYINT,669np.array([0, 255, 241], dtype=np.float32),670np.array([0, 255, 241], dtype=np.uint8),671),672(673'smallint from float32', SMALLINT,674np.array([-32768, 0, 32767, 25557], dtype=np.float32),675np.array([-32768, 0, 32767, 25557], dtype=np.int16),676),677(678'unsigned smallint from float32', UNSIGNED_SMALLINT,679np.array([0, 65535, 40513], dtype=np.float32),680np.array([0, 65535, 40513], dtype=np.uint16),681),682(683'mediumint from float32', MEDIUMINT,684np.array([-8388608, 0, 8388607, 999678], dtype=np.float32),685np.array([-8388608, 0, 8388607, 999678], dtype=np.int32),686),687(688'unsigned mediumint from float32', UNSIGNED_MEDIUMINT,689np.array([0, 16777215, 9996781], dtype=np.float32),690np.array([0, 16777215, 9996781], dtype=np.uint32),691),692(693'int from float32', INT,694np.array([-2147483648, 0, 214748352, 1123867648], dtype=np.float32),695np.array([-2147483648, 0, 214748352, 1123867648], dtype=np.int32),696),697(698'unsigned int from float32', UNSIGNED_INT,699np.array([0, 214748368, 3398268], dtype=np.float32),700np.array([0, 214748368, 3398268], dtype=np.uint32),701),702(703'bigint from float32', BIGINT,704np.array([-2**63, 0, 2**23 - 1, 78976892928], dtype=np.float32),705np.array([-2**63, 0, 2**23 - 1, 78976892928], dtype=np.int64),706),707(708'unsigned bigint from float32', UNSIGNED_BIGINT,709np.array([0, 2**23 - 1, 987362880], dtype=np.float32),710np.array([0, 2**23 - 1, 987362880], dtype=np.uint64),711),712(713'float from float32', FLOAT,714np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.float32),715np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.float32),716),717(718'double from float32', DOUBLE,719np.array([-8388.099609, 0.0, 8388.099609, 1234.567017], dtype=np.float32),720np.array([-8388.099609, 0.0, 8388.099609, 1234.567017], dtype=np.float64),721),722723(724'tinyint from float64', TINYINT,725np.array([-128, 0, 127, 67], dtype=np.float64),726np.array([-128, 0, 127, 67], dtype=np.int8),727),728(729'unsigned tinyint from float64', UNSIGNED_TINYINT,730np.array([0, 255, 241], dtype=np.float64),731np.array([0, 255, 241], dtype=np.uint8),732),733(734'smallint from float64', SMALLINT,735np.array([-32768, 0, 32767, 25557], dtype=np.float64),736np.array([-32768, 0, 32767, 25557], dtype=np.int16),737),738(739'unsigned smallint from float64', UNSIGNED_SMALLINT,740np.array([0, 65535, 40513], dtype=np.float64),741np.array([0, 65535, 40513], dtype=np.uint16),742),743(744'mediumint from float64', MEDIUMINT,745np.array([-8388608, 0, 8388607, 999678], dtype=np.float64),746np.array([-8388608, 0, 8388607, 999678], dtype=np.int32),747),748(749'unsigned mediumint from float64', UNSIGNED_MEDIUMINT,750np.array([0, 16777215, 9996781], dtype=np.float64),751np.array([0, 16777215, 9996781], dtype=np.uint32),752),753(754'int from float64', INT,755np.array([-2147483648, 0, 2147483647, 1123867689], dtype=np.float64),756np.array([-2147483648, 0, 2147483647, 1123867689], dtype=np.int32),757),758(759'unsigned int from float64', UNSIGNED_INT,760np.array([0, 2147483647, 3398268], dtype=np.float64),761np.array([0, 2147483647, 3398268], dtype=np.uint32),762),763(764'bigint from float64', BIGINT,765np.array([-2**63, 0, 2**53 - 1, 78976892012], dtype=np.float64),766np.array([-2**63, 0, 2**53 - 1, 78976892012], dtype=np.int64),767),768(769'unsigned bigint from float64', UNSIGNED_BIGINT,770np.array([0, 2**53 - 1, 987362899], dtype=np.float64),771np.array([0, 2**53 - 1, 987362899], dtype=np.uint64),772),773(774'float from float64', FLOAT,775np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.float64),776np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.float32),777),778(779'double from float64', DOUBLE,780np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.float64),781np.array([-2**63, 0, 2**63 - 1, 78976892012], dtype=np.float64),782),783])784def test_numpy_accel_casts(self, name, dtype, data, res):785numpy_row_ids = np.array(list(range(len(data))))786787# Accelerated788dump_res = rowdat_1._dump_numpy_accel(789[dtype], numpy_row_ids, [(data, None)],790)791load_res = rowdat_1._load_numpy_accel([('x', dtype)], dump_res)792793if name == 'double from float32':794assert load_res[1][0][0].dtype is res.dtype795assert (load_res[1][0][0] - res < 0.00005).all()796else:797np.testing.assert_array_equal(load_res[1][0][0], res, strict=True)798799# Pure Python800dump_res = rowdat_1._dump_numpy(801[dtype], numpy_row_ids, [(data, None)],802)803load_res = rowdat_1._load_numpy([('x', dtype)], dump_res)804805if name == 'double from float32':806assert load_res[1][0][0].dtype is res.dtype807assert (load_res[1][0][0] - res < 0.00005).all()808else:809np.testing.assert_array_equal(load_res[1][0][0], res, strict=True)810811def test_python(self):812dump_res = rowdat_1._dump(813col_types, py_row_ids, py_col_data,814)815load_res = rowdat_1._load(col_spec, dump_res)816817ids = load_res[0]818columns = load_res[1]819820assert ids == py_row_ids821assert_py_equal(columns, py_col_data)822823def test_python_accel(self):824dump_res = rowdat_1._dump_accel(825col_types, py_row_ids, py_col_data,826)827load_res = rowdat_1._load_accel(col_spec, dump_res)828829ids = load_res[0]830columns = load_res[1]831832assert ids == py_row_ids833assert_py_equal(columns, py_col_data)834835def test_polars(self):836dump_res = rowdat_1._dump_polars(837col_types, polars_row_ids, polars_data,838)839load_res = rowdat_1._load_polars(col_spec, dump_res)840841ids = load_res[0]842columns = load_res[1]843844assert_array_equal(ids, polars_row_ids)845assert_array_equal(columns[0][0], polars_tiny_arr, strict=True)846assert_array_equal(columns[1][0], polars_unsigned_tiny_arr, strict=True)847assert_array_equal(columns[2][0], polars_short_arr, strict=True)848assert_array_equal(columns[3][0], polars_unsigned_short_arr, strict=True)849assert_array_equal(columns[4][0], polars_long_arr, strict=True)850assert_array_equal(columns[5][0], polars_unsigned_long_arr, strict=True)851assert_array_equal(columns[6][0], polars_float_arr, strict=True)852assert_array_equal(columns[7][0], polars_double_arr, strict=True)853assert_array_equal(columns[8][0], polars_longlong_arr, strict=True)854assert_array_equal(columns[9][0], polars_unsigned_longlong_arr, strict=True)855assert_array_equal(columns[10][0], polars_int24_arr, strict=True)856assert_array_equal(columns[11][0], polars_unsigned_int24_arr, strict=True)857assert_array_equal(columns[12][0], polars_string_arr, strict=True)858assert_array_equal(columns[13][0], polars_binary_arr, strict=True)859860def test_polars_accel(self):861dump_res = rowdat_1._dump_polars_accel(862col_types, polars_row_ids, polars_data,863)864load_res = rowdat_1._load_polars_accel(col_spec, dump_res)865866ids = load_res[0]867columns = load_res[1]868869assert_array_equal(ids, polars_row_ids)870assert_array_equal(columns[0][0], polars_tiny_arr, strict=True)871assert_array_equal(columns[1][0], polars_unsigned_tiny_arr, strict=True)872assert_array_equal(columns[2][0], polars_short_arr, strict=True)873assert_array_equal(columns[3][0], polars_unsigned_short_arr, strict=True)874assert_array_equal(columns[4][0], polars_long_arr, strict=True)875assert_array_equal(columns[5][0], polars_unsigned_long_arr, strict=True)876assert_array_equal(columns[6][0], polars_float_arr, strict=True)877assert_array_equal(columns[7][0], polars_double_arr, strict=True)878assert_array_equal(columns[8][0], polars_longlong_arr, strict=True)879assert_array_equal(columns[9][0], polars_unsigned_longlong_arr, strict=True)880assert_array_equal(columns[10][0], polars_int24_arr, strict=True)881assert_array_equal(columns[11][0], polars_unsigned_int24_arr, strict=True)882assert_array_equal(columns[12][0], polars_string_arr, strict=True)883assert_array_equal(columns[13][0], polars_binary_arr, strict=True)884885def test_pandas(self):886dump_res = rowdat_1._dump_pandas(887col_types, pandas_row_ids, pandas_data,888)889load_res = rowdat_1._load_pandas(col_spec, dump_res)890891ids = load_res[0]892columns = load_res[1]893894assert_array_equal(ids, pandas_row_ids)895assert_array_equal(columns[0][0], pandas_tiny_arr, strict=True)896assert_array_equal(columns[1][0], pandas_unsigned_tiny_arr, strict=True)897assert_array_equal(columns[2][0], pandas_short_arr, strict=True)898assert_array_equal(columns[3][0], pandas_unsigned_short_arr, strict=True)899assert_array_equal(columns[4][0], pandas_long_arr, strict=True)900assert_array_equal(columns[5][0], pandas_unsigned_long_arr, strict=True)901assert_array_equal(columns[6][0], pandas_float_arr, strict=True)902assert_array_equal(columns[7][0], pandas_double_arr, strict=True)903assert_array_equal(columns[8][0], pandas_longlong_arr, strict=True)904assert_array_equal(columns[9][0], pandas_unsigned_longlong_arr, strict=True)905assert_array_equal(columns[10][0], pandas_int24_arr, strict=True)906assert_array_equal(columns[11][0], pandas_unsigned_int24_arr, strict=True)907assert_array_equal(columns[12][0], pandas_string_arr, strict=True)908assert_array_equal(columns[13][0], pandas_binary_arr, strict=True)909910def test_pandas_accel(self):911dump_res = rowdat_1._dump_pandas_accel(912col_types, pandas_row_ids, pandas_data,913)914load_res = rowdat_1._load_pandas_accel(col_spec, dump_res)915916ids = load_res[0]917columns = load_res[1]918919assert_array_equal(ids, pandas_row_ids)920assert_array_equal(columns[0][0], pandas_tiny_arr, strict=True)921assert_array_equal(columns[1][0], pandas_unsigned_tiny_arr, strict=True)922assert_array_equal(columns[2][0], pandas_short_arr, strict=True)923assert_array_equal(columns[3][0], pandas_unsigned_short_arr, strict=True)924assert_array_equal(columns[4][0], pandas_long_arr, strict=True)925assert_array_equal(columns[5][0], pandas_unsigned_long_arr, strict=True)926assert_array_equal(columns[6][0], pandas_float_arr, strict=True)927assert_array_equal(columns[7][0], pandas_double_arr, strict=True)928assert_array_equal(columns[8][0], pandas_longlong_arr, strict=True)929assert_array_equal(columns[9][0], pandas_unsigned_longlong_arr, strict=True)930assert_array_equal(columns[10][0], pandas_int24_arr, strict=True)931assert_array_equal(columns[11][0], pandas_unsigned_int24_arr, strict=True)932assert_array_equal(columns[12][0], pandas_string_arr, strict=True)933assert_array_equal(columns[13][0], pandas_binary_arr, strict=True)934935def test_pyarrow(self):936dump_res = rowdat_1._dump_arrow(937col_types, pyarrow_row_ids, pyarrow_data,938)939load_res = rowdat_1._load_arrow(col_spec, dump_res)940941ids = load_res[0]942columns = load_res[1]943944assert_array_equal(ids, pyarrow_row_ids)945assert_array_equal(columns[0][0], pyarrow_tiny_arr, strict=True)946assert_array_equal(columns[1][0], pyarrow_unsigned_tiny_arr, strict=True)947assert_array_equal(columns[2][0], pyarrow_short_arr, strict=True)948assert_array_equal(columns[3][0], pyarrow_unsigned_short_arr, strict=True)949assert_array_equal(columns[4][0], pyarrow_long_arr, strict=True)950assert_array_equal(columns[5][0], pyarrow_unsigned_long_arr, strict=True)951assert_array_equal(columns[6][0], pyarrow_float_arr, strict=True)952assert_array_equal(columns[7][0], pyarrow_double_arr, strict=True)953assert_array_equal(columns[8][0], pyarrow_longlong_arr, strict=True)954assert_array_equal(columns[9][0], pyarrow_unsigned_longlong_arr, strict=True)955assert_array_equal(columns[10][0], pyarrow_int24_arr, strict=True)956assert_array_equal(columns[11][0], pyarrow_unsigned_int24_arr, strict=True)957assert_array_equal(columns[12][0], pyarrow_string_arr, strict=True)958assert_array_equal(columns[13][0], pyarrow_binary_arr, strict=True)959960def test_pyarrow_accel(self):961dump_res = rowdat_1._dump_arrow_accel(962col_types, pyarrow_row_ids, pyarrow_data,963)964load_res = rowdat_1._load_arrow_accel(col_spec, dump_res)965966ids = load_res[0]967columns = load_res[1]968969assert_array_equal(ids, pyarrow_row_ids)970assert_array_equal(columns[0][0], pyarrow_tiny_arr, strict=True)971assert_array_equal(columns[1][0], pyarrow_unsigned_tiny_arr, strict=True)972assert_array_equal(columns[2][0], pyarrow_short_arr, strict=True)973assert_array_equal(columns[3][0], pyarrow_unsigned_short_arr, strict=True)974assert_array_equal(columns[4][0], pyarrow_long_arr, strict=True)975assert_array_equal(columns[5][0], pyarrow_unsigned_long_arr, strict=True)976assert_array_equal(columns[6][0], pyarrow_float_arr, strict=True)977assert_array_equal(columns[7][0], pyarrow_double_arr, strict=True)978assert_array_equal(columns[8][0], pyarrow_longlong_arr, strict=True)979assert_array_equal(columns[9][0], pyarrow_unsigned_longlong_arr, strict=True)980assert_array_equal(columns[10][0], pyarrow_int24_arr, strict=True)981assert_array_equal(columns[11][0], pyarrow_unsigned_int24_arr, strict=True)982assert_array_equal(columns[12][0], pyarrow_string_arr, strict=True)983assert_array_equal(columns[13][0], pyarrow_binary_arr, strict=True)984985986class TestJSON(unittest.TestCase):987988def test_numpy(self):989dump_res = jsonx.dump_numpy(990col_types, numpy_row_ids, numpy_data,991)992import pprint993pprint.pprint(json.loads(dump_res))994load_res = jsonx.load_numpy(col_spec, dump_res)995996ids = load_res[0]997columns = load_res[1]998999assert_array_equal(ids, numpy_row_ids)1000assert_array_equal(columns[0][0], numpy_tiny_arr, strict=True)1001assert_array_equal(columns[1][0], numpy_unsigned_tiny_arr, strict=True)1002assert_array_equal(columns[2][0], numpy_short_arr, strict=True)1003assert_array_equal(columns[3][0], numpy_unsigned_short_arr, strict=True)1004assert_array_equal(columns[4][0], numpy_long_arr, strict=True)1005assert_array_equal(columns[5][0], numpy_unsigned_long_arr, strict=True)1006assert_array_equal(columns[6][0], numpy_float_arr, strict=True)1007assert_array_equal(columns[7][0], numpy_double_arr, strict=True)1008assert_array_equal(columns[8][0], numpy_longlong_arr, strict=True)1009assert_array_equal(columns[9][0], numpy_unsigned_longlong_arr, strict=True)1010assert_array_equal(columns[10][0], numpy_int24_arr, strict=True)1011assert_array_equal(columns[11][0], numpy_unsigned_int24_arr, strict=True)1012assert_array_equal(columns[12][0], numpy_string_arr, strict=True)1013assert_array_equal(columns[13][0], numpy_binary_arr, strict=True)10141015def test_python(self):1016dump_res = jsonx.dump(1017col_types, py_row_ids, py_col_data,1018)1019load_res = jsonx.load(col_spec, dump_res)10201021ids = load_res[0]1022columns = load_res[1]10231024assert ids == py_row_ids1025assert_py_equal(columns, py_col_data)10261027def test_polars(self):1028dump_res = jsonx.dump_polars(1029col_types, polars_row_ids, polars_data,1030)1031load_res = jsonx.load_polars(col_spec, dump_res)10321033ids = load_res[0]1034columns = load_res[1]10351036assert_array_equal(ids, polars_row_ids)1037assert_array_equal(columns[0][0], polars_tiny_arr, strict=True)1038assert_array_equal(columns[1][0], polars_unsigned_tiny_arr, strict=True)1039assert_array_equal(columns[2][0], polars_short_arr, strict=True)1040assert_array_equal(columns[3][0], polars_unsigned_short_arr, strict=True)1041assert_array_equal(columns[4][0], polars_long_arr, strict=True)1042assert_array_equal(columns[5][0], polars_unsigned_long_arr, strict=True)1043assert_array_equal(columns[6][0], polars_float_arr, strict=True)1044assert_array_equal(columns[7][0], polars_double_arr, strict=True)1045assert_array_equal(columns[8][0], polars_longlong_arr, strict=True)1046assert_array_equal(columns[9][0], polars_unsigned_longlong_arr, strict=True)1047assert_array_equal(columns[10][0], polars_int24_arr, strict=True)1048assert_array_equal(columns[11][0], polars_unsigned_int24_arr, strict=True)1049assert_array_equal(columns[12][0], polars_string_arr, strict=True)1050assert_array_equal(columns[13][0], polars_binary_arr, strict=True)10511052def test_pandas(self):1053dump_res = rowdat_1._dump_pandas(1054col_types, pandas_row_ids, pandas_data,1055)1056load_res = rowdat_1._load_pandas(col_spec, dump_res)10571058ids = load_res[0]1059columns = load_res[1]10601061assert_array_equal(ids, pandas_row_ids)1062assert_array_equal(columns[0][0], pandas_tiny_arr, strict=True)1063assert_array_equal(columns[1][0], pandas_unsigned_tiny_arr, strict=True)1064assert_array_equal(columns[2][0], pandas_short_arr, strict=True)1065assert_array_equal(columns[3][0], pandas_unsigned_short_arr, strict=True)1066assert_array_equal(columns[4][0], pandas_long_arr, strict=True)1067assert_array_equal(columns[5][0], pandas_unsigned_long_arr, strict=True)1068assert_array_equal(columns[6][0], pandas_float_arr, strict=True)1069assert_array_equal(columns[7][0], pandas_double_arr, strict=True)1070assert_array_equal(columns[8][0], pandas_longlong_arr, strict=True)1071assert_array_equal(columns[9][0], pandas_unsigned_longlong_arr, strict=True)1072assert_array_equal(columns[10][0], pandas_int24_arr, strict=True)1073assert_array_equal(columns[11][0], pandas_unsigned_int24_arr, strict=True)1074assert_array_equal(columns[12][0], pandas_string_arr, strict=True)1075assert_array_equal(columns[13][0], pandas_binary_arr, strict=True)10761077def test_pyarrow(self):1078dump_res = rowdat_1._dump_arrow(1079col_types, pyarrow_row_ids, pyarrow_data,1080)1081load_res = rowdat_1._load_arrow(col_spec, dump_res)10821083ids = load_res[0]1084columns = load_res[1]10851086assert_array_equal(ids, pyarrow_row_ids)1087assert_array_equal(columns[0][0], pyarrow_tiny_arr, strict=True)1088assert_array_equal(columns[1][0], pyarrow_unsigned_tiny_arr, strict=True)1089assert_array_equal(columns[2][0], pyarrow_short_arr, strict=True)1090assert_array_equal(columns[3][0], pyarrow_unsigned_short_arr, strict=True)1091assert_array_equal(columns[4][0], pyarrow_long_arr, strict=True)1092assert_array_equal(columns[5][0], pyarrow_unsigned_long_arr, strict=True)1093assert_array_equal(columns[6][0], pyarrow_float_arr, strict=True)1094assert_array_equal(columns[7][0], pyarrow_double_arr, strict=True)1095assert_array_equal(columns[8][0], pyarrow_longlong_arr, strict=True)1096assert_array_equal(columns[9][0], pyarrow_unsigned_longlong_arr, strict=True)1097assert_array_equal(columns[10][0], pyarrow_int24_arr, strict=True)1098assert_array_equal(columns[11][0], pyarrow_unsigned_int24_arr, strict=True)1099assert_array_equal(columns[12][0], pyarrow_string_arr, strict=True)1100assert_array_equal(columns[13][0], pyarrow_binary_arr, strict=True)110111021103