First steps of ConceptLexer. Need to update DefaultParser before continuing

This commit is contained in:
2019-11-29 17:26:50 +01:00
parent 5d37addc7d
commit 5e539a4b28
21 changed files with 1409 additions and 55 deletions
+27 -6
View File
@@ -105,27 +105,28 @@ def get_classes_from_package(package_name):
yield c
def get_sub_classes(package_name, base_class_name):
def get_sub_classes(package_name, base_class):
pkg = __import__(package_name)
prefix = pkg.__name__ + "."
for (module_loader, name, ispkg) in pkgutil.iter_modules(pkg.__path__, prefix):
importlib.import_module(name)
base_class = get_class(base_class_name)
return base_class.__subclasses__()
base_class = get_class(base_class) if isinstance(base_class, str) else base_class
return set(base_class.__subclasses__()).union(
[s for c in base_class.__subclasses__() for s in get_sub_classes(package_name, c)])
def remove_from_list(lst, to_remove):
def remove_from_list(lst, to_remove_predicate):
"""
Removes elements from a list if they exist
:param lst:
:param to_remove:
:param to_remove_predicate:
:return:
"""
flagged = []
for item in lst:
if to_remove(item):
if to_remove_predicate(item):
flagged.append(item)
for item in flagged:
@@ -134,3 +135,23 @@ def remove_from_list(lst, to_remove):
return lst
def product(a, b):
"""
Kind of cartesian product between list a and b
knowing that a is also a list
So it's a cartesian product between a list of list and a list
"""
if a is None or len(a) == 0:
return b
if b is None or len(b) == 0:
return a
res = []
for item_b in b:
for item_a in a:
items = item_a + [item_b]
res.append(items)
return res