Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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'])
Ejemplo n.º 3
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')
Ejemplo n.º 4
0
 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')
Ejemplo n.º 5
0
    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"))
Ejemplo n.º 6
0
    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']
            })
Ejemplo n.º 7
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")
Ejemplo n.º 8
0
    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")
Ejemplo n.º 9
0
    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'
            ])
Ejemplo n.º 10
0
    def test_class_method(self):

        self.assertTrue(GenericMLModelsSerializer.serializer_type(),
                        'generic-ml-models')