diff --git a/medcat-v2-tutorials/notebooks/introductory/relcat/1._Supervised_Training_Relation_Extraction.ipynb b/medcat-v2-tutorials/notebooks/introductory/relcat/1._Supervised_Training_Relation_Extraction.ipynb index e2194b09b..f167ca639 100644 --- a/medcat-v2-tutorials/notebooks/introductory/relcat/1._Supervised_Training_Relation_Extraction.ipynb +++ b/medcat-v2-tutorials/notebooks/introductory/relcat/1._Supervised_Training_Relation_Extraction.ipynb @@ -101,7 +101,7 @@ ], "source": [ "# Install medcat\n", - "! pip install \"medcat[spacy,rel-cat,meta-cat]~=2.1.0\" # NOTE: VERSION-STRING" + "! pip install \"medcat[spacy,rel-cat,meta-cat]~=2.4.0\" # NOTE: VERSION-STRING" ] }, { diff --git a/medcat-v2-tutorials/notebooks/introductory/relcat/2._Infering_relations_from_annotations_with_Relation_toolkit.ipynb b/medcat-v2-tutorials/notebooks/introductory/relcat/2._Infering_relations_from_annotations_with_Relation_toolkit.ipynb index 121f36111..24e961ceb 100644 --- a/medcat-v2-tutorials/notebooks/introductory/relcat/2._Infering_relations_from_annotations_with_Relation_toolkit.ipynb +++ b/medcat-v2-tutorials/notebooks/introductory/relcat/2._Infering_relations_from_annotations_with_Relation_toolkit.ipynb @@ -92,7 +92,7 @@ ], "source": [ "# Install medcat\n", - "! pip install \"medcat[spacy,rel-cat]~=2.1.0\" # NOTE: VERSION-STRING" + "! pip install \"medcat[spacy,rel-cat]~=2.4.0\" # NOTE: VERSION-STRING" ] }, { diff --git a/medcat-v2/medcat/utils/import_utils.py b/medcat-v2/medcat/utils/import_utils.py index 669021341..628a90abe 100644 --- a/medcat-v2/medcat/utils/import_utils.py +++ b/medcat-v2/medcat/utils/import_utils.py @@ -14,7 +14,8 @@ def __missing__(self, key): # Map the project name to the package needed to be imported where appropraite. # Default to the package name itself. _DEP_NAME_MAPPER = KeyDefaultDict({ - "pyahocorasick": "ahocorasick" + "pyahocorasick": "ahocorasick", + "scikit-learn": "sklearn", }) @@ -89,10 +90,10 @@ def ensure_optional_extras_installed(package_name: str, extra_name: str): MissingDependenciesError: If the extra dependency isn't provided. """ installed = get_installed_extra_dependencies(package_name, extra_name) - if not installed: - req = get_required_extra_deps(package_name, extra_name) - if not req: - raise IncorrectExtraComponent(package_name, extra_name) + req = get_required_extra_deps(package_name, extra_name) + if not req: + raise IncorrectExtraComponent(package_name, extra_name) + if len(installed) != len(req): missing = [requirement for requirement in req if requirement not in installed] raise MissingDependenciesError(package_name, extra_name, missing) diff --git a/medcat-v2/tests/utils/test_import_utils.py b/medcat-v2/tests/utils/test_import_utils.py new file mode 100644 index 000000000..8e6d44b3e --- /dev/null +++ b/medcat-v2/tests/utils/test_import_utils.py @@ -0,0 +1,43 @@ +from medcat.utils import import_utils + +import unittest +import unittest.mock + + +class ImportUtilsTests(unittest.TestCase): + + @unittest.mock.patch( + "medcat.utils.import_utils.get_installed_extra_dependencies") + @unittest.mock.patch("medcat.utils.import_utils.get_required_extra_deps") + def test_raises_upon_partial( + self, + mock_get_required_extra_deps, + mock_get_installed_extra_dependencies): + mock_get_installed_extra_dependencies.return_value = ["A", "B"] + mock_get_required_extra_deps.return_value = ["A", "B", "C"] + with self.assertRaises(import_utils.MissingDependenciesError): + import_utils.ensure_optional_extras_installed("medcat", "WHATEVER") + + @unittest.mock.patch( + "medcat.utils.import_utils.get_installed_extra_dependencies") + @unittest.mock.patch("medcat.utils.import_utils.get_required_extra_deps") + def test_raises_upon_none( + self, + mock_get_required_extra_deps, + mock_get_installed_extra_dependencies): + mock_get_installed_extra_dependencies.return_value = [] + mock_get_required_extra_deps.return_value = ["A", "B", "C"] + with self.assertRaises(import_utils.MissingDependenciesError): + import_utils.ensure_optional_extras_installed("medcat", "WHATEVER") + + @unittest.mock.patch( + "medcat.utils.import_utils.get_installed_extra_dependencies") + @unittest.mock.patch("medcat.utils.import_utils.get_required_extra_deps") + def test_no_raises_upon_all_deps( + self, + mock_get_required_extra_deps, + mock_get_installed_extra_dependencies): + mock_get_installed_extra_dependencies.return_value = ["A", "B", "C"] + mock_get_required_extra_deps.return_value = ["A", "B", "C"] + # NOTE: just no raise + import_utils.ensure_optional_extras_installed("medcat", "WHATEVER")