1*da0073e9SAndroid Build Coastguard Worker# Owner(s): ["module: serialization"] 2*da0073e9SAndroid Build Coastguard Worker 3*da0073e9SAndroid Build Coastguard Workerimport torch 4*da0073e9SAndroid Build Coastguard Workerimport unittest 5*da0073e9SAndroid Build Coastguard Workerimport io 6*da0073e9SAndroid Build Coastguard Workerimport tempfile 7*da0073e9SAndroid Build Coastguard Workerimport os 8*da0073e9SAndroid Build Coastguard Workerimport gc 9*da0073e9SAndroid Build Coastguard Workerimport sys 10*da0073e9SAndroid Build Coastguard Workerimport zipfile 11*da0073e9SAndroid Build Coastguard Workerimport warnings 12*da0073e9SAndroid Build Coastguard Workerimport gzip 13*da0073e9SAndroid Build Coastguard Workerimport copy 14*da0073e9SAndroid Build Coastguard Workerimport pickle 15*da0073e9SAndroid Build Coastguard Workerimport shutil 16*da0073e9SAndroid Build Coastguard Workerimport pathlib 17*da0073e9SAndroid Build Coastguard Workerimport platform 18*da0073e9SAndroid Build Coastguard Workerfrom collections import namedtuple, OrderedDict 19*da0073e9SAndroid Build Coastguard Workerfrom copy import deepcopy 20*da0073e9SAndroid Build Coastguard Workerfrom itertools import product 21*da0073e9SAndroid Build Coastguard Worker 22*da0073e9SAndroid Build Coastguard Workerfrom torch._utils_internal import get_file_path_2 23*da0073e9SAndroid Build Coastguard Workerfrom torch._utils import _rebuild_tensor 24*da0073e9SAndroid Build Coastguard Workerfrom torch.utils._import_utils import import_dill 25*da0073e9SAndroid Build Coastguard Workerfrom torch.serialization import check_module_version_greater_or_equal, get_default_load_endianness, \ 26*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness, LoadEndianness, SourceChangeWarning 27*da0073e9SAndroid Build Coastguard Worker 28*da0073e9SAndroid Build Coastguard Workerfrom torch.testing._internal.common_utils import ( 29*da0073e9SAndroid Build Coastguard Worker IS_FILESYSTEM_UTF8_ENCODING, TemporaryDirectoryName, 30*da0073e9SAndroid Build Coastguard Worker TestCase, IS_FBCODE, IS_WINDOWS, TEST_DILL, run_tests, download_file, BytesIOContext, TemporaryFileName, 31*da0073e9SAndroid Build Coastguard Worker parametrize, instantiate_parametrized_tests, AlwaysWarnTypedStorageRemoval, serialTest, skipIfTorchDynamo) 32*da0073e9SAndroid Build Coastguard Workerfrom torch.testing._internal.common_device_type import instantiate_device_type_tests 33*da0073e9SAndroid Build Coastguard Workerfrom torch.testing._internal.common_dtype import all_types_and_complex_and 34*da0073e9SAndroid Build Coastguard Workerfrom torch.testing._internal.two_tensor import TwoTensor # noqa: F401 35*da0073e9SAndroid Build Coastguard Worker 36*da0073e9SAndroid Build Coastguard Workerif not IS_WINDOWS: 37*da0073e9SAndroid Build Coastguard Worker from mmap import MAP_SHARED, MAP_PRIVATE 38*da0073e9SAndroid Build Coastguard Workerelse: 39*da0073e9SAndroid Build Coastguard Worker MAP_SHARED, MAP_PRIVATE = None, None 40*da0073e9SAndroid Build Coastguard Worker 41*da0073e9SAndroid Build Coastguard Worker# These tests were all copied from `test/test_torch.py` at some point, so see 42*da0073e9SAndroid Build Coastguard Worker# the actual blame, see this revision 43*da0073e9SAndroid Build Coastguard Worker# https://github.com/pytorch/pytorch/blame/9a2691f2fc948b9792686085b493c61793c2de30/test/test_torch.py 44*da0073e9SAndroid Build Coastguard Worker 45*da0073e9SAndroid Build Coastguard Workerdill = import_dill() 46*da0073e9SAndroid Build Coastguard WorkerHAS_DILL_AT_LEAST_0_3_1 = dill is not None and check_module_version_greater_or_equal(dill, (0, 3, 1)) 47*da0073e9SAndroid Build Coastguard Worker 48*da0073e9SAndroid Build Coastguard Workercan_retrieve_source = True 49*da0073e9SAndroid Build Coastguard Workerwith warnings.catch_warnings(record=True) as warns: 50*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as checkpoint: 51*da0073e9SAndroid Build Coastguard Worker x = torch.save(torch.nn.Module(), checkpoint) 52*da0073e9SAndroid Build Coastguard Worker for warn in warns: 53*da0073e9SAndroid Build Coastguard Worker if "Couldn't retrieve source code" in warn.message.args[0]: 54*da0073e9SAndroid Build Coastguard Worker can_retrieve_source = False 55*da0073e9SAndroid Build Coastguard Worker break 56*da0073e9SAndroid Build Coastguard Worker 57*da0073e9SAndroid Build Coastguard Worker 58*da0073e9SAndroid Build Coastguard Workerclass FilelikeMock: 59*da0073e9SAndroid Build Coastguard Worker def __init__(self, data, has_fileno=True, has_readinto=False): 60*da0073e9SAndroid Build Coastguard Worker if has_readinto: 61*da0073e9SAndroid Build Coastguard Worker self.readinto = self.readinto_opt 62*da0073e9SAndroid Build Coastguard Worker if has_fileno: 63*da0073e9SAndroid Build Coastguard Worker # Python 2's StringIO.StringIO has no fileno attribute. 64*da0073e9SAndroid Build Coastguard Worker # This is used to test that. 65*da0073e9SAndroid Build Coastguard Worker self.fileno = self.fileno_opt 66*da0073e9SAndroid Build Coastguard Worker 67*da0073e9SAndroid Build Coastguard Worker self.calls = set() 68*da0073e9SAndroid Build Coastguard Worker self.bytesio = io.BytesIO(data) 69*da0073e9SAndroid Build Coastguard Worker 70*da0073e9SAndroid Build Coastguard Worker def trace(fn, name): 71*da0073e9SAndroid Build Coastguard Worker def result(*args, **kwargs): 72*da0073e9SAndroid Build Coastguard Worker self.calls.add(name) 73*da0073e9SAndroid Build Coastguard Worker return fn(*args, **kwargs) 74*da0073e9SAndroid Build Coastguard Worker return result 75*da0073e9SAndroid Build Coastguard Worker 76*da0073e9SAndroid Build Coastguard Worker for attr in ['read', 'readline', 'seek', 'tell', 'write', 'flush']: 77*da0073e9SAndroid Build Coastguard Worker traced_fn = trace(getattr(self.bytesio, attr), attr) 78*da0073e9SAndroid Build Coastguard Worker setattr(self, attr, traced_fn) 79*da0073e9SAndroid Build Coastguard Worker 80*da0073e9SAndroid Build Coastguard Worker def fileno_opt(self): 81*da0073e9SAndroid Build Coastguard Worker raise io.UnsupportedOperation('Not a real file') 82*da0073e9SAndroid Build Coastguard Worker 83*da0073e9SAndroid Build Coastguard Worker def readinto_opt(self, view): 84*da0073e9SAndroid Build Coastguard Worker self.calls.add('readinto') 85*da0073e9SAndroid Build Coastguard Worker return self.bytesio.readinto(view) 86*da0073e9SAndroid Build Coastguard Worker 87*da0073e9SAndroid Build Coastguard Worker def was_called(self, name): 88*da0073e9SAndroid Build Coastguard Worker return name in self.calls 89*da0073e9SAndroid Build Coastguard Worker 90*da0073e9SAndroid Build Coastguard Worker 91*da0073e9SAndroid Build Coastguard Workerclass SerializationMixin: 92*da0073e9SAndroid Build Coastguard Worker def _test_serialization_data(self): 93*da0073e9SAndroid Build Coastguard Worker a = [torch.randn(5, 5).float() for i in range(2)] 94*da0073e9SAndroid Build Coastguard Worker b = [a[i % 2] for i in range(4)] # 0-3 95*da0073e9SAndroid Build Coastguard Worker b += [a[0].storage()] # 4 96*da0073e9SAndroid Build Coastguard Worker b += [a[0].reshape(-1)[1:4].storage()] # 5 97*da0073e9SAndroid Build Coastguard Worker b += [torch.arange(1, 11).int()] # 6 98*da0073e9SAndroid Build Coastguard Worker t1 = torch.FloatTensor().set_(a[0].reshape(-1)[1:4].clone().storage(), 0, (3,), (1,)) 99*da0073e9SAndroid Build Coastguard Worker t2 = torch.FloatTensor().set_(a[0].reshape(-1)[1:4].clone().storage(), 0, (3,), (1,)) 100*da0073e9SAndroid Build Coastguard Worker b += [(t1.storage(), t1.storage(), t2.storage())] # 7 101*da0073e9SAndroid Build Coastguard Worker b += [a[0].reshape(-1)[0:2].storage()] # 8 102*da0073e9SAndroid Build Coastguard Worker return b 103*da0073e9SAndroid Build Coastguard Worker 104*da0073e9SAndroid Build Coastguard Worker def _test_serialization_assert(self, b, c): 105*da0073e9SAndroid Build Coastguard Worker self.assertEqual(b, c, atol=0, rtol=0) 106*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(c[0], torch.FloatTensor)) 107*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(c[1], torch.FloatTensor)) 108*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(c[2], torch.FloatTensor)) 109*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(c[3], torch.FloatTensor)) 110*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(c[4], torch.storage.TypedStorage)) 111*da0073e9SAndroid Build Coastguard Worker self.assertEqual(c[4].dtype, torch.float) 112*da0073e9SAndroid Build Coastguard Worker c[0].fill_(10) 113*da0073e9SAndroid Build Coastguard Worker self.assertEqual(c[0], c[2], atol=0, rtol=0) 114*da0073e9SAndroid Build Coastguard Worker self.assertEqual(c[4], torch.FloatStorage(25).fill_(10), atol=0, rtol=0) 115*da0073e9SAndroid Build Coastguard Worker c[1].fill_(20) 116*da0073e9SAndroid Build Coastguard Worker self.assertEqual(c[1], c[3], atol=0, rtol=0) 117*da0073e9SAndroid Build Coastguard Worker # I have to do it in this roundabout fashion, because there's no 118*da0073e9SAndroid Build Coastguard Worker # way to slice storages 119*da0073e9SAndroid Build Coastguard Worker for i in range(4): 120*da0073e9SAndroid Build Coastguard Worker self.assertEqual(c[4][i + 1], c[5][i]) 121*da0073e9SAndroid Build Coastguard Worker 122*da0073e9SAndroid Build Coastguard Worker # check that serializing the same storage view object unpickles 123*da0073e9SAndroid Build Coastguard Worker # it as one object not two (and vice versa) 124*da0073e9SAndroid Build Coastguard Worker views = c[7] 125*da0073e9SAndroid Build Coastguard Worker self.assertEqual(views[0]._cdata, views[1]._cdata) 126*da0073e9SAndroid Build Coastguard Worker self.assertEqual(views[0], views[2]) 127*da0073e9SAndroid Build Coastguard Worker self.assertNotEqual(views[0]._cdata, views[2]._cdata) 128*da0073e9SAndroid Build Coastguard Worker 129*da0073e9SAndroid Build Coastguard Worker rootview = c[8] 130*da0073e9SAndroid Build Coastguard Worker self.assertEqual(rootview.data_ptr(), c[0].data_ptr()) 131*da0073e9SAndroid Build Coastguard Worker 132*da0073e9SAndroid Build Coastguard Worker def test_serialization_zipfile_utils(self): 133*da0073e9SAndroid Build Coastguard Worker data = { 134*da0073e9SAndroid Build Coastguard Worker 'a': b'12039810948234589', 135*da0073e9SAndroid Build Coastguard Worker 'b': b'1239081209484958', 136*da0073e9SAndroid Build Coastguard Worker 'c/d': b'94589480984058' 137*da0073e9SAndroid Build Coastguard Worker } 138*da0073e9SAndroid Build Coastguard Worker 139*da0073e9SAndroid Build Coastguard Worker def test(name_or_buffer): 140*da0073e9SAndroid Build Coastguard Worker with torch.serialization._open_zipfile_writer(name_or_buffer) as zip_file: 141*da0073e9SAndroid Build Coastguard Worker for key in data: 142*da0073e9SAndroid Build Coastguard Worker zip_file.write_record(key, data[key], len(data[key])) 143*da0073e9SAndroid Build Coastguard Worker 144*da0073e9SAndroid Build Coastguard Worker if hasattr(name_or_buffer, 'seek'): 145*da0073e9SAndroid Build Coastguard Worker name_or_buffer.seek(0) 146*da0073e9SAndroid Build Coastguard Worker 147*da0073e9SAndroid Build Coastguard Worker with torch.serialization._open_zipfile_reader(name_or_buffer) as zip_file: 148*da0073e9SAndroid Build Coastguard Worker for key in data: 149*da0073e9SAndroid Build Coastguard Worker actual = zip_file.get_record(key) 150*da0073e9SAndroid Build Coastguard Worker expected = data[key] 151*da0073e9SAndroid Build Coastguard Worker self.assertEqual(expected, actual) 152*da0073e9SAndroid Build Coastguard Worker 153*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 154*da0073e9SAndroid Build Coastguard Worker test(f) 155*da0073e9SAndroid Build Coastguard Worker 156*da0073e9SAndroid Build Coastguard Worker with TemporaryFileName() as fname: 157*da0073e9SAndroid Build Coastguard Worker test(fname) 158*da0073e9SAndroid Build Coastguard Worker 159*da0073e9SAndroid Build Coastguard Worker test(io.BytesIO()) 160*da0073e9SAndroid Build Coastguard Worker 161*da0073e9SAndroid Build Coastguard Worker def _test_serialization(self, weights_only): 162*da0073e9SAndroid Build Coastguard Worker # Test serialization with a real file 163*da0073e9SAndroid Build Coastguard Worker b = self._test_serialization_data() 164*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 165*da0073e9SAndroid Build Coastguard Worker torch.save(b, f) 166*da0073e9SAndroid Build Coastguard Worker f.seek(0) 167*da0073e9SAndroid Build Coastguard Worker c = torch.load(f, weights_only=weights_only) 168*da0073e9SAndroid Build Coastguard Worker self._test_serialization_assert(b, c) 169*da0073e9SAndroid Build Coastguard Worker with TemporaryFileName() as fname: 170*da0073e9SAndroid Build Coastguard Worker torch.save(b, fname) 171*da0073e9SAndroid Build Coastguard Worker c = torch.load(fname, weights_only=weights_only) 172*da0073e9SAndroid Build Coastguard Worker self._test_serialization_assert(b, c) 173*da0073e9SAndroid Build Coastguard Worker # test non-ascii encoding of bytes arrays/strings 174*da0073e9SAndroid Build Coastguard Worker # The following bytes are produced by serializing 175*da0073e9SAndroid Build Coastguard Worker # [b'\xc5\xbc\xc4\x85\xc4\x85\xc3\xb3\xc5\xbc\xc4\x85\xc5\xbc', torch.zeros(1, dtype=torch.float), 2] 176*da0073e9SAndroid Build Coastguard Worker # in Python 2.7.12 and PyTorch 0.4.1, where the first element contains 177*da0073e9SAndroid Build Coastguard Worker # bytes of some utf-8 characters (i.e., `utf8_str.encode('utf-8')`). 178*da0073e9SAndroid Build Coastguard Worker serialized = ( 179*da0073e9SAndroid Build Coastguard Worker b'\x80\x02\x8a\nl\xfc\x9cF\xf9 j\xa8P\x19.\x80\x02M\xe9\x03.' 180*da0073e9SAndroid Build Coastguard Worker b'\x80\x02}q\x01(U\x10protocol_versionq\x02M\xe9\x03U\n' 181*da0073e9SAndroid Build Coastguard Worker b'type_sizesq\x03}q\x04(U\x03intq\x05K\x04U\x05shortq\x06K\x02U' 182*da0073e9SAndroid Build Coastguard Worker b'\x04longq\x07K\x04uU\rlittle_endianq\x08\x88u.\x80\x02]q' 183*da0073e9SAndroid Build Coastguard Worker b'\x01(U\x0e\xc5\xbc\xc4\x85\xc4\x85\xc3\xb3\xc5\xbc\xc4\x85' 184*da0073e9SAndroid Build Coastguard Worker b'\xc5\xbcq\x02ctorch._utils\n_rebuild_tensor_v2\nq\x03((U' 185*da0073e9SAndroid Build Coastguard Worker b'\x07storageq\x04ctorch\nFloatStorage\nq\x05U\x0845640624q' 186*da0073e9SAndroid Build Coastguard Worker b'\x06U\x03cpuq\x07\x8a\x01\x01NtQK\x00K\x01\x85K\x01\x85' 187*da0073e9SAndroid Build Coastguard Worker b'\x89NtRq\x08K\x02e.\x80\x02]q\x01U\x0845640624q\x02a.\x01\x00' 188*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 189*da0073e9SAndroid Build Coastguard Worker ) 190*da0073e9SAndroid Build Coastguard Worker buf = io.BytesIO(serialized) 191*da0073e9SAndroid Build Coastguard Worker utf8_bytes = b'\xc5\xbc\xc4\x85\xc4\x85\xc3\xb3\xc5\xbc\xc4\x85\xc5\xbc' 192*da0073e9SAndroid Build Coastguard Worker utf8_str = utf8_bytes.decode('utf-8') 193*da0073e9SAndroid Build Coastguard Worker loaded_utf8 = torch.load(buf, weights_only=weights_only, encoding='utf-8') 194*da0073e9SAndroid Build Coastguard Worker self.assertEqual(loaded_utf8, [utf8_str, torch.zeros(1, dtype=torch.float), 2]) 195*da0073e9SAndroid Build Coastguard Worker buf.seek(0) 196*da0073e9SAndroid Build Coastguard Worker loaded_bytes = torch.load(buf, weights_only=weights_only, encoding='bytes') 197*da0073e9SAndroid Build Coastguard Worker self.assertEqual(loaded_bytes, [utf8_bytes, torch.zeros(1, dtype=torch.float), 2]) 198*da0073e9SAndroid Build Coastguard Worker 199*da0073e9SAndroid Build Coastguard Worker def test_serialization(self): 200*da0073e9SAndroid Build Coastguard Worker self._test_serialization(False) 201*da0073e9SAndroid Build Coastguard Worker 202*da0073e9SAndroid Build Coastguard Worker def test_serialization_safe(self): 203*da0073e9SAndroid Build Coastguard Worker self._test_serialization(True) 204*da0073e9SAndroid Build Coastguard Worker 205*da0073e9SAndroid Build Coastguard Worker def test_serialization_filelike(self): 206*da0073e9SAndroid Build Coastguard Worker # Test serialization (load and save) with a filelike object 207*da0073e9SAndroid Build Coastguard Worker b = self._test_serialization_data() 208*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 209*da0073e9SAndroid Build Coastguard Worker torch.save(b, f) 210*da0073e9SAndroid Build Coastguard Worker f.seek(0) 211*da0073e9SAndroid Build Coastguard Worker c = torch.load(f) 212*da0073e9SAndroid Build Coastguard Worker self._test_serialization_assert(b, c) 213*da0073e9SAndroid Build Coastguard Worker 214*da0073e9SAndroid Build Coastguard Worker def test_serialization_fake_zip(self): 215*da0073e9SAndroid Build Coastguard Worker data = [ 216*da0073e9SAndroid Build Coastguard Worker ord('P'), 217*da0073e9SAndroid Build Coastguard Worker ord('K'), 218*da0073e9SAndroid Build Coastguard Worker 5, 219*da0073e9SAndroid Build Coastguard Worker 6 220*da0073e9SAndroid Build Coastguard Worker ] 221*da0073e9SAndroid Build Coastguard Worker for i in range(0, 100): 222*da0073e9SAndroid Build Coastguard Worker data.append(0) 223*da0073e9SAndroid Build Coastguard Worker t = torch.tensor(data, dtype=torch.uint8) 224*da0073e9SAndroid Build Coastguard Worker 225*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 226*da0073e9SAndroid Build Coastguard Worker torch.save(t, f) 227*da0073e9SAndroid Build Coastguard Worker 228*da0073e9SAndroid Build Coastguard Worker # If this check is False for all Python versions (i.e. the fix 229*da0073e9SAndroid Build Coastguard Worker # has been backported), this test and torch.serialization._is_zipfile 230*da0073e9SAndroid Build Coastguard Worker # can be deleted 231*da0073e9SAndroid Build Coastguard Worker self.assertTrue(zipfile.is_zipfile(f)) 232*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.serialization._is_zipfile(f)) 233*da0073e9SAndroid Build Coastguard Worker f.seek(0) 234*da0073e9SAndroid Build Coastguard Worker self.assertEqual(torch.load(f), t) 235*da0073e9SAndroid Build Coastguard Worker 236*da0073e9SAndroid Build Coastguard Worker def test_serialization_gzip(self): 237*da0073e9SAndroid Build Coastguard Worker # Test serialization with gzip file 238*da0073e9SAndroid Build Coastguard Worker b = self._test_serialization_data() 239*da0073e9SAndroid Build Coastguard Worker f1 = tempfile.NamedTemporaryFile(delete=False) 240*da0073e9SAndroid Build Coastguard Worker f2 = tempfile.NamedTemporaryFile(delete=False) 241*da0073e9SAndroid Build Coastguard Worker torch.save(b, f1) 242*da0073e9SAndroid Build Coastguard Worker with open(f1.name, 'rb') as f_in, gzip.open(f2.name, 'wb') as f_out: 243*da0073e9SAndroid Build Coastguard Worker shutil.copyfileobj(f_in, f_out) 244*da0073e9SAndroid Build Coastguard Worker 245*da0073e9SAndroid Build Coastguard Worker with gzip.open(f2.name, 'rb') as f: 246*da0073e9SAndroid Build Coastguard Worker c = torch.load(f) 247*da0073e9SAndroid Build Coastguard Worker self._test_serialization_assert(b, c) 248*da0073e9SAndroid Build Coastguard Worker 249*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf( 250*da0073e9SAndroid Build Coastguard Worker not TEST_DILL or HAS_DILL_AT_LEAST_0_3_1, 251*da0073e9SAndroid Build Coastguard Worker '"dill" not found or is correct version' 252*da0073e9SAndroid Build Coastguard Worker ) 253*da0073e9SAndroid Build Coastguard Worker def test_serialization_dill_version_not_supported(self): 254*da0073e9SAndroid Build Coastguard Worker x = torch.randn(5, 5) 255*da0073e9SAndroid Build Coastguard Worker 256*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 257*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(ValueError, 'supports dill >='): 258*da0073e9SAndroid Build Coastguard Worker torch.save(x, f, pickle_module=dill) 259*da0073e9SAndroid Build Coastguard Worker f.seek(0) 260*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(ValueError, 'supports dill >='): 261*da0073e9SAndroid Build Coastguard Worker x2 = torch.load(f, pickle_module=dill, encoding='utf-8') 262*da0073e9SAndroid Build Coastguard Worker 263*da0073e9SAndroid Build Coastguard Worker def test_pickle_module(self): 264*da0073e9SAndroid Build Coastguard Worker class ThrowingUnpickler(pickle.Unpickler): 265*da0073e9SAndroid Build Coastguard Worker def load(self, *args, **kwargs): 266*da0073e9SAndroid Build Coastguard Worker raise RuntimeError("rumpelstiltskin") 267*da0073e9SAndroid Build Coastguard Worker 268*da0073e9SAndroid Build Coastguard Worker class ThrowingModule: 269*da0073e9SAndroid Build Coastguard Worker Unpickler = ThrowingUnpickler 270*da0073e9SAndroid Build Coastguard Worker load = ThrowingUnpickler.load 271*da0073e9SAndroid Build Coastguard Worker 272*da0073e9SAndroid Build Coastguard Worker x = torch.eye(3) 273*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 274*da0073e9SAndroid Build Coastguard Worker torch.save(x, f) 275*da0073e9SAndroid Build Coastguard Worker f.seek(0) 276*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(RuntimeError, "rumpelstiltskin"): 277*da0073e9SAndroid Build Coastguard Worker torch.load(f, pickle_module=ThrowingModule) 278*da0073e9SAndroid Build Coastguard Worker f.seek(0) 279*da0073e9SAndroid Build Coastguard Worker z = torch.load(f) 280*da0073e9SAndroid Build Coastguard Worker self.assertEqual(x, z) 281*da0073e9SAndroid Build Coastguard Worker 282*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf( 283*da0073e9SAndroid Build Coastguard Worker not TEST_DILL or not HAS_DILL_AT_LEAST_0_3_1, 284*da0073e9SAndroid Build Coastguard Worker '"dill" not found or not correct version' 285*da0073e9SAndroid Build Coastguard Worker ) 286*da0073e9SAndroid Build Coastguard Worker def test_serialization_dill(self): 287*da0073e9SAndroid Build Coastguard Worker x = torch.randn(5, 5) 288*da0073e9SAndroid Build Coastguard Worker 289*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 290*da0073e9SAndroid Build Coastguard Worker torch.save(x, f, pickle_module=dill) 291*da0073e9SAndroid Build Coastguard Worker f.seek(0) 292*da0073e9SAndroid Build Coastguard Worker x2 = torch.load(f, pickle_module=dill, encoding='utf-8') 293*da0073e9SAndroid Build Coastguard Worker self.assertIsInstance(x2, type(x)) 294*da0073e9SAndroid Build Coastguard Worker self.assertEqual(x, x2) 295*da0073e9SAndroid Build Coastguard Worker f.seek(0) 296*da0073e9SAndroid Build Coastguard Worker x3 = torch.load(f, pickle_module=dill) 297*da0073e9SAndroid Build Coastguard Worker self.assertIsInstance(x3, type(x)) 298*da0073e9SAndroid Build Coastguard Worker self.assertEqual(x, x3) 299*da0073e9SAndroid Build Coastguard Worker 300*da0073e9SAndroid Build Coastguard Worker def test_serialization_offset_gzip(self): 301*da0073e9SAndroid Build Coastguard Worker a = torch.randn(5, 5) 302*da0073e9SAndroid Build Coastguard Worker i = 41 303*da0073e9SAndroid Build Coastguard Worker f1 = tempfile.NamedTemporaryFile(delete=False) 304*da0073e9SAndroid Build Coastguard Worker f2 = tempfile.NamedTemporaryFile(delete=False) 305*da0073e9SAndroid Build Coastguard Worker with open(f1.name, 'wb') as f: 306*da0073e9SAndroid Build Coastguard Worker pickle.dump(i, f) 307*da0073e9SAndroid Build Coastguard Worker torch.save(a, f) 308*da0073e9SAndroid Build Coastguard Worker with open(f1.name, 'rb') as f_in, gzip.open(f2.name, 'wb') as f_out: 309*da0073e9SAndroid Build Coastguard Worker shutil.copyfileobj(f_in, f_out) 310*da0073e9SAndroid Build Coastguard Worker 311*da0073e9SAndroid Build Coastguard Worker with gzip.open(f2.name, 'rb') as f: 312*da0073e9SAndroid Build Coastguard Worker j = pickle.load(f) 313*da0073e9SAndroid Build Coastguard Worker b = torch.load(f) 314*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(a, b)) 315*da0073e9SAndroid Build Coastguard Worker self.assertEqual(i, j) 316*da0073e9SAndroid Build Coastguard Worker 317*da0073e9SAndroid Build Coastguard Worker def _test_serialization_sparse(self, weights_only): 318*da0073e9SAndroid Build Coastguard Worker def _test_serialization(conversion): 319*da0073e9SAndroid Build Coastguard Worker x = torch.zeros(3, 3) 320*da0073e9SAndroid Build Coastguard Worker x[1][1] = 1 321*da0073e9SAndroid Build Coastguard Worker x = conversion(x) 322*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 323*da0073e9SAndroid Build Coastguard Worker torch.save({"tensor": x}, f) 324*da0073e9SAndroid Build Coastguard Worker f.seek(0) 325*da0073e9SAndroid Build Coastguard Worker y = torch.load(f, weights_only=weights_only) 326*da0073e9SAndroid Build Coastguard Worker self.assertEqual(x, y["tensor"], exact_is_coalesced=True) 327*da0073e9SAndroid Build Coastguard Worker _test_serialization(lambda x: x.to_sparse()) 328*da0073e9SAndroid Build Coastguard Worker _test_serialization(lambda x: x.to_sparse_csr()) 329*da0073e9SAndroid Build Coastguard Worker _test_serialization(lambda x: x.to_sparse_csc()) 330*da0073e9SAndroid Build Coastguard Worker _test_serialization(lambda x: x.to_sparse_bsr((1, 1))) 331*da0073e9SAndroid Build Coastguard Worker _test_serialization(lambda x: x.to_sparse_bsc((1, 1))) 332*da0073e9SAndroid Build Coastguard Worker 333*da0073e9SAndroid Build Coastguard Worker def test_serialization_sparse(self): 334*da0073e9SAndroid Build Coastguard Worker self._test_serialization(False) 335*da0073e9SAndroid Build Coastguard Worker 336*da0073e9SAndroid Build Coastguard Worker def test_serialization_sparse_safe(self): 337*da0073e9SAndroid Build Coastguard Worker self._test_serialization(True) 338*da0073e9SAndroid Build Coastguard Worker 339*da0073e9SAndroid Build Coastguard Worker def test_serialization_sparse_invalid(self): 340*da0073e9SAndroid Build Coastguard Worker x = torch.zeros(3, 3) 341*da0073e9SAndroid Build Coastguard Worker x[1][1] = 1 342*da0073e9SAndroid Build Coastguard Worker x = x.to_sparse() 343*da0073e9SAndroid Build Coastguard Worker 344*da0073e9SAndroid Build Coastguard Worker class TensorSerializationSpoofer: 345*da0073e9SAndroid Build Coastguard Worker def __init__(self, tensor): 346*da0073e9SAndroid Build Coastguard Worker self.tensor = tensor 347*da0073e9SAndroid Build Coastguard Worker 348*da0073e9SAndroid Build Coastguard Worker def __reduce_ex__(self, proto): 349*da0073e9SAndroid Build Coastguard Worker invalid_indices = self.tensor._indices().clone() 350*da0073e9SAndroid Build Coastguard Worker invalid_indices[0][0] = 3 351*da0073e9SAndroid Build Coastguard Worker return ( 352*da0073e9SAndroid Build Coastguard Worker torch._utils._rebuild_sparse_tensor, 353*da0073e9SAndroid Build Coastguard Worker ( 354*da0073e9SAndroid Build Coastguard Worker self.tensor.layout, 355*da0073e9SAndroid Build Coastguard Worker ( 356*da0073e9SAndroid Build Coastguard Worker invalid_indices, 357*da0073e9SAndroid Build Coastguard Worker self.tensor._values(), 358*da0073e9SAndroid Build Coastguard Worker self.tensor.size()))) 359*da0073e9SAndroid Build Coastguard Worker 360*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 361*da0073e9SAndroid Build Coastguard Worker torch.save({"spoofed": TensorSerializationSpoofer(x)}, f) 362*da0073e9SAndroid Build Coastguard Worker f.seek(0) 363*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex( 364*da0073e9SAndroid Build Coastguard Worker RuntimeError, 365*da0073e9SAndroid Build Coastguard Worker "size is inconsistent with indices"): 366*da0073e9SAndroid Build Coastguard Worker y = torch.load(f) 367*da0073e9SAndroid Build Coastguard Worker 368*da0073e9SAndroid Build Coastguard Worker def _test_serialization_sparse_compressed_invalid(self, 369*da0073e9SAndroid Build Coastguard Worker conversion, 370*da0073e9SAndroid Build Coastguard Worker get_compressed_indices, 371*da0073e9SAndroid Build Coastguard Worker get_plain_indices): 372*da0073e9SAndroid Build Coastguard Worker x = torch.zeros(3, 3) 373*da0073e9SAndroid Build Coastguard Worker x[1][1] = 1 374*da0073e9SAndroid Build Coastguard Worker x = conversion(x) 375*da0073e9SAndroid Build Coastguard Worker 376*da0073e9SAndroid Build Coastguard Worker class TensorSerializationSpoofer: 377*da0073e9SAndroid Build Coastguard Worker def __init__(self, tensor): 378*da0073e9SAndroid Build Coastguard Worker self.tensor = tensor 379*da0073e9SAndroid Build Coastguard Worker 380*da0073e9SAndroid Build Coastguard Worker def __reduce_ex__(self, proto): 381*da0073e9SAndroid Build Coastguard Worker invalid_compressed_indices = get_compressed_indices(self.tensor).clone() 382*da0073e9SAndroid Build Coastguard Worker invalid_compressed_indices[0] = 3 383*da0073e9SAndroid Build Coastguard Worker return ( 384*da0073e9SAndroid Build Coastguard Worker torch._utils._rebuild_sparse_tensor, 385*da0073e9SAndroid Build Coastguard Worker ( 386*da0073e9SAndroid Build Coastguard Worker self.tensor.layout, 387*da0073e9SAndroid Build Coastguard Worker ( 388*da0073e9SAndroid Build Coastguard Worker invalid_compressed_indices, 389*da0073e9SAndroid Build Coastguard Worker get_plain_indices(self.tensor), 390*da0073e9SAndroid Build Coastguard Worker self.tensor.values(), 391*da0073e9SAndroid Build Coastguard Worker self.tensor.size()))) 392*da0073e9SAndroid Build Coastguard Worker 393*da0073e9SAndroid Build Coastguard Worker if x.layout in {torch.sparse_csr, torch.sparse_bsr}: 394*da0073e9SAndroid Build Coastguard Worker compressed_indices_name = 'crow_indices' 395*da0073e9SAndroid Build Coastguard Worker else: 396*da0073e9SAndroid Build Coastguard Worker compressed_indices_name = 'ccol_indices' 397*da0073e9SAndroid Build Coastguard Worker 398*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 399*da0073e9SAndroid Build Coastguard Worker torch.save({"spoofed": TensorSerializationSpoofer(x)}, f) 400*da0073e9SAndroid Build Coastguard Worker f.seek(0) 401*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex( 402*da0073e9SAndroid Build Coastguard Worker RuntimeError, 403*da0073e9SAndroid Build Coastguard Worker f"`{compressed_indices_name}[[]..., 0[]] == 0` is not satisfied."): 404*da0073e9SAndroid Build Coastguard Worker y = torch.load(f) 405*da0073e9SAndroid Build Coastguard Worker 406*da0073e9SAndroid Build Coastguard Worker def test_serialization_sparse_csr_invalid(self): 407*da0073e9SAndroid Build Coastguard Worker self._test_serialization_sparse_compressed_invalid( 408*da0073e9SAndroid Build Coastguard Worker torch.Tensor.to_sparse_csr, torch.Tensor.crow_indices, torch.Tensor.col_indices) 409*da0073e9SAndroid Build Coastguard Worker 410*da0073e9SAndroid Build Coastguard Worker def test_serialization_sparse_csc_invalid(self): 411*da0073e9SAndroid Build Coastguard Worker self._test_serialization_sparse_compressed_invalid( 412*da0073e9SAndroid Build Coastguard Worker torch.Tensor.to_sparse_csc, torch.Tensor.ccol_indices, torch.Tensor.row_indices) 413*da0073e9SAndroid Build Coastguard Worker 414*da0073e9SAndroid Build Coastguard Worker def test_serialization_sparse_bsr_invalid(self): 415*da0073e9SAndroid Build Coastguard Worker self._test_serialization_sparse_compressed_invalid( 416*da0073e9SAndroid Build Coastguard Worker lambda x: x.to_sparse_bsr((1, 1)), torch.Tensor.crow_indices, torch.Tensor.col_indices) 417*da0073e9SAndroid Build Coastguard Worker 418*da0073e9SAndroid Build Coastguard Worker def test_serialization_sparse_bsc_invalid(self): 419*da0073e9SAndroid Build Coastguard Worker self._test_serialization_sparse_compressed_invalid( 420*da0073e9SAndroid Build Coastguard Worker lambda x: x.to_sparse_bsc((1, 1)), torch.Tensor.ccol_indices, torch.Tensor.row_indices) 421*da0073e9SAndroid Build Coastguard Worker 422*da0073e9SAndroid Build Coastguard Worker def test_serialize_device(self): 423*da0073e9SAndroid Build Coastguard Worker device_str = ['cpu', 'cpu:0', 'cuda', 'cuda:0'] 424*da0073e9SAndroid Build Coastguard Worker device_obj = [torch.device(d) for d in device_str] 425*da0073e9SAndroid Build Coastguard Worker for device in device_obj: 426*da0073e9SAndroid Build Coastguard Worker device_copied = copy.deepcopy(device) 427*da0073e9SAndroid Build Coastguard Worker self.assertEqual(device, device_copied) 428*da0073e9SAndroid Build Coastguard Worker 429*da0073e9SAndroid Build Coastguard Worker def _test_serialization_backwards_compat(self, weights_only): 430*da0073e9SAndroid Build Coastguard Worker a = [torch.arange(1 + i, 26 + i).view(5, 5).float() for i in range(2)] 431*da0073e9SAndroid Build Coastguard Worker b = [a[i % 2] for i in range(4)] 432*da0073e9SAndroid Build Coastguard Worker b += [a[0].storage()] 433*da0073e9SAndroid Build Coastguard Worker b += [a[0].reshape(-1)[1:4].clone().storage()] 434*da0073e9SAndroid Build Coastguard Worker path = download_file('https://download.pytorch.org/test_data/legacy_serialized.pt') 435*da0073e9SAndroid Build Coastguard Worker c = torch.load(path, weights_only=weights_only) 436*da0073e9SAndroid Build Coastguard Worker self.assertEqual(b, c, atol=0, rtol=0) 437*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(c[0], torch.FloatTensor)) 438*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(c[1], torch.FloatTensor)) 439*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(c[2], torch.FloatTensor)) 440*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(c[3], torch.FloatTensor)) 441*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(c[4], torch.storage.TypedStorage)) 442*da0073e9SAndroid Build Coastguard Worker self.assertEqual(c[4].dtype, torch.float32) 443*da0073e9SAndroid Build Coastguard Worker c[0].fill_(10) 444*da0073e9SAndroid Build Coastguard Worker self.assertEqual(c[0], c[2], atol=0, rtol=0) 445*da0073e9SAndroid Build Coastguard Worker self.assertEqual(c[4], torch.FloatStorage(25).fill_(10), atol=0, rtol=0) 446*da0073e9SAndroid Build Coastguard Worker c[1].fill_(20) 447*da0073e9SAndroid Build Coastguard Worker self.assertEqual(c[1], c[3], atol=0, rtol=0) 448*da0073e9SAndroid Build Coastguard Worker 449*da0073e9SAndroid Build Coastguard Worker # test some old tensor serialization mechanism 450*da0073e9SAndroid Build Coastguard Worker class OldTensorBase: 451*da0073e9SAndroid Build Coastguard Worker def __init__(self, new_tensor): 452*da0073e9SAndroid Build Coastguard Worker self.new_tensor = new_tensor 453*da0073e9SAndroid Build Coastguard Worker 454*da0073e9SAndroid Build Coastguard Worker def __getstate__(self): 455*da0073e9SAndroid Build Coastguard Worker return (self.new_tensor.storage(), 456*da0073e9SAndroid Build Coastguard Worker self.new_tensor.storage_offset(), 457*da0073e9SAndroid Build Coastguard Worker tuple(self.new_tensor.size()), 458*da0073e9SAndroid Build Coastguard Worker self.new_tensor.stride()) 459*da0073e9SAndroid Build Coastguard Worker 460*da0073e9SAndroid Build Coastguard Worker class OldTensorV1(OldTensorBase): 461*da0073e9SAndroid Build Coastguard Worker def __reduce__(self): 462*da0073e9SAndroid Build Coastguard Worker return (torch.Tensor, (), self.__getstate__()) 463*da0073e9SAndroid Build Coastguard Worker 464*da0073e9SAndroid Build Coastguard Worker class OldTensorV2(OldTensorBase): 465*da0073e9SAndroid Build Coastguard Worker def __reduce__(self): 466*da0073e9SAndroid Build Coastguard Worker return (_rebuild_tensor, self.__getstate__()) 467*da0073e9SAndroid Build Coastguard Worker 468*da0073e9SAndroid Build Coastguard Worker x = torch.randn(30).as_strided([2, 3], [9, 3], 2) 469*da0073e9SAndroid Build Coastguard Worker for old_cls in [OldTensorV1, OldTensorV2]: 470*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 471*da0073e9SAndroid Build Coastguard Worker old_x = old_cls(x) 472*da0073e9SAndroid Build Coastguard Worker torch.save(old_x, f) 473*da0073e9SAndroid Build Coastguard Worker f.seek(0) 474*da0073e9SAndroid Build Coastguard Worker load_x = torch.load(f, weights_only=weights_only) 475*da0073e9SAndroid Build Coastguard Worker self.assertEqual(x.storage(), load_x.storage()) 476*da0073e9SAndroid Build Coastguard Worker self.assertEqual(x.storage_offset(), load_x.storage_offset()) 477*da0073e9SAndroid Build Coastguard Worker self.assertEqual(x.size(), load_x.size()) 478*da0073e9SAndroid Build Coastguard Worker self.assertEqual(x.stride(), load_x.stride()) 479*da0073e9SAndroid Build Coastguard Worker 480*da0073e9SAndroid Build Coastguard Worker def test_serialization_backwards_compat(self): 481*da0073e9SAndroid Build Coastguard Worker self._test_serialization_backwards_compat(False) 482*da0073e9SAndroid Build Coastguard Worker 483*da0073e9SAndroid Build Coastguard Worker def test_serialization_backwards_compat_safe(self): 484*da0073e9SAndroid Build Coastguard Worker self._test_serialization_backwards_compat(True) 485*da0073e9SAndroid Build Coastguard Worker 486*da0073e9SAndroid Build Coastguard Worker def test_serialization_save_warnings(self): 487*da0073e9SAndroid Build Coastguard Worker with warnings.catch_warnings(record=True) as warns: 488*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as checkpoint: 489*da0073e9SAndroid Build Coastguard Worker x = torch.save(torch.nn.Linear(2, 3), checkpoint) 490*da0073e9SAndroid Build Coastguard Worker self.assertEqual(len(warns), 0) 491*da0073e9SAndroid Build Coastguard Worker 492*da0073e9SAndroid Build Coastguard Worker def test_serialization_map_location(self): 493*da0073e9SAndroid Build Coastguard Worker test_file_path = download_file('https://download.pytorch.org/test_data/gpu_tensors.pt') 494*da0073e9SAndroid Build Coastguard Worker 495*da0073e9SAndroid Build Coastguard Worker def map_location(storage, loc): 496*da0073e9SAndroid Build Coastguard Worker return storage 497*da0073e9SAndroid Build Coastguard Worker 498*da0073e9SAndroid Build Coastguard Worker def generate_map_locations(device_type): 499*da0073e9SAndroid Build Coastguard Worker return [ 500*da0073e9SAndroid Build Coastguard Worker {'cuda:0': device_type + ':0'}, 501*da0073e9SAndroid Build Coastguard Worker device_type, 502*da0073e9SAndroid Build Coastguard Worker device_type + ':0', 503*da0073e9SAndroid Build Coastguard Worker torch.device(device_type), 504*da0073e9SAndroid Build Coastguard Worker torch.device(device_type, 0) 505*da0073e9SAndroid Build Coastguard Worker ] 506*da0073e9SAndroid Build Coastguard Worker 507*da0073e9SAndroid Build Coastguard Worker def load_bytes(): 508*da0073e9SAndroid Build Coastguard Worker with open(test_file_path, 'rb') as f: 509*da0073e9SAndroid Build Coastguard Worker return io.BytesIO(f.read()) 510*da0073e9SAndroid Build Coastguard Worker 511*da0073e9SAndroid Build Coastguard Worker fileobject_lambdas = [lambda: test_file_path, load_bytes] 512*da0073e9SAndroid Build Coastguard Worker cpu_map_locations = [ 513*da0073e9SAndroid Build Coastguard Worker map_location, 514*da0073e9SAndroid Build Coastguard Worker {'cuda:0': 'cpu'}, 515*da0073e9SAndroid Build Coastguard Worker 'cpu', 516*da0073e9SAndroid Build Coastguard Worker torch.device('cpu'), 517*da0073e9SAndroid Build Coastguard Worker ] 518*da0073e9SAndroid Build Coastguard Worker gpu_0_map_locations = generate_map_locations('cuda') 519*da0073e9SAndroid Build Coastguard Worker gpu_last_map_locations = [ 520*da0073e9SAndroid Build Coastguard Worker f'cuda:{torch.cuda.device_count() - 1}', 521*da0073e9SAndroid Build Coastguard Worker ] 522*da0073e9SAndroid Build Coastguard Worker xpu_0_map_locations = generate_map_locations('xpu') 523*da0073e9SAndroid Build Coastguard Worker xpu_last_map_locations = [ 524*da0073e9SAndroid Build Coastguard Worker f'xpu:{torch.xpu.device_count() - 1}', 525*da0073e9SAndroid Build Coastguard Worker ] 526*da0073e9SAndroid Build Coastguard Worker 527*da0073e9SAndroid Build Coastguard Worker def check_map_locations(map_locations, dtype, intended_device): 528*da0073e9SAndroid Build Coastguard Worker for fileobject_lambda in fileobject_lambdas: 529*da0073e9SAndroid Build Coastguard Worker for map_location in map_locations: 530*da0073e9SAndroid Build Coastguard Worker tensor = torch.load(fileobject_lambda(), map_location=map_location) 531*da0073e9SAndroid Build Coastguard Worker 532*da0073e9SAndroid Build Coastguard Worker self.assertEqual(tensor.device, intended_device) 533*da0073e9SAndroid Build Coastguard Worker self.assertEqual(tensor.dtype, dtype) 534*da0073e9SAndroid Build Coastguard Worker self.assertEqual(tensor, torch.tensor([[1.0, 2.0], [3.0, 4.0]], dtype=dtype, device=intended_device)) 535*da0073e9SAndroid Build Coastguard Worker 536*da0073e9SAndroid Build Coastguard Worker check_map_locations(cpu_map_locations, torch.float, torch.device('cpu')) 537*da0073e9SAndroid Build Coastguard Worker if torch.cuda.is_available(): 538*da0073e9SAndroid Build Coastguard Worker check_map_locations(gpu_0_map_locations, torch.float, torch.device('cuda', 0)) 539*da0073e9SAndroid Build Coastguard Worker check_map_locations( 540*da0073e9SAndroid Build Coastguard Worker gpu_last_map_locations, 541*da0073e9SAndroid Build Coastguard Worker torch.float, 542*da0073e9SAndroid Build Coastguard Worker torch.device('cuda', torch.cuda.device_count() - 1) 543*da0073e9SAndroid Build Coastguard Worker ) 544*da0073e9SAndroid Build Coastguard Worker if torch.xpu.is_available(): 545*da0073e9SAndroid Build Coastguard Worker check_map_locations(xpu_0_map_locations, torch.float, torch.device('xpu', 0)) 546*da0073e9SAndroid Build Coastguard Worker check_map_locations( 547*da0073e9SAndroid Build Coastguard Worker xpu_last_map_locations, 548*da0073e9SAndroid Build Coastguard Worker torch.float, 549*da0073e9SAndroid Build Coastguard Worker torch.device('xpu', torch.xpu.device_count() - 1) 550*da0073e9SAndroid Build Coastguard Worker ) 551*da0073e9SAndroid Build Coastguard Worker 552*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf(torch.cuda.is_available(), "Testing torch.load on CPU-only machine") 553*da0073e9SAndroid Build Coastguard Worker def test_load_nonexistent_device(self): 554*da0073e9SAndroid Build Coastguard Worker # Setup: create a serialized file object with a 'cuda:0' restore location 555*da0073e9SAndroid Build Coastguard Worker # The following was generated by saving a torch.randn(2, device='cuda') tensor. 556*da0073e9SAndroid Build Coastguard Worker serialized = (b'\x80\x02\x8a\nl\xfc\x9cF\xf9 j\xa8P\x19.\x80\x02M\xe9' 557*da0073e9SAndroid Build Coastguard Worker b'\x03.\x80\x02}q\x00(X\x10\x00\x00\x00protocol_versionq' 558*da0073e9SAndroid Build Coastguard Worker b'\x01M\xe9\x03X\r\x00\x00\x00little_endianq\x02\x88X\n' 559*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00type_sizesq\x03}q\x04(X\x05\x00\x00\x00shortq' 560*da0073e9SAndroid Build Coastguard Worker b'\x05K\x02X\x03\x00\x00\x00intq\x06K\x04X\x04\x00\x00\x00' 561*da0073e9SAndroid Build Coastguard Worker b'longq\x07K\x04uu.\x80\x02ctorch._utils\n_rebuild_tensor_v2' 562*da0073e9SAndroid Build Coastguard Worker b'\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\nFloatStorage' 563*da0073e9SAndroid Build Coastguard Worker b'\nq\x02X\x0e\x00\x00\x0094919395964320q\x03X\x06\x00\x00' 564*da0073e9SAndroid Build Coastguard Worker b'\x00cuda:0q\x04K\x02Ntq\x05QK\x00K\x02\x85q\x06K\x01\x85q' 565*da0073e9SAndroid Build Coastguard Worker b'\x07\x89Ntq\x08Rq\t.\x80\x02]q\x00X\x0e\x00\x00\x00' 566*da0073e9SAndroid Build Coastguard Worker b'94919395964320q\x01a.\x02\x00\x00\x00\x00\x00\x00\x00\xbb' 567*da0073e9SAndroid Build Coastguard Worker b'\x1f\x82\xbe\xea\x81\xd1>') 568*da0073e9SAndroid Build Coastguard Worker 569*da0073e9SAndroid Build Coastguard Worker buf = io.BytesIO(serialized) 570*da0073e9SAndroid Build Coastguard Worker 571*da0073e9SAndroid Build Coastguard Worker error_msg = r'Attempting to deserialize object on a CUDA device' 572*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(RuntimeError, error_msg): 573*da0073e9SAndroid Build Coastguard Worker _ = torch.load(buf) 574*da0073e9SAndroid Build Coastguard Worker 575*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf((3, 8, 0) <= sys.version_info < (3, 8, 2), "See https://bugs.python.org/issue39681") 576*da0073e9SAndroid Build Coastguard Worker def test_serialization_filelike_api_requirements(self): 577*da0073e9SAndroid Build Coastguard Worker filemock = FilelikeMock(b'', has_readinto=False) 578*da0073e9SAndroid Build Coastguard Worker tensor = torch.randn(3, 5) 579*da0073e9SAndroid Build Coastguard Worker torch.save(tensor, filemock) 580*da0073e9SAndroid Build Coastguard Worker expected_superset = {'write', 'flush'} 581*da0073e9SAndroid Build Coastguard Worker self.assertTrue(expected_superset.issuperset(filemock.calls)) 582*da0073e9SAndroid Build Coastguard Worker 583*da0073e9SAndroid Build Coastguard Worker # Reset between save and load 584*da0073e9SAndroid Build Coastguard Worker filemock.seek(0) 585*da0073e9SAndroid Build Coastguard Worker filemock.calls.clear() 586*da0073e9SAndroid Build Coastguard Worker 587*da0073e9SAndroid Build Coastguard Worker _ = torch.load(filemock) 588*da0073e9SAndroid Build Coastguard Worker expected_superset = {'read', 'readline', 'seek', 'tell'} 589*da0073e9SAndroid Build Coastguard Worker self.assertTrue(expected_superset.issuperset(filemock.calls)) 590*da0073e9SAndroid Build Coastguard Worker 591*da0073e9SAndroid Build Coastguard Worker def _test_serialization_filelike(self, tensor, mock, desc): 592*da0073e9SAndroid Build Coastguard Worker f = mock(b'') 593*da0073e9SAndroid Build Coastguard Worker torch.save(tensor, f) 594*da0073e9SAndroid Build Coastguard Worker f.seek(0) 595*da0073e9SAndroid Build Coastguard Worker data = mock(f.read()) 596*da0073e9SAndroid Build Coastguard Worker 597*da0073e9SAndroid Build Coastguard Worker msg = 'filelike serialization with {}' 598*da0073e9SAndroid Build Coastguard Worker 599*da0073e9SAndroid Build Coastguard Worker b = torch.load(data) 600*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor, b), msg.format(desc)) 601*da0073e9SAndroid Build Coastguard Worker 602*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf((3, 8, 0) <= sys.version_info < (3, 8, 2), "See https://bugs.python.org/issue39681") 603*da0073e9SAndroid Build Coastguard Worker def test_serialization_filelike_missing_attrs(self): 604*da0073e9SAndroid Build Coastguard Worker # Test edge cases where filelike objects are missing attributes. 605*da0073e9SAndroid Build Coastguard Worker # The Python io docs suggests that these attributes should really exist 606*da0073e9SAndroid Build Coastguard Worker # and throw io.UnsupportedOperation, but that isn't always the case. 607*da0073e9SAndroid Build Coastguard Worker mocks = [ 608*da0073e9SAndroid Build Coastguard Worker ('no readinto', lambda x: FilelikeMock(x)), 609*da0073e9SAndroid Build Coastguard Worker ('has readinto', lambda x: FilelikeMock(x, has_readinto=True)), 610*da0073e9SAndroid Build Coastguard Worker ('no fileno', lambda x: FilelikeMock(x, has_fileno=False)), 611*da0073e9SAndroid Build Coastguard Worker ] 612*da0073e9SAndroid Build Coastguard Worker 613*da0073e9SAndroid Build Coastguard Worker to_serialize = torch.randn(3, 10) 614*da0073e9SAndroid Build Coastguard Worker for desc, mock in mocks: 615*da0073e9SAndroid Build Coastguard Worker self._test_serialization_filelike(to_serialize, mock, desc) 616*da0073e9SAndroid Build Coastguard Worker 617*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf((3, 8, 0) <= sys.version_info < (3, 8, 2), "See https://bugs.python.org/issue39681") 618*da0073e9SAndroid Build Coastguard Worker def test_serialization_filelike_stress(self): 619*da0073e9SAndroid Build Coastguard Worker a = torch.randn(11 * (2 ** 9) + 1, 5 * (2 ** 9)) 620*da0073e9SAndroid Build Coastguard Worker 621*da0073e9SAndroid Build Coastguard Worker # This one should call python read multiple times 622*da0073e9SAndroid Build Coastguard Worker self._test_serialization_filelike(a, lambda x: FilelikeMock(x, has_readinto=False), 623*da0073e9SAndroid Build Coastguard Worker 'read() stress test') 624*da0073e9SAndroid Build Coastguard Worker self._test_serialization_filelike(a, lambda x: FilelikeMock(x, has_readinto=True), 625*da0073e9SAndroid Build Coastguard Worker 'readinto() stress test') 626*da0073e9SAndroid Build Coastguard Worker 627*da0073e9SAndroid Build Coastguard Worker def test_serialization_filelike_uses_readinto(self): 628*da0073e9SAndroid Build Coastguard Worker # For maximum effiency, when reading a file-like object, 629*da0073e9SAndroid Build Coastguard Worker # ensure the C API calls readinto instead of read. 630*da0073e9SAndroid Build Coastguard Worker a = torch.randn(5, 4) 631*da0073e9SAndroid Build Coastguard Worker 632*da0073e9SAndroid Build Coastguard Worker f = io.BytesIO() 633*da0073e9SAndroid Build Coastguard Worker torch.save(a, f) 634*da0073e9SAndroid Build Coastguard Worker f.seek(0) 635*da0073e9SAndroid Build Coastguard Worker data = FilelikeMock(f.read(), has_readinto=True) 636*da0073e9SAndroid Build Coastguard Worker 637*da0073e9SAndroid Build Coastguard Worker b = torch.load(data) 638*da0073e9SAndroid Build Coastguard Worker self.assertTrue(data.was_called('readinto')) 639*da0073e9SAndroid Build Coastguard Worker 640*da0073e9SAndroid Build Coastguard Worker def test_serialization_filelike_exceptions(self): 641*da0073e9SAndroid Build Coastguard Worker # Try to serialize to buffers that does not have write method 642*da0073e9SAndroid Build Coastguard Worker # Or have a malfrormed one, and make sure it does not cause an abort 643*da0073e9SAndroid Build Coastguard Worker # See https://github.com/pytorch/pytorch/issues/87997 644*da0073e9SAndroid Build Coastguard Worker x = torch.rand(10) 645*da0073e9SAndroid Build Coastguard Worker with self.assertRaises(AttributeError): 646*da0073e9SAndroid Build Coastguard Worker # Tries to serialize str into tensor 647*da0073e9SAndroid Build Coastguard Worker torch.save('foo', x) 648*da0073e9SAndroid Build Coastguard Worker x.write = "bar" 649*da0073e9SAndroid Build Coastguard Worker x.flush = "baz" 650*da0073e9SAndroid Build Coastguard Worker with self.assertRaises(TypeError): 651*da0073e9SAndroid Build Coastguard Worker # Tries to serialize str into tensor with write property 652*da0073e9SAndroid Build Coastguard Worker torch.save('foo', x) 653*da0073e9SAndroid Build Coastguard Worker x.write = str.__add__ 654*da0073e9SAndroid Build Coastguard Worker x.flush = str.__mul__ 655*da0073e9SAndroid Build Coastguard Worker with self.assertRaises(TypeError): 656*da0073e9SAndroid Build Coastguard Worker # Tries to serialize str into tensor with wrong callable write property 657*da0073e9SAndroid Build Coastguard Worker torch.save('foo', x) 658*da0073e9SAndroid Build Coastguard Worker s_data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 659*da0073e9SAndroid Build Coastguard Worker s = torch.CharStorage(s_data) 660*da0073e9SAndroid Build Coastguard Worker with self.assertRaises(AttributeError): 661*da0073e9SAndroid Build Coastguard Worker # Tries to serialize list into CharStorage 662*da0073e9SAndroid Build Coastguard Worker torch.save(s_data, s) 663*da0073e9SAndroid Build Coastguard Worker x = torch.randint(10, (3, 3), dtype=torch.float).cpu().numpy() 664*da0073e9SAndroid Build Coastguard Worker with self.assertRaises(AttributeError): 665*da0073e9SAndroid Build Coastguard Worker # Tries to serialize ndarray into ndarray 666*da0073e9SAndroid Build Coastguard Worker torch.save(x, x) 667*da0073e9SAndroid Build Coastguard Worker 668*da0073e9SAndroid Build Coastguard Worker 669*da0073e9SAndroid Build Coastguard Worker def test_serialization_storage_slice(self): 670*da0073e9SAndroid Build Coastguard Worker # Generated using: 671*da0073e9SAndroid Build Coastguard Worker # 672*da0073e9SAndroid Build Coastguard Worker # t = torch.zeros(2); 673*da0073e9SAndroid Build Coastguard Worker # s1 = t.storage()[:1] 674*da0073e9SAndroid Build Coastguard Worker # s2 = t.storage()[1:] 675*da0073e9SAndroid Build Coastguard Worker # torch.save((s1, s2), 'foo.ser') 676*da0073e9SAndroid Build Coastguard Worker # 677*da0073e9SAndroid Build Coastguard Worker # with PyTorch 0.3.1 678*da0073e9SAndroid Build Coastguard Worker serialized = (b'\x80\x02\x8a\nl\xfc\x9cF\xf9 j\xa8P\x19.\x80\x02M\xe9\x03' 679*da0073e9SAndroid Build Coastguard Worker b'.\x80\x02}q\x00(X\n\x00\x00\x00type_sizesq\x01}q\x02(X\x03' 680*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00intq\x03K\x04X\x05\x00\x00\x00shortq\x04K\x02X' 681*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x00longq\x05K\x04uX\x10\x00\x00\x00protocol_versionq' 682*da0073e9SAndroid Build Coastguard Worker b'\x06M\xe9\x03X\r\x00\x00\x00little_endianq\x07\x88u.\x80\x02' 683*da0073e9SAndroid Build Coastguard Worker b'(X\x07\x00\x00\x00storageq\x00ctorch\nFloatStorage\nq\x01X\x0e' 684*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x0094279043900432q\x02X\x03\x00\x00\x00cpuq\x03K\x02' 685*da0073e9SAndroid Build Coastguard Worker b'X\x0e\x00\x00\x0094279029750368q\x04K\x00K\x01\x87q\x05tq\x06' 686*da0073e9SAndroid Build Coastguard Worker b'Q(h\x00h\x01X\x0e\x00\x00\x0094279043900432q\x07h\x03K\x02X' 687*da0073e9SAndroid Build Coastguard Worker b'\x0e\x00\x00\x0094279029750432q\x08K\x01K\x01\x87q\ttq\nQ' 688*da0073e9SAndroid Build Coastguard Worker b'\x86q\x0b.\x80\x02]q\x00X\x0e\x00\x00\x0094279043900432q' 689*da0073e9SAndroid Build Coastguard Worker b'\x01a.\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 690*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00') 691*da0073e9SAndroid Build Coastguard Worker 692*da0073e9SAndroid Build Coastguard Worker buf = io.BytesIO(serialized) 693*da0073e9SAndroid Build Coastguard Worker (s1, s2) = torch.load(buf) 694*da0073e9SAndroid Build Coastguard Worker self.assertEqual(s1[0], 0) 695*da0073e9SAndroid Build Coastguard Worker self.assertEqual(s2[0], 0) 696*da0073e9SAndroid Build Coastguard Worker self.assertEqual(s1.data_ptr() + 4, s2.data_ptr()) 697*da0073e9SAndroid Build Coastguard Worker 698*da0073e9SAndroid Build Coastguard Worker def test_load_unicode_error_msg(self): 699*da0073e9SAndroid Build Coastguard Worker # This Pickle contains a Python 2 module with Unicode data and the 700*da0073e9SAndroid Build Coastguard Worker # loading should fail if the user explicitly specifies ascii encoding! 701*da0073e9SAndroid Build Coastguard Worker path = download_file('https://download.pytorch.org/test_data/legacy_conv2d.pt') 702*da0073e9SAndroid Build Coastguard Worker self.assertRaises(UnicodeDecodeError, lambda: torch.load(path, encoding='ascii')) 703*da0073e9SAndroid Build Coastguard Worker 704*da0073e9SAndroid Build Coastguard Worker def test_load_python2_unicode_module(self): 705*da0073e9SAndroid Build Coastguard Worker # This Pickle contains some Unicode data! 706*da0073e9SAndroid Build Coastguard Worker path = download_file('https://download.pytorch.org/test_data/legacy_conv2d.pt') 707*da0073e9SAndroid Build Coastguard Worker with warnings.catch_warnings(record=True) as w: 708*da0073e9SAndroid Build Coastguard Worker self.assertIsNotNone(torch.load(path)) 709*da0073e9SAndroid Build Coastguard Worker 710*da0073e9SAndroid Build Coastguard Worker def test_load_error_msg(self): 711*da0073e9SAndroid Build Coastguard Worker expected_err_msg = (".*You can only torch.load from a file that is seekable. " + 712*da0073e9SAndroid Build Coastguard Worker "Please pre-load the data into a buffer like io.BytesIO and " + 713*da0073e9SAndroid Build Coastguard Worker "try to load from it instead.") 714*da0073e9SAndroid Build Coastguard Worker 715*da0073e9SAndroid Build Coastguard Worker resource = FilelikeMock(data=b"data") 716*da0073e9SAndroid Build Coastguard Worker delattr(resource, "tell") 717*da0073e9SAndroid Build Coastguard Worker delattr(resource, "seek") 718*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(AttributeError, expected_err_msg): 719*da0073e9SAndroid Build Coastguard Worker torch.load(resource) 720*da0073e9SAndroid Build Coastguard Worker 721*da0073e9SAndroid Build Coastguard Worker def test_save_different_dtype_unallocated(self): 722*da0073e9SAndroid Build Coastguard Worker devices = ['cpu'] 723*da0073e9SAndroid Build Coastguard Worker if torch.cuda.is_available(): 724*da0073e9SAndroid Build Coastguard Worker devices.append('cuda') 725*da0073e9SAndroid Build Coastguard Worker 726*da0073e9SAndroid Build Coastguard Worker def save_load_check(a, b): 727*da0073e9SAndroid Build Coastguard Worker with io.BytesIO() as f: 728*da0073e9SAndroid Build Coastguard Worker torch.save([a, b], f) 729*da0073e9SAndroid Build Coastguard Worker f.seek(0) 730*da0073e9SAndroid Build Coastguard Worker a_loaded, b_loaded = torch.load(f) 731*da0073e9SAndroid Build Coastguard Worker self.assertEqual(a, a_loaded) 732*da0073e9SAndroid Build Coastguard Worker self.assertEqual(b, b_loaded) 733*da0073e9SAndroid Build Coastguard Worker 734*da0073e9SAndroid Build Coastguard Worker for device, dtype in product(devices, all_types_and_complex_and(torch.half, 735*da0073e9SAndroid Build Coastguard Worker torch.bfloat16, torch.bool)): 736*da0073e9SAndroid Build Coastguard Worker a = torch.tensor([], dtype=dtype, device=device) 737*da0073e9SAndroid Build Coastguard Worker 738*da0073e9SAndroid Build Coastguard Worker for other_dtype in all_types_and_complex_and(torch.half, torch.bfloat16, torch.bool): 739*da0073e9SAndroid Build Coastguard Worker s = torch.TypedStorage( 740*da0073e9SAndroid Build Coastguard Worker wrap_storage=a.storage().untyped(), 741*da0073e9SAndroid Build Coastguard Worker dtype=other_dtype) 742*da0073e9SAndroid Build Coastguard Worker save_load_check(a, s) 743*da0073e9SAndroid Build Coastguard Worker save_load_check(a.storage(), s) 744*da0073e9SAndroid Build Coastguard Worker b = torch.tensor([], dtype=other_dtype, device=device) 745*da0073e9SAndroid Build Coastguard Worker save_load_check(a, b) 746*da0073e9SAndroid Build Coastguard Worker 747*da0073e9SAndroid Build Coastguard Worker def test_save_different_dtype_error(self): 748*da0073e9SAndroid Build Coastguard Worker error_msg = r"Cannot save multiple tensors or storages that view the same data as different types" 749*da0073e9SAndroid Build Coastguard Worker 750*da0073e9SAndroid Build Coastguard Worker devices = ['cpu'] 751*da0073e9SAndroid Build Coastguard Worker if torch.cuda.is_available(): 752*da0073e9SAndroid Build Coastguard Worker devices.append('cuda') 753*da0073e9SAndroid Build Coastguard Worker 754*da0073e9SAndroid Build Coastguard Worker for device in devices: 755*da0073e9SAndroid Build Coastguard Worker a = torch.randn(10, dtype=torch.complex128, device=device) 756*da0073e9SAndroid Build Coastguard Worker f = io.BytesIO() 757*da0073e9SAndroid Build Coastguard Worker 758*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(RuntimeError, error_msg): 759*da0073e9SAndroid Build Coastguard Worker torch.save([a, a.imag], f) 760*da0073e9SAndroid Build Coastguard Worker 761*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(RuntimeError, error_msg): 762*da0073e9SAndroid Build Coastguard Worker torch.save([a.storage(), a.imag], f) 763*da0073e9SAndroid Build Coastguard Worker 764*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(RuntimeError, error_msg): 765*da0073e9SAndroid Build Coastguard Worker torch.save([a, a.imag.storage()], f) 766*da0073e9SAndroid Build Coastguard Worker 767*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(RuntimeError, error_msg): 768*da0073e9SAndroid Build Coastguard Worker torch.save([a.storage(), a.imag.storage()], f) 769*da0073e9SAndroid Build Coastguard Worker 770*da0073e9SAndroid Build Coastguard Worker a = torch.randn(10, device=device) 771*da0073e9SAndroid Build Coastguard Worker s_bytes = torch.TypedStorage( 772*da0073e9SAndroid Build Coastguard Worker wrap_storage=a.storage().untyped(), 773*da0073e9SAndroid Build Coastguard Worker dtype=torch.uint8) 774*da0073e9SAndroid Build Coastguard Worker 775*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(RuntimeError, error_msg): 776*da0073e9SAndroid Build Coastguard Worker torch.save([a, s_bytes], f) 777*da0073e9SAndroid Build Coastguard Worker 778*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(RuntimeError, error_msg): 779*da0073e9SAndroid Build Coastguard Worker torch.save([a.storage(), s_bytes], f) 780*da0073e9SAndroid Build Coastguard Worker 781*da0073e9SAndroid Build Coastguard Worker def test_safe_load_basic_types(self): 782*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 783*da0073e9SAndroid Build Coastguard Worker data = {"int": 123, "str": "world", "float": 3.14, "bool": False} 784*da0073e9SAndroid Build Coastguard Worker torch.save(data, f) 785*da0073e9SAndroid Build Coastguard Worker f.seek(0) 786*da0073e9SAndroid Build Coastguard Worker loaded_data = torch.load(f, weights_only=True) 787*da0073e9SAndroid Build Coastguard Worker self.assertEqual(data, loaded_data) 788*da0073e9SAndroid Build Coastguard Worker 789*da0073e9SAndroid Build Coastguard Worker 790*da0073e9SAndroid Build Coastguard Workerclass serialization_method: 791*da0073e9SAndroid Build Coastguard Worker def __init__(self, use_zip): 792*da0073e9SAndroid Build Coastguard Worker self.use_zip = use_zip 793*da0073e9SAndroid Build Coastguard Worker self.torch_save = torch.save 794*da0073e9SAndroid Build Coastguard Worker 795*da0073e9SAndroid Build Coastguard Worker def __enter__(self, *args, **kwargs): 796*da0073e9SAndroid Build Coastguard Worker def wrapper(*args, **kwargs): 797*da0073e9SAndroid Build Coastguard Worker if '_use_new_zipfile_serialization' in kwargs: 798*da0073e9SAndroid Build Coastguard Worker raise RuntimeError("Cannot set method manually") 799*da0073e9SAndroid Build Coastguard Worker kwargs['_use_new_zipfile_serialization'] = self.use_zip 800*da0073e9SAndroid Build Coastguard Worker return self.torch_save(*args, **kwargs) 801*da0073e9SAndroid Build Coastguard Worker 802*da0073e9SAndroid Build Coastguard Worker torch.save = wrapper 803*da0073e9SAndroid Build Coastguard Worker 804*da0073e9SAndroid Build Coastguard Worker def __exit__(self, *args, **kwargs): 805*da0073e9SAndroid Build Coastguard Worker torch.save = self.torch_save 806*da0073e9SAndroid Build Coastguard Worker 807*da0073e9SAndroid Build Coastguard WorkerPoint = namedtuple('Point', ['x', 'y']) 808*da0073e9SAndroid Build Coastguard Worker 809*da0073e9SAndroid Build Coastguard Workerclass ClassThatUsesBuildInstruction: 810*da0073e9SAndroid Build Coastguard Worker def __init__(self, num): 811*da0073e9SAndroid Build Coastguard Worker self.num = num 812*da0073e9SAndroid Build Coastguard Worker 813*da0073e9SAndroid Build Coastguard Worker def __reduce_ex__(self, proto): 814*da0073e9SAndroid Build Coastguard Worker # Third item, state here will cause pickle to push a BUILD instruction 815*da0073e9SAndroid Build Coastguard Worker return ClassThatUsesBuildInstruction, (self.num,), {'foo': 'bar'} 816*da0073e9SAndroid Build Coastguard Worker 817*da0073e9SAndroid Build Coastguard Worker 818*da0073e9SAndroid Build Coastguard Worker@unittest.skipIf(IS_WINDOWS, "NamedTemporaryFile on windows") 819*da0073e9SAndroid Build Coastguard Workerclass TestBothSerialization(TestCase): 820*da0073e9SAndroid Build Coastguard Worker @parametrize("weights_only", (True, False)) 821*da0073e9SAndroid Build Coastguard Worker def test_serialization_new_format_old_format_compat(self, device, weights_only): 822*da0073e9SAndroid Build Coastguard Worker x = [torch.ones(200, 200, device=device) for i in range(30)] 823*da0073e9SAndroid Build Coastguard Worker 824*da0073e9SAndroid Build Coastguard Worker def test(f_new, f_old): 825*da0073e9SAndroid Build Coastguard Worker torch.save(x, f_new, _use_new_zipfile_serialization=True) 826*da0073e9SAndroid Build Coastguard Worker f_new.seek(0) 827*da0073e9SAndroid Build Coastguard Worker x_new_load = torch.load(f_new, weights_only=weights_only) 828*da0073e9SAndroid Build Coastguard Worker self.assertEqual(x, x_new_load) 829*da0073e9SAndroid Build Coastguard Worker 830*da0073e9SAndroid Build Coastguard Worker torch.save(x, f_old, _use_new_zipfile_serialization=False) 831*da0073e9SAndroid Build Coastguard Worker f_old.seek(0) 832*da0073e9SAndroid Build Coastguard Worker x_old_load = torch.load(f_old, weights_only=weights_only) 833*da0073e9SAndroid Build Coastguard Worker self.assertEqual(x_old_load, x_new_load) 834*da0073e9SAndroid Build Coastguard Worker 835*da0073e9SAndroid Build Coastguard Worker with AlwaysWarnTypedStorageRemoval(True), warnings.catch_warnings(record=True) as w: 836*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f_new, tempfile.NamedTemporaryFile() as f_old: 837*da0073e9SAndroid Build Coastguard Worker test(f_new, f_old) 838*da0073e9SAndroid Build Coastguard Worker self.assertTrue(len(w) == 0, msg=f"Expected no warnings but got {[str(x) for x in w]}") 839*da0073e9SAndroid Build Coastguard Worker 840*da0073e9SAndroid Build Coastguard Worker 841*da0073e9SAndroid Build Coastguard Workerclass TestOldSerialization(TestCase, SerializationMixin): 842*da0073e9SAndroid Build Coastguard Worker # unique_key is necessary because on Python 2.7, if a warning passed to 843*da0073e9SAndroid Build Coastguard Worker # the warning module is the same, it is not raised again. 844*da0073e9SAndroid Build Coastguard Worker def _test_serialization_container(self, unique_key, filecontext_lambda): 845*da0073e9SAndroid Build Coastguard Worker 846*da0073e9SAndroid Build Coastguard Worker tmpmodule_name = f'tmpmodule{unique_key}' 847*da0073e9SAndroid Build Coastguard Worker 848*da0073e9SAndroid Build Coastguard Worker def import_module(name, filename): 849*da0073e9SAndroid Build Coastguard Worker import importlib.util 850*da0073e9SAndroid Build Coastguard Worker spec = importlib.util.spec_from_file_location(name, filename) 851*da0073e9SAndroid Build Coastguard Worker module = importlib.util.module_from_spec(spec) 852*da0073e9SAndroid Build Coastguard Worker spec.loader.exec_module(module) 853*da0073e9SAndroid Build Coastguard Worker sys.modules[module.__name__] = module 854*da0073e9SAndroid Build Coastguard Worker return module 855*da0073e9SAndroid Build Coastguard Worker 856*da0073e9SAndroid Build Coastguard Worker with filecontext_lambda() as checkpoint: 857*da0073e9SAndroid Build Coastguard Worker fname = get_file_path_2(os.path.dirname(os.path.dirname(torch.__file__)), 'torch', 'testing', 858*da0073e9SAndroid Build Coastguard Worker '_internal', 'data', 'network1.py') 859*da0073e9SAndroid Build Coastguard Worker module = import_module(tmpmodule_name, fname) 860*da0073e9SAndroid Build Coastguard Worker torch.save(module.Net(), checkpoint) 861*da0073e9SAndroid Build Coastguard Worker 862*da0073e9SAndroid Build Coastguard Worker # First check that the checkpoint can be loaded without warning about unsafe loads 863*da0073e9SAndroid Build Coastguard Worker checkpoint.seek(0) 864*da0073e9SAndroid Build Coastguard Worker with warnings.catch_warnings(record=True) as w: 865*da0073e9SAndroid Build Coastguard Worker loaded = torch.load(checkpoint) 866*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(loaded, module.Net)) 867*da0073e9SAndroid Build Coastguard Worker if can_retrieve_source: 868*da0073e9SAndroid Build Coastguard Worker self.assertEqual(len(w), 1) 869*da0073e9SAndroid Build Coastguard Worker self.assertEqual(w[0].category, FutureWarning) 870*da0073e9SAndroid Build Coastguard Worker self.assertTrue("You are using `torch.load` with `weights_only=False`" in str(w[0].message)) 871*da0073e9SAndroid Build Coastguard Worker 872*da0073e9SAndroid Build Coastguard Worker # Replace the module with different source 873*da0073e9SAndroid Build Coastguard Worker fname = get_file_path_2(os.path.dirname(os.path.dirname(torch.__file__)), 'torch', 'testing', 874*da0073e9SAndroid Build Coastguard Worker '_internal', 'data', 'network2.py') 875*da0073e9SAndroid Build Coastguard Worker module = import_module(tmpmodule_name, fname) 876*da0073e9SAndroid Build Coastguard Worker checkpoint.seek(0) 877*da0073e9SAndroid Build Coastguard Worker with warnings.catch_warnings(record=True) as w: 878*da0073e9SAndroid Build Coastguard Worker loaded = torch.load(checkpoint) 879*da0073e9SAndroid Build Coastguard Worker self.assertTrue(isinstance(loaded, module.Net)) 880*da0073e9SAndroid Build Coastguard Worker if can_retrieve_source: 881*da0073e9SAndroid Build Coastguard Worker self.assertEqual(len(w), 2) 882*da0073e9SAndroid Build Coastguard Worker self.assertEqual(w[0].category, FutureWarning) 883*da0073e9SAndroid Build Coastguard Worker self.assertEqual(w[1].category, SourceChangeWarning) 884*da0073e9SAndroid Build Coastguard Worker 885*da0073e9SAndroid Build Coastguard Worker def test_serialization_container(self): 886*da0073e9SAndroid Build Coastguard Worker self._test_serialization_container('file', tempfile.NamedTemporaryFile) 887*da0073e9SAndroid Build Coastguard Worker 888*da0073e9SAndroid Build Coastguard Worker def test_serialization_container_filelike(self): 889*da0073e9SAndroid Build Coastguard Worker self._test_serialization_container('filelike', BytesIOContext) 890*da0073e9SAndroid Build Coastguard Worker 891*da0073e9SAndroid Build Coastguard Worker def test_serialization_offset(self): 892*da0073e9SAndroid Build Coastguard Worker a = torch.randn(5, 5) 893*da0073e9SAndroid Build Coastguard Worker b = torch.randn(1024, 1024, 512, dtype=torch.float32) 894*da0073e9SAndroid Build Coastguard Worker m = torch.nn.Conv2d(1, 1, (1, 3)) 895*da0073e9SAndroid Build Coastguard Worker i, j = 41, 43 896*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 897*da0073e9SAndroid Build Coastguard Worker pickle.dump(i, f) 898*da0073e9SAndroid Build Coastguard Worker torch.save(a, f) 899*da0073e9SAndroid Build Coastguard Worker pickle.dump(j, f) 900*da0073e9SAndroid Build Coastguard Worker torch.save(b, f) 901*da0073e9SAndroid Build Coastguard Worker torch.save(m, f) 902*da0073e9SAndroid Build Coastguard Worker self.assertTrue(f.tell() > 2 * 1024 * 1024 * 1024) 903*da0073e9SAndroid Build Coastguard Worker f.seek(0) 904*da0073e9SAndroid Build Coastguard Worker i_loaded = pickle.load(f) 905*da0073e9SAndroid Build Coastguard Worker a_loaded = torch.load(f) 906*da0073e9SAndroid Build Coastguard Worker j_loaded = pickle.load(f) 907*da0073e9SAndroid Build Coastguard Worker b_loaded = torch.load(f) 908*da0073e9SAndroid Build Coastguard Worker m_loaded = torch.load(f) 909*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(a, a_loaded)) 910*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(b, b_loaded)) 911*da0073e9SAndroid Build Coastguard Worker self.assertTrue(m.kernel_size == m_loaded.kernel_size) 912*da0073e9SAndroid Build Coastguard Worker self.assertEqual(i, i_loaded) 913*da0073e9SAndroid Build Coastguard Worker self.assertEqual(j, j_loaded) 914*da0073e9SAndroid Build Coastguard Worker 915*da0073e9SAndroid Build Coastguard Worker @parametrize('weights_only', (True, False)) 916*da0073e9SAndroid Build Coastguard Worker def test_serialization_offset_filelike(self, weights_only): 917*da0073e9SAndroid Build Coastguard Worker a = torch.randn(5, 5) 918*da0073e9SAndroid Build Coastguard Worker b = torch.randn(1024, 1024, 512, dtype=torch.float32) 919*da0073e9SAndroid Build Coastguard Worker i, j = 41, 43 920*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 921*da0073e9SAndroid Build Coastguard Worker pickle.dump(i, f) 922*da0073e9SAndroid Build Coastguard Worker torch.save(a, f) 923*da0073e9SAndroid Build Coastguard Worker pickle.dump(j, f) 924*da0073e9SAndroid Build Coastguard Worker torch.save(b, f) 925*da0073e9SAndroid Build Coastguard Worker self.assertTrue(f.tell() > 2 * 1024 * 1024 * 1024) 926*da0073e9SAndroid Build Coastguard Worker f.seek(0) 927*da0073e9SAndroid Build Coastguard Worker i_loaded = pickle.load(f) 928*da0073e9SAndroid Build Coastguard Worker a_loaded = torch.load(f, weights_only=weights_only) 929*da0073e9SAndroid Build Coastguard Worker j_loaded = pickle.load(f) 930*da0073e9SAndroid Build Coastguard Worker b_loaded = torch.load(f, weights_only=weights_only) 931*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(a, a_loaded)) 932*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(b, b_loaded)) 933*da0073e9SAndroid Build Coastguard Worker self.assertEqual(i, i_loaded) 934*da0073e9SAndroid Build Coastguard Worker self.assertEqual(j, j_loaded) 935*da0073e9SAndroid Build Coastguard Worker 936*da0073e9SAndroid Build Coastguard Worker def run(self, *args, **kwargs): 937*da0073e9SAndroid Build Coastguard Worker with serialization_method(use_zip=False): 938*da0073e9SAndroid Build Coastguard Worker return super().run(*args, **kwargs) 939*da0073e9SAndroid Build Coastguard Worker 940*da0073e9SAndroid Build Coastguard Worker 941*da0073e9SAndroid Build Coastguard Workerclass TestSerialization(TestCase, SerializationMixin): 942*da0073e9SAndroid Build Coastguard Worker @parametrize('weights_only', (True, False)) 943*da0073e9SAndroid Build Coastguard Worker def test_serialization_zipfile(self, weights_only): 944*da0073e9SAndroid Build Coastguard Worker data = self._test_serialization_data() 945*da0073e9SAndroid Build Coastguard Worker 946*da0073e9SAndroid Build Coastguard Worker def test(name_or_buffer): 947*da0073e9SAndroid Build Coastguard Worker torch.save(data, name_or_buffer) 948*da0073e9SAndroid Build Coastguard Worker 949*da0073e9SAndroid Build Coastguard Worker if hasattr(name_or_buffer, 'seek'): 950*da0073e9SAndroid Build Coastguard Worker name_or_buffer.seek(0) 951*da0073e9SAndroid Build Coastguard Worker 952*da0073e9SAndroid Build Coastguard Worker result = torch.load(name_or_buffer, weights_only=weights_only) 953*da0073e9SAndroid Build Coastguard Worker self.assertEqual(result, data) 954*da0073e9SAndroid Build Coastguard Worker 955*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 956*da0073e9SAndroid Build Coastguard Worker test(f) 957*da0073e9SAndroid Build Coastguard Worker 958*da0073e9SAndroid Build Coastguard Worker with TemporaryFileName() as fname: 959*da0073e9SAndroid Build Coastguard Worker test(fname) 960*da0073e9SAndroid Build Coastguard Worker 961*da0073e9SAndroid Build Coastguard Worker if IS_FILESYSTEM_UTF8_ENCODING: 962*da0073e9SAndroid Build Coastguard Worker with TemporaryDirectoryName(suffix='\u975eASCII\u30d1\u30b9') as dname: 963*da0073e9SAndroid Build Coastguard Worker with TemporaryFileName(dir=dname) as fname: 964*da0073e9SAndroid Build Coastguard Worker test(fname) 965*da0073e9SAndroid Build Coastguard Worker 966*da0073e9SAndroid Build Coastguard Worker test(io.BytesIO()) 967*da0073e9SAndroid Build Coastguard Worker 968*da0073e9SAndroid Build Coastguard Worker def test_serialization_zipfile_actually_jit(self): 969*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 970*da0073e9SAndroid Build Coastguard Worker torch.jit.save(torch.jit.script(torch.nn.Linear(3, 4)), f) 971*da0073e9SAndroid Build Coastguard Worker f.seek(0) 972*da0073e9SAndroid Build Coastguard Worker torch.load(f) 973*da0073e9SAndroid Build Coastguard Worker 974*da0073e9SAndroid Build Coastguard Worker # Ensure large zip64 serialization works properly 975*da0073e9SAndroid Build Coastguard Worker @serialTest() 976*da0073e9SAndroid Build Coastguard Worker def test_serialization_2gb_file(self): 977*da0073e9SAndroid Build Coastguard Worker # Run GC to clear up as much memory as possible before running this test 978*da0073e9SAndroid Build Coastguard Worker gc.collect() 979*da0073e9SAndroid Build Coastguard Worker big_model = torch.nn.Conv2d(20000, 3200, kernel_size=3) 980*da0073e9SAndroid Build Coastguard Worker 981*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 982*da0073e9SAndroid Build Coastguard Worker torch.save(big_model.state_dict(), f) 983*da0073e9SAndroid Build Coastguard Worker f.seek(0) 984*da0073e9SAndroid Build Coastguard Worker state = torch.load(f) 985*da0073e9SAndroid Build Coastguard Worker 986*da0073e9SAndroid Build Coastguard Worker @parametrize('weights_only', (True, False)) 987*da0073e9SAndroid Build Coastguard Worker def test_pathlike_serialization(self, weights_only): 988*da0073e9SAndroid Build Coastguard Worker model = torch.nn.Conv2d(20, 3200, kernel_size=3) 989*da0073e9SAndroid Build Coastguard Worker 990*da0073e9SAndroid Build Coastguard Worker with TemporaryFileName() as fname: 991*da0073e9SAndroid Build Coastguard Worker path = pathlib.Path(fname) 992*da0073e9SAndroid Build Coastguard Worker torch.save(model.state_dict(), path) 993*da0073e9SAndroid Build Coastguard Worker torch.load(path, weights_only=weights_only) 994*da0073e9SAndroid Build Coastguard Worker 995*da0073e9SAndroid Build Coastguard Worker @parametrize('weights_only', (True, False)) 996*da0073e9SAndroid Build Coastguard Worker def test_meta_serialization(self, weights_only): 997*da0073e9SAndroid Build Coastguard Worker big_model = torch.nn.Conv2d(20000, 320000, kernel_size=3, device='meta') 998*da0073e9SAndroid Build Coastguard Worker 999*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 1000*da0073e9SAndroid Build Coastguard Worker torch.save(big_model.state_dict(), f) 1001*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1002*da0073e9SAndroid Build Coastguard Worker state = torch.load(f, weights_only=weights_only) 1003*da0073e9SAndroid Build Coastguard Worker 1004*da0073e9SAndroid Build Coastguard Worker self.assertEqual(state['weight'].size(), big_model.weight.size()) 1005*da0073e9SAndroid Build Coastguard Worker 1006*da0073e9SAndroid Build Coastguard Worker def test_lr_scheduler_serialization(self): 1007*da0073e9SAndroid Build Coastguard Worker sgd = torch.optim.SGD([ 1008*da0073e9SAndroid Build Coastguard Worker torch.tensor(torch.randn(100, 100, 2000), requires_grad=True) 1009*da0073e9SAndroid Build Coastguard Worker ], lr=0.1, momentum=0.9) 1010*da0073e9SAndroid Build Coastguard Worker lr_scheduler = torch.optim.lr_scheduler.OneCycleLR(sgd, 6.0, total_steps=10) 1011*da0073e9SAndroid Build Coastguard Worker 1012*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 1013*da0073e9SAndroid Build Coastguard Worker torch.save(lr_scheduler.state_dict(), f) 1014*da0073e9SAndroid Build Coastguard Worker f.seek(0, os.SEEK_END) 1015*da0073e9SAndroid Build Coastguard Worker size = f.tell() 1016*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1017*da0073e9SAndroid Build Coastguard Worker lr_scheduler_state = torch.load(f) 1018*da0073e9SAndroid Build Coastguard Worker 1019*da0073e9SAndroid Build Coastguard Worker self.assertEqual(lr_scheduler_state['base_lrs'], lr_scheduler.base_lrs) 1020*da0073e9SAndroid Build Coastguard Worker if 'anneal_func' in lr_scheduler_state: 1021*da0073e9SAndroid Build Coastguard Worker self.assertFalse(hasattr(lr_scheduler_state['anneal_func'], '__self__')) # check method is not bound 1022*da0073e9SAndroid Build Coastguard Worker else: 1023*da0073e9SAndroid Build Coastguard Worker self.assertTrue('_anneal_func_type' in lr_scheduler_state) 1024*da0073e9SAndroid Build Coastguard Worker self.assertTrue(size < 1024 * 1024) # Must be less than 1MB 1025*da0073e9SAndroid Build Coastguard Worker 1026*da0073e9SAndroid Build Coastguard Worker @parametrize('weights_only', (True, False)) 1027*da0073e9SAndroid Build Coastguard Worker def test_serialization_python_attr(self, weights_only): 1028*da0073e9SAndroid Build Coastguard Worker def _test_save_load_attr(t): 1029*da0073e9SAndroid Build Coastguard Worker t.foo = 'foo' 1030*da0073e9SAndroid Build Coastguard Worker t.pi = 3.14 1031*da0073e9SAndroid Build Coastguard Worker 1032*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 1033*da0073e9SAndroid Build Coastguard Worker torch.save(t, f) 1034*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1035*da0073e9SAndroid Build Coastguard Worker loaded_t = torch.load(f, weights_only=weights_only) 1036*da0073e9SAndroid Build Coastguard Worker 1037*da0073e9SAndroid Build Coastguard Worker self.assertEqual(t, loaded_t) 1038*da0073e9SAndroid Build Coastguard Worker self.assertEqual(t.foo, loaded_t.foo) 1039*da0073e9SAndroid Build Coastguard Worker self.assertEqual(t.pi, loaded_t.pi) 1040*da0073e9SAndroid Build Coastguard Worker 1041*da0073e9SAndroid Build Coastguard Worker t = torch.zeros(3, 3) 1042*da0073e9SAndroid Build Coastguard Worker _test_save_load_attr(t) 1043*da0073e9SAndroid Build Coastguard Worker _test_save_load_attr(torch.nn.Parameter(t)) 1044*da0073e9SAndroid Build Coastguard Worker 1045*da0073e9SAndroid Build Coastguard Worker def test_weights_only_assert(self): 1046*da0073e9SAndroid Build Coastguard Worker class HelloWorld: 1047*da0073e9SAndroid Build Coastguard Worker def __reduce__(self): 1048*da0073e9SAndroid Build Coastguard Worker return (print, ("Hello World!",)) 1049*da0073e9SAndroid Build Coastguard Worker 1050*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 1051*da0073e9SAndroid Build Coastguard Worker torch.save(HelloWorld(), f) 1052*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1053*da0073e9SAndroid Build Coastguard Worker # Unsafe load should work 1054*da0073e9SAndroid Build Coastguard Worker self.assertIsNone(torch.load(f, weights_only=False)) 1055*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1056*da0073e9SAndroid Build Coastguard Worker # Safe load should assert 1057*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(pickle.UnpicklingError, "Unsupported global: GLOBAL builtins.print"): 1058*da0073e9SAndroid Build Coastguard Worker torch.load(f, weights_only=True) 1059*da0073e9SAndroid Build Coastguard Worker try: 1060*da0073e9SAndroid Build Coastguard Worker torch.serialization.add_safe_globals([print]) 1061*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1062*da0073e9SAndroid Build Coastguard Worker torch.load(f, weights_only=True) 1063*da0073e9SAndroid Build Coastguard Worker finally: 1064*da0073e9SAndroid Build Coastguard Worker torch.serialization.clear_safe_globals() 1065*da0073e9SAndroid Build Coastguard Worker 1066*da0073e9SAndroid Build Coastguard Worker def test_weights_only_safe_globals_newobj(self): 1067*da0073e9SAndroid Build Coastguard Worker # This will use NEWOBJ 1068*da0073e9SAndroid Build Coastguard Worker p = Point(x=1, y=2) 1069*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 1070*da0073e9SAndroid Build Coastguard Worker torch.save(p, f) 1071*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1072*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(pickle.UnpicklingError, 1073*da0073e9SAndroid Build Coastguard Worker "GLOBAL __main__.Point was not an allowed global by default"): 1074*da0073e9SAndroid Build Coastguard Worker torch.load(f, weights_only=True) 1075*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1076*da0073e9SAndroid Build Coastguard Worker try: 1077*da0073e9SAndroid Build Coastguard Worker torch.serialization.add_safe_globals([Point]) 1078*da0073e9SAndroid Build Coastguard Worker loaded_p = torch.load(f, weights_only=True) 1079*da0073e9SAndroid Build Coastguard Worker self.assertEqual(loaded_p, p) 1080*da0073e9SAndroid Build Coastguard Worker finally: 1081*da0073e9SAndroid Build Coastguard Worker torch.serialization.clear_safe_globals() 1082*da0073e9SAndroid Build Coastguard Worker 1083*da0073e9SAndroid Build Coastguard Worker def test_weights_only_safe_globals_build(self): 1084*da0073e9SAndroid Build Coastguard Worker counter = 0 1085*da0073e9SAndroid Build Coastguard Worker 1086*da0073e9SAndroid Build Coastguard Worker def fake_set_state(obj, *args): 1087*da0073e9SAndroid Build Coastguard Worker nonlocal counter 1088*da0073e9SAndroid Build Coastguard Worker counter += 1 1089*da0073e9SAndroid Build Coastguard Worker 1090*da0073e9SAndroid Build Coastguard Worker c = ClassThatUsesBuildInstruction(2) 1091*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 1092*da0073e9SAndroid Build Coastguard Worker torch.save(c, f) 1093*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1094*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(pickle.UnpicklingError, 1095*da0073e9SAndroid Build Coastguard Worker "GLOBAL __main__.ClassThatUsesBuildInstruction was not an allowed global by default"): 1096*da0073e9SAndroid Build Coastguard Worker torch.load(f, weights_only=True) 1097*da0073e9SAndroid Build Coastguard Worker try: 1098*da0073e9SAndroid Build Coastguard Worker torch.serialization.add_safe_globals([ClassThatUsesBuildInstruction]) 1099*da0073e9SAndroid Build Coastguard Worker # Test dict update path 1100*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1101*da0073e9SAndroid Build Coastguard Worker loaded_c = torch.load(f, weights_only=True) 1102*da0073e9SAndroid Build Coastguard Worker self.assertEqual(loaded_c.num, 2) 1103*da0073e9SAndroid Build Coastguard Worker self.assertEqual(loaded_c.foo, 'bar') 1104*da0073e9SAndroid Build Coastguard Worker # Test setstate path 1105*da0073e9SAndroid Build Coastguard Worker ClassThatUsesBuildInstruction.__setstate__ = fake_set_state 1106*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1107*da0073e9SAndroid Build Coastguard Worker loaded_c = torch.load(f, weights_only=True) 1108*da0073e9SAndroid Build Coastguard Worker self.assertEqual(loaded_c.num, 2) 1109*da0073e9SAndroid Build Coastguard Worker self.assertEqual(counter, 1) 1110*da0073e9SAndroid Build Coastguard Worker self.assertFalse(hasattr(loaded_c, 'foo')) 1111*da0073e9SAndroid Build Coastguard Worker finally: 1112*da0073e9SAndroid Build Coastguard Worker torch.serialization.clear_safe_globals() 1113*da0073e9SAndroid Build Coastguard Worker ClassThatUsesBuildInstruction.__setstate__ = None 1114*da0073e9SAndroid Build Coastguard Worker 1115*da0073e9SAndroid Build Coastguard Worker @parametrize("unsafe_global", [True, False]) 1116*da0073e9SAndroid Build Coastguard Worker def test_weights_only_error(self, unsafe_global): 1117*da0073e9SAndroid Build Coastguard Worker sd = {'t': TwoTensor(torch.randn(2), torch.randn(2))} 1118*da0073e9SAndroid Build Coastguard Worker pickle_protocol = torch.serialization.DEFAULT_PROTOCOL if unsafe_global else 5 1119*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 1120*da0073e9SAndroid Build Coastguard Worker torch.save(sd, f, pickle_protocol=pickle_protocol) 1121*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1122*da0073e9SAndroid Build Coastguard Worker if unsafe_global: 1123*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(pickle.UnpicklingError, 1124*da0073e9SAndroid Build Coastguard Worker r"use `torch.serialization.add_safe_globals\(\[TwoTensor\]\)` to allowlist"): 1125*da0073e9SAndroid Build Coastguard Worker torch.load(f, weights_only=True) 1126*da0073e9SAndroid Build Coastguard Worker else: 1127*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(pickle.UnpicklingError, 1128*da0073e9SAndroid Build Coastguard Worker "file an issue with the following so that we can make `weights_only=True`"): 1129*da0073e9SAndroid Build Coastguard Worker torch.load(f, weights_only=True) 1130*da0073e9SAndroid Build Coastguard Worker 1131*da0073e9SAndroid Build Coastguard Worker @parametrize('weights_only', (False, True)) 1132*da0073e9SAndroid Build Coastguard Worker def test_serialization_math_bits(self, weights_only): 1133*da0073e9SAndroid Build Coastguard Worker t = torch.randn(1, dtype=torch.cfloat) 1134*da0073e9SAndroid Build Coastguard Worker 1135*da0073e9SAndroid Build Coastguard Worker def _save_load_check(t): 1136*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 1137*da0073e9SAndroid Build Coastguard Worker torch.save(t, f) 1138*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1139*da0073e9SAndroid Build Coastguard Worker # Unsafe load should work 1140*da0073e9SAndroid Build Coastguard Worker self.assertEqual(torch.load(f, weights_only=weights_only), t) 1141*da0073e9SAndroid Build Coastguard Worker 1142*da0073e9SAndroid Build Coastguard Worker t_conj = torch.conj(t) 1143*da0073e9SAndroid Build Coastguard Worker _save_load_check(t_conj) 1144*da0073e9SAndroid Build Coastguard Worker 1145*da0073e9SAndroid Build Coastguard Worker t_neg = torch._neg_view(t) 1146*da0073e9SAndroid Build Coastguard Worker _save_load_check(t_neg) 1147*da0073e9SAndroid Build Coastguard Worker 1148*da0073e9SAndroid Build Coastguard Worker t_n_c = torch._neg_view(torch.conj(t)) 1149*da0073e9SAndroid Build Coastguard Worker _save_load_check(t_n_c) 1150*da0073e9SAndroid Build Coastguard Worker 1151*da0073e9SAndroid Build Coastguard Worker @parametrize('weights_only', (False, True)) 1152*da0073e9SAndroid Build Coastguard Worker def test_serialization_efficient_zerotensor(self, weights_only): 1153*da0073e9SAndroid Build Coastguard Worker # We don't support serializing `ZeroTensor` as it is not public 1154*da0073e9SAndroid Build Coastguard Worker # facing yet. 1155*da0073e9SAndroid Build Coastguard Worker # If in future, `ZeroTensor` serialization is supported, this test 1156*da0073e9SAndroid Build Coastguard Worker # should start failing! 1157*da0073e9SAndroid Build Coastguard Worker t = torch._efficientzerotensor((4, 5)) 1158*da0073e9SAndroid Build Coastguard Worker 1159*da0073e9SAndroid Build Coastguard Worker def _save_load_check(t): 1160*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 1161*da0073e9SAndroid Build Coastguard Worker torch.save(t, f) 1162*da0073e9SAndroid Build Coastguard Worker f.seek(0) 1163*da0073e9SAndroid Build Coastguard Worker # Unsafe load should work 1164*da0073e9SAndroid Build Coastguard Worker self.assertEqual(torch.load(f, weights_only=weights_only), t) 1165*da0073e9SAndroid Build Coastguard Worker 1166*da0073e9SAndroid Build Coastguard Worker # NOTE: `torch.save` fails before we hit the TORCH_CHECK in `getTensoMetadata` 1167*da0073e9SAndroid Build Coastguard Worker # as nullptr storage is disabled. 1168*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(RuntimeError, 'ZeroTensor is not serializable'): 1169*da0073e9SAndroid Build Coastguard Worker _save_load_check(t) 1170*da0073e9SAndroid Build Coastguard Worker 1171*da0073e9SAndroid Build Coastguard Worker def test_serialization_byteorder_mark(self): 1172*da0073e9SAndroid Build Coastguard Worker lstm = torch.nn.LSTM(3, 3) 1173*da0073e9SAndroid Build Coastguard Worker inputs = [torch.randn(1, 3) for _ in range(5)] 1174*da0073e9SAndroid Build Coastguard Worker inputs = torch.cat(inputs).view(len(inputs), 1, -1) 1175*da0073e9SAndroid Build Coastguard Worker hidden = (torch.randn(1, 1, 3), torch.randn(1, 1, 3)) # clean out hidden state 1176*da0073e9SAndroid Build Coastguard Worker 1177*da0073e9SAndroid Build Coastguard Worker databuffer = io.BytesIO() 1178*da0073e9SAndroid Build Coastguard Worker torch.save(lstm.state_dict(), databuffer) 1179*da0073e9SAndroid Build Coastguard Worker databuffer.seek(0) 1180*da0073e9SAndroid Build Coastguard Worker 1181*da0073e9SAndroid Build Coastguard Worker with torch.serialization._open_zipfile_reader(databuffer) as zip_file: 1182*da0073e9SAndroid Build Coastguard Worker byteordername = 'byteorder' 1183*da0073e9SAndroid Build Coastguard Worker self.assertTrue(zip_file.has_record(byteordername)) 1184*da0073e9SAndroid Build Coastguard Worker byteorderdata = zip_file.get_record(byteordername) 1185*da0073e9SAndroid Build Coastguard Worker self.assertTrue(byteorderdata in [b'little', b'big']) 1186*da0073e9SAndroid Build Coastguard Worker self.assertEqual(byteorderdata.decode(), sys.byteorder) 1187*da0073e9SAndroid Build Coastguard Worker 1188*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data(self): 1189*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 1190*da0073e9SAndroid Build Coastguard Worker # 1191*da0073e9SAndroid Build Coastguard Worker # import torch 1192*da0073e9SAndroid Build Coastguard Worker # 1193*da0073e9SAndroid Build Coastguard Worker # lstm = torch.nn.LSTM(3, 3) 1194*da0073e9SAndroid Build Coastguard Worker # inputs = [torch.randn(1, 3) for _ in range(5)] 1195*da0073e9SAndroid Build Coastguard Worker # 1196*da0073e9SAndroid Build Coastguard Worker # inputs = torch.cat(inputs).view(len(inputs), 1, -1) 1197*da0073e9SAndroid Build Coastguard Worker # hidden = (torch.randn(1, 1, 3), torch.randn(1, 1, 3)) 1198*da0073e9SAndroid Build Coastguard Worker # 1199*da0073e9SAndroid Build Coastguard Worker # torch.save(lstm.state_dict(), "lstm.LE.pt", _disable_byteorder_record=True) 1200*da0073e9SAndroid Build Coastguard Worker # torch.save(lstm.state_dict(), "lstm.LE.BOM.pt") 1201*da0073e9SAndroid Build Coastguard Worker # 1202*da0073e9SAndroid Build Coastguard Worker # print(lstm.state_dict()) 1203*da0073e9SAndroid Build Coastguard Worker # 1204*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 1205*da0073e9SAndroid Build Coastguard Worker # 1206*da0073e9SAndroid Build Coastguard Worker # import torch 1207*da0073e9SAndroid Build Coastguard Worker # 1208*da0073e9SAndroid Build Coastguard Worker # lstm = torch.nn.LSTM(3, 3) 1209*da0073e9SAndroid Build Coastguard Worker # lstm.load_state_dict(torch.load("lstm.LE.BOM.pt"), strict=True) 1210*da0073e9SAndroid Build Coastguard Worker # 1211*da0073e9SAndroid Build Coastguard Worker # torch.save(lstm.state_dict(), "lstm.BE.pt", _disable_byteorder_record=True) 1212*da0073e9SAndroid Build Coastguard Worker # torch.save(lstm.state_dict(), "lstm.BE.BOM.pt") 1213*da0073e9SAndroid Build Coastguard Worker # 1214*da0073e9SAndroid Build Coastguard Worker # print(lstm.state_dict()) 1215*da0073e9SAndroid Build Coastguard Worker # 1216*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 1217*da0073e9SAndroid Build Coastguard Worker # 1218*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 1219*da0073e9SAndroid Build Coastguard Worker # data = file.read() 1220*da0073e9SAndroid Build Coastguard Worker # file.close() 1221*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 1222*da0073e9SAndroid Build Coastguard Worker # 1223*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 1224*da0073e9SAndroid Build Coastguard Worker # 1225*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1226*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\r\x00\x15\x00lstm/data.pklFB\x11\x00ZZZZZZZZZZZZZZZZZ\x80\x02' 1227*da0073e9SAndroid Build Coastguard Worker b'ccollections\nOrderedDict\nq\x00)Rq\x01(X\x0c\x00\x00\x00weight_ih_l0q\x02ctor' 1228*da0073e9SAndroid Build Coastguard Worker b'ch._utils\n_rebuild_tensor_v2\nq\x03((X\x07\x00\x00\x00storageq\x04ctorch\nFloat' 1229*da0073e9SAndroid Build Coastguard Worker b'Storage\nq\x05X\x01\x00\x00\x000q\x06X\x03\x00\x00\x00cpuq\x07K$tq\x08QK\x00K\x0c' 1230*da0073e9SAndroid Build Coastguard Worker b'K\x03\x86q\tK\x03K\x01\x86q\n\x89h\x00)Rq\x0btq\x0cRq\rX\x0c\x00\x00\x00weight_' 1231*da0073e9SAndroid Build Coastguard Worker b'hh_l0q\x0eh\x03((h\x04h\x05X\x01\x00\x00\x001q\x0fh\x07K$tq\x10QK\x00K\x0cK\x03\x86' 1232*da0073e9SAndroid Build Coastguard Worker b'q\x11K\x03K\x01\x86q\x12\x89h\x00)Rq\x13tq\x14Rq\x15X\n\x00\x00\x00bias_ih_l0' 1233*da0073e9SAndroid Build Coastguard Worker b'q\x16h\x03((h\x04h\x05X\x01\x00\x00\x002q\x17h\x07K\x0ctq\x18QK\x00K\x0c\x85q\x19' 1234*da0073e9SAndroid Build Coastguard Worker b'K\x01\x85q\x1a\x89h\x00)Rq\x1btq\x1cRq\x1dX\n\x00\x00\x00bias_hh_l0q\x1eh\x03((' 1235*da0073e9SAndroid Build Coastguard Worker b'h\x04h\x05X\x01\x00\x00\x003q\x1fh\x07K\x0ctq QK\x00K\x0c\x85q!K\x01\x85q"\x89h\x00' 1236*da0073e9SAndroid Build Coastguard Worker b')Rq#tq$Rq%u}q&X\t\x00\x00\x00_metadataq\'h\x00)Rq(X\x00\x00\x00\x00q)}q*X\x07' 1237*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00versionq+K\x01sssb.PK\x07\x08\xab\xf1\xfb\x01\xb8\x01\x00\x00\xb8\x01' 1238*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1239*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x0b\x00\x0f\x00lstm/data/0FB\x0b\x00ZZZZZZZZZZZ\nuJ\xbe' 1240*da0073e9SAndroid Build Coastguard Worker b'X*\xa2\xbe\xc4\xea\x10>\xd4\n\x8d\xbe\x1c\x10\x8a\xbe\xb02\xe4\xbe,\xcb4>\x00' 1241*da0073e9SAndroid Build Coastguard Worker b'\x17!>H\x9c\xe0\xbe\xd2\x15!\xbe6C\xc6>v\xc5\x89>\xae\x14\x81\xbeZ\xc7\x99>\x90P' 1242*da0073e9SAndroid Build Coastguard Worker b'\x01?`\xb9\x9a<\xc0 <=\'\xc7\x9e\xbe\xaa\xf4\x02?\x00\xf3\x0e\xbc\xd8\xb7v\xbe\xa0' 1243*da0073e9SAndroid Build Coastguard Worker b'\xcc\xcd=$/\xaf>\x00\xc4K=0\xb8\xe5\xbe\xb6\xc5U\xbe\xc4i\xf3\xbe\xa45\xdc>\x06' 1244*da0073e9SAndroid Build Coastguard Worker b'g\x8d>N!\xae>2Fr\xbe0hb\xbd\xf0we\xbd g\xa0<\xb6\xbe\x9e\xbe\x14\xd1\xc2>PK\x07' 1245*da0073e9SAndroid Build Coastguard Worker b'\x08j\xd9\xb9M\x90\x00\x00\x00\x90\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00' 1246*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x007\x00lst' 1247*da0073e9SAndroid Build Coastguard Worker b'm/data/1FB3\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ|[\xe1>\xa2Yd\xbe' 1248*da0073e9SAndroid Build Coastguard Worker b'\xa5o\t\xbfz\x1c\x05\xbe \xb1\xdb<\xf0\xcd\xfc>\xa2u\xcb>\x8c\x87{\xbe\x9c\x9b' 1249*da0073e9SAndroid Build Coastguard Worker b'^>\xacmG>\xae\x17\x93>\x8e\xc5\xf0\xbet\x1c\xfc>\xcb\x84\x81\xbe\xc8\xa6 >\x88\xee' 1250*da0073e9SAndroid Build Coastguard Worker b'\xaf=\n\xc9\x8d>\xc0\xc5\xee>\xf0E\x91>\xf4^\xa1>\xb8\xbbF>\x97\x97\xfe\xbe\xec' 1251*da0073e9SAndroid Build Coastguard Worker b'\x85\x03?h\x9c\xf3=\xf2\xa8\x97>^\xfa\r?6i\x94\xbe\xbc1w\xbeh\xc4\x8a=\x94\xc8' 1252*da0073e9SAndroid Build Coastguard Worker b'\x9f\xbd\x81\xb5\x89\xbe(K\xb0>\xf0:z\xbd\xb0\xc6\x9b\xbdX\x00\x88=\x05\xc7\x11\xbf' 1253*da0073e9SAndroid Build Coastguard Worker b'PK\x07\x08\x12\xc0\x87\x96\x90\x00\x00\x00\x90\x00\x00\x00PK\x03\x04\x00\x00\x08' 1254*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b' 1255*da0073e9SAndroid Build Coastguard Worker b'\x007\x00lstm/data/2FB3\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1256*da0073e9SAndroid Build Coastguard Worker b'Z\xb0\xc2f=@\xdd1<\x864\xd8\xbe\xa0\t\x13?+g\x8f\xbeu\xb1\r\xbfbl\xc3>\xa8\\\x82' 1257*da0073e9SAndroid Build Coastguard Worker b'\xbe\xa4c\xf3\xbd,\x96\xdf\xbe\xfe\x05\xf1\xbe\xf8\xc9\x96>PK\x07\x08\x92\tK?0\x00' 1258*da0073e9SAndroid Build Coastguard Worker b'\x00\x000\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00' 1259*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x17\x00lstm/data/3FB\x13\x00ZZ' 1260*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZ\x04\xaai\xbe\xce\xd8\x8a\xbe\xe3O\xdf\xbe$\xc3\xd2\xbe\x06\xb1' 1261*da0073e9SAndroid Build Coastguard Worker b'\x80\xbe^&\x08?\x00\x1a}\xbd\x06\xde\r?\x04\xe7\xac>Z@\xe9\xbe\x14\xc2)>\x9c\xe9' 1262*da0073e9SAndroid Build Coastguard Worker b'/>PK\x07\x08\x1axU\xe80\x00\x00\x000\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00' 1263*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x16\x00' 1264*da0073e9SAndroid Build Coastguard Worker b'lstm/versionFB\x12\x00ZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00' 1265*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xab\xf1' 1266*da0073e9SAndroid Build Coastguard Worker b'\xfb\x01\xb8\x01\x00\x00\xb8\x01\x00\x00\r\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1267*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00lstm/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08' 1268*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00j\xd9\xb9M\x90\x00\x00\x00\x90\x00\x00\x00\x0b\x00\x00\x00' 1269*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x02\x00\x00lstm/data/0PK\x01\x02\x00' 1270*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x12\xc0\x87\x96\x90\x00\x00\x00\x90' 1271*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x02\x00' 1272*da0073e9SAndroid Build Coastguard Worker b'\x00lstm/data/1PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x92' 1273*da0073e9SAndroid Build Coastguard Worker b'\tK?0\x00\x00\x000\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1274*da0073e9SAndroid Build Coastguard Worker b'\x00\xe0\x03\x00\x00lstm/data/2PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 1275*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1axU\xe80\x00\x00\x000\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00' 1276*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x80\x04\x00\x00lstm/data/3PK\x01\x02\x00\x00\x00\x00\x08' 1277*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x0c\x00\x00' 1278*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00lstm/versionPK\x06' 1279*da0073e9SAndroid Build Coastguard Worker b'\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06' 1280*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00Y\x01\x00\x00\x00\x00' 1281*da0073e9SAndroid Build Coastguard Worker b'\x00\x00R\x05\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xab\x06\x00\x00' 1282*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x06\x00\x06\x00Y\x01' 1283*da0073e9SAndroid Build Coastguard Worker b'\x00\x00R\x05\x00\x00\x00\x00') 1284*da0073e9SAndroid Build Coastguard Worker 1285*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1286*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x12\x00\x10\x00lstm.save/data.pklFB\x0c\x00ZZZZZZZZZZZZ\x80' 1287*da0073e9SAndroid Build Coastguard Worker b'\x02ccollections\nOrderedDict\nq\x00)Rq\x01(X\x0c\x00\x00\x00weight_ih_l0q\x02ct' 1288*da0073e9SAndroid Build Coastguard Worker b'orch._utils\n_rebuild_tensor_v2\nq\x03((X\x07\x00\x00\x00storageq\x04ctorch\nFlo' 1289*da0073e9SAndroid Build Coastguard Worker b'atStorage\nq\x05X\x01\x00\x00\x000q\x06X\x03\x00\x00\x00cpuq\x07K$tq\x08QK\x00K\x0c' 1290*da0073e9SAndroid Build Coastguard Worker b'K\x03\x86q\tK\x03K\x01\x86q\n\x89h\x00)Rq\x0btq\x0cRq\rX\x0c\x00\x00\x00weigh' 1291*da0073e9SAndroid Build Coastguard Worker b't_hh_l0q\x0eh\x03((h\x04h\x05X\x01\x00\x00\x001q\x0fh\x07K$tq\x10QK\x00K\x0cK\x03' 1292*da0073e9SAndroid Build Coastguard Worker b'\x86q\x11K\x03K\x01\x86q\x12\x89h\x00)Rq\x13tq\x14Rq\x15X\n\x00\x00\x00bias_ih_' 1293*da0073e9SAndroid Build Coastguard Worker b'l0q\x16h\x03((h\x04h\x05X\x01\x00\x00\x002q\x17h\x07K\x0ctq\x18QK\x00K\x0c\x85q\x19' 1294*da0073e9SAndroid Build Coastguard Worker b'K\x01\x85q\x1a\x89h\x00)Rq\x1btq\x1cRq\x1dX\n\x00\x00\x00bias_hh_l0q\x1eh\x03' 1295*da0073e9SAndroid Build Coastguard Worker b'((h\x04h\x05X\x01\x00\x00\x003q\x1fh\x07K\x0ctq QK\x00K\x0c\x85q!K\x01\x85q"\x89' 1296*da0073e9SAndroid Build Coastguard Worker b'h\x00)Rq#tq$Rq%u}q&X\t\x00\x00\x00_metadataq\'h\x00)Rq(X\x00\x00\x00\x00q)}q*X\x07' 1297*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00versionq+K\x01sssb.PK\x07\x08\xab\xf1\xfb\x01\xb8\x01\x00\x00\xb8\x01' 1298*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1299*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x13\x00\x07\x00lstm.save/byteorderFB\x03\x00ZZZlit' 1300*da0073e9SAndroid Build Coastguard Worker b'tlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00\x00\x08' 1301*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10' 1302*da0073e9SAndroid Build Coastguard Worker b'\x00<\x00lstm.save/data/0FB8\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1303*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZ\nuJ\xbeX*\xa2\xbe\xc4\xea\x10>\xd4\n\x8d\xbe\x1c\x10\x8a\xbe\xb02\xe4\xbe' 1304*da0073e9SAndroid Build Coastguard Worker b',\xcb4>\x00\x17!>H\x9c\xe0\xbe\xd2\x15!\xbe6C\xc6>v\xc5\x89>\xae\x14\x81\xbeZ\xc7' 1305*da0073e9SAndroid Build Coastguard Worker b'\x99>\x90P\x01?`\xb9\x9a<\xc0 <=\'\xc7\x9e\xbe\xaa\xf4\x02?\x00\xf3\x0e\xbc\xd8' 1306*da0073e9SAndroid Build Coastguard Worker b'\xb7v\xbe\xa0\xcc\xcd=$/\xaf>\x00\xc4K=0\xb8\xe5\xbe\xb6\xc5U\xbe\xc4i\xf3\xbe' 1307*da0073e9SAndroid Build Coastguard Worker b'\xa45\xdc>\x06g\x8d>N!\xae>2Fr\xbe0hb\xbd\xf0we\xbd g\xa0<\xb6\xbe\x9e\xbe\x14\xd1' 1308*da0073e9SAndroid Build Coastguard Worker b'\xc2>PK\x07\x08j\xd9\xb9M\x90\x00\x00\x00\x90\x00\x00\x00PK\x03\x04\x00\x00\x08' 1309*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10' 1310*da0073e9SAndroid Build Coastguard Worker b'\x002\x00lstm.save/data/1FB.\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ|' 1311*da0073e9SAndroid Build Coastguard Worker b'[\xe1>\xa2Yd\xbe\xa5o\t\xbfz\x1c\x05\xbe \xb1\xdb<\xf0\xcd\xfc>\xa2u\xcb>\x8c\x87' 1312*da0073e9SAndroid Build Coastguard Worker b'{\xbe\x9c\x9b^>\xacmG>\xae\x17\x93>\x8e\xc5\xf0\xbet\x1c\xfc>\xcb\x84\x81\xbe\xc8' 1313*da0073e9SAndroid Build Coastguard Worker b'\xa6 >\x88\xee\xaf=\n\xc9\x8d>\xc0\xc5\xee>\xf0E\x91>\xf4^\xa1>\xb8\xbbF>\x97\x97' 1314*da0073e9SAndroid Build Coastguard Worker b'\xfe\xbe\xec\x85\x03?h\x9c\xf3=\xf2\xa8\x97>^\xfa\r?6i\x94\xbe\xbc1w\xbeh\xc4' 1315*da0073e9SAndroid Build Coastguard Worker b'\x8a=\x94\xc8\x9f\xbd\x81\xb5\x89\xbe(K\xb0>\xf0:z\xbd\xb0\xc6\x9b\xbdX\x00\x88=' 1316*da0073e9SAndroid Build Coastguard Worker b'\x05\xc7\x11\xbfPK\x07\x08\x12\xc0\x87\x96\x90\x00\x00\x00\x90\x00\x00\x00PK\x03' 1317*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1318*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x10\x002\x00lstm.save/data/2FB.\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1319*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZ\xb0\xc2f=@\xdd1<\x864\xd8\xbe\xa0\t\x13?+g\x8f\xbeu\xb1\r\xbfbl\xc3' 1320*da0073e9SAndroid Build Coastguard Worker b'>\xa8\\\x82\xbe\xa4c\xf3\xbd,\x96\xdf\xbe\xfe\x05\xf1\xbe\xf8\xc9\x96>PK\x07\x08' 1321*da0073e9SAndroid Build Coastguard Worker b'\x92\tK?0\x00\x00\x000\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00' 1322*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x12\x00lstm.save/' 1323*da0073e9SAndroid Build Coastguard Worker b'data/3FB\x0e\x00ZZZZZZZZZZZZZZ\x04\xaai\xbe\xce\xd8\x8a\xbe\xe3O\xdf\xbe$\xc3\xd2' 1324*da0073e9SAndroid Build Coastguard Worker b'\xbe\x06\xb1\x80\xbe^&\x08?\x00\x1a}\xbd\x06\xde\r?\x04\xe7\xac>Z@\xe9\xbe\x14\xc2' 1325*da0073e9SAndroid Build Coastguard Worker b')>\x9c\xe9/>PK\x07\x08\x1axU\xe80\x00\x00\x000\x00\x00\x00PK\x03\x04\x00\x00\x08' 1326*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11' 1327*da0073e9SAndroid Build Coastguard Worker b'\x00\x11\x00lstm.save/versionFB\r\x00ZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02' 1328*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 1329*da0073e9SAndroid Build Coastguard Worker b'\x00\xab\xf1\xfb\x01\xb8\x01\x00\x00\xb8\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00' 1330*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00lstm.save/data.pklPK\x01\x02\x00\x00' 1331*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00' 1332*da0073e9SAndroid Build Coastguard Worker b'\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x02\x00\x00l' 1333*da0073e9SAndroid Build Coastguard Worker b'stm.save/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00j\xd9' 1334*da0073e9SAndroid Build Coastguard Worker b'\xb9M\x90\x00\x00\x00\x90\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1335*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00V\x02\x00\x00lstm.save/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00' 1336*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x12\xc0\x87\x96\x90\x00\x00\x00\x90\x00\x00\x00\x10\x00\x00' 1337*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x03\x00\x00lstm.save/data/1PK\x01' 1338*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x92\tK?0\x00\x00\x000\x00\x00' 1339*da0073e9SAndroid Build Coastguard Worker b'\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x04\x00\x00lstm.' 1340*da0073e9SAndroid Build Coastguard Worker b'save/data/2PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x1axU\xe80' 1341*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x000\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1342*da0073e9SAndroid Build Coastguard Worker b'\x00\x05\x00\x00lstm.save/data/3PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 1343*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00' 1344*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x80\x05\x00\x00lstm.save/versionPK\x06\x06,\x00\x00' 1345*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00' 1346*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x00\x00' 1347*da0073e9SAndroid Build Coastguard Worker b'\xd2\x05\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\x8a\x07\x00\x00\x00' 1348*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x07\x00\x07\x00\xb8\x01\x00' 1349*da0073e9SAndroid Build Coastguard Worker b'\x00\xd2\x05\x00\x00\x00\x00') 1350*da0073e9SAndroid Build Coastguard Worker 1351*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1352*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x12\x00\x10\x00lstm.save/data.pklFB\x0c\x00ZZZZZZZZZZZZ\x80' 1353*da0073e9SAndroid Build Coastguard Worker b'\x02ccollections\nOrderedDict\nq\x00)Rq\x01(X\x0c\x00\x00\x00weight_ih_l0q\x02ct' 1354*da0073e9SAndroid Build Coastguard Worker b'orch._utils\n_rebuild_tensor_v2\nq\x03((X\x07\x00\x00\x00storageq\x04ctorch\nFlo' 1355*da0073e9SAndroid Build Coastguard Worker b'atStorage\nq\x05X\x01\x00\x00\x000q\x06X\x03\x00\x00\x00cpuq\x07K$tq\x08QK\x00K\x0c' 1356*da0073e9SAndroid Build Coastguard Worker b'K\x03\x86q\tK\x03K\x01\x86q\n\x89h\x00)Rq\x0btq\x0cRq\rX\x0c\x00\x00\x00weigh' 1357*da0073e9SAndroid Build Coastguard Worker b't_hh_l0q\x0eh\x03((h\x04h\x05X\x01\x00\x00\x001q\x0fh\x07K$tq\x10QK\x00K\x0cK\x03' 1358*da0073e9SAndroid Build Coastguard Worker b'\x86q\x11K\x03K\x01\x86q\x12\x89h\x00)Rq\x13tq\x14Rq\x15X\n\x00\x00\x00bias_ih_' 1359*da0073e9SAndroid Build Coastguard Worker b'l0q\x16h\x03((h\x04h\x05X\x01\x00\x00\x002q\x17h\x07K\x0ctq\x18QK\x00K\x0c\x85q\x19' 1360*da0073e9SAndroid Build Coastguard Worker b'K\x01\x85q\x1a\x89h\x00)Rq\x1btq\x1cRq\x1dX\n\x00\x00\x00bias_hh_l0q\x1eh\x03' 1361*da0073e9SAndroid Build Coastguard Worker b'((h\x04h\x05X\x01\x00\x00\x003q\x1fh\x07K\x0ctq QK\x00K\x0c\x85q!K\x01\x85q"\x89' 1362*da0073e9SAndroid Build Coastguard Worker b'h\x00)Rq#tq$Rq%u}q&X\t\x00\x00\x00_metadataq\'h\x00)Rq(X\x00\x00\x00\x00q)}q*X\x07' 1363*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00versionq+K\x01sssb.PK\x07\x08\xab\xf1\xfb\x01\xb8\x01\x00\x00\xb8\x01' 1364*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1365*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x10\x00\n\x00lstm.save/data/0FB\x06\x00ZZZZZZ\xbeJ' 1366*da0073e9SAndroid Build Coastguard Worker b'u\n\xbe\xa2*X>\x10\xea\xc4\xbe\x8d\n\xd4\xbe\x8a\x10\x1c\xbe\xe42\xb0>4\xcb,>!\x17' 1367*da0073e9SAndroid Build Coastguard Worker b'\x00\xbe\xe0\x9cH\xbe!\x15\xd2>\xc6C6>\x89\xc5v\xbe\x81\x14\xae>\x99\xc7Z?\x01' 1368*da0073e9SAndroid Build Coastguard Worker b'P\x90<\x9a\xb9`=< \xc0\xbe\x9e\xc7\'?\x02\xf4\xaa\xbc\x0e\xf3\x00\xbev\xb7\xd8=\xcd' 1369*da0073e9SAndroid Build Coastguard Worker b'\xcc\xa0>\xaf/$=K\xc4\x00\xbe\xe5\xb80\xbeU\xc5\xb6\xbe\xf3i\xc4>\xdc5\xa4>\x8d' 1370*da0073e9SAndroid Build Coastguard Worker b'g\x06>\xae!N\xberF2\xbdbh0\xbdew\xf0<\xa0g \xbe\x9e\xbe\xb6>\xc2\xd1\x14PK\x07' 1371*da0073e9SAndroid Build Coastguard Worker b'\x08\xc2yG\xba\x90\x00\x00\x00\x90\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00' 1372*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x002\x00lst' 1373*da0073e9SAndroid Build Coastguard Worker b'm.save/data/1FB.\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ>\xe1[|\xbedY\xa2' 1374*da0073e9SAndroid Build Coastguard Worker b'\xbf\to\xa5\xbe\x05\x1cz<\xdb\xb1 >\xfc\xcd\xf0>\xcbu\xa2\xbe{\x87\x8c>^\x9b\x9c' 1375*da0073e9SAndroid Build Coastguard Worker b'>Gm\xac>\x93\x17\xae\xbe\xf0\xc5\x8e>\xfc\x1ct\xbe\x81\x84\xcb> \xa6\xc8=\xaf' 1376*da0073e9SAndroid Build Coastguard Worker b'\xee\x88>\x8d\xc9\n>\xee\xc5\xc0>\x91E\xf0>\xa1^\xf4>F\xbb\xb8\xbe\xfe\x97\x97?\x03' 1377*da0073e9SAndroid Build Coastguard Worker b'\x85\xec=\xf3\x9ch>\x97\xa8\xf2?\r\xfa^\xbe\x94i6\xbew1\xbc=\x8a\xc4h\xbd\x9f' 1378*da0073e9SAndroid Build Coastguard Worker b'\xc8\x94\xbe\x89\xb5\x81>\xb0K(\xbdz:\xf0\xbd\x9b\xc6\xb0=\x88\x00X\xbf\x11\xc7\x05' 1379*da0073e9SAndroid Build Coastguard Worker b'PK\x07\x08\xd0\xbftD\x90\x00\x00\x00\x90\x00\x00\x00PK\x03\x04\x00\x00\x08\x08' 1380*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00' 1381*da0073e9SAndroid Build Coastguard Worker b'2\x00lstm.save/data/2FB.\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ=f\xc2' 1382*da0073e9SAndroid Build Coastguard Worker b'\xb0<1\xdd@\xbe\xd84\x86?\x13\t\xa0\xbe\x8fg+\xbf\r\xb1u>\xc3lb\xbe\x82\\\xa8\xbd' 1383*da0073e9SAndroid Build Coastguard Worker b'\xf3c\xa4\xbe\xdf\x96,\xbe\xf1\x05\xfe>\x96\xc9\xf8PK\x07\x08"\xc5\xc5O0\x00\x00' 1384*da0073e9SAndroid Build Coastguard Worker b'\x000\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1385*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x12\x00lstm.save/data/3FB\x0e\x00Z' 1386*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZ\xbei\xaa\x04\xbe\x8a\xd8\xce\xbe\xdfO\xe3\xbe\xd2\xc3$\xbe\x80\xb1' 1387*da0073e9SAndroid Build Coastguard Worker b'\x06?\x08&^\xbd}\x1a\x00?\r\xde\x06>\xac\xe7\x04\xbe\xe9@Z>)\xc2\x14>/\xe9\x9cPK' 1388*da0073e9SAndroid Build Coastguard Worker b'\x07\x08\xfb\xfd/\x920\x00\x00\x000\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00' 1389*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x11\x00' 1390*da0073e9SAndroid Build Coastguard Worker b'lstm.save/versionFB\r\x00ZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02' 1391*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xab\xf1' 1392*da0073e9SAndroid Build Coastguard Worker b'\xfb\x01\xb8\x01\x00\x00\xb8\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1393*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00lstm.save/data.pklPK\x01\x02\x00\x00\x00\x00\x08' 1394*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\xc2yG\xba\x90\x00\x00\x00\x90\x00\x00\x00\x10\x00\x00' 1395*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x02\x00\x00lstm.save/data/0PK' 1396*da0073e9SAndroid Build Coastguard Worker b'\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd0\xbftD\x90\x00\x00\x00' 1397*da0073e9SAndroid Build Coastguard Worker b'\x90\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x02' 1398*da0073e9SAndroid Build Coastguard Worker b'\x00\x00lstm.save/data/1PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 1399*da0073e9SAndroid Build Coastguard Worker b'\x00"\xc5\xc5O0\x00\x00\x000\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1400*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xe0\x03\x00\x00lstm.save/data/2PK\x01\x02\x00\x00\x00\x00\x08\x08' 1401*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xfb\xfd/\x920\x00\x00\x000\x00\x00\x00\x10\x00\x00\x00' 1402*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x04\x00\x00lstm.save/data/3PK\x01\x02' 1403*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02' 1404*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00' 1405*da0073e9SAndroid Build Coastguard Worker b'\x00lstm.save/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00' 1406*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00' 1407*da0073e9SAndroid Build Coastguard Worker b'\x00\x00w\x01\x00\x00\x00\x00\x00\x00R\x05\x00\x00\x00\x00\x00\x00PK\x06\x07\x00' 1408*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xc9\x06\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00' 1409*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x06\x00\x06\x00w\x01\x00\x00R\x05\x00\x00\x00\x00') 1410*da0073e9SAndroid Build Coastguard Worker 1411*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1412*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x12\x00\x10\x00lstm.save/data.pklFB\x0c\x00ZZZZZZZZZZZZ\x80' 1413*da0073e9SAndroid Build Coastguard Worker b'\x02ccollections\nOrderedDict\nq\x00)Rq\x01(X\x0c\x00\x00\x00weight_ih_l0q\x02ct' 1414*da0073e9SAndroid Build Coastguard Worker b'orch._utils\n_rebuild_tensor_v2\nq\x03((X\x07\x00\x00\x00storageq\x04ctorch\nFlo' 1415*da0073e9SAndroid Build Coastguard Worker b'atStorage\nq\x05X\x01\x00\x00\x000q\x06X\x03\x00\x00\x00cpuq\x07K$tq\x08QK\x00K\x0c' 1416*da0073e9SAndroid Build Coastguard Worker b'K\x03\x86q\tK\x03K\x01\x86q\n\x89h\x00)Rq\x0btq\x0cRq\rX\x0c\x00\x00\x00weigh' 1417*da0073e9SAndroid Build Coastguard Worker b't_hh_l0q\x0eh\x03((h\x04h\x05X\x01\x00\x00\x001q\x0fh\x07K$tq\x10QK\x00K\x0cK\x03' 1418*da0073e9SAndroid Build Coastguard Worker b'\x86q\x11K\x03K\x01\x86q\x12\x89h\x00)Rq\x13tq\x14Rq\x15X\n\x00\x00\x00bias_ih_' 1419*da0073e9SAndroid Build Coastguard Worker b'l0q\x16h\x03((h\x04h\x05X\x01\x00\x00\x002q\x17h\x07K\x0ctq\x18QK\x00K\x0c\x85q\x19' 1420*da0073e9SAndroid Build Coastguard Worker b'K\x01\x85q\x1a\x89h\x00)Rq\x1btq\x1cRq\x1dX\n\x00\x00\x00bias_hh_l0q\x1eh\x03' 1421*da0073e9SAndroid Build Coastguard Worker b'((h\x04h\x05X\x01\x00\x00\x003q\x1fh\x07K\x0ctq QK\x00K\x0c\x85q!K\x01\x85q"\x89' 1422*da0073e9SAndroid Build Coastguard Worker b'h\x00)Rq#tq$Rq%u}q&X\t\x00\x00\x00_metadataq\'h\x00)Rq(X\x00\x00\x00\x00q)}q*X\x07' 1423*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00versionq+K\x01sssb.PK\x07\x08\xab\xf1\xfb\x01\xb8\x01\x00\x00\xb8\x01' 1424*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1425*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x13\x00\x07\x00lstm.save/byteorderFB\x03\x00ZZZbig' 1426*da0073e9SAndroid Build Coastguard Worker b'PK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00\x00\x08\x08' 1427*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00' 1428*da0073e9SAndroid Build Coastguard Worker b'?\x00lstm.save/data/0FB;\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1429*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZ\xbeJu\n\xbe\xa2*X>\x10\xea\xc4\xbe\x8d\n\xd4\xbe\x8a\x10\x1c\xbe\xe42\xb0' 1430*da0073e9SAndroid Build Coastguard Worker b'>4\xcb,>!\x17\x00\xbe\xe0\x9cH\xbe!\x15\xd2>\xc6C6>\x89\xc5v\xbe\x81\x14\xae>\x99' 1431*da0073e9SAndroid Build Coastguard Worker b'\xc7Z?\x01P\x90<\x9a\xb9`=< \xc0\xbe\x9e\xc7\'?\x02\xf4\xaa\xbc\x0e\xf3\x00\xbe' 1432*da0073e9SAndroid Build Coastguard Worker b'v\xb7\xd8=\xcd\xcc\xa0>\xaf/$=K\xc4\x00\xbe\xe5\xb80\xbeU\xc5\xb6\xbe\xf3i\xc4' 1433*da0073e9SAndroid Build Coastguard Worker b'>\xdc5\xa4>\x8dg\x06>\xae!N\xberF2\xbdbh0\xbdew\xf0<\xa0g \xbe\x9e\xbe\xb6>\xc2\xd1' 1434*da0073e9SAndroid Build Coastguard Worker b'\x14PK\x07\x08\xc2yG\xba\x90\x00\x00\x00\x90\x00\x00\x00PK\x03\x04\x00\x00\x08' 1435*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10' 1436*da0073e9SAndroid Build Coastguard Worker b'\x002\x00lstm.save/data/1FB.\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ>' 1437*da0073e9SAndroid Build Coastguard Worker b'\xe1[|\xbedY\xa2\xbf\to\xa5\xbe\x05\x1cz<\xdb\xb1 >\xfc\xcd\xf0>\xcbu\xa2\xbe{\x87' 1438*da0073e9SAndroid Build Coastguard Worker b'\x8c>^\x9b\x9c>Gm\xac>\x93\x17\xae\xbe\xf0\xc5\x8e>\xfc\x1ct\xbe\x81\x84\xcb> ' 1439*da0073e9SAndroid Build Coastguard Worker b'\xa6\xc8=\xaf\xee\x88>\x8d\xc9\n>\xee\xc5\xc0>\x91E\xf0>\xa1^\xf4>F\xbb\xb8\xbe\xfe' 1440*da0073e9SAndroid Build Coastguard Worker b'\x97\x97?\x03\x85\xec=\xf3\x9ch>\x97\xa8\xf2?\r\xfa^\xbe\x94i6\xbew1\xbc=\x8a' 1441*da0073e9SAndroid Build Coastguard Worker b'\xc4h\xbd\x9f\xc8\x94\xbe\x89\xb5\x81>\xb0K(\xbdz:\xf0\xbd\x9b\xc6\xb0=\x88\x00X' 1442*da0073e9SAndroid Build Coastguard Worker b'\xbf\x11\xc7\x05PK\x07\x08\xd0\xbftD\x90\x00\x00\x00\x90\x00\x00\x00PK\x03\x04\x00' 1443*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1444*da0073e9SAndroid Build Coastguard Worker b'\x00\x10\x002\x00lstm.save/data/2FB.\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1445*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZ=f\xc2\xb0<1\xdd@\xbe\xd84\x86?\x13\t\xa0\xbe\x8fg+\xbf\r\xb1u>\xc3lb\xbe' 1446*da0073e9SAndroid Build Coastguard Worker b'\x82\\\xa8\xbd\xf3c\xa4\xbe\xdf\x96,\xbe\xf1\x05\xfe>\x96\xc9\xf8PK\x07\x08"\xc5' 1447*da0073e9SAndroid Build Coastguard Worker b'\xc5O0\x00\x00\x000\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00' 1448*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x12\x00lstm.save/data' 1449*da0073e9SAndroid Build Coastguard Worker b'/3FB\x0e\x00ZZZZZZZZZZZZZZ\xbei\xaa\x04\xbe\x8a\xd8\xce\xbe\xdfO\xe3\xbe\xd2\xc3' 1450*da0073e9SAndroid Build Coastguard Worker b'$\xbe\x80\xb1\x06?\x08&^\xbd}\x1a\x00?\r\xde\x06>\xac\xe7\x04\xbe\xe9@Z>)\xc2\x14' 1451*da0073e9SAndroid Build Coastguard Worker b'>/\xe9\x9cPK\x07\x08\xfb\xfd/\x920\x00\x00\x000\x00\x00\x00PK\x03\x04\x00\x00\x08' 1452*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11' 1453*da0073e9SAndroid Build Coastguard Worker b'\x00\x11\x00lstm.save/versionFB\r\x00ZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00' 1454*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 1455*da0073e9SAndroid Build Coastguard Worker b'\x00\xab\xf1\xfb\x01\xb8\x01\x00\x00\xb8\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00' 1456*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00lstm.save/data.pklPK\x01\x02\x00\x00' 1457*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00' 1458*da0073e9SAndroid Build Coastguard Worker b'\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x02\x00\x00ls' 1459*da0073e9SAndroid Build Coastguard Worker b'tm.save/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xc2y' 1460*da0073e9SAndroid Build Coastguard Worker b'G\xba\x90\x00\x00\x00\x90\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1461*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00S\x02\x00\x00lstm.save/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00' 1462*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xd0\xbftD\x90\x00\x00\x00\x90\x00\x00\x00\x10\x00\x00\x00\x00' 1463*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x03\x00\x00lstm.save/data/1PK\x01\x02\x00' 1464*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00"\xc5\xc5O0\x00\x00\x000\x00\x00\x00' 1465*da0073e9SAndroid Build Coastguard Worker b'\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x04\x00\x00lstm.save/' 1466*da0073e9SAndroid Build Coastguard Worker b'data/2PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xfb\xfd/\x920\x00' 1467*da0073e9SAndroid Build Coastguard Worker b'\x00\x000\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1468*da0073e9SAndroid Build Coastguard Worker b'\x05\x00\x00lstm.save/data/3PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 1469*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00' 1470*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x80\x05\x00\x00lstm.save/versionPK\x06\x06,\x00\x00\x00' 1471*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00' 1472*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x00\x00' 1473*da0073e9SAndroid Build Coastguard Worker b'\xd2\x05\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\x8a\x07\x00\x00\x00\x00' 1474*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x07\x00\x07\x00\xb8\x01\x00' 1475*da0073e9SAndroid Build Coastguard Worker b'\x00\xd2\x05\x00\x00\x00\x00') 1476*da0073e9SAndroid Build Coastguard Worker 1477*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 1478*da0073e9SAndroid Build Coastguard Worker 1479*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 1480*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 1481*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 1482*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 1483*da0073e9SAndroid Build Coastguard Worker 1484*da0073e9SAndroid Build Coastguard Worker lstm_le_no_bom = torch.nn.LSTM(3, 3) 1485*da0073e9SAndroid Build Coastguard Worker lstm_le_bom = torch.nn.LSTM(3, 3) 1486*da0073e9SAndroid Build Coastguard Worker lstm_be_no_bom = torch.nn.LSTM(3, 3) 1487*da0073e9SAndroid Build Coastguard Worker lstm_be_bom = torch.nn.LSTM(3, 3) 1488*da0073e9SAndroid Build Coastguard Worker 1489*da0073e9SAndroid Build Coastguard Worker lstm_le_no_bom_little = torch.nn.LSTM(3, 3) 1490*da0073e9SAndroid Build Coastguard Worker lstm_be_no_bom_little = torch.nn.LSTM(3, 3) 1491*da0073e9SAndroid Build Coastguard Worker lstm_le_no_bom_big = torch.nn.LSTM(3, 3) 1492*da0073e9SAndroid Build Coastguard Worker lstm_be_no_bom_big = torch.nn.LSTM(3, 3) 1493*da0073e9SAndroid Build Coastguard Worker 1494*da0073e9SAndroid Build Coastguard Worker try: 1495*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 1496*da0073e9SAndroid Build Coastguard Worker lstm_le_no_bom.load_state_dict(torch.load(buf_le_no_bom), strict=True) 1497*da0073e9SAndroid Build Coastguard Worker lstm_be_no_bom.load_state_dict(torch.load(buf_be_no_bom), strict=True) 1498*da0073e9SAndroid Build Coastguard Worker finally: 1499*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 1500*da0073e9SAndroid Build Coastguard Worker 1501*da0073e9SAndroid Build Coastguard Worker lstm_le_bom.load_state_dict(torch.load(buf_le_bom), strict=True) 1502*da0073e9SAndroid Build Coastguard Worker lstm_be_bom.load_state_dict(torch.load(buf_be_bom), strict=True) 1503*da0073e9SAndroid Build Coastguard Worker 1504*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 1505*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 1506*da0073e9SAndroid Build Coastguard Worker 1507*da0073e9SAndroid Build Coastguard Worker try: 1508*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 1509*da0073e9SAndroid Build Coastguard Worker lstm_le_no_bom_little.load_state_dict(torch.load(buf_le_no_bom), strict=True) 1510*da0073e9SAndroid Build Coastguard Worker lstm_be_no_bom_little.load_state_dict(torch.load(buf_be_no_bom), strict=True) 1511*da0073e9SAndroid Build Coastguard Worker finally: 1512*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 1513*da0073e9SAndroid Build Coastguard Worker 1514*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 1515*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 1516*da0073e9SAndroid Build Coastguard Worker 1517*da0073e9SAndroid Build Coastguard Worker try: 1518*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 1519*da0073e9SAndroid Build Coastguard Worker lstm_le_no_bom_big.load_state_dict(torch.load(buf_le_no_bom), strict=True) 1520*da0073e9SAndroid Build Coastguard Worker lstm_be_no_bom_big.load_state_dict(torch.load(buf_be_no_bom), strict=True) 1521*da0073e9SAndroid Build Coastguard Worker finally: 1522*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 1523*da0073e9SAndroid Build Coastguard Worker 1524*da0073e9SAndroid Build Coastguard Worker self.assertEqual(lstm_le_bom.state_dict(), lstm_be_bom.state_dict()) 1525*da0073e9SAndroid Build Coastguard Worker self.assertNotEqual(lstm_le_no_bom.state_dict(), lstm_be_no_bom.state_dict()) 1526*da0073e9SAndroid Build Coastguard Worker self.assertEqual(lstm_le_no_bom_little.state_dict(), lstm_le_bom.state_dict()) 1527*da0073e9SAndroid Build Coastguard Worker self.assertNotEqual(lstm_be_no_bom_little.state_dict(), lstm_be_bom.state_dict()) 1528*da0073e9SAndroid Build Coastguard Worker self.assertNotEqual(lstm_le_no_bom_big.state_dict(), lstm_le_bom.state_dict()) 1529*da0073e9SAndroid Build Coastguard Worker self.assertEqual(lstm_be_no_bom_big.state_dict(), lstm_be_bom.state_dict()) 1530*da0073e9SAndroid Build Coastguard Worker 1531*da0073e9SAndroid Build Coastguard Worker if (sys.byteorder == 'little'): 1532*da0073e9SAndroid Build Coastguard Worker self.assertEqual(lstm_le_no_bom.state_dict(), lstm_le_bom.state_dict()) 1533*da0073e9SAndroid Build Coastguard Worker self.assertEqual(lstm_le_no_bom.state_dict(), lstm_be_bom.state_dict()) 1534*da0073e9SAndroid Build Coastguard Worker self.assertNotEqual(lstm_be_no_bom.state_dict(), lstm_le_bom.state_dict()) 1535*da0073e9SAndroid Build Coastguard Worker self.assertNotEqual(lstm_be_no_bom.state_dict(), lstm_be_bom.state_dict()) 1536*da0073e9SAndroid Build Coastguard Worker else: 1537*da0073e9SAndroid Build Coastguard Worker self.assertNotEqual(lstm_le_no_bom.state_dict(), lstm_le_bom.state_dict()) 1538*da0073e9SAndroid Build Coastguard Worker self.assertNotEqual(lstm_le_no_bom.state_dict(), lstm_be_bom.state_dict()) 1539*da0073e9SAndroid Build Coastguard Worker self.assertEqual(lstm_be_no_bom.state_dict(), lstm_le_bom.state_dict()) 1540*da0073e9SAndroid Build Coastguard Worker self.assertEqual(lstm_be_no_bom.state_dict(), lstm_be_bom.state_dict()) 1541*da0073e9SAndroid Build Coastguard Worker 1542*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_double(self): 1543*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 1544*da0073e9SAndroid Build Coastguard Worker # 1545*da0073e9SAndroid Build Coastguard Worker # import torch 1546*da0073e9SAndroid Build Coastguard Worker # 1547*da0073e9SAndroid Build Coastguard Worker # x = torch.randn(2,2, dtype=torch.double) 1548*da0073e9SAndroid Build Coastguard Worker # 1549*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.double.LE.pt", _disable_byteorder_record=True) 1550*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.double.LE.BOM.pt") 1551*da0073e9SAndroid Build Coastguard Worker # 1552*da0073e9SAndroid Build Coastguard Worker # print(x) 1553*da0073e9SAndroid Build Coastguard Worker # 1554*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 1555*da0073e9SAndroid Build Coastguard Worker # 1556*da0073e9SAndroid Build Coastguard Worker # import torch 1557*da0073e9SAndroid Build Coastguard Worker # 1558*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.double.LE.BOM.pt') 1559*da0073e9SAndroid Build Coastguard Worker # 1560*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.double.BE.pt', _disable_byteorder_record=True) 1561*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.double.BE.BOM.pt') 1562*da0073e9SAndroid Build Coastguard Worker # 1563*da0073e9SAndroid Build Coastguard Worker # print(x) 1564*da0073e9SAndroid Build Coastguard Worker # 1565*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 1566*da0073e9SAndroid Build Coastguard Worker # 1567*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 1568*da0073e9SAndroid Build Coastguard Worker # data = file.read() 1569*da0073e9SAndroid Build Coastguard Worker # file.close() 1570*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 1571*da0073e9SAndroid Build Coastguard Worker # 1572*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 1573*da0073e9SAndroid Build Coastguard Worker # 1574*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1575*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x19\x00\t\x00tensor.double.LE/data.pklFB\x05\x00ZZZZZ\x80\x02' 1576*da0073e9SAndroid Build Coastguard Worker b'ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\n' 1577*da0073e9SAndroid Build Coastguard Worker b'DoubleStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 1578*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 1579*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08S\xd3\xba&\x9b\x00\x00\x00\x9b\x00\x00\x00PK\x03\x04\x00' 1580*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1581*da0073e9SAndroid Build Coastguard Worker b'\x00\x17\x00 \x00tensor.double.LE/data/0FB\x1c\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1582*da0073e9SAndroid Build Coastguard Worker b'\x97v\xa4\xff|^\xc9?\xce\xbc\x8cP\x8d\xb0\xe9\xbf\xdc\x0e\xef[\xb7\xdb\xd3\xbf4\xb1' 1583*da0073e9SAndroid Build Coastguard Worker b'\x08Q\xf9\x00\xde?PK\x07\x08\xae\x92t\x0f \x00\x00\x00 \x00\x00\x00PK\x03\x04' 1584*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1585*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x18\x00\x1a\x00tensor.double.LE/versionFB\x16\x00ZZZZZZZZZZZZZZZZZZZZZZ' 1586*da0073e9SAndroid Build Coastguard Worker b'3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00' 1587*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00S\xd3\xba&\x9b\x00\x00\x00\x9b\x00\x00\x00\x19\x00' 1588*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.double' 1589*da0073e9SAndroid Build Coastguard Worker b'.LE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xae\x92t\x0f' 1590*da0073e9SAndroid Build Coastguard Worker b' \x00\x00\x00 \x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1591*da0073e9SAndroid Build Coastguard Worker b'\x00\xeb\x00\x00\x00tensor.double.LE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00' 1592*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00' 1593*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x01\x00\x00tensor.double.LE/versionPK\x06' 1594*da0073e9SAndroid Build Coastguard Worker b'\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1595*da0073e9SAndroid Build Coastguard Worker b'\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00' 1596*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xa4\x02' 1597*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03' 1598*da0073e9SAndroid Build Coastguard Worker b'\x00\xd2\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 1599*da0073e9SAndroid Build Coastguard Worker 1600*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1601*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1d\x00\x05\x00tensor.double.LE.BOM/data.pklFB\x01\x00Z\x80' 1602*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 1603*da0073e9SAndroid Build Coastguard Worker b'h\nDoubleStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 1604*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 1605*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08S\xd3\xba&\x9b\x00\x00\x00\x9b\x00\x00\x00PK\x03\x04' 1606*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1607*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1e\x00\x19\x00tensor.double.LE.BOM/byteorderFB\x15\x00ZZZZZZZZZZZZZZZZ' 1608*da0073e9SAndroid Build Coastguard Worker b'ZZZZZlittlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00' 1609*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1610*da0073e9SAndroid Build Coastguard Worker b'\x00\x1b\x001\x00tensor.double.LE.BOM/data/0FB-\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1611*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZ\x97v\xa4\xff|^\xc9?\xce\xbc\x8cP\x8d\xb0\xe9\xbf\xdc\x0e\xef[\xb7' 1612*da0073e9SAndroid Build Coastguard Worker b'\xdb\xd3\xbf4\xb1\x08Q\xf9\x00\xde?PK\x07\x08\xae\x92t\x0f \x00\x00\x00 \x00\x00' 1613*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1614*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x1c\x00\x16\x00tensor.double.LE.BOM/versionFB\x12\x00ZZ' 1615*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02' 1616*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00S\xd3\xba&\x9b\x00\x00\x00\x9b\x00' 1617*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1618*da0073e9SAndroid Build Coastguard Worker b'tensor.double.LE.BOM/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 1619*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00' 1620*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\xeb\x00\x00\x00tensor.double.LE.BOM/byteorderPK\x01' 1621*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xae\x92t\x0f ' 1622*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00 \x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1623*da0073e9SAndroid Build Coastguard Worker b'V\x01\x00\x00tensor.double.LE.BOM/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00' 1624*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x00' 1625*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\x00\x00tensor.double.LE.BOM/versio' 1626*da0073e9SAndroid Build Coastguard Worker b'nPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00' 1627*da0073e9SAndroid Build Coastguard Worker b'\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00*\x01\x00\x00' 1628*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00|\x03\x00' 1629*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00\x04\x00' 1630*da0073e9SAndroid Build Coastguard Worker b'*\x01\x00\x00R\x02\x00\x00\x00\x00') 1631*da0073e9SAndroid Build Coastguard Worker 1632*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1633*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x19\x00\t\x00tensor.double.BE/data.pklFB\x05\x00ZZZZZ\x80\x02' 1634*da0073e9SAndroid Build Coastguard Worker b'ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\n' 1635*da0073e9SAndroid Build Coastguard Worker b'DoubleStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 1636*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 1637*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08S\xd3\xba&\x9b\x00\x00\x00\x9b\x00\x00\x00PK\x03\x04\x00' 1638*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1639*da0073e9SAndroid Build Coastguard Worker b'\x00\x17\x00 \x00tensor.double.BE/data/0FB\x1c\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1640*da0073e9SAndroid Build Coastguard Worker b'?\xc9^|\xff\xa4v\x97\xbf\xe9\xb0\x8dP\x8c\xbc\xce\xbf\xd3\xdb\xb7[\xef\x0e\xdc?\xde' 1641*da0073e9SAndroid Build Coastguard Worker b'\x00\xf9Q\x08\xb14PK\x07\x083@\x82/ \x00\x00\x00 \x00\x00\x00PK\x03\x04\x00\x00' 1642*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1643*da0073e9SAndroid Build Coastguard Worker b'\x18\x00\x1a\x00tensor.double.BE/versionFB\x16\x00ZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07' 1644*da0073e9SAndroid Build Coastguard Worker b'\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08' 1645*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00S\xd3\xba&\x9b\x00\x00\x00\x9b\x00\x00\x00\x19\x00\x00' 1646*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.double.BE/da' 1647*da0073e9SAndroid Build Coastguard Worker b'ta.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x003@\x82/ ' 1648*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00 \x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1649*da0073e9SAndroid Build Coastguard Worker b'\xeb\x00\x00\x00tensor.double.BE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00' 1650*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x00' 1651*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x01\x00\x00tensor.double.BE/versionPK\x06\x06' 1652*da0073e9SAndroid Build Coastguard Worker b',\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03' 1653*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x00' 1654*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xa4\x02\x00' 1655*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00' 1656*da0073e9SAndroid Build Coastguard Worker b'\xd2\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 1657*da0073e9SAndroid Build Coastguard Worker 1658*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1659*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1d\x00\x05\x00tensor.double.BE.BOM/data.pklFB\x01\x00Z\x80' 1660*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 1661*da0073e9SAndroid Build Coastguard Worker b'h\nDoubleStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 1662*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 1663*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08S\xd3\xba&\x9b\x00\x00\x00\x9b\x00\x00\x00PK\x03\x04' 1664*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1665*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1e\x00\x19\x00tensor.double.BE.BOM/byteorderFB\x15\x00ZZZZZZZZZZZZZZZZ' 1666*da0073e9SAndroid Build Coastguard Worker b'ZZZZZbigPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00\x00' 1667*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1668*da0073e9SAndroid Build Coastguard Worker b'\x1b\x004\x00tensor.double.BE.BOM/data/0FB0\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1669*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZ?\xc9^|\xff\xa4v\x97\xbf\xe9\xb0\x8dP\x8c\xbc\xce\xbf\xd3\xdb\xb7' 1670*da0073e9SAndroid Build Coastguard Worker b'[\xef\x0e\xdc?\xde\x00\xf9Q\x08\xb14PK\x07\x083@\x82/ \x00\x00\x00 \x00\x00\x00' 1671*da0073e9SAndroid Build Coastguard Worker b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1672*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x1c\x00\x16\x00tensor.double.BE.BOM/versionFB\x12\x00ZZZZZZZZ' 1673*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00' 1674*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00S\xd3\xba&\x9b\x00\x00\x00\x9b\x00\x00' 1675*da0073e9SAndroid Build Coastguard Worker b'\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ten' 1676*da0073e9SAndroid Build Coastguard Worker b'sor.double.BE.BOM/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 1677*da0073e9SAndroid Build Coastguard Worker b'\x00I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00' 1678*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xeb\x00\x00\x00tensor.double.BE.BOM/byteorderPK\x01\x02' 1679*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x003@\x82/ \x00\x00\x00 \x00\x00\x00' 1680*da0073e9SAndroid Build Coastguard Worker b'\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x01\x00\x00tensor.do' 1681*da0073e9SAndroid Build Coastguard Worker b'uble.BE.BOM/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1' 1682*da0073e9SAndroid Build Coastguard Worker b'\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1683*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xf0\x01\x00\x00tensor.double.BE.BOM/versionPK\x06\x06,\x00\x00\x00' 1684*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00' 1685*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00*\x01\x00\x00\x00\x00\x00\x00R\x02' 1686*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00|\x03\x00\x00\x00\x00\x00\x00\x01' 1687*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00\x04\x00*\x01\x00\x00R\x02\x00\x00' 1688*da0073e9SAndroid Build Coastguard Worker b'\x00\x00') 1689*da0073e9SAndroid Build Coastguard Worker 1690*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 1691*da0073e9SAndroid Build Coastguard Worker 1692*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 1693*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 1694*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 1695*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 1696*da0073e9SAndroid Build Coastguard Worker 1697*da0073e9SAndroid Build Coastguard Worker try: 1698*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 1699*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 1700*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 1701*da0073e9SAndroid Build Coastguard Worker finally: 1702*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 1703*da0073e9SAndroid Build Coastguard Worker 1704*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 1705*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 1706*da0073e9SAndroid Build Coastguard Worker 1707*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 1708*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 1709*da0073e9SAndroid Build Coastguard Worker 1710*da0073e9SAndroid Build Coastguard Worker try: 1711*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 1712*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 1713*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 1714*da0073e9SAndroid Build Coastguard Worker finally: 1715*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 1716*da0073e9SAndroid Build Coastguard Worker 1717*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 1718*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 1719*da0073e9SAndroid Build Coastguard Worker 1720*da0073e9SAndroid Build Coastguard Worker try: 1721*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 1722*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 1723*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 1724*da0073e9SAndroid Build Coastguard Worker finally: 1725*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 1726*da0073e9SAndroid Build Coastguard Worker 1727*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 1728*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 1729*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 1730*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 1731*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 1732*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 1733*da0073e9SAndroid Build Coastguard Worker 1734*da0073e9SAndroid Build Coastguard Worker if (sys.byteorder == 'little'): 1735*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 1736*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 1737*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_le_bom)) 1738*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_be_bom)) 1739*da0073e9SAndroid Build Coastguard Worker else: 1740*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_le_bom)) 1741*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_bom)) 1742*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 1743*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 1744*da0073e9SAndroid Build Coastguard Worker 1745*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_float(self): 1746*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 1747*da0073e9SAndroid Build Coastguard Worker # 1748*da0073e9SAndroid Build Coastguard Worker # import torch 1749*da0073e9SAndroid Build Coastguard Worker # 1750*da0073e9SAndroid Build Coastguard Worker # x = torch.randn(2,2, dtype=torch.float) 1751*da0073e9SAndroid Build Coastguard Worker # 1752*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.float.LE.pt", _disable_byteorder_record=True) 1753*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.float.LE.BOM.pt") 1754*da0073e9SAndroid Build Coastguard Worker # 1755*da0073e9SAndroid Build Coastguard Worker # print(x) 1756*da0073e9SAndroid Build Coastguard Worker # 1757*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 1758*da0073e9SAndroid Build Coastguard Worker # 1759*da0073e9SAndroid Build Coastguard Worker # import torch 1760*da0073e9SAndroid Build Coastguard Worker # 1761*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.float.LE.BOM.pt') 1762*da0073e9SAndroid Build Coastguard Worker # 1763*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.float.BE.pt', _disable_byteorder_record=True) 1764*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.float.BE.BOM.pt') 1765*da0073e9SAndroid Build Coastguard Worker # 1766*da0073e9SAndroid Build Coastguard Worker # print(x) 1767*da0073e9SAndroid Build Coastguard Worker # 1768*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 1769*da0073e9SAndroid Build Coastguard Worker # 1770*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 1771*da0073e9SAndroid Build Coastguard Worker # data = file.read() 1772*da0073e9SAndroid Build Coastguard Worker # file.close() 1773*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 1774*da0073e9SAndroid Build Coastguard Worker # 1775*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 1776*da0073e9SAndroid Build Coastguard Worker # 1777*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1778*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x18\x00\n\x00tensor.float.LE/data.pklFB\x06\x00ZZZZZZ\x80\x02' 1779*da0073e9SAndroid Build Coastguard Worker b'ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\n' 1780*da0073e9SAndroid Build Coastguard Worker b'FloatStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05Q' 1781*da0073e9SAndroid Build Coastguard Worker b'K\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)' 1782*da0073e9SAndroid Build Coastguard Worker b'Rq\ttq\nRq\x0b.PK\x07\x08%Y"N\x9a\x00\x00\x00\x9a\x00\x00\x00PK\x03\x04\x00\x00\x08' 1783*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16' 1784*da0073e9SAndroid Build Coastguard Worker b'\x00"\x00tensor.float.LE/data/0FB\x1e\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\x01h\x9e' 1785*da0073e9SAndroid Build Coastguard Worker b'?\r\xb7A?\x1a\x1e\x07\xbf\xd4|\x02?PK\x07\x08\x8fq]\x8c\x10\x00\x00\x00\x10\x00' 1786*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1787*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x17\x00+\x00tensor.float.LE/versionFB\'\x00ZZZZZZZZ' 1788*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00' 1789*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00%Y"N\x9a\x00\x00' 1790*da0073e9SAndroid Build Coastguard Worker b'\x00\x9a\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1791*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00tensor.float.LE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00' 1792*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x8fq]\x8c\x10\x00\x00\x00\x10\x00\x00\x00\x16\x00\x00\x00\x00\x00' 1793*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\xea\x00\x00\x00tensor.float.LE/data/0PK\x01\x02' 1794*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00' 1795*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x01\x00\x00t' 1796*da0073e9SAndroid Build Coastguard Worker b'ensor.float.LE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00' 1797*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00' 1798*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00PK\x06' 1799*da0073e9SAndroid Build Coastguard Worker b'\x07\x00\x00\x00\x00\xa1\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00' 1800*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x03\x00\x03\x00\xcf\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 1801*da0073e9SAndroid Build Coastguard Worker 1802*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1803*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1c\x00\x06\x00tensor.float.LE.BOM/data.pklFB\x02\x00ZZ\x80' 1804*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 1805*da0073e9SAndroid Build Coastguard Worker b'h\nFloatStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 1806*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 1807*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08%Y"N\x9a\x00\x00\x00\x9a\x00\x00\x00PK\x03\x04\x00\x00' 1808*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1809*da0073e9SAndroid Build Coastguard Worker b'\x1d\x00\x1b\x00tensor.float.LE.BOM/byteorderFB\x17\x00ZZZZZZZZZZZZZZZZZZZZZZZl' 1810*da0073e9SAndroid Build Coastguard Worker b'ittlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00\x00\x08' 1811*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a' 1812*da0073e9SAndroid Build Coastguard Worker b'\x002\x00tensor.float.LE.BOM/data/0FB.\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1813*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZ\x01h\x9e?\r\xb7A?\x1a\x1e\x07\xbf\xd4|\x02?PK\x07\x08\x8fq]\x8c\x10\x00' 1814*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00' 1815*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\'\x00tensor.float.LE.BOM/ve' 1816*da0073e9SAndroid Build Coastguard Worker b'rsionFB#\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00' 1817*da0073e9SAndroid Build Coastguard Worker b'\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00' 1818*da0073e9SAndroid Build Coastguard Worker b'%Y"N\x9a\x00\x00\x00\x9a\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1819*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00tensor.float.LE.BOM/data.pklPK\x01\x02\x00\x00\x00\x00' 1820*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00\x1d' 1821*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x00\x00\x00tensor.fl' 1822*da0073e9SAndroid Build Coastguard Worker b'oat.LE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x8f' 1823*da0073e9SAndroid Build Coastguard Worker b'q]\x8c\x10\x00\x00\x00\x10\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1824*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00V\x01\x00\x00tensor.float.LE.BOM/data/0PK\x01\x02\x00\x00\x00\x00' 1825*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x1b\x00' 1826*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00tensor.float.' 1827*da0073e9SAndroid Build Coastguard Worker b'LE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00' 1828*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' 1829*da0073e9SAndroid Build Coastguard Worker b'&\x01\x00\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00' 1830*da0073e9SAndroid Build Coastguard Worker b'\x00x\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04' 1831*da0073e9SAndroid Build Coastguard Worker b'\x00\x04\x00&\x01\x00\x00R\x02\x00\x00\x00\x00') 1832*da0073e9SAndroid Build Coastguard Worker 1833*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1834*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x18\x00\n\x00tensor.float.BE/data.pklFB\x06\x00ZZZZZZ\x80\x02' 1835*da0073e9SAndroid Build Coastguard Worker b'ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\n' 1836*da0073e9SAndroid Build Coastguard Worker b'FloatStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05Q' 1837*da0073e9SAndroid Build Coastguard Worker b'K\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)' 1838*da0073e9SAndroid Build Coastguard Worker b'Rq\ttq\nRq\x0b.PK\x07\x08%Y"N\x9a\x00\x00\x00\x9a\x00\x00\x00PK\x03\x04\x00\x00\x08' 1839*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16' 1840*da0073e9SAndroid Build Coastguard Worker b'\x00"\x00tensor.float.BE/data/0FB\x1e\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ?\x9eh' 1841*da0073e9SAndroid Build Coastguard Worker b'\x01?A\xb7\r\xbf\x07\x1e\x1a?\x02|\xd4PK\x07\x089D\xd6\x8a\x10\x00\x00\x00\x10\x00' 1842*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1843*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x17\x00+\x00tensor.float.BE/versionFB\'\x00ZZZZZZZZ' 1844*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00' 1845*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00%Y"N\x9a\x00\x00' 1846*da0073e9SAndroid Build Coastguard Worker b'\x00\x9a\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1847*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00tensor.float.BE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00' 1848*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x009D\xd6\x8a\x10\x00\x00\x00\x10\x00\x00\x00\x16\x00\x00\x00\x00\x00' 1849*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\xea\x00\x00\x00tensor.float.BE/data/0PK\x01\x02' 1850*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00' 1851*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x01\x00\x00t' 1852*da0073e9SAndroid Build Coastguard Worker b'ensor.float.BE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00' 1853*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00' 1854*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00PK\x06' 1855*da0073e9SAndroid Build Coastguard Worker b'\x07\x00\x00\x00\x00\xa1\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00' 1856*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x03\x00\x03\x00\xcf\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 1857*da0073e9SAndroid Build Coastguard Worker 1858*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1859*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1c\x00\x06\x00tensor.float.BE.BOM/data.pklFB\x02\x00ZZ\x80' 1860*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 1861*da0073e9SAndroid Build Coastguard Worker b'h\nFloatStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 1862*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 1863*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08%Y"N\x9a\x00\x00\x00\x9a\x00\x00\x00PK\x03\x04\x00\x00' 1864*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1865*da0073e9SAndroid Build Coastguard Worker b'\x1d\x00\x1b\x00tensor.float.BE.BOM/byteorderFB\x17\x00ZZZZZZZZZZZZZZZZZZZZZZZb' 1866*da0073e9SAndroid Build Coastguard Worker b'igPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00\x00\x08\x08' 1867*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00' 1868*da0073e9SAndroid Build Coastguard Worker b'5\x00tensor.float.BE.BOM/data/0FB1\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1869*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZ?\x9eh\x01?A\xb7\r\xbf\x07\x1e\x1a?\x02|\xd4PK\x07\x089D\xd6\x8a\x10\x00' 1870*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00' 1871*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\'\x00tensor.float.BE.BOM/ve' 1872*da0073e9SAndroid Build Coastguard Worker b'rsionFB#\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00' 1873*da0073e9SAndroid Build Coastguard Worker b'\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00' 1874*da0073e9SAndroid Build Coastguard Worker b'%Y"N\x9a\x00\x00\x00\x9a\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1875*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00tensor.float.BE.BOM/data.pklPK\x01\x02\x00\x00\x00\x00' 1876*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00\x1d' 1877*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x00\x00\x00tensor.fl' 1878*da0073e9SAndroid Build Coastguard Worker b'oat.BE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x009D' 1879*da0073e9SAndroid Build Coastguard Worker b'\xd6\x8a\x10\x00\x00\x00\x10\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1880*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00S\x01\x00\x00tensor.float.BE.BOM/data/0PK\x01\x02\x00\x00\x00\x00' 1881*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x1b\x00' 1882*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00tensor.float.' 1883*da0073e9SAndroid Build Coastguard Worker b'BE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00' 1884*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' 1885*da0073e9SAndroid Build Coastguard Worker b'&\x01\x00\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00' 1886*da0073e9SAndroid Build Coastguard Worker b'\x00x\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04' 1887*da0073e9SAndroid Build Coastguard Worker b'\x00\x04\x00&\x01\x00\x00R\x02\x00\x00\x00\x00') 1888*da0073e9SAndroid Build Coastguard Worker 1889*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 1890*da0073e9SAndroid Build Coastguard Worker 1891*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 1892*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 1893*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 1894*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 1895*da0073e9SAndroid Build Coastguard Worker 1896*da0073e9SAndroid Build Coastguard Worker try: 1897*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 1898*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 1899*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 1900*da0073e9SAndroid Build Coastguard Worker finally: 1901*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 1902*da0073e9SAndroid Build Coastguard Worker 1903*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 1904*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 1905*da0073e9SAndroid Build Coastguard Worker 1906*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 1907*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 1908*da0073e9SAndroid Build Coastguard Worker 1909*da0073e9SAndroid Build Coastguard Worker try: 1910*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 1911*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 1912*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 1913*da0073e9SAndroid Build Coastguard Worker finally: 1914*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 1915*da0073e9SAndroid Build Coastguard Worker 1916*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 1917*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 1918*da0073e9SAndroid Build Coastguard Worker 1919*da0073e9SAndroid Build Coastguard Worker try: 1920*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 1921*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 1922*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 1923*da0073e9SAndroid Build Coastguard Worker finally: 1924*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 1925*da0073e9SAndroid Build Coastguard Worker 1926*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 1927*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 1928*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 1929*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 1930*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 1931*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 1932*da0073e9SAndroid Build Coastguard Worker 1933*da0073e9SAndroid Build Coastguard Worker if (sys.byteorder == 'little'): 1934*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 1935*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 1936*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_le_bom)) 1937*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_be_bom)) 1938*da0073e9SAndroid Build Coastguard Worker else: 1939*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_le_bom)) 1940*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_bom)) 1941*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 1942*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 1943*da0073e9SAndroid Build Coastguard Worker 1944*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_half(self): 1945*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 1946*da0073e9SAndroid Build Coastguard Worker # 1947*da0073e9SAndroid Build Coastguard Worker # import torch 1948*da0073e9SAndroid Build Coastguard Worker # 1949*da0073e9SAndroid Build Coastguard Worker # x = torch.randn(2,2, dtype=torch.half) 1950*da0073e9SAndroid Build Coastguard Worker # 1951*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.half.LE.pt", _disable_byteorder_record=True) 1952*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.half.LE.BOM.pt") 1953*da0073e9SAndroid Build Coastguard Worker # 1954*da0073e9SAndroid Build Coastguard Worker # print(x) 1955*da0073e9SAndroid Build Coastguard Worker # 1956*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 1957*da0073e9SAndroid Build Coastguard Worker # 1958*da0073e9SAndroid Build Coastguard Worker # import torch 1959*da0073e9SAndroid Build Coastguard Worker # 1960*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.half.LE.BOM.pt') 1961*da0073e9SAndroid Build Coastguard Worker # 1962*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.half.BE.pt', _disable_byteorder_record=True) 1963*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.half.BE.BOM.pt') 1964*da0073e9SAndroid Build Coastguard Worker # 1965*da0073e9SAndroid Build Coastguard Worker # print(x) 1966*da0073e9SAndroid Build Coastguard Worker # 1967*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 1968*da0073e9SAndroid Build Coastguard Worker # 1969*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 1970*da0073e9SAndroid Build Coastguard Worker # data = file.read() 1971*da0073e9SAndroid Build Coastguard Worker # file.close() 1972*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 1973*da0073e9SAndroid Build Coastguard Worker # 1974*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 1975*da0073e9SAndroid Build Coastguard Worker # 1976*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1977*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x17\x00\x0b\x00tensor.half.LE/data.pklFB\x07\x00ZZZZZZZ\x80' 1978*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 1979*da0073e9SAndroid Build Coastguard Worker b'h\nHalfStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 1980*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 1981*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08E\xabQ\x8c\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04\x00' 1982*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1983*da0073e9SAndroid Build Coastguard Worker b'\x00\x15\x00$\x00tensor.half.LE/data/0FB \x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ0' 1984*da0073e9SAndroid Build Coastguard Worker b'\xbbf;\xcd\xbd\xab9PK\x07\x08,D\x96\x91\x08\x00\x00\x00\x08\x00\x00\x00PK\x03\x04' 1985*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1986*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x16\x004\x00tensor.half.LE/versionFB0\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 1987*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01' 1988*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00E\xabQ\x8c\x99\x00\x00\x00\x99' 1989*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 1990*da0073e9SAndroid Build Coastguard Worker b'\x00tensor.half.LE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 1991*da0073e9SAndroid Build Coastguard Worker b'\x00,D\x96\x91\x08\x00\x00\x00\x08\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00' 1992*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00tensor.half.LE/data/0PK\x01\x02\x00\x00' 1993*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00' 1994*da0073e9SAndroid Build Coastguard Worker b'\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00X\x01\x00\x00tensor.ha' 1995*da0073e9SAndroid Build Coastguard Worker b'lf.LE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00' 1996*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00' 1997*da0073e9SAndroid Build Coastguard Worker b'\xcc\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00' 1998*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x9e\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00' 1999*da0073e9SAndroid Build Coastguard Worker b'\x00\x03\x00\x03\x00\xcc\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 2000*da0073e9SAndroid Build Coastguard Worker 2001*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2002*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1b\x00\x07\x00tensor.half.LE.BOM/data.pklFB\x03\x00ZZZ\x80' 2003*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2004*da0073e9SAndroid Build Coastguard Worker b'h\nHalfStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 2005*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2006*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08E\xabQ\x8c\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04\x00' 2007*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2008*da0073e9SAndroid Build Coastguard Worker b'\x00\x1c\x00\x1d\x00tensor.half.LE.BOM/byteorderFB\x19\x00ZZZZZZZZZZZZZZZZZZZZ' 2009*da0073e9SAndroid Build Coastguard Worker b'ZZZZZlittlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00' 2010*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2011*da0073e9SAndroid Build Coastguard Worker b'\x00\x19\x003\x00tensor.half.LE.BOM/data/0FB/\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2012*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZ0\xbbf;\xcd\xbd\xab9PK\x07\x08,D\x96\x91\x08\x00\x00\x00\x08\x00' 2013*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2014*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x1a\x000\x00tensor.half.LE.BOM/versionFB,\x00ZZZZZZZZ' 2015*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00' 2016*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00E\xabQ\x8c\x99' 2017*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x99\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2018*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00tensor.half.LE.BOM/data.pklPK\x01\x02\x00\x00\x00\x00\x08' 2019*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00\x1c\x00' 2020*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00tensor.half.LE.' 2021*da0073e9SAndroid Build Coastguard Worker b'BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00,D\x96\x91' 2022*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x08\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2023*da0073e9SAndroid Build Coastguard Worker b'\x00\x00V\x01\x00\x00tensor.half.LE.BOM/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08' 2024*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00' 2025*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x01\x00\x00tensor.half.LE.BOM/ve' 2026*da0073e9SAndroid Build Coastguard Worker b'rsionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00' 2027*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00"\x01\x00' 2028*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00t\x03' 2029*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00\x04' 2030*da0073e9SAndroid Build Coastguard Worker b'\x00"\x01\x00\x00R\x02\x00\x00\x00\x00') 2031*da0073e9SAndroid Build Coastguard Worker 2032*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2033*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x17\x00\x0b\x00tensor.half.BE/data.pklFB\x07\x00ZZZZZZZ\x80' 2034*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2035*da0073e9SAndroid Build Coastguard Worker b'h\nHalfStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 2036*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2037*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08E\xabQ\x8c\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04\x00' 2038*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2039*da0073e9SAndroid Build Coastguard Worker b'\x00\x15\x00$\x00tensor.half.BE/data/0FB \x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\xbb' 2040*da0073e9SAndroid Build Coastguard Worker b'0;f\xbd\xcd9\xabPK\x07\x08\xc7\xa1\xfd\x07\x08\x00\x00\x00\x08\x00\x00\x00PK\x03' 2041*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2042*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x16\x004\x00tensor.half.BE/versionFB0\x00ZZZZZZZZZZZZZZZZZZZZZZZ' 2043*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00' 2044*da0073e9SAndroid Build Coastguard Worker b'PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00E\xabQ\x8c\x99\x00\x00' 2045*da0073e9SAndroid Build Coastguard Worker b'\x00\x99\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2046*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00tensor.half.BE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00' 2047*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xc7\xa1\xfd\x07\x08\x00\x00\x00\x08\x00\x00\x00\x15\x00\x00\x00\x00' 2048*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00tensor.half.BE/data/0PK\x01' 2049*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02' 2050*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00X\x01\x00\x00' 2051*da0073e9SAndroid Build Coastguard Worker b'tensor.half.BE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00' 2052*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00' 2053*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00PK\x06' 2054*da0073e9SAndroid Build Coastguard Worker b'\x07\x00\x00\x00\x00\x9e\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06' 2055*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x03\x00\x03\x00\xcc\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 2056*da0073e9SAndroid Build Coastguard Worker 2057*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2058*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1b\x00\x07\x00tensor.half.BE.BOM/data.pklFB\x03\x00ZZZ\x80' 2059*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2060*da0073e9SAndroid Build Coastguard Worker b'h\nHalfStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 2061*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2062*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08E\xabQ\x8c\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04\x00' 2063*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2064*da0073e9SAndroid Build Coastguard Worker b'\x00\x1c\x00\x1d\x00tensor.half.BE.BOM/byteorderFB\x19\x00ZZZZZZZZZZZZZZZZZZZZ' 2065*da0073e9SAndroid Build Coastguard Worker b'ZZZZZbigPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00\x00' 2066*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2067*da0073e9SAndroid Build Coastguard Worker b'\x19\x006\x00tensor.half.BE.BOM/data/0FB2\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2068*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZ\xbb0;f\xbd\xcd9\xabPK\x07\x08\xc7\xa1\xfd\x07\x08\x00\x00\x00\x08' 2069*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2070*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x000\x00tensor.half.BE.BOM/versionFB,\x00ZZ' 2071*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00' 2072*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00E\xab' 2073*da0073e9SAndroid Build Coastguard Worker b'Q\x8c\x99\x00\x00\x00\x99\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2074*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00tensor.half.BE.BOM/data.pklPK\x01\x02\x00\x00\x00\x00' 2075*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00\x1c' 2076*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00tensor.ha' 2077*da0073e9SAndroid Build Coastguard Worker b'lf.BE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xc7' 2078*da0073e9SAndroid Build Coastguard Worker b'\xa1\xfd\x07\x08\x00\x00\x00\x08\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00' 2079*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00S\x01\x00\x00tensor.half.BE.BOM/data/0PK\x01\x02\x00\x00\x00' 2080*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x1a' 2081*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x01\x00\x00tensor.ha' 2082*da0073e9SAndroid Build Coastguard Worker b'lf.BE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00' 2083*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00' 2084*da0073e9SAndroid Build Coastguard Worker b'\x00"\x01\x00\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00' 2085*da0073e9SAndroid Build Coastguard Worker b'\x00\x00t\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00' 2086*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x04\x00"\x01\x00\x00R\x02\x00\x00\x00\x00') 2087*da0073e9SAndroid Build Coastguard Worker 2088*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 2089*da0073e9SAndroid Build Coastguard Worker 2090*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 2091*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 2092*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 2093*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 2094*da0073e9SAndroid Build Coastguard Worker 2095*da0073e9SAndroid Build Coastguard Worker try: 2096*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 2097*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 2098*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 2099*da0073e9SAndroid Build Coastguard Worker finally: 2100*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2101*da0073e9SAndroid Build Coastguard Worker 2102*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 2103*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 2104*da0073e9SAndroid Build Coastguard Worker 2105*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 2106*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 2107*da0073e9SAndroid Build Coastguard Worker 2108*da0073e9SAndroid Build Coastguard Worker try: 2109*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 2110*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 2111*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 2112*da0073e9SAndroid Build Coastguard Worker finally: 2113*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2114*da0073e9SAndroid Build Coastguard Worker 2115*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 2116*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 2117*da0073e9SAndroid Build Coastguard Worker 2118*da0073e9SAndroid Build Coastguard Worker try: 2119*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 2120*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 2121*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 2122*da0073e9SAndroid Build Coastguard Worker finally: 2123*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2124*da0073e9SAndroid Build Coastguard Worker 2125*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 2126*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 2127*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 2128*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 2129*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 2130*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 2131*da0073e9SAndroid Build Coastguard Worker 2132*da0073e9SAndroid Build Coastguard Worker if (sys.byteorder == 'little'): 2133*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 2134*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 2135*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_le_bom)) 2136*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_be_bom)) 2137*da0073e9SAndroid Build Coastguard Worker else: 2138*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_le_bom)) 2139*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_bom)) 2140*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 2141*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 2142*da0073e9SAndroid Build Coastguard Worker 2143*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_long(self): 2144*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 2145*da0073e9SAndroid Build Coastguard Worker # 2146*da0073e9SAndroid Build Coastguard Worker # import torch 2147*da0073e9SAndroid Build Coastguard Worker # 2148*da0073e9SAndroid Build Coastguard Worker # x = torch.randint(-4294967295, 4294967295, [4, 4], dtype=torch.long) 2149*da0073e9SAndroid Build Coastguard Worker # 2150*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.long.LE.pt", _disable_byteorder_record=True) 2151*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.long.LE.BOM.pt") 2152*da0073e9SAndroid Build Coastguard Worker # 2153*da0073e9SAndroid Build Coastguard Worker # print(x) 2154*da0073e9SAndroid Build Coastguard Worker # 2155*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 2156*da0073e9SAndroid Build Coastguard Worker # 2157*da0073e9SAndroid Build Coastguard Worker # import torch 2158*da0073e9SAndroid Build Coastguard Worker # 2159*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.long.LE.BOM.pt') 2160*da0073e9SAndroid Build Coastguard Worker # 2161*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.long.BE.pt', _disable_byteorder_record=True) 2162*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.long.BE.BOM.pt') 2163*da0073e9SAndroid Build Coastguard Worker # 2164*da0073e9SAndroid Build Coastguard Worker # print(x) 2165*da0073e9SAndroid Build Coastguard Worker # 2166*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 2167*da0073e9SAndroid Build Coastguard Worker # 2168*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 2169*da0073e9SAndroid Build Coastguard Worker # data = file.read() 2170*da0073e9SAndroid Build Coastguard Worker # file.close() 2171*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 2172*da0073e9SAndroid Build Coastguard Worker # 2173*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 2174*da0073e9SAndroid Build Coastguard Worker # 2175*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2176*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x17\x00\x0b\x00tensor.long.LE/data.pklFB\x07\x00ZZZZZZZ\x80' 2177*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2178*da0073e9SAndroid Build Coastguard Worker b'h\nLongStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 2179*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2180*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08 \xbd\xd7\xb0\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04' 2181*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2182*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x15\x00$\x00tensor.long.LE/data/0FB \x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2183*da0073e9SAndroid Build Coastguard Worker b'ZZl\xfa\xda\xbe\x00\x00\x00\x00GQ^\xa9\xff\xff\xff\xff\xc5\xa4\x19\xa4\x00\x00\x00' 2184*da0073e9SAndroid Build Coastguard Worker b'\x00\xda\x9f\x04\xdd\xff\xff\xff\xff\x9b\xfc\x98\r\x00\x00\x00\x00\x8e\xb3\xb6' 2185*da0073e9SAndroid Build Coastguard Worker b'=\x00\x00\x00\x00n}\xd2\x8f\xff\xff\xff\xff\xe2\xfe\x14u\xff\xff\xff\xff\xf1\x01' 2186*da0073e9SAndroid Build Coastguard Worker b'T\x07\xff\xff\xff\xff\x9b\xb3"\x7f\xff\xff\xff\xff\xb2p\x07\xfc\xff\xff\xff\xff\x1f' 2187*da0073e9SAndroid Build Coastguard Worker b'1\xa6M\x00\x00\x00\x00a\xaa|u\xff\xff\xff\xff2Y\x12;\x00\x00\x00\x00\'J\xb7\xcb' 2188*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00m\xb2\x1c\xe1\xff\xff\xff\xffPK\x07\x08\xd5\x00\xa1r\x80\x00\x00' 2189*da0073e9SAndroid Build Coastguard Worker b'\x00\x80\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00' 2190*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00<\x00tensor.long.LE/versionFB8\x00' 2191*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9eg' 2192*da0073e9SAndroid Build Coastguard Worker b'U\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 2193*da0073e9SAndroid Build Coastguard Worker b'\x00\x00 \xbd\xd7\xb0\x99\x00\x00\x00\x99\x00\x00\x00\x17\x00\x00\x00\x00\x00' 2194*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.long.LE/data.pklPK\x01\x02' 2195*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd5\x00\xa1r\x80\x00\x00\x00\x80' 2196*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00' 2197*da0073e9SAndroid Build Coastguard Worker b'\x00tensor.long.LE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 2198*da0073e9SAndroid Build Coastguard Worker b'\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00' 2199*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xd0\x01\x00\x00tensor.long.LE/versionPK\x06\x06,\x00\x00' 2200*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00' 2201*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00' 2202*da0073e9SAndroid Build Coastguard Worker b'R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\x1e\x03\x00\x00\x00\x00' 2203*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xcc\x00\x00\x00' 2204*da0073e9SAndroid Build Coastguard Worker b'R\x02\x00\x00\x00\x00') 2205*da0073e9SAndroid Build Coastguard Worker 2206*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2207*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1b\x00\x07\x00tensor.long.LE.BOM/data.pklFB\x03\x00ZZZ\x80' 2208*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2209*da0073e9SAndroid Build Coastguard Worker b'h\nLongStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 2210*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2211*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08 \xbd\xd7\xb0\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04' 2212*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2213*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1c\x00\x1d\x00tensor.long.LE.BOM/byteorderFB\x19\x00ZZZZZZZZZZZZZZZZZ' 2214*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZlittlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00' 2215*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2216*da0073e9SAndroid Build Coastguard Worker b'\x00\x19\x003\x00tensor.long.LE.BOM/data/0FB/\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2217*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZl\xfa\xda\xbe\x00\x00\x00\x00GQ^\xa9\xff\xff\xff\xff\xc5\xa4\x19' 2218*da0073e9SAndroid Build Coastguard Worker b'\xa4\x00\x00\x00\x00\xda\x9f\x04\xdd\xff\xff\xff\xff\x9b\xfc\x98\r\x00\x00\x00' 2219*da0073e9SAndroid Build Coastguard Worker b'\x00\x8e\xb3\xb6=\x00\x00\x00\x00n}\xd2\x8f\xff\xff\xff\xff\xe2\xfe\x14u\xff\xff' 2220*da0073e9SAndroid Build Coastguard Worker b'\xff\xff\xf1\x01T\x07\xff\xff\xff\xff\x9b\xb3"\x7f\xff\xff\xff\xff\xb2p\x07\xfc' 2221*da0073e9SAndroid Build Coastguard Worker b'\xff\xff\xff\xff\x1f1\xa6M\x00\x00\x00\x00a\xaa|u\xff\xff\xff\xff2Y\x12;\x00\x00' 2222*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\'J\xb7\xcb\x00\x00\x00\x00m\xb2\x1c\xe1\xff\xff\xff\xffPK\x07\x08\xd5\x00' 2223*da0073e9SAndroid Build Coastguard Worker b'\xa1r\x80\x00\x00\x00\x80\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00' 2224*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x008\x00tensor.lon' 2225*da0073e9SAndroid Build Coastguard Worker b'g.LE.BOM/versionFB4\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK' 2226*da0073e9SAndroid Build Coastguard Worker b'\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08' 2227*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00 \xbd\xd7\xb0\x99\x00\x00\x00\x99\x00\x00\x00\x1b\x00' 2228*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.long.LE.' 2229*da0073e9SAndroid Build Coastguard Worker b'BOM/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x85=\xe3\x19' 2230*da0073e9SAndroid Build Coastguard Worker b'\x06\x00\x00\x00\x06\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2231*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xe9\x00\x00\x00tensor.long.LE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00' 2232*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\xd5\x00\xa1r\x80\x00\x00\x00\x80\x00\x00\x00\x19' 2233*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00V\x01\x00\x00tensor.long.L' 2234*da0073e9SAndroid Build Coastguard Worker b'E.BOM/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU' 2235*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2236*da0073e9SAndroid Build Coastguard Worker b'\x00\x00P\x02\x00\x00tensor.long.LE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00' 2237*da0073e9SAndroid Build Coastguard Worker b'\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' 2238*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x00\x00\x00\x00\x00"\x01\x00\x00\x00\x00\x00\x00\xd2\x02\x00\x00' 2239*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xf4\x03\x00\x00\x00\x00\x00\x00\x01\x00' 2240*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00\x04\x00"\x01\x00\x00\xd2\x02\x00\x00' 2241*da0073e9SAndroid Build Coastguard Worker b'\x00\x00') 2242*da0073e9SAndroid Build Coastguard Worker 2243*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2244*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x17\x00\x0b\x00tensor.long.BE/data.pklFB\x07\x00ZZZZZZZ\x80' 2245*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2246*da0073e9SAndroid Build Coastguard Worker b'h\nLongStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 2247*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2248*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08 \xbd\xd7\xb0\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04' 2249*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2250*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x15\x00$\x00tensor.long.BE/data/0FB \x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2251*da0073e9SAndroid Build Coastguard Worker b'ZZ\x00\x00\x00\x00\xbe\xda\xfal\xff\xff\xff\xff\xa9^QG\x00\x00\x00\x00\xa4\x19\xa4' 2252*da0073e9SAndroid Build Coastguard Worker b'\xc5\xff\xff\xff\xff\xdd\x04\x9f\xda\x00\x00\x00\x00\r\x98\xfc\x9b\x00\x00\x00' 2253*da0073e9SAndroid Build Coastguard Worker b'\x00=\xb6\xb3\x8e\xff\xff\xff\xff\x8f\xd2}n\xff\xff\xff\xffu\x14\xfe\xe2\xff\xff' 2254*da0073e9SAndroid Build Coastguard Worker b'\xff\xff\x07T\x01\xf1\xff\xff\xff\xff\x7f"\xb3\x9b\xff\xff\xff\xff\xfc\x07p\xb2\x00' 2255*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00M\xa61\x1f\xff\xff\xff\xffu|\xaaa\x00\x00\x00\x00;\x12Y2\x00\x00\x00' 2256*da0073e9SAndroid Build Coastguard Worker b'\x00\xcb\xb7J\'\xff\xff\xff\xff\xe1\x1c\xb2mPK\x07\x08\xb9\x1b\x81j\x80\x00\x00' 2257*da0073e9SAndroid Build Coastguard Worker b'\x00\x80\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00' 2258*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00<\x00tensor.long.BE/versionFB8\x00' 2259*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9eg' 2260*da0073e9SAndroid Build Coastguard Worker b'U\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 2261*da0073e9SAndroid Build Coastguard Worker b'\x00\x00 \xbd\xd7\xb0\x99\x00\x00\x00\x99\x00\x00\x00\x17\x00\x00\x00\x00\x00' 2262*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.long.BE/data.pklPK\x01\x02' 2263*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xb9\x1b\x81j\x80\x00\x00\x00\x80' 2264*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00' 2265*da0073e9SAndroid Build Coastguard Worker b'\x00tensor.long.BE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 2266*da0073e9SAndroid Build Coastguard Worker b'\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00' 2267*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xd0\x01\x00\x00tensor.long.BE/versionPK\x06\x06,\x00\x00' 2268*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00' 2269*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00' 2270*da0073e9SAndroid Build Coastguard Worker b'R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\x1e\x03\x00\x00\x00\x00' 2271*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xcc\x00\x00\x00' 2272*da0073e9SAndroid Build Coastguard Worker b'R\x02\x00\x00\x00\x00') 2273*da0073e9SAndroid Build Coastguard Worker 2274*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2275*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1b\x00\x07\x00tensor.long.BE.BOM/data.pklFB\x03\x00ZZZ\x80' 2276*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2277*da0073e9SAndroid Build Coastguard Worker b'h\nLongStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 2278*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2279*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08 \xbd\xd7\xb0\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04' 2280*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2281*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1c\x00\x1d\x00tensor.long.BE.BOM/byteorderFB\x19\x00ZZZZZZZZZZZZZZZZZ' 2282*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZbigPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00' 2283*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2284*da0073e9SAndroid Build Coastguard Worker b'\x00\x19\x006\x00tensor.long.BE.BOM/data/0FB2\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2285*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZ\x00\x00\x00\x00\xbe\xda\xfal\xff\xff\xff\xff\xa9^QG\x00\x00\x00' 2286*da0073e9SAndroid Build Coastguard Worker b'\x00\xa4\x19\xa4\xc5\xff\xff\xff\xff\xdd\x04\x9f\xda\x00\x00\x00\x00\r\x98\xfc' 2287*da0073e9SAndroid Build Coastguard Worker b'\x9b\x00\x00\x00\x00=\xb6\xb3\x8e\xff\xff\xff\xff\x8f\xd2}n\xff\xff\xff\xffu\x14' 2288*da0073e9SAndroid Build Coastguard Worker b'\xfe\xe2\xff\xff\xff\xff\x07T\x01\xf1\xff\xff\xff\xff\x7f"\xb3\x9b\xff\xff\xff\xff' 2289*da0073e9SAndroid Build Coastguard Worker b'\xfc\x07p\xb2\x00\x00\x00\x00M\xa61\x1f\xff\xff\xff\xffu|\xaaa\x00\x00\x00\x00' 2290*da0073e9SAndroid Build Coastguard Worker b';\x12Y2\x00\x00\x00\x00\xcb\xb7J\'\xff\xff\xff\xff\xe1\x1c\xb2mPK\x07\x08\xb9\x1b' 2291*da0073e9SAndroid Build Coastguard Worker b'\x81j\x80\x00\x00\x00\x80\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00' 2292*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x008\x00tensor.lon' 2293*da0073e9SAndroid Build Coastguard Worker b'g.BE.BOM/versionFB4\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK' 2294*da0073e9SAndroid Build Coastguard Worker b'\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08' 2295*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00 \xbd\xd7\xb0\x99\x00\x00\x00\x99\x00\x00\x00\x1b\x00' 2296*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.long.BE.' 2297*da0073e9SAndroid Build Coastguard Worker b'BOM/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00I\xe2\xfb\xd3' 2298*da0073e9SAndroid Build Coastguard Worker b'\x03\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2299*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xe9\x00\x00\x00tensor.long.BE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00' 2300*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\xb9\x1b\x81j\x80\x00\x00\x00\x80\x00\x00\x00\x19' 2301*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x01\x00\x00tensor.long.B' 2302*da0073e9SAndroid Build Coastguard Worker b'E.BOM/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU' 2303*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2304*da0073e9SAndroid Build Coastguard Worker b'\x00\x00P\x02\x00\x00tensor.long.BE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00' 2305*da0073e9SAndroid Build Coastguard Worker b'\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' 2306*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x00\x00\x00\x00\x00"\x01\x00\x00\x00\x00\x00\x00\xd2\x02\x00\x00' 2307*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xf4\x03\x00\x00\x00\x00\x00\x00\x01\x00' 2308*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00\x04\x00"\x01\x00\x00\xd2\x02\x00\x00' 2309*da0073e9SAndroid Build Coastguard Worker b'\x00\x00') 2310*da0073e9SAndroid Build Coastguard Worker 2311*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 2312*da0073e9SAndroid Build Coastguard Worker 2313*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 2314*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 2315*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 2316*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 2317*da0073e9SAndroid Build Coastguard Worker 2318*da0073e9SAndroid Build Coastguard Worker try: 2319*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 2320*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 2321*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 2322*da0073e9SAndroid Build Coastguard Worker finally: 2323*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2324*da0073e9SAndroid Build Coastguard Worker 2325*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 2326*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 2327*da0073e9SAndroid Build Coastguard Worker 2328*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 2329*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 2330*da0073e9SAndroid Build Coastguard Worker 2331*da0073e9SAndroid Build Coastguard Worker try: 2332*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 2333*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 2334*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 2335*da0073e9SAndroid Build Coastguard Worker finally: 2336*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2337*da0073e9SAndroid Build Coastguard Worker 2338*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 2339*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 2340*da0073e9SAndroid Build Coastguard Worker 2341*da0073e9SAndroid Build Coastguard Worker try: 2342*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 2343*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 2344*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 2345*da0073e9SAndroid Build Coastguard Worker finally: 2346*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2347*da0073e9SAndroid Build Coastguard Worker 2348*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 2349*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 2350*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 2351*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 2352*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 2353*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 2354*da0073e9SAndroid Build Coastguard Worker 2355*da0073e9SAndroid Build Coastguard Worker if (sys.byteorder == 'little'): 2356*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 2357*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 2358*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_le_bom)) 2359*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_be_bom)) 2360*da0073e9SAndroid Build Coastguard Worker else: 2361*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_le_bom)) 2362*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_bom)) 2363*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 2364*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 2365*da0073e9SAndroid Build Coastguard Worker 2366*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_int(self): 2367*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 2368*da0073e9SAndroid Build Coastguard Worker # 2369*da0073e9SAndroid Build Coastguard Worker # import torch 2370*da0073e9SAndroid Build Coastguard Worker # 2371*da0073e9SAndroid Build Coastguard Worker # x = torch.randint(-2147483648, 2147483648, [4, 4], dtype=torch.int) 2372*da0073e9SAndroid Build Coastguard Worker # 2373*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.int.LE.pt", _disable_byteorder_record=True) 2374*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.int.LE.BOM.pt") 2375*da0073e9SAndroid Build Coastguard Worker # 2376*da0073e9SAndroid Build Coastguard Worker # print(x) 2377*da0073e9SAndroid Build Coastguard Worker # 2378*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 2379*da0073e9SAndroid Build Coastguard Worker # 2380*da0073e9SAndroid Build Coastguard Worker # import torch 2381*da0073e9SAndroid Build Coastguard Worker # 2382*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.int.LE.BOM.pt') 2383*da0073e9SAndroid Build Coastguard Worker # 2384*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.int.BE.pt', _disable_byteorder_record=True) 2385*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.int.BE.BOM.pt') 2386*da0073e9SAndroid Build Coastguard Worker # 2387*da0073e9SAndroid Build Coastguard Worker # print(x) 2388*da0073e9SAndroid Build Coastguard Worker # 2389*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 2390*da0073e9SAndroid Build Coastguard Worker # 2391*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 2392*da0073e9SAndroid Build Coastguard Worker # data = file.read() 2393*da0073e9SAndroid Build Coastguard Worker # file.close() 2394*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 2395*da0073e9SAndroid Build Coastguard Worker # 2396*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 2397*da0073e9SAndroid Build Coastguard Worker # 2398*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2399*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x16\x00\x0c\x00tensor.int.LE/data.pklFB\x08\x00ZZZZZZZZ\x80' 2400*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2401*da0073e9SAndroid Build Coastguard Worker b'h\nIntStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05Q' 2402*da0073e9SAndroid Build Coastguard Worker b'K\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)' 2403*da0073e9SAndroid Build Coastguard Worker b'Rq\ttq\nRq\x0b.PK\x07\x08\xdd\xa0\'\xa8\x98\x00\x00\x00\x98\x00\x00\x00PK\x03\x04' 2404*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2405*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x14\x00&\x00tensor.int.LE/data/0FB"\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2406*da0073e9SAndroid Build Coastguard Worker b'ZZZ\xf6\x19\x95i\xfaL\x1f\t%\xa3\r\xb8\xe5\xcfN\xe2\xa2\xc7\x8f\xb4\xfd\xf5(2\xe3' 2407*da0073e9SAndroid Build Coastguard Worker b'YX\xf5\x1dhO}\xeb\xba\xcf\x02\x8b\x84\xdd>L\xbc(\xc7\x92Q\x98\xa6\x1aQ^w\xea\x93' 2408*da0073e9SAndroid Build Coastguard Worker b'2>\xad\x87D\xdd\x9el\xb6\x15PK\x07\x08W\x1c\xcd\x19@\x00\x00\x00@\x00\x00\x00PK' 2409*da0073e9SAndroid Build Coastguard Worker b'\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2410*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x15\x00=\x00tensor.int.LE/versionFB9\x00ZZZZZZZZZZZZZZZZZZZZZZZ' 2411*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00' 2412*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xdd\xa0\'\xa8' 2413*da0073e9SAndroid Build Coastguard Worker b'\x98\x00\x00\x00\x98\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2414*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00tensor.int.LE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08' 2415*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00W\x1c\xcd\x19@\x00\x00\x00@\x00\x00\x00\x14\x00\x00\x00' 2416*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00tensor.int.LE/data/0PK\x01' 2417*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00' 2418*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01' 2419*da0073e9SAndroid Build Coastguard Worker b'\x00\x00tensor.int.LE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00' 2420*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00' 2421*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x12\x02\x00\x00\x00\x00\x00\x00' 2422*da0073e9SAndroid Build Coastguard Worker b'PK\x06\x07\x00\x00\x00\x00\xdb\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05' 2423*da0073e9SAndroid Build Coastguard Worker b'\x06\x00\x00\x00\x00\x03\x00\x03\x00\xc9\x00\x00\x00\x12\x02\x00\x00\x00\x00') 2424*da0073e9SAndroid Build Coastguard Worker 2425*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b"PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 2426*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x1a\x00\x08\x00tensor.int.LE.BOM/data.pklFB\x04\x00ZZZZ\x80" 2427*da0073e9SAndroid Build Coastguard Worker b"\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc" 2428*da0073e9SAndroid Build Coastguard Worker b"h\nIntStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05Q" 2429*da0073e9SAndroid Build Coastguard Worker b"K\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)" 2430*da0073e9SAndroid Build Coastguard Worker b"Rq\ttq\nRq\x0b.PK\x07\x08\xdd\xa0'\xa8\x98\x00\x00\x00\x98\x00\x00\x00PK\x03\x04" 2431*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 2432*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x1b\x00\x1f\x00tensor.int.LE.BOM/byteorderFB\x1b\x00ZZZZZZZZZZZZZZZZZZZ" 2433*da0073e9SAndroid Build Coastguard Worker b"ZZZZZZZZlittlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00" 2434*da0073e9SAndroid Build Coastguard Worker b"\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 2435*da0073e9SAndroid Build Coastguard Worker b"\x00\x18\x004\x00tensor.int.LE.BOM/data/0FB0\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" 2436*da0073e9SAndroid Build Coastguard Worker b"ZZZZZZZZZZZZZZZZZZZ\xf6\x19\x95i\xfaL\x1f\t%\xa3\r\xb8\xe5\xcfN\xe2\xa2\xc7\x8f\xb4" 2437*da0073e9SAndroid Build Coastguard Worker b"\xfd\xf5(2\xe3YX\xf5\x1dhO}\xeb\xba\xcf\x02\x8b\x84\xdd>L\xbc(\xc7\x92Q\x98\xa6" 2438*da0073e9SAndroid Build Coastguard Worker b"\x1aQ^w\xea\x932>\xad\x87D\xdd\x9el\xb6\x15PK\x07\x08W\x1c\xcd\x19@\x00\x00\x00" 2439*da0073e9SAndroid Build Coastguard Worker b"@\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 2440*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00\x19\x009\x00tensor.int.LE.BOM/versionFB5\x00ZZZ" 2441*da0073e9SAndroid Build Coastguard Worker b"ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00" 2442*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00" 2443*da0073e9SAndroid Build Coastguard Worker b"\xdd\xa0'\xa8\x98\x00\x00\x00\x98\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00" 2444*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.int.LE.BOM/data.pklPK\x01\x02\x00" 2445*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x85=\xe3\x19\x06\x00\x00\x00\x06\x00" 2446*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00" 2447*da0073e9SAndroid Build Coastguard Worker b"tensor.int.LE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00" 2448*da0073e9SAndroid Build Coastguard Worker b"\x00W\x1c\xcd\x19@\x00\x00\x00@\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00" 2449*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00V\x01\x00\x00tensor.int.LE.BOM/data/0PK\x01\x02\x00\x00\x00" 2450*da0073e9SAndroid Build Coastguard Worker b"\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x19" 2451*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x02\x00\x00tensor.int" 2452*da0073e9SAndroid Build Coastguard Worker b".LE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00" 2453*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00" 2454*da0073e9SAndroid Build Coastguard Worker b"\x1e\x01\x00\x00\x00\x00\x00\x00\x92\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00" 2455*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\xb0\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00" 2456*da0073e9SAndroid Build Coastguard Worker b"\x00\x04\x00\x04\x00\x1e\x01\x00\x00\x92\x02\x00\x00\x00\x00") 2457*da0073e9SAndroid Build Coastguard Worker 2458*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2459*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x16\x00\x0c\x00tensor.int.BE/data.pklFB\x08\x00ZZZZZZZZ\x80' 2460*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2461*da0073e9SAndroid Build Coastguard Worker b'h\nIntStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05Q' 2462*da0073e9SAndroid Build Coastguard Worker b'K\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)' 2463*da0073e9SAndroid Build Coastguard Worker b'Rq\ttq\nRq\x0b.PK\x07\x08\xdd\xa0\'\xa8\x98\x00\x00\x00\x98\x00\x00\x00PK\x03\x04' 2464*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2465*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x14\x00&\x00tensor.int.BE/data/0FB"\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2466*da0073e9SAndroid Build Coastguard Worker b'ZZZi\x95\x19\xf6\t\x1fL\xfa\xb8\r\xa3%\xe2N\xcf\xe5\xb4\x8f\xc7\xa22(\xf5\xfd\xf5' 2467*da0073e9SAndroid Build Coastguard Worker b'XY\xe3}Oh\x1d\x02\xcf\xba\xeb>\xdd\x84\x8b\xc7(\xbcL\xa6\x98Q\x92w^Q\x1a>2\x93\xea' 2468*da0073e9SAndroid Build Coastguard Worker b'\xddD\x87\xad\x15\xb6l\x9ePK\x07\x08rq\x19^@\x00\x00\x00@\x00\x00\x00PK\x03\x04' 2469*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2470*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x15\x00=\x00tensor.int.BE/versionFB9\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2471*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00' 2472*da0073e9SAndroid Build Coastguard Worker b'PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xdd\xa0\'\xa8\x98\x00' 2473*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x98\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2474*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00tensor.int.BE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00' 2475*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00rq\x19^@\x00\x00\x00@\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00' 2476*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00tensor.int.BE/data/0PK\x01\x02\x00\x00' 2477*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00' 2478*da0073e9SAndroid Build Coastguard Worker b'\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x00\x00tens' 2479*da0073e9SAndroid Build Coastguard Worker b'or.int.BE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00' 2480*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00' 2481*da0073e9SAndroid Build Coastguard Worker b'\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x12\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00' 2482*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xdb\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00' 2483*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x03\x00\x03\x00\xc9\x00\x00\x00\x12\x02\x00\x00\x00\x00') 2484*da0073e9SAndroid Build Coastguard Worker 2485*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b"PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 2486*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x1a\x00\x08\x00tensor.int.BE.BOM/data.pklFB\x04\x00ZZZZ\x80" 2487*da0073e9SAndroid Build Coastguard Worker b"\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc" 2488*da0073e9SAndroid Build Coastguard Worker b"h\nIntStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05Q" 2489*da0073e9SAndroid Build Coastguard Worker b"K\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)" 2490*da0073e9SAndroid Build Coastguard Worker b"Rq\ttq\nRq\x0b.PK\x07\x08\xdd\xa0'\xa8\x98\x00\x00\x00\x98\x00\x00\x00PK\x03\x04" 2491*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 2492*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x1b\x00\x1f\x00tensor.int.BE.BOM/byteorderFB\x1b\x00ZZZZZZZZZZZZZZZZZZZ" 2493*da0073e9SAndroid Build Coastguard Worker b"ZZZZZZZZbigPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00" 2494*da0073e9SAndroid Build Coastguard Worker b"\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 2495*da0073e9SAndroid Build Coastguard Worker b"\x00\x18\x007\x00tensor.int.BE.BOM/data/0FB3\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" 2496*da0073e9SAndroid Build Coastguard Worker b"ZZZZZZZZZZZZZZZZZZZi\x95\x19\xf6\t\x1fL\xfa\xb8\r\xa3%\xe2N\xcf\xe5\xb4\x8f\xc7\xa2" 2497*da0073e9SAndroid Build Coastguard Worker b"2(\xf5\xfd\xf5XY\xe3}Oh\x1d\x02\xcf\xba\xeb>\xdd\x84\x8b\xc7(\xbcL\xa6\x98Q\x92" 2498*da0073e9SAndroid Build Coastguard Worker b"w^Q\x1a>2\x93\xea\xddD\x87\xad\x15\xb6l\x9ePK\x07\x08rq\x19^@\x00\x00\x00@\x00" 2499*da0073e9SAndroid Build Coastguard Worker b"\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 2500*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x19\x009\x00tensor.int.BE.BOM/versionFB5\x00ZZZZZZZZZ" 2501*da0073e9SAndroid Build Coastguard Worker b"ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00" 2502*da0073e9SAndroid Build Coastguard Worker b"\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xdd" 2503*da0073e9SAndroid Build Coastguard Worker b"\xa0'\xa8\x98\x00\x00\x00\x98\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00" 2504*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00tensor.int.BE.BOM/data.pklPK\x01\x02\x00\x00\x00" 2505*da0073e9SAndroid Build Coastguard Worker b"\x00\x08\x08\x00\x00\x00\x00\x00\x00I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00" 2506*da0073e9SAndroid Build Coastguard Worker b"\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00tenso" 2507*da0073e9SAndroid Build Coastguard Worker b"r.int.BE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00" 2508*da0073e9SAndroid Build Coastguard Worker b"rq\x19^@\x00\x00\x00@\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 2509*da0073e9SAndroid Build Coastguard Worker b"\x00\x00S\x01\x00\x00tensor.int.BE.BOM/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08" 2510*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00" 2511*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x02\x00\x00tensor.int.BE.BOM/vers" 2512*da0073e9SAndroid Build Coastguard Worker b"ionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00" 2513*da0073e9SAndroid Build Coastguard Worker b"\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x1e\x01\x00" 2514*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x92\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00" 2515*da0073e9SAndroid Build Coastguard Worker b"\xb0\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00" 2516*da0073e9SAndroid Build Coastguard Worker b"\x04\x00\x1e\x01\x00\x00\x92\x02\x00\x00\x00\x00") 2517*da0073e9SAndroid Build Coastguard Worker 2518*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 2519*da0073e9SAndroid Build Coastguard Worker 2520*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 2521*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 2522*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 2523*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 2524*da0073e9SAndroid Build Coastguard Worker 2525*da0073e9SAndroid Build Coastguard Worker try: 2526*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 2527*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 2528*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 2529*da0073e9SAndroid Build Coastguard Worker finally: 2530*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2531*da0073e9SAndroid Build Coastguard Worker 2532*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 2533*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 2534*da0073e9SAndroid Build Coastguard Worker 2535*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 2536*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 2537*da0073e9SAndroid Build Coastguard Worker 2538*da0073e9SAndroid Build Coastguard Worker try: 2539*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 2540*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 2541*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 2542*da0073e9SAndroid Build Coastguard Worker finally: 2543*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2544*da0073e9SAndroid Build Coastguard Worker 2545*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 2546*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 2547*da0073e9SAndroid Build Coastguard Worker 2548*da0073e9SAndroid Build Coastguard Worker try: 2549*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 2550*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 2551*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 2552*da0073e9SAndroid Build Coastguard Worker finally: 2553*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2554*da0073e9SAndroid Build Coastguard Worker 2555*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 2556*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 2557*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 2558*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 2559*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 2560*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 2561*da0073e9SAndroid Build Coastguard Worker 2562*da0073e9SAndroid Build Coastguard Worker if (sys.byteorder == 'little'): 2563*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 2564*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 2565*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_le_bom)) 2566*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_be_bom)) 2567*da0073e9SAndroid Build Coastguard Worker else: 2568*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_le_bom)) 2569*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_bom)) 2570*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 2571*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 2572*da0073e9SAndroid Build Coastguard Worker 2573*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_int16(self): 2574*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 2575*da0073e9SAndroid Build Coastguard Worker # 2576*da0073e9SAndroid Build Coastguard Worker # import torch 2577*da0073e9SAndroid Build Coastguard Worker # 2578*da0073e9SAndroid Build Coastguard Worker # x = torch.randint(-32768, 32768, [4, 4], dtype=torch.int16) 2579*da0073e9SAndroid Build Coastguard Worker # 2580*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.int16.LE.pt", _disable_byteorder_record=True) 2581*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.int16.LE.BOM.pt") 2582*da0073e9SAndroid Build Coastguard Worker # 2583*da0073e9SAndroid Build Coastguard Worker # print(x) 2584*da0073e9SAndroid Build Coastguard Worker # 2585*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 2586*da0073e9SAndroid Build Coastguard Worker # 2587*da0073e9SAndroid Build Coastguard Worker # import torch 2588*da0073e9SAndroid Build Coastguard Worker # 2589*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.int16.LE.BOM.pt') 2590*da0073e9SAndroid Build Coastguard Worker # 2591*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.int16.BE.pt', _disable_byteorder_record=True) 2592*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.int16.BE.BOM.pt') 2593*da0073e9SAndroid Build Coastguard Worker # 2594*da0073e9SAndroid Build Coastguard Worker # print(x) 2595*da0073e9SAndroid Build Coastguard Worker # 2596*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 2597*da0073e9SAndroid Build Coastguard Worker # 2598*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 2599*da0073e9SAndroid Build Coastguard Worker # data = file.read() 2600*da0073e9SAndroid Build Coastguard Worker # file.close() 2601*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 2602*da0073e9SAndroid Build Coastguard Worker # 2603*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 2604*da0073e9SAndroid Build Coastguard Worker # 2605*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2606*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x18\x00\n\x00tensor.int16.LE/data.pklFB\x06\x00ZZZZZZ\x80\x02' 2607*da0073e9SAndroid Build Coastguard Worker b'ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\n' 2608*da0073e9SAndroid Build Coastguard Worker b'ShortStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05Q' 2609*da0073e9SAndroid Build Coastguard Worker b'K\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)' 2610*da0073e9SAndroid Build Coastguard Worker b'Rq\ttq\nRq\x0b.PK\x07\x08\xf6\xc8K\xd8\x9a\x00\x00\x00\x9a\x00\x00\x00PK\x03\x04' 2611*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2612*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x16\x00"\x00tensor.int16.LE/data/0FB\x1e\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2613*da0073e9SAndroid Build Coastguard Worker b'ZZZO\xa4\x9bJ_Z-\xa5#\xf1y\xef\xb1@\x061"\xe3\x83\x07;\x83\x80\x08\xf1\x18q\xf6\xfe' 2614*da0073e9SAndroid Build Coastguard Worker b'\xf3\xc9,PK\x07\x08\xa0\x98\xd9\xdf \x00\x00\x00 \x00\x00\x00PK\x03\x04\x00\x00' 2615*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2616*da0073e9SAndroid Build Coastguard Worker b'\x17\x00\x1b\x00tensor.int16.LE/versionFB\x17\x00ZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07' 2617*da0073e9SAndroid Build Coastguard Worker b'\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08' 2618*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xf6\xc8K\xd8\x9a\x00\x00\x00\x9a\x00\x00\x00\x18\x00' 2619*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.int16.LE/' 2620*da0073e9SAndroid Build Coastguard Worker b'data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xa0\x98\xd9\xdf' 2621*da0073e9SAndroid Build Coastguard Worker b' \x00\x00\x00 \x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2622*da0073e9SAndroid Build Coastguard Worker b'\x00\xea\x00\x00\x00tensor.int16.LE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00' 2623*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x17\x00\x00\x00\x00' 2624*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x01\x00\x00tensor.int16.LE/versionPK\x06' 2625*da0073e9SAndroid Build Coastguard Worker b'\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03' 2626*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00' 2627*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xa1\x02' 2628*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00' 2629*da0073e9SAndroid Build Coastguard Worker b'\xcf\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 2630*da0073e9SAndroid Build Coastguard Worker 2631*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2632*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1c\x00\x06\x00tensor.int16.LE.BOM/data.pklFB\x02\x00ZZ\x80' 2633*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2634*da0073e9SAndroid Build Coastguard Worker b'h\nShortStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 2635*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2636*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08\xf6\xc8K\xd8\x9a\x00\x00\x00\x9a\x00\x00\x00PK\x03\x04' 2637*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2638*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1d\x00\x1b\x00tensor.int16.LE.BOM/byteorderFB\x17\x00ZZZZZZZZZZZZZZZ' 2639*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZlittlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00' 2640*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2641*da0073e9SAndroid Build Coastguard Worker b'\x00\x1a\x002\x00tensor.int16.LE.BOM/data/0FB.\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2642*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZO\xa4\x9bJ_Z-\xa5#\xf1y\xef\xb1@\x061"\xe3\x83\x07;\x83\x80\x08' 2643*da0073e9SAndroid Build Coastguard Worker b'\xf1\x18q\xf6\xfe\xf3\xc9,PK\x07\x08\xa0\x98\xd9\xdf \x00\x00\x00 \x00\x00\x00' 2644*da0073e9SAndroid Build Coastguard Worker b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2645*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x1b\x00\x17\x00tensor.int16.LE.BOM/versionFB\x13\x00ZZZZZZZZZ' 2646*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00' 2647*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xf6\xc8K\xd8\x9a\x00\x00\x00\x9a\x00' 2648*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2649*da0073e9SAndroid Build Coastguard Worker b'tensor.int16.LE.BOM/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 2650*da0073e9SAndroid Build Coastguard Worker b'\x00\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00' 2651*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xea\x00\x00\x00tensor.int16.LE.BOM/byteorderPK\x01\x02' 2652*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xa0\x98\xd9\xdf \x00\x00\x00 ' 2653*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00V\x01\x00\x00' 2654*da0073e9SAndroid Build Coastguard Worker b'tensor.int16.LE.BOM/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 2655*da0073e9SAndroid Build Coastguard Worker b'\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00' 2656*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xf0\x01\x00\x00tensor.int16.LE.BOM/versionPK\x06\x06,\x00' 2657*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00' 2658*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00&\x01\x00\x00\x00\x00\x00\x00' 2659*da0073e9SAndroid Build Coastguard Worker b'R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00x\x03\x00\x00\x00\x00\x00' 2660*da0073e9SAndroid Build Coastguard Worker b'\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00\x04\x00&\x01\x00\x00R\x02' 2661*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00') 2662*da0073e9SAndroid Build Coastguard Worker 2663*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2664*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x18\x00\n\x00tensor.int16.BE/data.pklFB\x06\x00ZZZZZZ\x80\x02' 2665*da0073e9SAndroid Build Coastguard Worker b'ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\n' 2666*da0073e9SAndroid Build Coastguard Worker b'ShortStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05Q' 2667*da0073e9SAndroid Build Coastguard Worker b'K\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)' 2668*da0073e9SAndroid Build Coastguard Worker b'Rq\ttq\nRq\x0b.PK\x07\x08\xf6\xc8K\xd8\x9a\x00\x00\x00\x9a\x00\x00\x00PK\x03\x04' 2669*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2670*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x16\x00"\x00tensor.int16.BE/data/0FB\x1e\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2671*da0073e9SAndroid Build Coastguard Worker b'ZZZ\xa4OJ\x9bZ_\xa5-\xf1#\xefy@\xb11\x06\xe3"\x07\x83\x83;\x08\x80\x18\xf1\xf6q\xf3' 2672*da0073e9SAndroid Build Coastguard Worker b'\xfe,\xc9PK\x07\x08\x8a\xeb\x9b[ \x00\x00\x00 \x00\x00\x00PK\x03\x04\x00\x00\x08' 2673*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17' 2674*da0073e9SAndroid Build Coastguard Worker b'\x00\x1b\x00tensor.int16.BE/versionFB\x17\x00ZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07' 2675*da0073e9SAndroid Build Coastguard Worker b'\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08' 2676*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xf6\xc8K\xd8\x9a\x00\x00\x00\x9a\x00\x00\x00\x18\x00\x00' 2677*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.int16.BE/dat' 2678*da0073e9SAndroid Build Coastguard Worker b'a.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x8a\xeb\x9b[ ' 2679*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00 \x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2680*da0073e9SAndroid Build Coastguard Worker b'\xea\x00\x00\x00tensor.int16.BE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00' 2681*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x17\x00\x00\x00\x00\x00' 2682*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00p\x01\x00\x00tensor.int16.BE/versionPK\x06\x06' 2683*da0073e9SAndroid Build Coastguard Worker b',\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00' 2684*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00' 2685*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xa1\x02\x00' 2686*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xcf' 2687*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 2688*da0073e9SAndroid Build Coastguard Worker 2689*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2690*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1c\x00\x06\x00tensor.int16.BE.BOM/data.pklFB\x02\x00ZZ\x80' 2691*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2692*da0073e9SAndroid Build Coastguard Worker b'h\nShortStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 2693*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2694*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08\xf6\xc8K\xd8\x9a\x00\x00\x00\x9a\x00\x00\x00PK\x03\x04' 2695*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2696*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1d\x00\x1b\x00tensor.int16.BE.BOM/byteorderFB\x17\x00ZZZZZZZZZZZZZZZ' 2697*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZbigPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00' 2698*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2699*da0073e9SAndroid Build Coastguard Worker b'\x00\x1a\x005\x00tensor.int16.BE.BOM/data/0FB1\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2700*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZ\xa4OJ\x9bZ_\xa5-\xf1#\xefy@\xb11\x06\xe3"\x07\x83\x83;\x08\x80' 2701*da0073e9SAndroid Build Coastguard Worker b'\x18\xf1\xf6q\xf3\xfe,\xc9PK\x07\x08\x8a\xeb\x9b[ \x00\x00\x00 \x00\x00\x00PK\x03' 2702*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2703*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x1b\x00\x17\x00tensor.int16.BE.BOM/versionFB\x13\x00ZZZZZZZZZZZZ' 2704*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00' 2705*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xf6\xc8K\xd8\x9a\x00\x00\x00\x9a\x00\x00' 2706*da0073e9SAndroid Build Coastguard Worker b'\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ten' 2707*da0073e9SAndroid Build Coastguard Worker b'sor.int16.BE.BOM/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00' 2708*da0073e9SAndroid Build Coastguard Worker b'I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00' 2709*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xea\x00\x00\x00tensor.int16.BE.BOM/byteorderPK\x01\x02\x00' 2710*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x8a\xeb\x9b[ \x00\x00\x00 \x00\x00' 2711*da0073e9SAndroid Build Coastguard Worker b'\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x01\x00\x00tenso' 2712*da0073e9SAndroid Build Coastguard Worker b'r.int16.BE.BOM/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1' 2713*da0073e9SAndroid Build Coastguard Worker b'\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2714*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xf0\x01\x00\x00tensor.int16.BE.BOM/versionPK\x06\x06,\x00\x00\x00' 2715*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00' 2716*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00&\x01\x00\x00\x00\x00\x00\x00R\x02' 2717*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00x\x03\x00\x00\x00\x00\x00\x00' 2718*da0073e9SAndroid Build Coastguard Worker b'\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00\x04\x00&\x01\x00\x00R\x02\x00' 2719*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00') 2720*da0073e9SAndroid Build Coastguard Worker 2721*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 2722*da0073e9SAndroid Build Coastguard Worker 2723*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 2724*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 2725*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 2726*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 2727*da0073e9SAndroid Build Coastguard Worker 2728*da0073e9SAndroid Build Coastguard Worker try: 2729*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 2730*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 2731*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 2732*da0073e9SAndroid Build Coastguard Worker finally: 2733*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2734*da0073e9SAndroid Build Coastguard Worker 2735*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 2736*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 2737*da0073e9SAndroid Build Coastguard Worker 2738*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 2739*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 2740*da0073e9SAndroid Build Coastguard Worker 2741*da0073e9SAndroid Build Coastguard Worker try: 2742*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 2743*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 2744*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 2745*da0073e9SAndroid Build Coastguard Worker finally: 2746*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2747*da0073e9SAndroid Build Coastguard Worker 2748*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 2749*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 2750*da0073e9SAndroid Build Coastguard Worker 2751*da0073e9SAndroid Build Coastguard Worker try: 2752*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 2753*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 2754*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 2755*da0073e9SAndroid Build Coastguard Worker finally: 2756*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2757*da0073e9SAndroid Build Coastguard Worker 2758*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 2759*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 2760*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 2761*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 2762*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 2763*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 2764*da0073e9SAndroid Build Coastguard Worker 2765*da0073e9SAndroid Build Coastguard Worker if (sys.byteorder == 'little'): 2766*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 2767*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 2768*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_le_bom)) 2769*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_be_bom)) 2770*da0073e9SAndroid Build Coastguard Worker else: 2771*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_le_bom)) 2772*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_bom)) 2773*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 2774*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 2775*da0073e9SAndroid Build Coastguard Worker 2776*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_int8(self): 2777*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 2778*da0073e9SAndroid Build Coastguard Worker # 2779*da0073e9SAndroid Build Coastguard Worker # import torch 2780*da0073e9SAndroid Build Coastguard Worker # 2781*da0073e9SAndroid Build Coastguard Worker # x = torch.randint(-128, 128, [4, 4], dtype=torch.int8) 2782*da0073e9SAndroid Build Coastguard Worker # 2783*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.int8.LE.pt", _disable_byteorder_record=True) 2784*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.int8.LE.BOM.pt") 2785*da0073e9SAndroid Build Coastguard Worker # 2786*da0073e9SAndroid Build Coastguard Worker # print(x) 2787*da0073e9SAndroid Build Coastguard Worker # 2788*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 2789*da0073e9SAndroid Build Coastguard Worker # 2790*da0073e9SAndroid Build Coastguard Worker # import torch 2791*da0073e9SAndroid Build Coastguard Worker # 2792*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.int8.LE.BOM.pt') 2793*da0073e9SAndroid Build Coastguard Worker # 2794*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.int8.BE.pt', _disable_byteorder_record=True) 2795*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.int8.BE.BOM.pt') 2796*da0073e9SAndroid Build Coastguard Worker # 2797*da0073e9SAndroid Build Coastguard Worker # print(x) 2798*da0073e9SAndroid Build Coastguard Worker # 2799*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 2800*da0073e9SAndroid Build Coastguard Worker # 2801*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 2802*da0073e9SAndroid Build Coastguard Worker # data = file.read() 2803*da0073e9SAndroid Build Coastguard Worker # file.close() 2804*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 2805*da0073e9SAndroid Build Coastguard Worker # 2806*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 2807*da0073e9SAndroid Build Coastguard Worker # 2808*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2809*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x17\x00\x0b\x00tensor.int8.LE/data.pklFB\x07\x00ZZZZZZZ\x80' 2810*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2811*da0073e9SAndroid Build Coastguard Worker b'h\nCharStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 2812*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2813*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08\xdb6\x08\xe7\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04' 2814*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2815*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x15\x00$\x00tensor.int8.LE/data/0FB \x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2816*da0073e9SAndroid Build Coastguard Worker b'ZZ\x9d\x1en\xb4\xe0l"s\x15bs\x8aa\xa0\xc6+PK\x07\x08\xe0\xffgs\x10\x00\x00\x00\x10' 2817*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2818*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00,\x00tensor.int8.LE/versionFB(\x00ZZZZZZ' 2819*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00' 2820*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xdb6\x08\xe7' 2821*da0073e9SAndroid Build Coastguard Worker b'\x99\x00\x00\x00\x99\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2822*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00tensor.int8.LE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08' 2823*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xe0\xffgs\x10\x00\x00\x00\x10\x00\x00\x00\x15\x00\x00\x00' 2824*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00tensor.int8.LE/data/0' 2825*da0073e9SAndroid Build Coastguard Worker b'PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00' 2826*da0073e9SAndroid Build Coastguard Worker b'\x00\x02\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x01' 2827*da0073e9SAndroid Build Coastguard Worker b'\x00\x00tensor.int8.LE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00' 2828*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00' 2829*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00' 2830*da0073e9SAndroid Build Coastguard Worker b'PK\x06\x07\x00\x00\x00\x00\x9e\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05' 2831*da0073e9SAndroid Build Coastguard Worker b'\x06\x00\x00\x00\x00\x03\x00\x03\x00\xcc\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 2832*da0073e9SAndroid Build Coastguard Worker 2833*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2834*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1b\x00\x07\x00tensor.int8.LE.BOM/data.pklFB\x03\x00ZZZ\x80' 2835*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2836*da0073e9SAndroid Build Coastguard Worker b'h\nCharStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 2837*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2838*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08\xdb6\x08\xe7\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04' 2839*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2840*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1c\x00\x1d\x00tensor.int8.LE.BOM/byteorderFB\x19\x00ZZZZZZZZZZZZZZZZZ' 2841*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZlittlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00' 2842*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2843*da0073e9SAndroid Build Coastguard Worker b'\x00\x19\x003\x00tensor.int8.LE.BOM/data/0FB/\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2844*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZ\x9d\x1en\xb4\xe0l"s\x15bs\x8aa\xa0\xc6+PK\x07\x08\xe0\xffgs\x10' 2845*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00' 2846*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00(\x00tensor.int8.LE.BOM' 2847*da0073e9SAndroid Build Coastguard Worker b'/versionFB$\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00' 2848*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 2849*da0073e9SAndroid Build Coastguard Worker b'\x00\xdb6\x08\xe7\x99\x00\x00\x00\x99\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00' 2850*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.int8.LE.BOM/data.pklPK\x01\x02\x00' 2851*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x85=\xe3\x19\x06\x00\x00\x00\x06\x00' 2852*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00' 2853*da0073e9SAndroid Build Coastguard Worker b'tensor.int8.LE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 2854*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xe0\xffgs\x10\x00\x00\x00\x10\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00' 2855*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00V\x01\x00\x00tensor.int8.LE.BOM/data/0PK\x01\x02\x00\x00' 2856*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00' 2857*da0073e9SAndroid Build Coastguard Worker b'\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00ten' 2858*da0073e9SAndroid Build Coastguard Worker b'sor.int8.LE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00' 2859*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00' 2860*da0073e9SAndroid Build Coastguard Worker b'\x00\x00"\x01\x00\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00' 2861*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00t\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00' 2862*da0073e9SAndroid Build Coastguard Worker b'\x00\x04\x00\x04\x00"\x01\x00\x00R\x02\x00\x00\x00\x00') 2863*da0073e9SAndroid Build Coastguard Worker 2864*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2865*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x17\x00\x0b\x00tensor.int8.BE/data.pklFB\x07\x00ZZZZZZZ\x80' 2866*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2867*da0073e9SAndroid Build Coastguard Worker b'h\nCharStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 2868*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2869*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08\xdb6\x08\xe7\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04' 2870*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2871*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x15\x00$\x00tensor.int8.BE/data/0FB \x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2872*da0073e9SAndroid Build Coastguard Worker b'ZZ\x9d\x1en\xb4\xe0l"s\x15bs\x8aa\xa0\xc6+PK\x07\x08\xe0\xffgs\x10\x00\x00\x00\x10' 2873*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2874*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00,\x00tensor.int8.BE/versionFB(\x00ZZZZZZ' 2875*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00' 2876*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xdb6\x08\xe7' 2877*da0073e9SAndroid Build Coastguard Worker b'\x99\x00\x00\x00\x99\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2878*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00tensor.int8.BE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08' 2879*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xe0\xffgs\x10\x00\x00\x00\x10\x00\x00\x00\x15\x00\x00\x00' 2880*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00tensor.int8.BE/data/0' 2881*da0073e9SAndroid Build Coastguard Worker b'PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00' 2882*da0073e9SAndroid Build Coastguard Worker b'\x00\x02\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x01' 2883*da0073e9SAndroid Build Coastguard Worker b'\x00\x00tensor.int8.BE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00' 2884*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00' 2885*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00' 2886*da0073e9SAndroid Build Coastguard Worker b'PK\x06\x07\x00\x00\x00\x00\x9e\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05' 2887*da0073e9SAndroid Build Coastguard Worker b'\x06\x00\x00\x00\x00\x03\x00\x03\x00\xcc\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 2888*da0073e9SAndroid Build Coastguard Worker 2889*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2890*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1b\x00\x07\x00tensor.int8.BE.BOM/data.pklFB\x03\x00ZZZ\x80' 2891*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 2892*da0073e9SAndroid Build Coastguard Worker b'h\nCharStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 2893*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 2894*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08\xdb6\x08\xe7\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04' 2895*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2896*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1c\x00\x1d\x00tensor.int8.BE.BOM/byteorderFB\x19\x00ZZZZZZZZZZZZZZZZZ' 2897*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZbigPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00' 2898*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2899*da0073e9SAndroid Build Coastguard Worker b'\x00\x19\x006\x00tensor.int8.BE.BOM/data/0FB2\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 2900*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZ\x9d\x1en\xb4\xe0l"s\x15bs\x8aa\xa0\xc6+PK\x07\x08\xe0\xffgs\x10' 2901*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00' 2902*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00(\x00tensor.int8.BE.BOM' 2903*da0073e9SAndroid Build Coastguard Worker b'/versionFB$\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00' 2904*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 2905*da0073e9SAndroid Build Coastguard Worker b'\x00\xdb6\x08\xe7\x99\x00\x00\x00\x99\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00' 2906*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.int8.BE.BOM/data.pklPK\x01\x02\x00' 2907*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00' 2908*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00' 2909*da0073e9SAndroid Build Coastguard Worker b'tensor.int8.BE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 2910*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xe0\xffgs\x10\x00\x00\x00\x10\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00' 2911*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00S\x01\x00\x00tensor.int8.BE.BOM/data/0PK\x01\x02\x00\x00' 2912*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00' 2913*da0073e9SAndroid Build Coastguard Worker b'\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00ten' 2914*da0073e9SAndroid Build Coastguard Worker b'sor.int8.BE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00' 2915*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00' 2916*da0073e9SAndroid Build Coastguard Worker b'\x00\x00"\x01\x00\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00' 2917*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00t\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00' 2918*da0073e9SAndroid Build Coastguard Worker b'\x00\x04\x00\x04\x00"\x01\x00\x00R\x02\x00\x00\x00\x00') 2919*da0073e9SAndroid Build Coastguard Worker 2920*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 2921*da0073e9SAndroid Build Coastguard Worker 2922*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 2923*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 2924*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 2925*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 2926*da0073e9SAndroid Build Coastguard Worker 2927*da0073e9SAndroid Build Coastguard Worker try: 2928*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 2929*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 2930*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 2931*da0073e9SAndroid Build Coastguard Worker finally: 2932*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2933*da0073e9SAndroid Build Coastguard Worker 2934*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 2935*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 2936*da0073e9SAndroid Build Coastguard Worker 2937*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 2938*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 2939*da0073e9SAndroid Build Coastguard Worker 2940*da0073e9SAndroid Build Coastguard Worker try: 2941*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 2942*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 2943*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 2944*da0073e9SAndroid Build Coastguard Worker finally: 2945*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2946*da0073e9SAndroid Build Coastguard Worker 2947*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 2948*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 2949*da0073e9SAndroid Build Coastguard Worker 2950*da0073e9SAndroid Build Coastguard Worker try: 2951*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 2952*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 2953*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 2954*da0073e9SAndroid Build Coastguard Worker finally: 2955*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 2956*da0073e9SAndroid Build Coastguard Worker 2957*da0073e9SAndroid Build Coastguard Worker # 1-byte types are same on BE and LE 2958*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 2959*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 2960*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 2961*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 2962*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 2963*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 2964*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 2965*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 2966*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 2967*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 2968*da0073e9SAndroid Build Coastguard Worker 2969*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_uint8(self): 2970*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 2971*da0073e9SAndroid Build Coastguard Worker # 2972*da0073e9SAndroid Build Coastguard Worker # import torch 2973*da0073e9SAndroid Build Coastguard Worker # 2974*da0073e9SAndroid Build Coastguard Worker # x = torch.randint(0, 256, [4, 4], dtype=torch.uint8) 2975*da0073e9SAndroid Build Coastguard Worker # 2976*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.uint8.LE.pt", _disable_byteorder_record=True) 2977*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.uint8.LE.BOM.pt") 2978*da0073e9SAndroid Build Coastguard Worker # 2979*da0073e9SAndroid Build Coastguard Worker # print(x) 2980*da0073e9SAndroid Build Coastguard Worker # 2981*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 2982*da0073e9SAndroid Build Coastguard Worker # 2983*da0073e9SAndroid Build Coastguard Worker # import torch 2984*da0073e9SAndroid Build Coastguard Worker # 2985*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.uint8.LE.BOM.pt') 2986*da0073e9SAndroid Build Coastguard Worker # 2987*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.uint8.BE.pt', _disable_byteorder_record=True) 2988*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.uint8.BE.BOM.pt') 2989*da0073e9SAndroid Build Coastguard Worker # 2990*da0073e9SAndroid Build Coastguard Worker # print(x) 2991*da0073e9SAndroid Build Coastguard Worker # 2992*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 2993*da0073e9SAndroid Build Coastguard Worker # 2994*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 2995*da0073e9SAndroid Build Coastguard Worker # data = file.read() 2996*da0073e9SAndroid Build Coastguard Worker # file.close() 2997*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 2998*da0073e9SAndroid Build Coastguard Worker # 2999*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 3000*da0073e9SAndroid Build Coastguard Worker # 3001*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3002*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x18\x00\n\x00tensor.uint8.LE/data.pklFB\x06\x00ZZZZZZ\x80\x02' 3003*da0073e9SAndroid Build Coastguard Worker b'ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\n' 3004*da0073e9SAndroid Build Coastguard Worker b'ByteStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05QK' 3005*da0073e9SAndroid Build Coastguard Worker b'\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)R' 3006*da0073e9SAndroid Build Coastguard Worker b'q\ttq\nRq\x0b.PK\x07\x08\xff\xb9!\x97\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04\x00' 3007*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3008*da0073e9SAndroid Build Coastguard Worker b'\x00\x16\x00#\x00tensor.uint8.LE/data/0FB\x1f\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3009*da0073e9SAndroid Build Coastguard Worker b'ZZZ\xf7\xf20\x04\t\x8a!\xbev\xf4\xbe\x0e";\xbb\tPK\x07\x08\xa8\x94#\x08\x10\x00\x00' 3010*da0073e9SAndroid Build Coastguard Worker b'\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00' 3011*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00+\x00tensor.uint8.LE/versionFB\'' 3012*da0073e9SAndroid Build Coastguard Worker b'\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00' 3013*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xff' 3014*da0073e9SAndroid Build Coastguard Worker b'\xb9!\x97\x99\x00\x00\x00\x99\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3015*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00tensor.uint8.LE/data.pklPK\x01\x02\x00\x00\x00' 3016*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\xa8\x94#\x08\x10\x00\x00\x00\x10\x00\x00\x00' 3017*da0073e9SAndroid Build Coastguard Worker b'\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00tensor.' 3018*da0073e9SAndroid Build Coastguard Worker b'uint8.LE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9e' 3019*da0073e9SAndroid Build Coastguard Worker b'gU\x02\x00\x00\x00\x02\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3020*da0073e9SAndroid Build Coastguard Worker b'\x00\x00`\x01\x00\x00tensor.uint8.LE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00' 3021*da0073e9SAndroid Build Coastguard Worker b'\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00' 3022*da0073e9SAndroid Build Coastguard Worker b'\x03\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00' 3023*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xa1\x02\x00\x00\x00\x00\x00\x00\x01' 3024*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xcf\x00\x00\x00\xd2\x01\x00' 3025*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00') 3026*da0073e9SAndroid Build Coastguard Worker 3027*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3028*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1c\x00\x06\x00tensor.uint8.LE.BOM/data.pklFB\x02\x00ZZ\x80' 3029*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3030*da0073e9SAndroid Build Coastguard Worker b'h\nByteStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 3031*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 3032*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08\xff\xb9!\x97\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04' 3033*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3034*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1d\x00\x1c\x00tensor.uint8.LE.BOM/byteorderFB\x18\x00ZZZZZZZZZZZZZZZZ' 3035*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZlittlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00' 3036*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3037*da0073e9SAndroid Build Coastguard Worker b'\x00\x1a\x002\x00tensor.uint8.LE.BOM/data/0FB.\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3038*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZ\xf7\xf20\x04\t\x8a!\xbev\xf4\xbe\x0e";\xbb\tPK\x07\x08\xa8\x94' 3039*da0073e9SAndroid Build Coastguard Worker b'#\x08\x10\x00\x00\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00' 3040*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\'\x00tensor.ui' 3041*da0073e9SAndroid Build Coastguard Worker b'nt8.LE.BOM/versionFB#\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9e' 3042*da0073e9SAndroid Build Coastguard Worker b'gU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00' 3043*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xff\xb9!\x97\x99\x00\x00\x00\x99\x00\x00\x00\x1c\x00\x00\x00\x00\x00' 3044*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.uint8.LE.BOM/data.pklPK' 3045*da0073e9SAndroid Build Coastguard Worker b'\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x85=\xe3\x19\x06\x00\x00' 3046*da0073e9SAndroid Build Coastguard Worker b'\x00\x06\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9' 3047*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00tensor.uint8.LE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00' 3048*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xa8\x94#\x08\x10\x00\x00\x00\x10\x00\x00\x00\x1a\x00\x00\x00' 3049*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00V\x01\x00\x00tensor.uint8.LE.BOM/data/0' 3050*da0073e9SAndroid Build Coastguard Worker b'PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00' 3051*da0073e9SAndroid Build Coastguard Worker b'\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0' 3052*da0073e9SAndroid Build Coastguard Worker b'\x01\x00\x00tensor.uint8.LE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e' 3053*da0073e9SAndroid Build Coastguard Worker b'\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00' 3054*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00&\x01\x00\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00' 3055*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x06\x07\x00\x00\x00\x00x\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05' 3056*da0073e9SAndroid Build Coastguard Worker b'\x06\x00\x00\x00\x00\x04\x00\x04\x00&\x01\x00\x00R\x02\x00\x00\x00\x00') 3057*da0073e9SAndroid Build Coastguard Worker 3058*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3059*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x18\x00\n\x00tensor.uint8.BE/data.pklFB\x06\x00ZZZZZZ\x80\x02' 3060*da0073e9SAndroid Build Coastguard Worker b'ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\n' 3061*da0073e9SAndroid Build Coastguard Worker b'ByteStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05QK' 3062*da0073e9SAndroid Build Coastguard Worker b'\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)R' 3063*da0073e9SAndroid Build Coastguard Worker b'q\ttq\nRq\x0b.PK\x07\x08\xff\xb9!\x97\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04\x00' 3064*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3065*da0073e9SAndroid Build Coastguard Worker b'\x00\x16\x00#\x00tensor.uint8.BE/data/0FB\x1f\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3066*da0073e9SAndroid Build Coastguard Worker b'ZZZ\xf7\xf20\x04\t\x8a!\xbev\xf4\xbe\x0e";\xbb\tPK\x07\x08\xa8\x94#\x08\x10\x00\x00' 3067*da0073e9SAndroid Build Coastguard Worker b'\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00' 3068*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00+\x00tensor.uint8.BE/versionFB\'' 3069*da0073e9SAndroid Build Coastguard Worker b'\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00' 3070*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xff' 3071*da0073e9SAndroid Build Coastguard Worker b'\xb9!\x97\x99\x00\x00\x00\x99\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3072*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00tensor.uint8.BE/data.pklPK\x01\x02\x00\x00\x00' 3073*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\xa8\x94#\x08\x10\x00\x00\x00\x10\x00\x00\x00' 3074*da0073e9SAndroid Build Coastguard Worker b'\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00tensor.' 3075*da0073e9SAndroid Build Coastguard Worker b'uint8.BE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9e' 3076*da0073e9SAndroid Build Coastguard Worker b'gU\x02\x00\x00\x00\x02\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3077*da0073e9SAndroid Build Coastguard Worker b'\x00\x00`\x01\x00\x00tensor.uint8.BE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00' 3078*da0073e9SAndroid Build Coastguard Worker b'\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00' 3079*da0073e9SAndroid Build Coastguard Worker b'\x03\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00' 3080*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xa1\x02\x00\x00\x00\x00\x00\x00\x01' 3081*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xcf\x00\x00\x00\xd2\x01\x00' 3082*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00') 3083*da0073e9SAndroid Build Coastguard Worker 3084*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3085*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1c\x00\x06\x00tensor.uint8.BE.BOM/data.pklFB\x02\x00ZZ\x80' 3086*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3087*da0073e9SAndroid Build Coastguard Worker b'h\nByteStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 3088*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 3089*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08\xff\xb9!\x97\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04' 3090*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3091*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1d\x00\x1c\x00tensor.uint8.BE.BOM/byteorderFB\x18\x00ZZZZZZZZZZZZZZZZ' 3092*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZbigPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00' 3093*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3094*da0073e9SAndroid Build Coastguard Worker b'\x00\x1a\x005\x00tensor.uint8.BE.BOM/data/0FB1\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3095*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZ\xf7\xf20\x04\t\x8a!\xbev\xf4\xbe\x0e";\xbb\tPK\x07\x08\xa8\x94' 3096*da0073e9SAndroid Build Coastguard Worker b'#\x08\x10\x00\x00\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00' 3097*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\'\x00tensor.ui' 3098*da0073e9SAndroid Build Coastguard Worker b'nt8.BE.BOM/versionFB#\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9e' 3099*da0073e9SAndroid Build Coastguard Worker b'gU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00' 3100*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xff\xb9!\x97\x99\x00\x00\x00\x99\x00\x00\x00\x1c\x00\x00\x00\x00\x00' 3101*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.uint8.BE.BOM/data.pklPK' 3102*da0073e9SAndroid Build Coastguard Worker b'\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00I\xe2\xfb\xd3\x03\x00\x00' 3103*da0073e9SAndroid Build Coastguard Worker b'\x00\x03\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9' 3104*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00tensor.uint8.BE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00' 3105*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xa8\x94#\x08\x10\x00\x00\x00\x10\x00\x00\x00\x1a\x00\x00\x00' 3106*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x01\x00\x00tensor.uint8.BE.BOM/data/0' 3107*da0073e9SAndroid Build Coastguard Worker b'PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00' 3108*da0073e9SAndroid Build Coastguard Worker b'\x00\x02\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0' 3109*da0073e9SAndroid Build Coastguard Worker b'\x01\x00\x00tensor.uint8.BE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e' 3110*da0073e9SAndroid Build Coastguard Worker b'\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00' 3111*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00&\x01\x00\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00' 3112*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x06\x07\x00\x00\x00\x00x\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05' 3113*da0073e9SAndroid Build Coastguard Worker b'\x06\x00\x00\x00\x00\x04\x00\x04\x00&\x01\x00\x00R\x02\x00\x00\x00\x00') 3114*da0073e9SAndroid Build Coastguard Worker 3115*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 3116*da0073e9SAndroid Build Coastguard Worker 3117*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 3118*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 3119*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 3120*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 3121*da0073e9SAndroid Build Coastguard Worker 3122*da0073e9SAndroid Build Coastguard Worker try: 3123*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 3124*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 3125*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 3126*da0073e9SAndroid Build Coastguard Worker finally: 3127*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3128*da0073e9SAndroid Build Coastguard Worker 3129*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 3130*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 3131*da0073e9SAndroid Build Coastguard Worker 3132*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 3133*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 3134*da0073e9SAndroid Build Coastguard Worker 3135*da0073e9SAndroid Build Coastguard Worker try: 3136*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 3137*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 3138*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 3139*da0073e9SAndroid Build Coastguard Worker finally: 3140*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3141*da0073e9SAndroid Build Coastguard Worker 3142*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 3143*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 3144*da0073e9SAndroid Build Coastguard Worker 3145*da0073e9SAndroid Build Coastguard Worker try: 3146*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 3147*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 3148*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 3149*da0073e9SAndroid Build Coastguard Worker finally: 3150*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3151*da0073e9SAndroid Build Coastguard Worker 3152*da0073e9SAndroid Build Coastguard Worker # 1-byte types are same on BE and LE 3153*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 3154*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 3155*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 3156*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 3157*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 3158*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 3159*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 3160*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 3161*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 3162*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 3163*da0073e9SAndroid Build Coastguard Worker 3164*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_bool(self): 3165*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 3166*da0073e9SAndroid Build Coastguard Worker # 3167*da0073e9SAndroid Build Coastguard Worker # import torch 3168*da0073e9SAndroid Build Coastguard Worker # 3169*da0073e9SAndroid Build Coastguard Worker # x = torch.randint(0, 2, [4, 4], dtype=torch.bool) 3170*da0073e9SAndroid Build Coastguard Worker # 3171*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.bool.LE.pt", _disable_byteorder_record=True) 3172*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.bool.LE.BOM.pt") 3173*da0073e9SAndroid Build Coastguard Worker # 3174*da0073e9SAndroid Build Coastguard Worker # print(x) 3175*da0073e9SAndroid Build Coastguard Worker # 3176*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 3177*da0073e9SAndroid Build Coastguard Worker # 3178*da0073e9SAndroid Build Coastguard Worker # import torch 3179*da0073e9SAndroid Build Coastguard Worker # 3180*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.bool.LE.BOM.pt') 3181*da0073e9SAndroid Build Coastguard Worker # 3182*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.bool.BE.pt', _disable_byteorder_record=True) 3183*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.bool.BE.BOM.pt') 3184*da0073e9SAndroid Build Coastguard Worker # 3185*da0073e9SAndroid Build Coastguard Worker # print(x) 3186*da0073e9SAndroid Build Coastguard Worker # 3187*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 3188*da0073e9SAndroid Build Coastguard Worker # 3189*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 3190*da0073e9SAndroid Build Coastguard Worker # data = file.read() 3191*da0073e9SAndroid Build Coastguard Worker # file.close() 3192*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 3193*da0073e9SAndroid Build Coastguard Worker # 3194*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 3195*da0073e9SAndroid Build Coastguard Worker # 3196*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b"PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 3197*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x17\x00\x0b\x00tensor.bool.LE/data.pklFB\x07\x00ZZZZZZZ\x80" 3198*da0073e9SAndroid Build Coastguard Worker b"\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc" 3199*da0073e9SAndroid Build Coastguard Worker b"h\nBoolStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05" 3200*da0073e9SAndroid Build Coastguard Worker b"QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08" 3201*da0073e9SAndroid Build Coastguard Worker b")Rq\ttq\nRq\x0b.PK\x07\x08\x9a\xab='\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04\x00" 3202*da0073e9SAndroid Build Coastguard Worker b"\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 3203*da0073e9SAndroid Build Coastguard Worker b"\x00\x15\x00$\x00tensor.bool.LE/data/0FB \x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\x01" 3204*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x01\x00\x01\x00\x00\x00\x00\x01\x00\x01\x00\x01\x00PK\x07\x08\x00Y04" 3205*da0073e9SAndroid Build Coastguard Worker b"\x10\x00\x00\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00" 3206*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00,\x00tensor.bool.LE/ve" 3207*da0073e9SAndroid Build Coastguard Worker b"rsionFB(\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00" 3208*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00" 3209*da0073e9SAndroid Build Coastguard Worker b"\x00\x9a\xab='\x99\x00\x00\x00\x99\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00" 3210*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.bool.LE/data.pklPK\x01\x02\x00\x00" 3211*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00Y04\x10\x00\x00\x00\x10\x00\x00\x00\x15" 3212*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00tensor.bo" 3213*da0073e9SAndroid Build Coastguard Worker b"ol.LE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU" 3214*da0073e9SAndroid Build Coastguard Worker b"\x02\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 3215*da0073e9SAndroid Build Coastguard Worker b"\x00\x00`\x01\x00\x00tensor.bool.LE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00" 3216*da0073e9SAndroid Build Coastguard Worker b"\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03" 3217*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00" 3218*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\x9e\x02\x00\x00\x00\x00\x00\x00\x01\x00" 3219*da0073e9SAndroid Build Coastguard Worker b"\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xcc\x00\x00\x00\xd2\x01\x00\x00" 3220*da0073e9SAndroid Build Coastguard Worker b"\x00\x00") 3221*da0073e9SAndroid Build Coastguard Worker 3222*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3223*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1b\x00\x07\x00tensor.bool.LE.BOM/data.pklFB\x03\x00ZZZ\x80' 3224*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3225*da0073e9SAndroid Build Coastguard Worker b'h\nBoolStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 3226*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 3227*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08\x9a\xab=\'\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04\x00' 3228*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3229*da0073e9SAndroid Build Coastguard Worker b'\x00\x1c\x00\x1d\x00tensor.bool.LE.BOM/byteorderFB\x19\x00ZZZZZZZZZZZZZZZZZZZ' 3230*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZlittlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00' 3231*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3232*da0073e9SAndroid Build Coastguard Worker b'\x00\x19\x003\x00tensor.bool.LE.BOM/data/0FB/\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3233*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZ\x01\x00\x00\x01\x00\x01\x00\x00\x00\x00\x01\x00\x01\x00\x01\x00' 3234*da0073e9SAndroid Build Coastguard Worker b'PK\x07\x08\x00Y04\x10\x00\x00\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00' 3235*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00(\x00' 3236*da0073e9SAndroid Build Coastguard Worker b'tensor.bool.LE.BOM/versionFB$\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08' 3237*da0073e9SAndroid Build Coastguard Worker b'\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00' 3238*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x9a\xab=\'\x99\x00\x00\x00\x99\x00\x00\x00\x1b\x00\x00\x00' 3239*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.bool.LE.BOM/dat' 3240*da0073e9SAndroid Build Coastguard Worker b'a.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x85=\xe3\x19\x06' 3241*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x06\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3242*da0073e9SAndroid Build Coastguard Worker b'\x00\xe9\x00\x00\x00tensor.bool.LE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08' 3243*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00Y04\x10\x00\x00\x00\x10\x00\x00\x00\x19\x00\x00\x00' 3244*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00V\x01\x00\x00tensor.bool.LE.BOM/data/0P' 3245*da0073e9SAndroid Build Coastguard Worker b'K\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00' 3246*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01' 3247*da0073e9SAndroid Build Coastguard Worker b'\x00\x00tensor.bool.LE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e' 3248*da0073e9SAndroid Build Coastguard Worker b'\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00' 3249*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00"\x01\x00\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00' 3250*da0073e9SAndroid Build Coastguard Worker b'PK\x06\x07\x00\x00\x00\x00t\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05' 3251*da0073e9SAndroid Build Coastguard Worker b'\x06\x00\x00\x00\x00\x04\x00\x04\x00"\x01\x00\x00R\x02\x00\x00\x00\x00') 3252*da0073e9SAndroid Build Coastguard Worker 3253*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b"PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 3254*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x17\x00\x0b\x00tensor.bool.BE/data.pklFB\x07\x00ZZZZZZZ\x80" 3255*da0073e9SAndroid Build Coastguard Worker b"\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc" 3256*da0073e9SAndroid Build Coastguard Worker b"h\nBoolStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05" 3257*da0073e9SAndroid Build Coastguard Worker b"QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08" 3258*da0073e9SAndroid Build Coastguard Worker b")Rq\ttq\nRq\x0b.PK\x07\x08\x9a\xab='\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04\x00" 3259*da0073e9SAndroid Build Coastguard Worker b"\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 3260*da0073e9SAndroid Build Coastguard Worker b"\x00\x15\x00$\x00tensor.bool.BE/data/0FB \x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\x01" 3261*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x01\x00\x01\x00\x00\x00\x00\x01\x00\x01\x00\x01\x00PK\x07\x08\x00Y04" 3262*da0073e9SAndroid Build Coastguard Worker b"\x10\x00\x00\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00" 3263*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00,\x00tensor.bool.BE/ve" 3264*da0073e9SAndroid Build Coastguard Worker b"rsionFB(\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00" 3265*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00" 3266*da0073e9SAndroid Build Coastguard Worker b"\x00\x9a\xab='\x99\x00\x00\x00\x99\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00" 3267*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.bool.BE/data.pklPK\x01\x02\x00\x00" 3268*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00Y04\x10\x00\x00\x00\x10\x00\x00\x00\x15" 3269*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00tensor.bo" 3270*da0073e9SAndroid Build Coastguard Worker b"ol.BE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU" 3271*da0073e9SAndroid Build Coastguard Worker b"\x02\x00\x00\x00\x02\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 3272*da0073e9SAndroid Build Coastguard Worker b"\x00\x00`\x01\x00\x00tensor.bool.BE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00" 3273*da0073e9SAndroid Build Coastguard Worker b"\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03" 3274*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00" 3275*da0073e9SAndroid Build Coastguard Worker b"\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\x9e\x02\x00\x00\x00\x00\x00\x00\x01\x00" 3276*da0073e9SAndroid Build Coastguard Worker b"\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xcc\x00\x00\x00\xd2\x01\x00\x00" 3277*da0073e9SAndroid Build Coastguard Worker b"\x00\x00") 3278*da0073e9SAndroid Build Coastguard Worker 3279*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3280*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1b\x00\x07\x00tensor.bool.BE.BOM/data.pklFB\x03\x00ZZZ\x80' 3281*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3282*da0073e9SAndroid Build Coastguard Worker b'h\nBoolStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x10tq\x05' 3283*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x04K\x04\x86q\x06K\x04K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 3284*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08\x9a\xab=\'\x99\x00\x00\x00\x99\x00\x00\x00PK\x03\x04\x00' 3285*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3286*da0073e9SAndroid Build Coastguard Worker b'\x00\x1c\x00\x1d\x00tensor.bool.BE.BOM/byteorderFB\x19\x00ZZZZZZZZZZZZZZZZZZZ' 3287*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZbigPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00\x00' 3288*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3289*da0073e9SAndroid Build Coastguard Worker b'\x19\x006\x00tensor.bool.BE.BOM/data/0FB2\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3290*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZ\x01\x00\x00\x01\x00\x01\x00\x00\x00\x00\x01\x00\x01\x00\x01\x00' 3291*da0073e9SAndroid Build Coastguard Worker b'PK\x07\x08\x00Y04\x10\x00\x00\x00\x10\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00' 3292*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00(\x00' 3293*da0073e9SAndroid Build Coastguard Worker b'tensor.bool.BE.BOM/versionFB$\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08' 3294*da0073e9SAndroid Build Coastguard Worker b'\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00' 3295*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x9a\xab=\'\x99\x00\x00\x00\x99\x00\x00\x00\x1b\x00\x00\x00' 3296*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.bool.BE.BOM/dat' 3297*da0073e9SAndroid Build Coastguard Worker b'a.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00I\xe2\xfb\xd3\x03' 3298*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x03\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3299*da0073e9SAndroid Build Coastguard Worker b'\x00\xe9\x00\x00\x00tensor.bool.BE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08' 3300*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00Y04\x10\x00\x00\x00\x10\x00\x00\x00\x19\x00\x00\x00' 3301*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x01\x00\x00tensor.bool.BE.BOM/data/0P' 3302*da0073e9SAndroid Build Coastguard Worker b'K\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00' 3303*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01' 3304*da0073e9SAndroid Build Coastguard Worker b'\x00\x00tensor.bool.BE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e' 3305*da0073e9SAndroid Build Coastguard Worker b'\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00' 3306*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00"\x01\x00\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00' 3307*da0073e9SAndroid Build Coastguard Worker b'PK\x06\x07\x00\x00\x00\x00t\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05' 3308*da0073e9SAndroid Build Coastguard Worker b'\x06\x00\x00\x00\x00\x04\x00\x04\x00"\x01\x00\x00R\x02\x00\x00\x00\x00') 3309*da0073e9SAndroid Build Coastguard Worker 3310*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 3311*da0073e9SAndroid Build Coastguard Worker 3312*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 3313*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 3314*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 3315*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 3316*da0073e9SAndroid Build Coastguard Worker 3317*da0073e9SAndroid Build Coastguard Worker try: 3318*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 3319*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 3320*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 3321*da0073e9SAndroid Build Coastguard Worker finally: 3322*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3323*da0073e9SAndroid Build Coastguard Worker 3324*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 3325*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 3326*da0073e9SAndroid Build Coastguard Worker 3327*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 3328*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 3329*da0073e9SAndroid Build Coastguard Worker 3330*da0073e9SAndroid Build Coastguard Worker try: 3331*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 3332*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 3333*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 3334*da0073e9SAndroid Build Coastguard Worker finally: 3335*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3336*da0073e9SAndroid Build Coastguard Worker 3337*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 3338*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 3339*da0073e9SAndroid Build Coastguard Worker 3340*da0073e9SAndroid Build Coastguard Worker try: 3341*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 3342*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 3343*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 3344*da0073e9SAndroid Build Coastguard Worker finally: 3345*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3346*da0073e9SAndroid Build Coastguard Worker 3347*da0073e9SAndroid Build Coastguard Worker # 1-byte types are same on BE and LE 3348*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 3349*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 3350*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 3351*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 3352*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 3353*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 3354*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 3355*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 3356*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 3357*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 3358*da0073e9SAndroid Build Coastguard Worker 3359*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_bfloat16(self): 3360*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 3361*da0073e9SAndroid Build Coastguard Worker # 3362*da0073e9SAndroid Build Coastguard Worker # import torch 3363*da0073e9SAndroid Build Coastguard Worker # 3364*da0073e9SAndroid Build Coastguard Worker # x = torch.randn(2,2, dtype=torch.bfloat16) 3365*da0073e9SAndroid Build Coastguard Worker # 3366*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.bfloat16.LE.pt", _disable_byteorder_record=True) 3367*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.bfloat16.LE.BOM.pt") 3368*da0073e9SAndroid Build Coastguard Worker # 3369*da0073e9SAndroid Build Coastguard Worker # print(x) 3370*da0073e9SAndroid Build Coastguard Worker # 3371*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 3372*da0073e9SAndroid Build Coastguard Worker # 3373*da0073e9SAndroid Build Coastguard Worker # import torch 3374*da0073e9SAndroid Build Coastguard Worker # 3375*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.bfloat16.LE.BOM.pt') 3376*da0073e9SAndroid Build Coastguard Worker # 3377*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.bfloat16.BE.pt', _disable_byteorder_record=True) 3378*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.bfloat16.BE.BOM.pt') 3379*da0073e9SAndroid Build Coastguard Worker # 3380*da0073e9SAndroid Build Coastguard Worker # print(x) 3381*da0073e9SAndroid Build Coastguard Worker # 3382*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 3383*da0073e9SAndroid Build Coastguard Worker # 3384*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 3385*da0073e9SAndroid Build Coastguard Worker # data = file.read() 3386*da0073e9SAndroid Build Coastguard Worker # file.close() 3387*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 3388*da0073e9SAndroid Build Coastguard Worker # 3389*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 3390*da0073e9SAndroid Build Coastguard Worker # 3391*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3392*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1b\x00\x07\x00tensor.bfloat16.LE/data.pklFB\x03\x00ZZZ\x80' 3393*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3394*da0073e9SAndroid Build Coastguard Worker b'h\nBFloat16Storage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq' 3395*da0073e9SAndroid Build Coastguard Worker b'\x05QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq' 3396*da0073e9SAndroid Build Coastguard Worker b'\x08)Rq\ttq\nRq\x0b.PK\x07\x08\x1f>\xd9\x7f\x9d\x00\x00\x00\x9d\x00\x00\x00PK\x03' 3397*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3398*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x19\x00\x1c\x00tensor.bfloat16.LE/data/0FB\x18\x00ZZZZZZZZZZZZZZZZ' 3399*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZ\r@i\xber?\xbc\xbfPK\x07\x085\xd2\x8f\xc7\x08\x00\x00\x00\x08\x00\x00\x00' 3400*da0073e9SAndroid Build Coastguard Worker b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3401*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x1a\x000\x00tensor.bfloat16.LE/versionFB,\x00ZZZZZZZZZZZZZZZ' 3402*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00' 3403*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x1f>\xd9\x7f\x9d\x00' 3404*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x9d\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3405*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00tensor.bfloat16.LE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08' 3406*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x005\xd2\x8f\xc7\x08\x00\x00\x00\x08\x00\x00\x00\x19\x00\x00' 3407*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x00\x00\x00tensor.bfloat16.LE/' 3408*da0073e9SAndroid Build Coastguard Worker b'data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00' 3409*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3410*da0073e9SAndroid Build Coastguard Worker b'X\x01\x00\x00tensor.bfloat16.LE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00' 3411*da0073e9SAndroid Build Coastguard Worker b'\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03' 3412*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00' 3413*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xaa\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00' 3414*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xd8\x00\x00\x00\xd2\x01\x00\x00' 3415*da0073e9SAndroid Build Coastguard Worker b'\x00\x00') 3416*da0073e9SAndroid Build Coastguard Worker 3417*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3418*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1f\x00C\x00tensor.bfloat16.LE.BOM/data.pklFB?\x00ZZZZZZZZZ' 3419*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\x80\x02ctorch._utils\n_re' 3420*da0073e9SAndroid Build Coastguard Worker b'build_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\nBFloat16Storage\nq\x02' 3421*da0073e9SAndroid Build Coastguard Worker b'X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05QK\x00K\x02K\x02\x86' 3422*da0073e9SAndroid Build Coastguard Worker b'q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)Rq\ttq\nRq\x0b.PK' 3423*da0073e9SAndroid Build Coastguard Worker b'\x07\x08\x1f>\xd9\x7f\x9d\x00\x00\x00\x9d\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00' 3424*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x15' 3425*da0073e9SAndroid Build Coastguard Worker b'\x00tensor.bfloat16.LE.BOM/byteorderFB\x11\x00ZZZZZZZZZZZZZZZZZlittlePK\x07\x08\x85' 3426*da0073e9SAndroid Build Coastguard Worker b'=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00' 3427*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x00/\x00tenso' 3428*da0073e9SAndroid Build Coastguard Worker b'r.bfloat16.LE.BOM/data/0FB+\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\r@i\xbe' 3429*da0073e9SAndroid Build Coastguard Worker b'r?\xbc\xbfPK\x07\x085\xd2\x8f\xc7\x08\x00\x00\x00\x08\x00\x00\x00PK\x03\x04\x00' 3430*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3431*da0073e9SAndroid Build Coastguard Worker b'\x00\x1e\x00,\x00tensor.bfloat16.LE.BOM/versionFB(\x00ZZZZZZZZZZZZZZZZZZZZZZZZZ' 3432*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02' 3433*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x1f>\xd9\x7f\x9d\x00\x00\x00\x9d' 3434*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3435*da0073e9SAndroid Build Coastguard Worker b'\x00tensor.bfloat16.LE.BOM/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00' 3436*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00 \x00\x00\x00\x00\x00' 3437*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00-\x01\x00\x00tensor.bfloat16.LE.BOM/byteorderPK\x01' 3438*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x005\xd2\x8f\xc7\x08\x00\x00' 3439*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96' 3440*da0073e9SAndroid Build Coastguard Worker b'\x01\x00\x00tensor.bfloat16.LE.BOM/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00' 3441*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x1e\x00\x00\x00\x00' 3442*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x02\x00\x00tensor.bfloat16.LE.BOM/vers' 3443*da0073e9SAndroid Build Coastguard Worker b'ionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00' 3444*da0073e9SAndroid Build Coastguard Worker b'\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x002\x01\x00' 3445*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x92\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xc4' 3446*da0073e9SAndroid Build Coastguard Worker b'\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00' 3447*da0073e9SAndroid Build Coastguard Worker b'\x04\x002\x01\x00\x00\x92\x02\x00\x00\x00\x00') 3448*da0073e9SAndroid Build Coastguard Worker 3449*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3450*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1b\x00\x07\x00tensor.bfloat16.BE/data.pklFB\x03\x00ZZZ\x80' 3451*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3452*da0073e9SAndroid Build Coastguard Worker b'h\nBFloat16Storage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq' 3453*da0073e9SAndroid Build Coastguard Worker b'\x05QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq' 3454*da0073e9SAndroid Build Coastguard Worker b'\x08)Rq\ttq\nRq\x0b.PK\x07\x08\x1f>\xd9\x7f\x9d\x00\x00\x00\x9d\x00\x00\x00PK\x03' 3455*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3456*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x19\x00\x1c\x00tensor.bfloat16.BE/data/0FB\x18\x00ZZZZZZZZZZZZZZZZ' 3457*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZ@\r\xbei?r\xbf\xbcPK\x07\x08d\x02=\xc7\x08\x00\x00\x00\x08\x00\x00\x00PK' 3458*da0073e9SAndroid Build Coastguard Worker b'\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3459*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x1a\x000\x00tensor.bfloat16.BE/versionFB,\x00ZZZZZZZZZZZZZZZZZZ' 3460*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00' 3461*da0073e9SAndroid Build Coastguard Worker b'PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x1f>\xd9\x7f\x9d\x00' 3462*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x9d\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3463*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00tensor.bfloat16.BE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00' 3464*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00d\x02=\xc7\x08\x00\x00\x00\x08\x00\x00\x00\x19\x00\x00\x00\x00' 3465*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x00\x00\x00tensor.bfloat16.BE/data/0' 3466*da0073e9SAndroid Build Coastguard Worker b'PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00' 3467*da0073e9SAndroid Build Coastguard Worker b'\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00X\x01' 3468*da0073e9SAndroid Build Coastguard Worker b'\x00\x00tensor.bfloat16.BE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03' 3469*da0073e9SAndroid Build Coastguard Worker b'-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00' 3470*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00' 3471*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x06\x07\x00\x00\x00\x00\xaa\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00' 3472*da0073e9SAndroid Build Coastguard Worker b'PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xd8\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 3473*da0073e9SAndroid Build Coastguard Worker 3474*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3475*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1f\x00C\x00tensor.bfloat16.BE.BOM/data.pklFB?\x00ZZZZZZZZZ' 3476*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\x80\x02ctorch._utils\n_re' 3477*da0073e9SAndroid Build Coastguard Worker b'build_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\nBFloat16Storage\nq\x02' 3478*da0073e9SAndroid Build Coastguard Worker b'X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05QK\x00K\x02K\x02\x86' 3479*da0073e9SAndroid Build Coastguard Worker b'q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08)Rq\ttq\nRq\x0b.PK' 3480*da0073e9SAndroid Build Coastguard Worker b'\x07\x08\x1f>\xd9\x7f\x9d\x00\x00\x00\x9d\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00' 3481*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x15' 3482*da0073e9SAndroid Build Coastguard Worker b'\x00tensor.bfloat16.BE.BOM/byteorderFB\x11\x00ZZZZZZZZZZZZZZZZZbigPK\x07\x08I\xe2' 3483*da0073e9SAndroid Build Coastguard Worker b'\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00' 3484*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x002\x00tensor.b' 3485*da0073e9SAndroid Build Coastguard Worker b'float16.BE.BOM/data/0FB.\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ@\r\xbe' 3486*da0073e9SAndroid Build Coastguard Worker b'i?r\xbf\xbcPK\x07\x08d\x02=\xc7\x08\x00\x00\x00\x08\x00\x00\x00PK\x03\x04\x00\x00' 3487*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3488*da0073e9SAndroid Build Coastguard Worker b'\x1e\x00,\x00tensor.bfloat16.BE.BOM/versionFB(\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3489*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00' 3490*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x1f>\xd9\x7f\x9d\x00\x00\x00\x9d\x00' 3491*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3492*da0073e9SAndroid Build Coastguard Worker b'tensor.bfloat16.BE.BOM/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 3493*da0073e9SAndroid Build Coastguard Worker b'\x00\x00I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00 \x00\x00\x00\x00\x00\x00' 3494*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00-\x01\x00\x00tensor.bfloat16.BE.BOM/byteorderPK\x01' 3495*da0073e9SAndroid Build Coastguard Worker b'\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00d\x02=\xc7\x08\x00\x00\x00\x08' 3496*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x01\x00' 3497*da0073e9SAndroid Build Coastguard Worker b'\x00tensor.bfloat16.BE.BOM/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00' 3498*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00' 3499*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x18\x02\x00\x00tensor.bfloat16.BE.BOM/versionPK\x06' 3500*da0073e9SAndroid Build Coastguard Worker b'\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3501*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x002\x01\x00\x00\x00' 3502*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x92\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xc4\x03' 3503*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00\x04\x00' 3504*da0073e9SAndroid Build Coastguard Worker b'2\x01\x00\x00\x92\x02\x00\x00\x00\x00') 3505*da0073e9SAndroid Build Coastguard Worker 3506*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 3507*da0073e9SAndroid Build Coastguard Worker 3508*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 3509*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 3510*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 3511*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 3512*da0073e9SAndroid Build Coastguard Worker 3513*da0073e9SAndroid Build Coastguard Worker try: 3514*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 3515*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 3516*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 3517*da0073e9SAndroid Build Coastguard Worker finally: 3518*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3519*da0073e9SAndroid Build Coastguard Worker 3520*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 3521*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 3522*da0073e9SAndroid Build Coastguard Worker 3523*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 3524*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 3525*da0073e9SAndroid Build Coastguard Worker 3526*da0073e9SAndroid Build Coastguard Worker try: 3527*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 3528*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 3529*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 3530*da0073e9SAndroid Build Coastguard Worker finally: 3531*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3532*da0073e9SAndroid Build Coastguard Worker 3533*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 3534*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 3535*da0073e9SAndroid Build Coastguard Worker 3536*da0073e9SAndroid Build Coastguard Worker try: 3537*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 3538*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 3539*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 3540*da0073e9SAndroid Build Coastguard Worker finally: 3541*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3542*da0073e9SAndroid Build Coastguard Worker 3543*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 3544*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 3545*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 3546*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 3547*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 3548*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 3549*da0073e9SAndroid Build Coastguard Worker 3550*da0073e9SAndroid Build Coastguard Worker if (sys.byteorder == 'little'): 3551*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 3552*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 3553*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_le_bom)) 3554*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_be_bom)) 3555*da0073e9SAndroid Build Coastguard Worker else: 3556*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_le_bom)) 3557*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_bom)) 3558*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 3559*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 3560*da0073e9SAndroid Build Coastguard Worker 3561*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_cdouble(self): 3562*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 3563*da0073e9SAndroid Build Coastguard Worker # 3564*da0073e9SAndroid Build Coastguard Worker # import torch 3565*da0073e9SAndroid Build Coastguard Worker # 3566*da0073e9SAndroid Build Coastguard Worker # x = torch.randn(2,2, dtype=torch.cdouble) 3567*da0073e9SAndroid Build Coastguard Worker # 3568*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.cdouble.LE.pt", _disable_byteorder_record=True) 3569*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.cdouble.LE.BOM.pt") 3570*da0073e9SAndroid Build Coastguard Worker # 3571*da0073e9SAndroid Build Coastguard Worker # print(x) 3572*da0073e9SAndroid Build Coastguard Worker # 3573*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 3574*da0073e9SAndroid Build Coastguard Worker # 3575*da0073e9SAndroid Build Coastguard Worker # import torch 3576*da0073e9SAndroid Build Coastguard Worker # 3577*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.cdouble.LE.BOM.pt') 3578*da0073e9SAndroid Build Coastguard Worker # 3579*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.cdouble.BE.pt', _disable_byteorder_record=True) 3580*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.cdouble.BE.BOM.pt') 3581*da0073e9SAndroid Build Coastguard Worker # 3582*da0073e9SAndroid Build Coastguard Worker # print(x) 3583*da0073e9SAndroid Build Coastguard Worker # 3584*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 3585*da0073e9SAndroid Build Coastguard Worker # 3586*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 3587*da0073e9SAndroid Build Coastguard Worker # data = file.read() 3588*da0073e9SAndroid Build Coastguard Worker # file.close() 3589*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 3590*da0073e9SAndroid Build Coastguard Worker # 3591*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 3592*da0073e9SAndroid Build Coastguard Worker # 3593*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3594*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1a\x00\x08\x00tensor.cdouble.LE/data.pklFB\x04\x00ZZZZ\x80' 3595*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3596*da0073e9SAndroid Build Coastguard Worker b'h\nComplexDoubleStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04' 3597*da0073e9SAndroid Build Coastguard Worker b'tq\x05QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDi' 3598*da0073e9SAndroid Build Coastguard Worker b'ct\nq\x08)Rq\ttq\nRq\x0b.PK\x07\x08(W{\xca\xa2\x00\x00\x00\xa2\x00\x00\x00PK\x03' 3599*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3600*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x18\x00\x18\x00tensor.cdouble.LE/data/0FB\x14\x00ZZZZZZZZZZZZZZZZZZ' 3601*da0073e9SAndroid Build Coastguard Worker b'ZZ\xd1/\x84\xd8,\x00\xcd\xbf|L\xcf\xd0O\xee\xd7\xbfb\xb6<\xb4\xe2_\xec?v+\x86\xd9' 3602*da0073e9SAndroid Build Coastguard Worker b'\xca\x0e\xf8?i#\xbb\xfcU\x1b\xe0\xbf\x984\xcd\x02q\x8a\xe9?\xc1_\xd7R\xe3\xfb\xe3' 3603*da0073e9SAndroid Build Coastguard Worker b'\xbf\xcf\xce>\xcd\xa2\x9f\xe8?PK\x07\x08\x1d\xed\xed\xa0@\x00\x00\x00@\x00\x00' 3604*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3605*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x19\x009\x00tensor.cdouble.LE/versionFB5\x00ZZZZZZZZZZZZZ' 3606*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02' 3607*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00(W{\xca' 3608*da0073e9SAndroid Build Coastguard Worker b'\xa2\x00\x00\x00\xa2\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3609*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00tensor.cdouble.LE/data.pklPK\x01\x02\x00\x00\x00\x00\x08' 3610*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x1d\xed\xed\xa0@\x00\x00\x00@\x00\x00\x00\x18\x00\x00' 3611*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00tensor.cdouble.LE/' 3612*da0073e9SAndroid Build Coastguard Worker b'data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00' 3613*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3614*da0073e9SAndroid Build Coastguard Worker b'\x90\x01\x00\x00tensor.cdouble.LE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00' 3615*da0073e9SAndroid Build Coastguard Worker b'\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03' 3616*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\xd5\x00\x00\x00\x00\x00\x00\x00\x12\x02\x00\x00\x00' 3617*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xe7\x02\x00\x00\x00\x00\x00\x00\x01\x00' 3618*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xd5\x00\x00\x00\x12\x02\x00\x00' 3619*da0073e9SAndroid Build Coastguard Worker b'\x00\x00') 3620*da0073e9SAndroid Build Coastguard Worker 3621*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3622*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1e\x00\x04\x00tensor.cdouble.LE.BOM/data.pklFB\x00\x00\x80' 3623*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3624*da0073e9SAndroid Build Coastguard Worker b'h\nComplexDoubleStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04' 3625*da0073e9SAndroid Build Coastguard Worker b'tq\x05QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDi' 3626*da0073e9SAndroid Build Coastguard Worker b'ct\nq\x08)Rq\ttq\nRq\x0b.PK\x07\x08(W{\xca\xa2\x00\x00\x00\xa2\x00\x00\x00PK\x03' 3627*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3628*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x1f\x00\x11\x00tensor.cdouble.LE.BOM/byteorderFB\r\x00ZZZZZZZZZZZZZ' 3629*da0073e9SAndroid Build Coastguard Worker b'littlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00\x00\x08' 3630*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c' 3631*da0073e9SAndroid Build Coastguard Worker b'\x000\x00tensor.cdouble.LE.BOM/data/0FB,\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3632*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZ\xd1/\x84\xd8,\x00\xcd\xbf|L\xcf\xd0O\xee\xd7\xbfb\xb6<\xb4\xe2_\xec?' 3633*da0073e9SAndroid Build Coastguard Worker b'v+\x86\xd9\xca\x0e\xf8?i#\xbb\xfcU\x1b\xe0\xbf\x984\xcd\x02q\x8a\xe9?\xc1_\xd7R\xe3' 3634*da0073e9SAndroid Build Coastguard Worker b'\xfb\xe3\xbf\xcf\xce>\xcd\xa2\x9f\xe8?PK\x07\x08\x1d\xed\xed\xa0@\x00\x00\x00' 3635*da0073e9SAndroid Build Coastguard Worker b'@\x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3636*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x1d\x005\x00tensor.cdouble.LE.BOM/versionFB1\x00' 3637*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00' 3638*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00' 3639*da0073e9SAndroid Build Coastguard Worker b'(W{\xca\xa2\x00\x00\x00\xa2\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3640*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00tensor.cdouble.LE.BOM/data.pklPK\x01\x02\x00\x00' 3641*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00' 3642*da0073e9SAndroid Build Coastguard Worker b'\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00te' 3643*da0073e9SAndroid Build Coastguard Worker b'nsor.cdouble.LE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 3644*da0073e9SAndroid Build Coastguard Worker b'\x00\x1d\xed\xed\xa0@\x00\x00\x00@\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00' 3645*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00V\x01\x00\x00tensor.cdouble.LE.BOM/data/0PK\x01\x02\x00' 3646*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00' 3647*da0073e9SAndroid Build Coastguard Worker b'\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x02\x00\x00te' 3648*da0073e9SAndroid Build Coastguard Worker b'nsor.cdouble.LE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00' 3649*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00' 3650*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00.\x01\x00\x00\x00\x00\x00\x00\x92\x02\x00\x00\x00\x00\x00\x00PK\x06' 3651*da0073e9SAndroid Build Coastguard Worker b'\x07\x00\x00\x00\x00\xc0\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06' 3652*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x04\x00\x04\x00.\x01\x00\x00\x92\x02\x00\x00\x00\x00') 3653*da0073e9SAndroid Build Coastguard Worker 3654*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3655*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1a\x00\x08\x00tensor.cdouble.BE/data.pklFB\x04\x00ZZZZ\x80' 3656*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3657*da0073e9SAndroid Build Coastguard Worker b'h\nComplexDoubleStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04' 3658*da0073e9SAndroid Build Coastguard Worker b'tq\x05QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDi' 3659*da0073e9SAndroid Build Coastguard Worker b'ct\nq\x08)Rq\ttq\nRq\x0b.PK\x07\x08(W{\xca\xa2\x00\x00\x00\xa2\x00\x00\x00PK\x03' 3660*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3661*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x18\x00\x18\x00tensor.cdouble.BE/data/0FB\x14\x00ZZZZZZZZZZZZZZZZZZ' 3662*da0073e9SAndroid Build Coastguard Worker b'ZZ\xbf\xcd\x00,\xd8\x84/\xd1\xbf\xd7\xeeO\xd0\xcfL|?\xec_\xe2\xb4<\xb6b?\xf8\x0e' 3663*da0073e9SAndroid Build Coastguard Worker b'\xca\xd9\x86+v\xbf\xe0\x1bU\xfc\xbb#i?\xe9\x8aq\x02\xcd4\x98\xbf\xe3\xfb\xe3R\xd7' 3664*da0073e9SAndroid Build Coastguard Worker b'_\xc1?\xe8\x9f\xa2\xcd>\xce\xcfPK\x07\x08\x91\xbey\x14@\x00\x00\x00@\x00\x00\x00' 3665*da0073e9SAndroid Build Coastguard Worker b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3666*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x19\x009\x00tensor.cdouble.BE/versionFB5\x00ZZZZZZZZZZZZZZZZ' 3667*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00\x00\x02' 3668*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00(W{\xca\xa2' 3669*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xa2\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3670*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00tensor.cdouble.BE/data.pklPK\x01\x02\x00\x00\x00\x00\x08\x08' 3671*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x91\xbey\x14@\x00\x00\x00@\x00\x00\x00\x18\x00\x00\x00' 3672*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00tensor.cdouble.BE/data/0' 3673*da0073e9SAndroid Build Coastguard Worker b'PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00' 3674*da0073e9SAndroid Build Coastguard Worker b'\x00\x02\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90' 3675*da0073e9SAndroid Build Coastguard Worker b'\x01\x00\x00tensor.cdouble.BE/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e' 3676*da0073e9SAndroid Build Coastguard Worker b'\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00' 3677*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xd5\x00\x00\x00\x00\x00\x00\x00\x12\x02\x00\x00\x00\x00' 3678*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x06\x07\x00\x00\x00\x00\xe7\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00' 3679*da0073e9SAndroid Build Coastguard Worker b'PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xd5\x00\x00\x00\x12\x02\x00\x00\x00' 3680*da0073e9SAndroid Build Coastguard Worker b'\x00') 3681*da0073e9SAndroid Build Coastguard Worker 3682*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3683*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x1e\x00\x04\x00tensor.cdouble.BE.BOM/data.pklFB\x00\x00\x80' 3684*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3685*da0073e9SAndroid Build Coastguard Worker b'h\nComplexDoubleStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04' 3686*da0073e9SAndroid Build Coastguard Worker b'tq\x05QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDi' 3687*da0073e9SAndroid Build Coastguard Worker b'ct\nq\x08)Rq\ttq\nRq\x0b.PK\x07\x08(W{\xca\xa2\x00\x00\x00\xa2\x00\x00\x00PK\x03' 3688*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3689*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x1f\x00\x11\x00tensor.cdouble.BE.BOM/byteorderFB\r\x00ZZZZZZZZZZZZZ' 3690*da0073e9SAndroid Build Coastguard Worker b'bigPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00\x00\x08' 3691*da0073e9SAndroid Build Coastguard Worker b'\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c' 3692*da0073e9SAndroid Build Coastguard Worker b'\x003\x00tensor.cdouble.BE.BOM/data/0FB/\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3693*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZ\xbf\xcd\x00,\xd8\x84/\xd1\xbf\xd7\xeeO\xd0\xcfL|?\xec_\xe2\xb4<\xb6b' 3694*da0073e9SAndroid Build Coastguard Worker b'?\xf8\x0e\xca\xd9\x86+v\xbf\xe0\x1bU\xfc\xbb#i?\xe9\x8aq\x02\xcd4\x98\xbf\xe3\xfb' 3695*da0073e9SAndroid Build Coastguard Worker b'\xe3R\xd7_\xc1?\xe8\x9f\xa2\xcd>\xce\xcfPK\x07\x08\x91\xbey\x14@\x00\x00\x00@\x00' 3696*da0073e9SAndroid Build Coastguard Worker b'\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3697*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x1d\x005\x00tensor.cdouble.BE.BOM/versionFB1\x00ZZZ' 3698*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02\x00\x00' 3699*da0073e9SAndroid Build Coastguard Worker b'\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00(' 3700*da0073e9SAndroid Build Coastguard Worker b'W{\xca\xa2\x00\x00\x00\xa2\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3701*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00tensor.cdouble.BE.BOM/data.pklPK\x01\x02\x00\x00\x00' 3702*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00' 3703*da0073e9SAndroid Build Coastguard Worker b'\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00tenso' 3704*da0073e9SAndroid Build Coastguard Worker b'r.cdouble.BE.BOM/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00' 3705*da0073e9SAndroid Build Coastguard Worker b'\x00\x91\xbey\x14@\x00\x00\x00@\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3706*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00S\x01\x00\x00tensor.cdouble.BE.BOM/data/0PK\x01\x02\x00\x00\x00' 3707*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00' 3708*da0073e9SAndroid Build Coastguard Worker b'\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x02\x00\x00tensor.c' 3709*da0073e9SAndroid Build Coastguard Worker b'double.BE.BOM/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00' 3710*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00' 3711*da0073e9SAndroid Build Coastguard Worker b'\x00\x00.\x01\x00\x00\x00\x00\x00\x00\x92\x02\x00\x00\x00\x00\x00\x00PK\x06\x07' 3712*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xc0\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00' 3713*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x04\x00\x04\x00.\x01\x00\x00\x92\x02\x00\x00\x00\x00') 3714*da0073e9SAndroid Build Coastguard Worker 3715*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 3716*da0073e9SAndroid Build Coastguard Worker 3717*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 3718*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 3719*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 3720*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 3721*da0073e9SAndroid Build Coastguard Worker 3722*da0073e9SAndroid Build Coastguard Worker try: 3723*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 3724*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 3725*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 3726*da0073e9SAndroid Build Coastguard Worker finally: 3727*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3728*da0073e9SAndroid Build Coastguard Worker 3729*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 3730*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 3731*da0073e9SAndroid Build Coastguard Worker 3732*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 3733*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 3734*da0073e9SAndroid Build Coastguard Worker 3735*da0073e9SAndroid Build Coastguard Worker try: 3736*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 3737*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 3738*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 3739*da0073e9SAndroid Build Coastguard Worker finally: 3740*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3741*da0073e9SAndroid Build Coastguard Worker 3742*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 3743*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 3744*da0073e9SAndroid Build Coastguard Worker 3745*da0073e9SAndroid Build Coastguard Worker try: 3746*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 3747*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 3748*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 3749*da0073e9SAndroid Build Coastguard Worker finally: 3750*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3751*da0073e9SAndroid Build Coastguard Worker 3752*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 3753*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 3754*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 3755*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 3756*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 3757*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 3758*da0073e9SAndroid Build Coastguard Worker 3759*da0073e9SAndroid Build Coastguard Worker if (sys.byteorder == 'little'): 3760*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 3761*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 3762*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_le_bom)) 3763*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_be_bom)) 3764*da0073e9SAndroid Build Coastguard Worker else: 3765*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_le_bom)) 3766*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_bom)) 3767*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 3768*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 3769*da0073e9SAndroid Build Coastguard Worker 3770*da0073e9SAndroid Build Coastguard Worker def test_serialization_load_bom_data_cfloat(self): 3771*da0073e9SAndroid Build Coastguard Worker # 1. Generated on LE system using following commands: 3772*da0073e9SAndroid Build Coastguard Worker # 3773*da0073e9SAndroid Build Coastguard Worker # import torch 3774*da0073e9SAndroid Build Coastguard Worker # 3775*da0073e9SAndroid Build Coastguard Worker # x = torch.randn(2,2, dtype=torch.cfloat) 3776*da0073e9SAndroid Build Coastguard Worker # 3777*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.cfloat.LE.pt", _disable_byteorder_record=True) 3778*da0073e9SAndroid Build Coastguard Worker # torch.save(x, "tensor.cfloat.LE.BOM.pt") 3779*da0073e9SAndroid Build Coastguard Worker # 3780*da0073e9SAndroid Build Coastguard Worker # print(x) 3781*da0073e9SAndroid Build Coastguard Worker # 3782*da0073e9SAndroid Build Coastguard Worker # 2. After that it is resaved on BE system with following commands: 3783*da0073e9SAndroid Build Coastguard Worker # 3784*da0073e9SAndroid Build Coastguard Worker # import torch 3785*da0073e9SAndroid Build Coastguard Worker # 3786*da0073e9SAndroid Build Coastguard Worker # x = torch.load('tensor.cfloat.LE.BOM.pt') 3787*da0073e9SAndroid Build Coastguard Worker # 3788*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.cfloat.BE.pt', _disable_byteorder_record=True) 3789*da0073e9SAndroid Build Coastguard Worker # torch.save(x, 'tensor.cfloat.BE.BOM.pt') 3790*da0073e9SAndroid Build Coastguard Worker # 3791*da0073e9SAndroid Build Coastguard Worker # print(x) 3792*da0073e9SAndroid Build Coastguard Worker # 3793*da0073e9SAndroid Build Coastguard Worker # Following commands and a bit of manual work were used to produce python bytes from resulting files: 3794*da0073e9SAndroid Build Coastguard Worker # 3795*da0073e9SAndroid Build Coastguard Worker # file = open('filename', 'rb') 3796*da0073e9SAndroid Build Coastguard Worker # data = file.read() 3797*da0073e9SAndroid Build Coastguard Worker # file.close() 3798*da0073e9SAndroid Build Coastguard Worker # print("\n".join(textwrap.wrap(str(data), 80))) 3799*da0073e9SAndroid Build Coastguard Worker # 3800*da0073e9SAndroid Build Coastguard Worker # BOM in this context is used as Byte Order Mark. 3801*da0073e9SAndroid Build Coastguard Worker # 3802*da0073e9SAndroid Build Coastguard Worker data_le_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3803*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x12\x00\x10\x00tensor.le/data.pklFB\x0c\x00ZZZZZZZZZZZZ\x80' 3804*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3805*da0073e9SAndroid Build Coastguard Worker b'h\nComplexFloatStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04' 3806*da0073e9SAndroid Build Coastguard Worker b'tq\x05QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDic' 3807*da0073e9SAndroid Build Coastguard Worker b't\nq\x08)Rq\ttq\nRq\x0b.PK\x07\x08\xe4\x04T\xec\xa1\x00\x00\x00\xa1\x00\x00\x00P' 3808*da0073e9SAndroid Build Coastguard Worker b'K\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3809*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x10\x00!\x00tensor.le/data/0FB\x1d\x00ZZZZZZZZZZZZZZZZZZZZZZZZ' 3810*da0073e9SAndroid Build Coastguard Worker b'ZZZZZ\x9e<5\xbe\x96\xd1\xf1=Q\xeaj\xbfiX\x02\xbfW`\xfe?+\xfd\x0c>;a\\\xbe.b\xe2>' 3811*da0073e9SAndroid Build Coastguard Worker b'PK\x07\x08\xaa\x05\x14\x12 \x00\x00\x00 \x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00' 3812*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00!\x00' 3813*da0073e9SAndroid Build Coastguard Worker b'tensor.le/versionFB\x1d\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9e' 3814*da0073e9SAndroid Build Coastguard Worker b'gU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00' 3815*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xe4\x04T\xec\xa1\x00\x00\x00\xa1\x00\x00\x00\x12\x00\x00\x00\x00\x00' 3816*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.le/data.pklPK\x01\x02\x00' 3817*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xaa\x05\x14\x12 \x00\x00\x00 \x00\x00' 3818*da0073e9SAndroid Build Coastguard Worker b'\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x00\x00t' 3819*da0073e9SAndroid Build Coastguard Worker b'ensor.le/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9e' 3820*da0073e9SAndroid Build Coastguard Worker b'gU\x02\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3821*da0073e9SAndroid Build Coastguard Worker b'\x00\x00p\x01\x00\x00tensor.le/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00' 3822*da0073e9SAndroid Build Coastguard Worker b'\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03' 3823*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00' 3824*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\x8f\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00' 3825*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xbd\x00\x00\x00\xd2\x01\x00\x00' 3826*da0073e9SAndroid Build Coastguard Worker b'\x00\x00') 3827*da0073e9SAndroid Build Coastguard Worker 3828*da0073e9SAndroid Build Coastguard Worker data_le_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3829*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x12\x00\x10\x00tensor.le/data.pklFB\x0c\x00ZZZZZZZZZZZZ\x80' 3830*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3831*da0073e9SAndroid Build Coastguard Worker b'h\nComplexFloatStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04' 3832*da0073e9SAndroid Build Coastguard Worker b'tq\x05QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDic' 3833*da0073e9SAndroid Build Coastguard Worker b't\nq\x08)Rq\ttq\nRq\x0b.PK\x07\x08\xe4\x04T\xec\xa1\x00\x00\x00\xa1\x00\x00\x00P' 3834*da0073e9SAndroid Build Coastguard Worker b'K\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3835*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x13\x00\x1e\x00tensor.le/byteorderFB\x1a\x00ZZZZZZZZZZZZZZZZZZ' 3836*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZlittlePK\x07\x08\x85=\xe3\x19\x06\x00\x00\x00\x06\x00\x00\x00PK\x03\x04\x00' 3837*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3838*da0073e9SAndroid Build Coastguard Worker b'\x00\x10\x00<\x00tensor.le/data/0FB8\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3839*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZ\x9e<5\xbe\x96\xd1\xf1=Q\xeaj\xbfiX\x02\xbfW`\xfe?+\xfd\x0c>;' 3840*da0073e9SAndroid Build Coastguard Worker b'a\\\xbe.b\xe2>PK\x07\x08\xaa\x05\x14\x12 \x00\x00\x00 \x00\x00\x00PK\x03\x04\x00' 3841*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3842*da0073e9SAndroid Build Coastguard Worker b'\x00\x11\x00!\x00tensor.le/versionFB\x1d\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07' 3843*da0073e9SAndroid Build Coastguard Worker b'\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08' 3844*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\xe4\x04T\xec\xa1\x00\x00\x00\xa1\x00\x00\x00\x12\x00\x00' 3845*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.le/data.pk' 3846*da0073e9SAndroid Build Coastguard Worker b'lPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x85=\xe3\x19\x06\x00' 3847*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x06\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3848*da0073e9SAndroid Build Coastguard Worker b'\xf1\x00\x00\x00tensor.le/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00' 3849*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xaa\x05\x14\x12 \x00\x00\x00 \x00\x00\x00\x10\x00\x00\x00\x00\x00\x00' 3850*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00V\x01\x00\x00tensor.le/data/0PK\x01\x02\x00\x00\x00' 3851*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00' 3852*da0073e9SAndroid Build Coastguard Worker b'\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\x00\x00tensor.l' 3853*da0073e9SAndroid Build Coastguard Worker b'e/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00' 3854*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\xfe' 3855*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00' 3856*da0073e9SAndroid Build Coastguard Worker b'\x00P\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00' 3857*da0073e9SAndroid Build Coastguard Worker b'\x04\x00\xfe\x00\x00\x00R\x02\x00\x00\x00\x00') 3858*da0073e9SAndroid Build Coastguard Worker 3859*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3860*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x12\x00\x10\x00tensor.be/data.pklFB\x0c\x00ZZZZZZZZZZZZ\x80' 3861*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3862*da0073e9SAndroid Build Coastguard Worker b'h\nComplexFloatStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04' 3863*da0073e9SAndroid Build Coastguard Worker b'tq\x05QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDic' 3864*da0073e9SAndroid Build Coastguard Worker b't\nq\x08)Rq\ttq\nRq\x0b.PK\x07\x08\xe4\x04T\xec\xa1\x00\x00\x00\xa1\x00\x00\x00P' 3865*da0073e9SAndroid Build Coastguard Worker b'K\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3866*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x10\x00!\x00tensor.be/data/0FB\x1d\x00ZZZZZZZZZZZZZZZZZZZZZZZZ' 3867*da0073e9SAndroid Build Coastguard Worker b'ZZZZZ\xbe5<\x9e=\xf1\xd1\x96\xbfj\xeaQ\xbf\x02Xi?\xfe`W>\x0c\xfd+\xbe\\a;>\xe2b.' 3868*da0073e9SAndroid Build Coastguard Worker b'PK\x07\x08\xe0\x07\xaa8 \x00\x00\x00 \x00\x00\x00PK\x03\x04\x00\x00\x08\x08\x00\x00' 3869*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00!\x00' 3870*da0073e9SAndroid Build Coastguard Worker b'tensor.be/versionFB\x1d\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08\xd1\x9egU\x02' 3871*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 3872*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xe4\x04T\xec\xa1\x00\x00\x00\xa1\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00' 3873*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.be/data.pklPK\x01\x02\x00\x00' 3874*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xe0\x07\xaa8 \x00\x00\x00 \x00\x00\x00' 3875*da0073e9SAndroid Build Coastguard Worker b'\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x00\x00tensor.' 3876*da0073e9SAndroid Build Coastguard Worker b'be/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02' 3877*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3878*da0073e9SAndroid Build Coastguard Worker b'\x00p\x01\x00\x00tensor.be/versionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03' 3879*da0073e9SAndroid Build Coastguard Worker b'-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00' 3880*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00' 3881*da0073e9SAndroid Build Coastguard Worker b'\x00PK\x06\x07\x00\x00\x00\x00\x8f\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00' 3882*da0073e9SAndroid Build Coastguard Worker b'PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xbd\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 3883*da0073e9SAndroid Build Coastguard Worker 3884*da0073e9SAndroid Build Coastguard Worker data_be_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3885*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x12\x00\x10\x00tensor.be/data.pklFB\x0c\x00ZZZZZZZZZZZZ\x80' 3886*da0073e9SAndroid Build Coastguard Worker b'\x02ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorc' 3887*da0073e9SAndroid Build Coastguard Worker b'h\nComplexFloatStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04' 3888*da0073e9SAndroid Build Coastguard Worker b'tq\x05QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDic' 3889*da0073e9SAndroid Build Coastguard Worker b't\nq\x08)Rq\ttq\nRq\x0b.PK\x07\x08\xe4\x04T\xec\xa1\x00\x00\x00\xa1\x00\x00\x00P' 3890*da0073e9SAndroid Build Coastguard Worker b'K\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3891*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x13\x00\x1e\x00tensor.be/byteorderFB\x1a\x00ZZZZZZZZZZZZZZZZZZ' 3892*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZbigPK\x07\x08I\xe2\xfb\xd3\x03\x00\x00\x00\x03\x00\x00\x00PK\x03\x04\x00' 3893*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3894*da0073e9SAndroid Build Coastguard Worker b'\x00\x10\x00?\x00tensor.be/data/0FB;\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3895*da0073e9SAndroid Build Coastguard Worker b'ZZZZZZZZZZZZZZZZZZZ\xbe5<\x9e=\xf1\xd1\x96\xbfj\xeaQ\xbf\x02Xi?\xfe`W>\x0c\xfd+\xbe' 3896*da0073e9SAndroid Build Coastguard Worker b'\\a;>\xe2b.PK\x07\x08\xe0\x07\xaa8 \x00\x00\x00 \x00\x00\x00PK\x03\x04\x00\x00' 3897*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3898*da0073e9SAndroid Build Coastguard Worker b'\x11\x00!\x00tensor.be/versionFB\x1d\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07\x08' 3899*da0073e9SAndroid Build Coastguard Worker b'\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08\x00' 3900*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\xe4\x04T\xec\xa1\x00\x00\x00\xa1\x00\x00\x00\x12\x00\x00' 3901*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.be/data.pklPK' 3902*da0073e9SAndroid Build Coastguard Worker b'\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00I\xe2\xfb\xd3\x03\x00\x00' 3903*da0073e9SAndroid Build Coastguard Worker b'\x00\x03\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1' 3904*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00tensor.be/byteorderPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00' 3905*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\xe0\x07\xaa8 \x00\x00\x00 \x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00' 3906*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00S\x01\x00\x00tensor.be/data/0PK\x01\x02\x00\x00\x00\x00' 3907*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x11\x00' 3908*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\x00\x00tensor.be/vers' 3909*da0073e9SAndroid Build Coastguard Worker b'ionPK\x06\x06,\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00' 3910*da0073e9SAndroid Build Coastguard Worker b'\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\xfe\x00\x00' 3911*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00R\x02\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00P\x03' 3912*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x04\x00\x04' 3913*da0073e9SAndroid Build Coastguard Worker b'\x00\xfe\x00\x00\x00R\x02\x00\x00\x00\x00') 3914*da0073e9SAndroid Build Coastguard Worker 3915*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 3916*da0073e9SAndroid Build Coastguard Worker 3917*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom = io.BytesIO(data_le_no_bom) 3918*da0073e9SAndroid Build Coastguard Worker buf_le_bom = io.BytesIO(data_le_bom) 3919*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 3920*da0073e9SAndroid Build Coastguard Worker buf_be_bom = io.BytesIO(data_be_bom) 3921*da0073e9SAndroid Build Coastguard Worker 3922*da0073e9SAndroid Build Coastguard Worker try: 3923*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.NATIVE) 3924*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom = torch.load(buf_le_no_bom) 3925*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 3926*da0073e9SAndroid Build Coastguard Worker finally: 3927*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3928*da0073e9SAndroid Build Coastguard Worker 3929*da0073e9SAndroid Build Coastguard Worker tensor_le_bom = torch.load(buf_le_bom) 3930*da0073e9SAndroid Build Coastguard Worker tensor_be_bom = torch.load(buf_be_bom) 3931*da0073e9SAndroid Build Coastguard Worker 3932*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 3933*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 3934*da0073e9SAndroid Build Coastguard Worker 3935*da0073e9SAndroid Build Coastguard Worker try: 3936*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.LITTLE) 3937*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_little = torch.load(buf_le_no_bom) 3938*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_little = torch.load(buf_be_no_bom) 3939*da0073e9SAndroid Build Coastguard Worker finally: 3940*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3941*da0073e9SAndroid Build Coastguard Worker 3942*da0073e9SAndroid Build Coastguard Worker buf_le_no_bom.seek(0) 3943*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom.seek(0) 3944*da0073e9SAndroid Build Coastguard Worker 3945*da0073e9SAndroid Build Coastguard Worker try: 3946*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(LoadEndianness.BIG) 3947*da0073e9SAndroid Build Coastguard Worker tensor_le_no_bom_big = torch.load(buf_le_no_bom) 3948*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom_big = torch.load(buf_be_no_bom) 3949*da0073e9SAndroid Build Coastguard Worker finally: 3950*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 3951*da0073e9SAndroid Build Coastguard Worker 3952*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_bom, tensor_be_bom)) 3953*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_no_bom)) 3954*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom_little, tensor_le_bom)) 3955*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom_little, tensor_be_bom)) 3956*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom_big, tensor_le_bom)) 3957*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom_big, tensor_be_bom)) 3958*da0073e9SAndroid Build Coastguard Worker 3959*da0073e9SAndroid Build Coastguard Worker if (sys.byteorder == 'little'): 3960*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_le_bom)) 3961*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_le_no_bom, tensor_be_bom)) 3962*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_le_bom)) 3963*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_be_no_bom, tensor_be_bom)) 3964*da0073e9SAndroid Build Coastguard Worker else: 3965*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_le_bom)) 3966*da0073e9SAndroid Build Coastguard Worker self.assertFalse(torch.equal(tensor_le_no_bom, tensor_be_bom)) 3967*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_le_bom)) 3968*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.equal(tensor_be_no_bom, tensor_be_bom)) 3969*da0073e9SAndroid Build Coastguard Worker 3970*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf(platform.machine() != 's390x', "s390x-specific test") 3971*da0073e9SAndroid Build Coastguard Worker def test_serialization_warning_s390x(self): 3972*da0073e9SAndroid Build Coastguard Worker data_be_no_bom = (b'PK\x03\x04\x00\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3973*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x19\x00\t\x00tensor.double.BE/data.pklFB\x05\x00ZZZZZ\x80\x02' 3974*da0073e9SAndroid Build Coastguard Worker b'ctorch._utils\n_rebuild_tensor_v2\nq\x00((X\x07\x00\x00\x00storageq\x01ctorch\n' 3975*da0073e9SAndroid Build Coastguard Worker b'DoubleStorage\nq\x02X\x01\x00\x00\x000q\x03X\x03\x00\x00\x00cpuq\x04K\x04tq\x05' 3976*da0073e9SAndroid Build Coastguard Worker b'QK\x00K\x02K\x02\x86q\x06K\x02K\x01\x86q\x07\x89ccollections\nOrderedDict\nq\x08' 3977*da0073e9SAndroid Build Coastguard Worker b')Rq\ttq\nRq\x0b.PK\x07\x08S\xd3\xba&\x9b\x00\x00\x00\x9b\x00\x00\x00PK\x03\x04\x00' 3978*da0073e9SAndroid Build Coastguard Worker b'\x00\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3979*da0073e9SAndroid Build Coastguard Worker b'\x00\x17\x00 \x00tensor.double.BE/data/0FB\x1c\x00ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ' 3980*da0073e9SAndroid Build Coastguard Worker b'?\xc9^|\xff\xa4v\x97\xbf\xe9\xb0\x8dP\x8c\xbc\xce\xbf\xd3\xdb\xb7[\xef\x0e\xdc?\xde' 3981*da0073e9SAndroid Build Coastguard Worker b'\x00\xf9Q\x08\xb14PK\x07\x083@\x82/ \x00\x00\x00 \x00\x00\x00PK\x03\x04\x00\x00' 3982*da0073e9SAndroid Build Coastguard Worker b'\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3983*da0073e9SAndroid Build Coastguard Worker b'\x18\x00\x1a\x00tensor.double.BE/versionFB\x16\x00ZZZZZZZZZZZZZZZZZZZZZZ3\nPK\x07' 3984*da0073e9SAndroid Build Coastguard Worker b'\x08\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00PK\x01\x02\x00\x00\x00\x00\x08\x08' 3985*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00S\xd3\xba&\x9b\x00\x00\x00\x9b\x00\x00\x00\x19\x00\x00' 3986*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tensor.double.BE/da' 3987*da0073e9SAndroid Build Coastguard Worker b'ta.pklPK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00\x00\x00\x00\x003@\x82/ ' 3988*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00 \x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 3989*da0073e9SAndroid Build Coastguard Worker b'\xeb\x00\x00\x00tensor.double.BE/data/0PK\x01\x02\x00\x00\x00\x00\x08\x08\x00\x00' 3990*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\xd1\x9egU\x02\x00\x00\x00\x02\x00\x00\x00\x18\x00\x00\x00\x00' 3991*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x01\x00\x00tensor.double.BE/versionPK\x06\x06' 3992*da0073e9SAndroid Build Coastguard Worker b',\x00\x00\x00\x00\x00\x00\x00\x1e\x03-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03' 3993*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x00' 3994*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\xd2\x01\x00\x00\x00\x00\x00\x00PK\x06\x07\x00\x00\x00\x00\xa4\x02\x00' 3995*da0073e9SAndroid Build Coastguard Worker b'\x00\x00\x00\x00\x00\x01\x00\x00\x00PK\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00' 3996*da0073e9SAndroid Build Coastguard Worker b'\xd2\x00\x00\x00\xd2\x01\x00\x00\x00\x00') 3997*da0073e9SAndroid Build Coastguard Worker 3998*da0073e9SAndroid Build Coastguard Worker current_load_endian = get_default_load_endianness() 3999*da0073e9SAndroid Build Coastguard Worker 4000*da0073e9SAndroid Build Coastguard Worker buf_be_no_bom = io.BytesIO(data_be_no_bom) 4001*da0073e9SAndroid Build Coastguard Worker 4002*da0073e9SAndroid Build Coastguard Worker try: 4003*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(None) 4004*da0073e9SAndroid Build Coastguard Worker with self.assertWarnsRegex(UserWarning, "The default load endianness for checkpoints " 4005*da0073e9SAndroid Build Coastguard Worker "without a byteorder mark on big endian machines " 4006*da0073e9SAndroid Build Coastguard Worker "was changed from 'native' to 'little' endian"): 4007*da0073e9SAndroid Build Coastguard Worker tensor_be_no_bom = torch.load(buf_be_no_bom) 4008*da0073e9SAndroid Build Coastguard Worker finally: 4009*da0073e9SAndroid Build Coastguard Worker set_default_load_endianness(current_load_endian) 4010*da0073e9SAndroid Build Coastguard Worker 4011*da0073e9SAndroid Build Coastguard Worker @parametrize('path_type', (str, pathlib.Path)) 4012*da0073e9SAndroid Build Coastguard Worker @parametrize('weights_only', (True, False)) 4013*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf(IS_WINDOWS, "NamedTemporaryFile on windows") 4014*da0073e9SAndroid Build Coastguard Worker def test_serialization_mmap_loading(self, weights_only, path_type): 4015*da0073e9SAndroid Build Coastguard Worker class DummyModel(torch.nn.Module): 4016*da0073e9SAndroid Build Coastguard Worker def __init__(self): 4017*da0073e9SAndroid Build Coastguard Worker super().__init__() 4018*da0073e9SAndroid Build Coastguard Worker self.fc1 = torch.nn.Linear(3, 1024) 4019*da0073e9SAndroid Build Coastguard Worker self.fc2 = torch.nn.Linear(1024, 5) 4020*da0073e9SAndroid Build Coastguard Worker 4021*da0073e9SAndroid Build Coastguard Worker def forward(self, input): 4022*da0073e9SAndroid Build Coastguard Worker return self.fc2(self.fc1(input)) 4023*da0073e9SAndroid Build Coastguard Worker 4024*da0073e9SAndroid Build Coastguard Worker with TemporaryFileName() as f: 4025*da0073e9SAndroid Build Coastguard Worker f = path_type(f) 4026*da0073e9SAndroid Build Coastguard Worker state_dict = DummyModel().state_dict() 4027*da0073e9SAndroid Build Coastguard Worker torch.save(state_dict, f) 4028*da0073e9SAndroid Build Coastguard Worker result = torch.load(f, mmap=True, weights_only=weights_only) 4029*da0073e9SAndroid Build Coastguard Worker result_non_mmap = torch.load(f, mmap=False, weights_only=weights_only) 4030*da0073e9SAndroid Build Coastguard Worker 4031*da0073e9SAndroid Build Coastguard Worker model_mmap_state_dict = DummyModel() 4032*da0073e9SAndroid Build Coastguard Worker model_mmap_state_dict.load_state_dict(result) 4033*da0073e9SAndroid Build Coastguard Worker model_non_mmap_state_dict = DummyModel() 4034*da0073e9SAndroid Build Coastguard Worker model_non_mmap_state_dict.load_state_dict(result_non_mmap) 4035*da0073e9SAndroid Build Coastguard Worker input = torch.randn(4, 3) 4036*da0073e9SAndroid Build Coastguard Worker self.assertEqual(model_mmap_state_dict(input), model_non_mmap_state_dict(input.clone())) 4037*da0073e9SAndroid Build Coastguard Worker 4038*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf(not torch.cuda.is_available() or IS_WINDOWS, 4039*da0073e9SAndroid Build Coastguard Worker "CUDA is unavailable or NamedTemporaryFile on Windows") 4040*da0073e9SAndroid Build Coastguard Worker def test_serialization_mmap_loading_with_map_location(self): 4041*da0073e9SAndroid Build Coastguard Worker class DummyModel(torch.nn.Module): 4042*da0073e9SAndroid Build Coastguard Worker def __init__(self): 4043*da0073e9SAndroid Build Coastguard Worker super().__init__() 4044*da0073e9SAndroid Build Coastguard Worker self.fc1 = torch.nn.Linear(3, 1024) 4045*da0073e9SAndroid Build Coastguard Worker self.fc2 = torch.nn.Linear(1024, 5) 4046*da0073e9SAndroid Build Coastguard Worker 4047*da0073e9SAndroid Build Coastguard Worker def forward(self, input): 4048*da0073e9SAndroid Build Coastguard Worker return self.fc2(self.fc1(input)) 4049*da0073e9SAndroid Build Coastguard Worker 4050*da0073e9SAndroid Build Coastguard Worker # make sure mmap where tensors' location tags are not CPU does not crash 4051*da0073e9SAndroid Build Coastguard Worker # zipfile will first be mmap-ed on CPU and storages are extracted using 4052*da0073e9SAndroid Build Coastguard Worker # overall_storage[start_offset:end_offset] before running 4053*da0073e9SAndroid Build Coastguard Worker # _{device}_deserialize, which moves the storage to device 4054*da0073e9SAndroid Build Coastguard Worker with TemporaryFileName() as f: 4055*da0073e9SAndroid Build Coastguard Worker with torch.device('cuda'): 4056*da0073e9SAndroid Build Coastguard Worker m = DummyModel() 4057*da0073e9SAndroid Build Coastguard Worker state_dict = m.state_dict() 4058*da0073e9SAndroid Build Coastguard Worker torch.save(state_dict, f) 4059*da0073e9SAndroid Build Coastguard Worker result = torch.load(f, mmap=True) 4060*da0073e9SAndroid Build Coastguard Worker for v in result.values(): 4061*da0073e9SAndroid Build Coastguard Worker self.assertTrue(v.is_cuda) 4062*da0073e9SAndroid Build Coastguard Worker 4063*da0073e9SAndroid Build Coastguard Worker def test_serialization_mmap_loading_options(self): 4064*da0073e9SAndroid Build Coastguard Worker if IS_WINDOWS: 4065*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(RuntimeError, "Changing the default mmap options is currently not supported"): 4066*da0073e9SAndroid Build Coastguard Worker torch.serialization.set_default_mmap_options(2) 4067*da0073e9SAndroid Build Coastguard Worker return 4068*da0073e9SAndroid Build Coastguard Worker m = torch.nn.Linear(3, 5) 4069*da0073e9SAndroid Build Coastguard Worker sd = m.state_dict() 4070*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 4071*da0073e9SAndroid Build Coastguard Worker torch.save(sd, f) 4072*da0073e9SAndroid Build Coastguard Worker # with MmapVisibility.MAP_PRIVATE, should not be able to modify file 4073*da0073e9SAndroid Build Coastguard Worker sd_loaded = torch.load(f.name, mmap=True) 4074*da0073e9SAndroid Build Coastguard Worker sd_loaded['weight'][0][0] = 0 4075*da0073e9SAndroid Build Coastguard Worker sd_loaded2 = torch.load(f.name, mmap=True) 4076*da0073e9SAndroid Build Coastguard Worker self.assertEqual(sd_loaded2['weight'], sd['weight']) 4077*da0073e9SAndroid Build Coastguard Worker # with MmapVisibility.MAP_SHARED, should be able to modify file 4078*da0073e9SAndroid Build Coastguard Worker torch.serialization.set_default_mmap_options(MAP_SHARED) 4079*da0073e9SAndroid Build Coastguard Worker try: 4080*da0073e9SAndroid Build Coastguard Worker sd_loaded = torch.load(f.name, mmap=True) 4081*da0073e9SAndroid Build Coastguard Worker sd_loaded['weight'][0][0] = 0 4082*da0073e9SAndroid Build Coastguard Worker sd_loaded2 = torch.load(f.name, mmap=True) 4083*da0073e9SAndroid Build Coastguard Worker self.assertNotEqual(sd_loaded2['weight'], sd['weight']) 4084*da0073e9SAndroid Build Coastguard Worker self.assertEqual(sd_loaded2['weight'][0][0].item(), 0) 4085*da0073e9SAndroid Build Coastguard Worker self.assertEqual(sd_loaded2['weight'], sd_loaded['weight']) 4086*da0073e9SAndroid Build Coastguard Worker finally: 4087*da0073e9SAndroid Build Coastguard Worker torch.serialization.set_default_mmap_options(MAP_PRIVATE) 4088*da0073e9SAndroid Build Coastguard Worker 4089*da0073e9SAndroid Build Coastguard Worker @parametrize('dtype', (torch.float8_e5m2, torch.float8_e4m3fn, torch.complex32)) 4090*da0073e9SAndroid Build Coastguard Worker @parametrize('weights_only', (True, False)) 4091*da0073e9SAndroid Build Coastguard Worker def test_serialization_dtype(self, dtype, weights_only): 4092*da0073e9SAndroid Build Coastguard Worker """ Tests that newer dtypes can be serialized using `_rebuild_tensor_v3` """ 4093*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 4094*da0073e9SAndroid Build Coastguard Worker x = torch.arange(0.0, 100.0).to(dtype=dtype) 4095*da0073e9SAndroid Build Coastguard Worker torch.save({'x': x, 'even': x[0::2], 'odd': x[1::2]}, f) 4096*da0073e9SAndroid Build Coastguard Worker f.seek(0) 4097*da0073e9SAndroid Build Coastguard Worker y = torch.load(f, weights_only=weights_only) 4098*da0073e9SAndroid Build Coastguard Worker self.assertEqual(y['x'], x) 4099*da0073e9SAndroid Build Coastguard Worker # Check that views are actually views 4100*da0073e9SAndroid Build Coastguard Worker y['odd'][0] = torch.tensor(0.25, dtype=dtype) 4101*da0073e9SAndroid Build Coastguard Worker y['even'][0] = torch.tensor(-0.25, dtype=dtype) 4102*da0073e9SAndroid Build Coastguard Worker self.assertEqual(y['x'][:2].to(dtype=torch.float32), torch.tensor([-0.25, 0.25])) 4103*da0073e9SAndroid Build Coastguard Worker 4104*da0073e9SAndroid Build Coastguard Worker @parametrize('filename', (True, False)) 4105*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf(IS_WINDOWS, "NamedTemporaryFile on windows") 4106*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf(IS_FBCODE, "miniz version differs between fbcode and oss") 4107*da0073e9SAndroid Build Coastguard Worker def test_filewriter_metadata_writing(self, filename): 4108*da0073e9SAndroid Build Coastguard Worker sd = torch.nn.Linear(3, 5).state_dict() 4109*da0073e9SAndroid Build Coastguard Worker weight_nbytes = sd['weight'].untyped_storage().nbytes() 4110*da0073e9SAndroid Build Coastguard Worker bias_nbytes = sd['bias'].untyped_storage().nbytes() 4111*da0073e9SAndroid Build Coastguard Worker # TemporaryFileName will give a string 4112*da0073e9SAndroid Build Coastguard Worker # NamedTemporaryFile will be treated as a buffer 4113*da0073e9SAndroid Build Coastguard Worker file_creation_func = TemporaryFileName if filename else tempfile.NamedTemporaryFile 4114*da0073e9SAndroid Build Coastguard Worker 4115*da0073e9SAndroid Build Coastguard Worker with file_creation_func() as f, file_creation_func() as g: 4116*da0073e9SAndroid Build Coastguard Worker # save state_dict in f 4117*da0073e9SAndroid Build Coastguard Worker torch.save(sd, f) 4118*da0073e9SAndroid Build Coastguard Worker if not filename: 4119*da0073e9SAndroid Build Coastguard Worker f.seek(0) 4120*da0073e9SAndroid Build Coastguard Worker # extract 'data.pkl' for use in our fake checkpoint 4121*da0073e9SAndroid Build Coastguard Worker with torch.serialization._open_file_like(f, 'rb') as opened_file: 4122*da0073e9SAndroid Build Coastguard Worker with torch.serialization._open_zipfile_reader(opened_file) as zip_file: 4123*da0073e9SAndroid Build Coastguard Worker data_file = io.BytesIO(zip_file.get_record('data.pkl')) 4124*da0073e9SAndroid Build Coastguard Worker data_0_offset = zip_file.get_record_offset('data/0') 4125*da0073e9SAndroid Build Coastguard Worker data_1_offset = zip_file.get_record_offset('data/1') 4126*da0073e9SAndroid Build Coastguard Worker 4127*da0073e9SAndroid Build Coastguard Worker # write nulls for 'data/0' and 'data/1' 4128*da0073e9SAndroid Build Coastguard Worker with open(f if filename else f.name, 'rb+') as opened_f: 4129*da0073e9SAndroid Build Coastguard Worker opened_f.seek(data_0_offset) 4130*da0073e9SAndroid Build Coastguard Worker opened_f.write(b'0' * weight_nbytes) 4131*da0073e9SAndroid Build Coastguard Worker opened_f.seek(data_1_offset) 4132*da0073e9SAndroid Build Coastguard Worker opened_f.write(b'0' * bias_nbytes) 4133*da0073e9SAndroid Build Coastguard Worker 4134*da0073e9SAndroid Build Coastguard Worker with torch.serialization._open_zipfile_writer(g) as zip_file: 4135*da0073e9SAndroid Build Coastguard Worker data_value = data_file.getvalue() 4136*da0073e9SAndroid Build Coastguard Worker zip_file.write_record('data.pkl', data_value, len(data_value)) 4137*da0073e9SAndroid Build Coastguard Worker zip_file.write_record('byteorder', sys.byteorder, len(sys.byteorder)) 4138*da0073e9SAndroid Build Coastguard Worker # Only write metadata for storages 4139*da0073e9SAndroid Build Coastguard Worker zip_file.write_record_metadata('data/0', weight_nbytes) 4140*da0073e9SAndroid Build Coastguard Worker zip_file.write_record_metadata('data/1', bias_nbytes) 4141*da0073e9SAndroid Build Coastguard Worker 4142*da0073e9SAndroid Build Coastguard Worker if not filename: 4143*da0073e9SAndroid Build Coastguard Worker f.seek(0) 4144*da0073e9SAndroid Build Coastguard Worker g.seek(0) 4145*da0073e9SAndroid Build Coastguard Worker sd_loaded = torch.load(g) 4146*da0073e9SAndroid Build Coastguard Worker sd_loaded_ref = torch.load(f) 4147*da0073e9SAndroid Build Coastguard Worker self.assertEqual(sd_loaded, sd_loaded_ref) 4148*da0073e9SAndroid Build Coastguard Worker 4149*da0073e9SAndroid Build Coastguard Worker def run(self, *args, **kwargs): 4150*da0073e9SAndroid Build Coastguard Worker with serialization_method(use_zip=True): 4151*da0073e9SAndroid Build Coastguard Worker return super().run(*args, **kwargs) 4152*da0073e9SAndroid Build Coastguard Worker 4153*da0073e9SAndroid Build Coastguard Workerclass TestWrapperSubclass(torch.Tensor): 4154*da0073e9SAndroid Build Coastguard Worker elem: torch.Tensor 4155*da0073e9SAndroid Build Coastguard Worker __slots__ = ['elem', 'other'] 4156*da0073e9SAndroid Build Coastguard Worker 4157*da0073e9SAndroid Build Coastguard Worker @staticmethod 4158*da0073e9SAndroid Build Coastguard Worker def __new__(cls, elem, *args, **kwargs): 4159*da0073e9SAndroid Build Coastguard Worker # The wrapping tensor (TestSubclass) is just a meta tensor, so it 4160*da0073e9SAndroid Build Coastguard Worker # doesn't hold any memory (meta tensor is generally the preferred type 4161*da0073e9SAndroid Build Coastguard Worker # of tensor you want to make a subclass from)... 4162*da0073e9SAndroid Build Coastguard Worker r = torch.Tensor._make_subclass(cls, elem.to('meta'), elem.requires_grad) 4163*da0073e9SAndroid Build Coastguard Worker # ...the real tensor is held as an element on the tensor. 4164*da0073e9SAndroid Build Coastguard Worker r.elem = elem 4165*da0073e9SAndroid Build Coastguard Worker return r 4166*da0073e9SAndroid Build Coastguard Worker 4167*da0073e9SAndroid Build Coastguard Worker def clone(self): 4168*da0073e9SAndroid Build Coastguard Worker return type(self)(self.elem.clone()) 4169*da0073e9SAndroid Build Coastguard Worker 4170*da0073e9SAndroid Build Coastguard Worker 4171*da0073e9SAndroid Build Coastguard Workerclass TestGetStateSubclass(torch.Tensor): 4172*da0073e9SAndroid Build Coastguard Worker elem: torch.Tensor 4173*da0073e9SAndroid Build Coastguard Worker __slots__ = ['elem'] 4174*da0073e9SAndroid Build Coastguard Worker 4175*da0073e9SAndroid Build Coastguard Worker @staticmethod 4176*da0073e9SAndroid Build Coastguard Worker def __new__(cls, elem, *args, **kwargs): 4177*da0073e9SAndroid Build Coastguard Worker # The wrapping tensor (TestSubclass) is just a meta tensor, so it 4178*da0073e9SAndroid Build Coastguard Worker # doesn't hold any memory (meta tensor is generally the preferred type 4179*da0073e9SAndroid Build Coastguard Worker # of tensor you want to make a subclass from)... 4180*da0073e9SAndroid Build Coastguard Worker r = torch.Tensor._make_subclass(cls, elem.to('meta'), elem.requires_grad) 4181*da0073e9SAndroid Build Coastguard Worker # ...the real tensor is held as an element on the tensor. 4182*da0073e9SAndroid Build Coastguard Worker r.elem = elem 4183*da0073e9SAndroid Build Coastguard Worker return r 4184*da0073e9SAndroid Build Coastguard Worker 4185*da0073e9SAndroid Build Coastguard Worker def __getstate__(self): 4186*da0073e9SAndroid Build Coastguard Worker return ("foo", getattr(self, "elem", None), self.__dict__) 4187*da0073e9SAndroid Build Coastguard Worker 4188*da0073e9SAndroid Build Coastguard Worker def __setstate__(self, state): 4189*da0073e9SAndroid Build Coastguard Worker marker, self.elem, self.__dict__ = state 4190*da0073e9SAndroid Build Coastguard Worker if not marker == "foo": 4191*da0073e9SAndroid Build Coastguard Worker raise RuntimeError("Invalid state for TestGetStateSubclass") 4192*da0073e9SAndroid Build Coastguard Worker self.reloaded = True 4193*da0073e9SAndroid Build Coastguard Worker 4194*da0073e9SAndroid Build Coastguard Worker 4195*da0073e9SAndroid Build Coastguard Workerclass TestEmptySubclass(torch.Tensor): 4196*da0073e9SAndroid Build Coastguard Worker ... 4197*da0073e9SAndroid Build Coastguard Worker 4198*da0073e9SAndroid Build Coastguard Worker 4199*da0073e9SAndroid Build Coastguard Workerclass TestSubclassSerialization(TestCase): 4200*da0073e9SAndroid Build Coastguard Worker def test_tensor_subclass_wrapper_serialization(self): 4201*da0073e9SAndroid Build Coastguard Worker wrapped_tensor = torch.rand(2) 4202*da0073e9SAndroid Build Coastguard Worker my_tensor = TestWrapperSubclass(wrapped_tensor) 4203*da0073e9SAndroid Build Coastguard Worker 4204*da0073e9SAndroid Build Coastguard Worker foo_val = "bar" 4205*da0073e9SAndroid Build Coastguard Worker my_tensor.foo = foo_val 4206*da0073e9SAndroid Build Coastguard Worker self.assertEqual(my_tensor.foo, foo_val) 4207*da0073e9SAndroid Build Coastguard Worker 4208*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 4209*da0073e9SAndroid Build Coastguard Worker torch.save(my_tensor, f) 4210*da0073e9SAndroid Build Coastguard Worker f.seek(0) 4211*da0073e9SAndroid Build Coastguard Worker new_tensor = torch.load(f) 4212*da0073e9SAndroid Build Coastguard Worker 4213*da0073e9SAndroid Build Coastguard Worker self.assertIsInstance(new_tensor, TestWrapperSubclass) 4214*da0073e9SAndroid Build Coastguard Worker self.assertEqual(new_tensor.elem, my_tensor.elem) 4215*da0073e9SAndroid Build Coastguard Worker self.assertEqual(new_tensor.foo, foo_val) 4216*da0073e9SAndroid Build Coastguard Worker 4217*da0073e9SAndroid Build Coastguard Worker def test_tensor_subclass_getstate_overwrite(self): 4218*da0073e9SAndroid Build Coastguard Worker wrapped_tensor = torch.rand(2) 4219*da0073e9SAndroid Build Coastguard Worker my_tensor = TestGetStateSubclass(wrapped_tensor) 4220*da0073e9SAndroid Build Coastguard Worker 4221*da0073e9SAndroid Build Coastguard Worker foo_val = "bar" 4222*da0073e9SAndroid Build Coastguard Worker my_tensor.foo = foo_val 4223*da0073e9SAndroid Build Coastguard Worker self.assertEqual(my_tensor.foo, foo_val) 4224*da0073e9SAndroid Build Coastguard Worker 4225*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 4226*da0073e9SAndroid Build Coastguard Worker torch.save(my_tensor, f) 4227*da0073e9SAndroid Build Coastguard Worker f.seek(0) 4228*da0073e9SAndroid Build Coastguard Worker new_tensor = torch.load(f) 4229*da0073e9SAndroid Build Coastguard Worker 4230*da0073e9SAndroid Build Coastguard Worker self.assertIsInstance(new_tensor, TestGetStateSubclass) 4231*da0073e9SAndroid Build Coastguard Worker self.assertEqual(new_tensor.elem, my_tensor.elem) 4232*da0073e9SAndroid Build Coastguard Worker self.assertEqual(new_tensor.foo, foo_val) 4233*da0073e9SAndroid Build Coastguard Worker self.assertTrue(new_tensor.reloaded) 4234*da0073e9SAndroid Build Coastguard Worker 4235*da0073e9SAndroid Build Coastguard Worker def test_tensor_subclass_deepcopy(self): 4236*da0073e9SAndroid Build Coastguard Worker wrapped_tensor = torch.rand(2) 4237*da0073e9SAndroid Build Coastguard Worker my_tensor = TestWrapperSubclass(wrapped_tensor) 4238*da0073e9SAndroid Build Coastguard Worker 4239*da0073e9SAndroid Build Coastguard Worker foo_val = "bar" 4240*da0073e9SAndroid Build Coastguard Worker my_tensor.foo = foo_val 4241*da0073e9SAndroid Build Coastguard Worker self.assertEqual(my_tensor.foo, foo_val) 4242*da0073e9SAndroid Build Coastguard Worker 4243*da0073e9SAndroid Build Coastguard Worker new_tensor = deepcopy(my_tensor) 4244*da0073e9SAndroid Build Coastguard Worker 4245*da0073e9SAndroid Build Coastguard Worker self.assertIsInstance(new_tensor, TestWrapperSubclass) 4246*da0073e9SAndroid Build Coastguard Worker self.assertEqual(new_tensor.elem, my_tensor.elem) 4247*da0073e9SAndroid Build Coastguard Worker self.assertEqual(new_tensor.foo, foo_val) 4248*da0073e9SAndroid Build Coastguard Worker 4249*da0073e9SAndroid Build Coastguard Worker @parametrize('requires_grad', (True, False)) 4250*da0073e9SAndroid Build Coastguard Worker def test_cloned_deepcopy(self, requires_grad): 4251*da0073e9SAndroid Build Coastguard Worker my_tensor = torch.rand(2, requires_grad=requires_grad, device='meta') 4252*da0073e9SAndroid Build Coastguard Worker 4253*da0073e9SAndroid Build Coastguard Worker new_tensor = deepcopy(my_tensor) 4254*da0073e9SAndroid Build Coastguard Worker 4255*da0073e9SAndroid Build Coastguard Worker self.assertEqual(new_tensor.requires_grad, my_tensor.requires_grad) 4256*da0073e9SAndroid Build Coastguard Worker 4257*da0073e9SAndroid Build Coastguard Worker def test_empty_class_serialization(self): 4258*da0073e9SAndroid Build Coastguard Worker tensor = TestEmptySubclass([1.]) 4259*da0073e9SAndroid Build Coastguard Worker # Ensures it runs fine 4260*da0073e9SAndroid Build Coastguard Worker tensor2 = copy.copy(tensor) 4261*da0073e9SAndroid Build Coastguard Worker 4262*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 4263*da0073e9SAndroid Build Coastguard Worker torch.save(tensor, f) 4264*da0073e9SAndroid Build Coastguard Worker f.seek(0) 4265*da0073e9SAndroid Build Coastguard Worker tensor2 = torch.load(f) 4266*da0073e9SAndroid Build Coastguard Worker 4267*da0073e9SAndroid Build Coastguard Worker tensor = TestEmptySubclass() 4268*da0073e9SAndroid Build Coastguard Worker # Ensures it runs fine 4269*da0073e9SAndroid Build Coastguard Worker # Note that tensor.data_ptr() == 0 here 4270*da0073e9SAndroid Build Coastguard Worker tensor2 = copy.copy(tensor) 4271*da0073e9SAndroid Build Coastguard Worker 4272*da0073e9SAndroid Build Coastguard Worker with BytesIOContext() as f: 4273*da0073e9SAndroid Build Coastguard Worker torch.save(tensor, f) 4274*da0073e9SAndroid Build Coastguard Worker f.seek(0) 4275*da0073e9SAndroid Build Coastguard Worker tensor2 = torch.load(f) 4276*da0073e9SAndroid Build Coastguard Worker 4277*da0073e9SAndroid Build Coastguard Worker @skipIfTorchDynamo("name 'SYNTHETIC_LOCAL' is not defined") 4278*da0073e9SAndroid Build Coastguard Worker def test_safe_globals_for_weights_only(self): 4279*da0073e9SAndroid Build Coastguard Worker ''' 4280*da0073e9SAndroid Build Coastguard Worker Tests import semantic for tensor subclass and the {add/get/clear}_safe_globals APIs 4281*da0073e9SAndroid Build Coastguard Worker ''' 4282*da0073e9SAndroid Build Coastguard Worker t = TwoTensor(torch.randn(2, 3), torch.randn(2, 3)) 4283*da0073e9SAndroid Build Coastguard Worker p = torch.nn.Parameter(t) 4284*da0073e9SAndroid Build Coastguard Worker sd = OrderedDict([('t', t), ('p', p)]) 4285*da0073e9SAndroid Build Coastguard Worker 4286*da0073e9SAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile() as f: 4287*da0073e9SAndroid Build Coastguard Worker torch.save(sd, f) 4288*da0073e9SAndroid Build Coastguard Worker 4289*da0073e9SAndroid Build Coastguard Worker # Loading tensor subclass with weights_only=True should fail 4290*da0073e9SAndroid Build Coastguard Worker # since tensor subclass is not in safe_globals 4291*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(pickle.UnpicklingError, 4292*da0073e9SAndroid Build Coastguard Worker "Unsupported global: GLOBAL torch.testing._internal.two_tensor.TwoTensor"): 4293*da0073e9SAndroid Build Coastguard Worker f.seek(0) 4294*da0073e9SAndroid Build Coastguard Worker sd = torch.load(f, weights_only=True) 4295*da0073e9SAndroid Build Coastguard Worker 4296*da0073e9SAndroid Build Coastguard Worker # Loading tensor subclass should work if the class is marked safe 4297*da0073e9SAndroid Build Coastguard Worker f.seek(0) 4298*da0073e9SAndroid Build Coastguard Worker try: 4299*da0073e9SAndroid Build Coastguard Worker torch.serialization.add_safe_globals([TwoTensor]) 4300*da0073e9SAndroid Build Coastguard Worker self.assertTrue(torch.serialization.get_safe_globals() == [TwoTensor]) 4301*da0073e9SAndroid Build Coastguard Worker sd = torch.load(f, weights_only=True) 4302*da0073e9SAndroid Build Coastguard Worker self.assertEqual(sd['t'], t) 4303*da0073e9SAndroid Build Coastguard Worker self.assertEqual(sd['p'], p) 4304*da0073e9SAndroid Build Coastguard Worker 4305*da0073e9SAndroid Build Coastguard Worker # Should fail again when safe globals are cleared 4306*da0073e9SAndroid Build Coastguard Worker torch.serialization.clear_safe_globals() 4307*da0073e9SAndroid Build Coastguard Worker f.seek(0) 4308*da0073e9SAndroid Build Coastguard Worker with self.assertRaisesRegex(pickle.UnpicklingError, 4309*da0073e9SAndroid Build Coastguard Worker "Unsupported global: GLOBAL torch.testing._internal.two_tensor.TwoTensor"): 4310*da0073e9SAndroid Build Coastguard Worker torch.load(f, weights_only=True) 4311*da0073e9SAndroid Build Coastguard Worker finally: 4312*da0073e9SAndroid Build Coastguard Worker torch.serialization.clear_safe_globals() 4313*da0073e9SAndroid Build Coastguard Worker 4314*da0073e9SAndroid Build Coastguard Worker @unittest.skipIf(not torch.cuda.is_available(), "map_location loads to cuda") 4315*da0073e9SAndroid Build Coastguard Worker def test_tensor_subclass_map_location(self): 4316*da0073e9SAndroid Build Coastguard Worker t = TwoTensor(torch.randn(2, 3), torch.randn(2, 3)) 4317*da0073e9SAndroid Build Coastguard Worker sd = {'t': t} 4318*da0073e9SAndroid Build Coastguard Worker 4319*da0073e9SAndroid Build Coastguard Worker with TemporaryFileName() as f: 4320*da0073e9SAndroid Build Coastguard Worker torch.save(sd, f) 4321*da0073e9SAndroid Build Coastguard Worker sd_loaded = torch.load(f, map_location=torch.device('cuda:0')) 4322*da0073e9SAndroid Build Coastguard Worker self.assertTrue(sd_loaded['t'].device == torch.device('cuda:0')) 4323*da0073e9SAndroid Build Coastguard Worker self.assertTrue(sd_loaded['t'].a.device == torch.device('cuda:0')) 4324*da0073e9SAndroid Build Coastguard Worker self.assertTrue(sd_loaded['t'].b.device == torch.device('cuda:0')) 4325*da0073e9SAndroid Build Coastguard Worker # make sure map_location is not propagated over multiple torch.load calls 4326*da0073e9SAndroid Build Coastguard Worker sd_loaded = torch.load(f) 4327*da0073e9SAndroid Build Coastguard Worker self.assertTrue(sd_loaded['t'].device == torch.device('cpu')) 4328*da0073e9SAndroid Build Coastguard Worker self.assertTrue(sd_loaded['t'].a.device == torch.device('cpu')) 4329*da0073e9SAndroid Build Coastguard Worker self.assertTrue(sd_loaded['t'].b.device == torch.device('cpu')) 4330*da0073e9SAndroid Build Coastguard Worker 4331*da0073e9SAndroid Build Coastguard Worker 4332*da0073e9SAndroid Build Coastguard Workerinstantiate_device_type_tests(TestBothSerialization, globals()) 4333*da0073e9SAndroid Build Coastguard Workerinstantiate_parametrized_tests(TestSubclassSerialization) 4334*da0073e9SAndroid Build Coastguard Workerinstantiate_parametrized_tests(TestOldSerialization) 4335*da0073e9SAndroid Build Coastguard Workerinstantiate_parametrized_tests(TestSerialization) 4336*da0073e9SAndroid Build Coastguard Worker 4337*da0073e9SAndroid Build Coastguard Workerif __name__ == '__main__': 4338*da0073e9SAndroid Build Coastguard Worker run_tests() 4339