First steps of ConceptLexer. Need to update DefaultParser before continuing
This commit is contained in:
+27
-6
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user