def setUp(self): self.dependencies = [ ModuleVersionContextDependency('themodule', '==1.1.0'), ModuleVersionContextDependency('anothermodule', '>=1.1.0,<=2.2.0') ] self.deps_by_id = { dep.dependency_id(): dep for dep in self.dependencies } self.slots = [ PackManifestSlot( 'slot1', serializer=GenericMLModelsSerializer(), serialized_sha256_hash='hash1', dependencies=[ self.deps_by_id['module-version:themodule-==1.1.0'], self. deps_by_id['module-version:anothermodule-<=2.2.0,>=1.1.0'] ]), PackManifestSlot( 'slot2', serializer=GensimWord2VecModelsSerializer(), serialized_sha256_hash='hash2', dependencies=[ self. deps_by_id['module-version:anothermodule-<=2.2.0,>=1.1.0'] ]) ] self.slots_by_id = {slot.slot_key: slot for slot in self.slots} with open(fixtures.file_path('manifest.json'), 'r') as f: self.manifest_dict = json.load(f)
def test_ctor_with_wrong_dep_types(self): ser = GenericMLModelsSerializer() with self.assertRaises(TypeError): PackManifestSlot(slot_key='key', serializer=ser, serialized_sha256_hash='ahash', dependencies=['themodule-=1.1.0'])
def test_ctor_empty(self): ser = GenericMLModelsSerializer() slot = PackManifestSlot(slot_key='key', serializer=ser, serialized_sha256_hash='ahash') self.assertEqual(slot.slot_key, 'key') self.assertIs(slot.serializer, ser) self.assertDictEqual(slot.dependencies, {}) self.assertEqual(slot.pack_object, 'ahash.slot')
def test_ctor_with_dependencies(self): ser = GenericMLModelsSerializer() slot = PackManifestSlot(slot_key='key', serializer=ser, serialized_sha256_hash='ahash', dependencies=self.manifest_deps_by_id.values()) self.assertEqual(slot.slot_key, 'key') self.assertIs(slot.serializer, ser) self.assertEqual(slot.serialized_sha256_hash, 'ahash') self.assertDictEqual(slot.dependencies, self.manifest_deps_by_id) self.assertEqual(slot.pack_object, 'ahash.slot')
def test_can_process(self): # Expected to be processed self.assertTrue(GenericMLModelsSerializer.can_serialize(self.skreg)) self.assertTrue(GenericMLModelsSerializer.can_serialize(self.skclf)) self.assertTrue(GenericMLModelsSerializer.can_serialize(self.xgboost)) self.assertTrue(GenericMLModelsSerializer.can_serialize(self.np_array)) # Anything else self.assertFalse(GenericMLModelsSerializer.can_serialize(1)) self.assertFalse(GenericMLModelsSerializer.can_serialize(int)) self.assertFalse(GenericMLModelsSerializer.can_serialize("alala"))
def test_to_dict(self): ser = GenericMLModelsSerializer() slot = PackManifestSlot(slot_key='nice slot', serialized_sha256_hash='ahash', serializer=ser, dependencies=self.manifest_deps_by_id.values()) self.assertEqual( slot.to_dict(), { 'serializer': 'generic-ml-models', 'serialized_sha256_hash': 'ahash', 'dependencies': ['module-version:themodule-==1.1.0'] })
def test_dump_load_file(self, mocked_get_installed_module_version): mocked_get_installed_module_version.return_value = packaging.version.parse( '0.12.1') ser = GenericMLModelsSerializer() with tempfile.TemporaryFile('w+b') as tf: ser.dump(self.np_array, tf) tf.seek(0, sys_io.SEEK_SET) recovered_np_array = ser.load(tf) self.assertTrue(np.all(self.np_array == recovered_np_array)) self.assertEqual(len(ser.get_context_dependencies()), 1) self.assertEqual(ser.get_context_dependencies()[0].dependency_id(), "module-version:numpy-~=0.12.1")
def test_dump_load_string(self, mocked_get_installed_module_version): mocked_get_installed_module_version.return_value = packaging.version.parse( '0.12.1') ser = GenericMLModelsSerializer() payload = ser.dumps(self.np_array) recovered_np_array = ser.loads(payload) self.assertTrue(np.all(self.np_array == recovered_np_array)) self.assertEqual(len(ser.get_context_dependencies()), 1) self.assertEqual(ser.get_context_dependencies()[0].dependency_id(), "module-version:numpy-~=0.12.1")
def test_find_unsatisfied_dependencies(self): ser = GenericMLModelsSerializer() deps = [ ModuleVersionContextDependency('moduleone', '==1.1.0'), ModuleVersionContextDependency('moduletwo', '~=1.2.0'), ] slot = PackManifestSlot(slot_key='key', serializer=ser, serialized_sha256_hash='ahash', dependencies=deps) with mock.patch('mlio.io.context_dependencies.module_version.get_installed_module_version') \ as mocked_get_installed_module: # Mock that everything is satisfied mocked_get_installed_module.side_effect = lambda m: { 'moduleone': '1.1.0', 'moduletwo': '1.2.0' }[m] self.assertListEqual(slot.find_unsatisfied_dependencies(), []) # Mock that one dep is not satisfied mocked_get_installed_module.side_effect = lambda m: { 'moduleone': '1.2.0', 'moduletwo': '1.2.5' }[m] self.assertListEqual(slot.find_unsatisfied_dependencies(), ['module-version:moduleone-==1.1.0']) # Mock that two deps are not satisfied mocked_get_installed_module.side_effect = lambda m: { 'moduleone': '1.2.0', 'moduletwo': '1.0.5' }[m] self.assertListEqual(slot.find_unsatisfied_dependencies(), [ 'module-version:moduleone-==1.1.0', 'module-version:moduletwo-~=1.2.0' ])
def test_class_method(self): self.assertTrue(GenericMLModelsSerializer.serializer_type(), 'generic-ml-models')