def test_int64_numeric_array(self): # NumericArray from ConstantArray[2^40, {2, 1}] wxf = b"8:\xc2\x03\x02\x02\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00" a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(len(a), 2) self.assertEqual(len(a[0]), 1) self.assertEqual(a, [[2 ** 40], [2 ** 40]])
def test_float_numeric_array(self): # NumericArray["Real32", ConstantArray[1., {2, 1}]] wxf = b'8:\xc2"\x02\x02\x01\x00\x00\x80?\x00\x00\x80?' a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(len(a), 2) self.assertEqual(len(a[0]), 1) self.assertEqual(a, [[1.0], [1.0]])
def test_uint64_numeric_array(self): # NumericArray from ConstantArray[2^64-1, {2, 1}] wxf = b"8:\xc2\x13\x02\x02\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(len(a), 2) self.assertEqual(len(a[0]), 1) self.assertEqual(a, [[-1 + 2 ** 64], [-1 + 2 ** 64]])
def test_uint16_numeric_array(self): # NumericArray from ConstantArray[2^16 - 1, {2, 2}] wxf = b"8:\xc2\x11\x02\x02\x02\xff\xff\xff\xff\xff\xff\xff\xff" a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(len(a), 2) self.assertEqual(len(a[0]), 2) self.assertEqual(a, [[-1 + 2 ** 16, -1 + 2 ** 16], [-1 + 2 ** 16, -1 + 2 ** 16]])
def test_double_numeric_array(self): # NumericArray["Real64", ConstantArray[1., {2, 1}]] wxf = b"8:\xc2#\x02\x02\x01\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?" a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(len(a), 2) self.assertEqual(len(a[0]), 1) self.assertEqual(a, [[1.0], [1.0]])
def test_int16_array(self): # ConstantArray[2^15 - 1, {2, 2}] wxf = wxf = b"8:\xc2\x01\x02\x02\x02\xff\x7f\xff\x7f\xff\x7f\xff\x7f" a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(len(a), 2) self.assertEqual(len(a[0]), 2) self.assertEqual(a, [[-1 + 2 ** 15, -1 + 2 ** 15], [-1 + 2 ** 15, -1 + 2 ** 15]])
def test_uint8_numeric_array(self): # NumericArray from ConstantArray[255, {2, 2}] wxf = b"8:\xc2\x10\x02\x02\x02\xff\xff\xff\xff" a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(len(a), 2) self.assertEqual(len(a[0]), 2) self.assertEqual(a, [[255, 255], [255, 255]])
def test_int32_numeric_array(self): # NumericArray from ConstantArray[2^16, {2, 2}] wxf = b"8:\xc2\x02\x02\x02\x02\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00" a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(len(a), 2) self.assertEqual(len(a[0]), 2) self.assertEqual(a, [[2 ** 16, 2 ** 16], [2 ** 16, 2 ** 16]])
def test_int8_array(self): # ConstantArray[1, {2, 2}] wxf = b"8:\xc1\x00\x02\x02\x02\x01\x01\x01\x01" a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(len(a), 2) self.assertEqual(len(a[0]), 2) self.assertEqual(a, [[1, 1], [1, 1]])
def test_bigreal_precision_negexponent(self): wxf = b"8:RC4.590261537982443550699999999999999999999281`19.66183743091127*^-16" res = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual( res, decimal.Decimal( "4.590261537982443550699999999999999999999281E-16"))
async def test_eval_wxf(self): tasks = [ asyncio.create_task( self.pool.evaluate_wxf(wlexpr("FromLetterNumber[%i]" % i))) for i in range(1, 11) ] res = await asyncio.gather(*tasks) res = {binary_deserialize(wxf, consumer=WXFConsumer()) for wxf in res} self.assertEqual(res, {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"})
def test_packedarray_ndim_complex(self): # ConstantArray[I + 1., {2, 3, 1}] wxf = b"8:\xc14\x03\x02\x03\x01\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?" a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(len(a), 2) self.assertEqual(len(a[0]), 3) self.assertEqual(len(a[0][0]), 1) for e1 in a: for e2 in e1: for e3 in e2: self.assertAlmostEqual(e3, complex(1.0, 1.0))
def test_packedarray_ndim_int8(self): # ConstantArray[1, {2, 3, 1}] wxf = b"8:\xc1\x00\x03\x02\x03\x01\x01\x01\x01\x01\x01\x01" a = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(a, [[[1], [1], [1]], [[1], [1], [1]]])
def test_err_evaluate_wxf(self): wxf = self.kernel_session.evaluate_wxf("Range[3") result = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(result, WLSymbol("$Failed"))
def test_bad_header_separator(self): wxf = b"8C/" with self.assertRaises(WolframParserException): binary_deserialize(wxf, consumer=WXFConsumer())
def test_bad_header_compress(self): wxf = b"8x:" with self.assertRaises(WolframParserException): binary_deserialize(wxf, consumer=WXFConsumer())
def test_rules(self): # BinarySerialize[<|"1" -> 1, "2" -> {0}, "3" -> <||>|>] wxf = b"8:A\x03-S\x011C\x01-S\x012f\x01s\x04ListC\x00-S\x013A\x00" res = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(res, {"1": 1, "2": (0,), "3": {}})
def test_bigreal_precision_exponent(self): wxf = b"8:R>9.999999999999996843873323328588479844`15.352529778863042*^999" res = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(res, decimal.Decimal("9.999999999999996843873323328588479844E+999"))
def test_bigreal_precision(self): wxf = b"8:R\x0710.`10." res = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(res, decimal.Decimal(10))
def test_valid_evaluate_wxf_async(self): future = self.kernel_session.evaluate_wxf_future("Range[3]") wxf = future.result(timeout=2) result = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(result, [1, 2, 3])
def test_bad_bignum(self): # replace last digit by 'A' wxf = b"8:I\x171234567890123456789012A" with self.assertRaises(WolframParserException): binary_deserialize(wxf, consumer=WXFConsumer())
def test_valid_evaluate_wxf(self): wxf = self.kernel_session.evaluate_wxf("Range[3]") result = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(result, [1, 2, 3])
def test_compressed_input(self): expr = (1, 2, 3) wxf = export(expr, target_format="wxf", compress=True) res = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(expr, res)
def test_bad_wxf_buffer(self): wxf = 1 with self.assertRaises(TypeError): binary_deserialize(wxf, consumer=WXFConsumer())
def wxf_assert_roundtrip(self, value): wxf = export(value, target_format="wxf") o = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(value, o)
def test_nested_associations(self): expr = immutabledict((("a", 2), ("a", 3))) expr = immutabledict(((expr, expr), (2, 3))) wxf = export(expr, target_format="wxf", compress=True) res = binary_deserialize(wxf, consumer=WXFConsumer()) self.assertEqual(expr, res)