Skip to content

Commit e63bd9d

Browse files
committedMar 23, 2025·
update indexed grammars tests and utils
1 parent a6104d3 commit e63bd9d

File tree

3 files changed

+15
-30
lines changed

3 files changed

+15
-30
lines changed
 

‎pyformlang/indexed_grammar/indexed_grammar.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from .production_rule import ProductionRule
1616
from .consumption_rule import ConsumptionRule
1717
from .end_rule import EndRule
18-
from .utils import exists, addrec_bis
18+
from .utils import addrec_bis
1919
from ..objects.cfg_objects.utils import to_variable
2020

2121

@@ -47,9 +47,9 @@ def __init__(self,
4747
self._marked[non_terminal_a].add(temp)
4848
# Mark all end symbols
4949
for non_terminal_a in non_terminals:
50-
if exists(self._rules.rules,
51-
lambda x: isinstance(x, EndRule)
52-
and x.left_term == non_terminal_a):
50+
if any(map(lambda x: isinstance(x, EndRule)
51+
and x.left_term == non_terminal_a,
52+
self._rules.rules)):
5353
self._marked[non_terminal_a].add(frozenset())
5454

5555
@property

‎pyformlang/indexed_grammar/tests/test_rules.py

+9-10
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,17 @@ class TestIndexedGrammar:
1717

1818
def test_consumption_rules(self):
1919
""" Tests the consumption rules """
20-
conso = ConsumptionRule("end", "C", "T")
21-
terminals = conso.terminals
20+
consumption = ConsumptionRule("end", "C", "T")
21+
terminals = consumption.terminals
2222
assert terminals == {"end"}
23-
representation = str(conso)
23+
representation = str(consumption)
2424
assert representation == "C [ end ] -> T"
2525

2626
def test_duplication_rules(self):
2727
""" Tests the duplication rules """
28-
dupli = DuplicationRule("B0", "A0", "C")
29-
assert dupli.terminals == set()
30-
assert str(dupli) == \
31-
"B0 -> A0 C"
28+
duplication = DuplicationRule("B0", "A0", "C")
29+
assert duplication.terminals == set()
30+
assert str(duplication) == "B0 -> A0 C"
3231

3332
def test_end_rule(self):
3433
""" Tests the end rules """
@@ -39,9 +38,9 @@ def test_end_rule(self):
3938

4039
def test_production_rules(self):
4140
""" Tests the production rules """
42-
produ = ProductionRule("S", "C", "end")
43-
assert produ.terminals == {"end"}
44-
assert str(produ) == "S -> C [ end ]"
41+
production = ProductionRule("S", "C", "end")
42+
assert production.terminals == {"end"}
43+
assert str(production) == "S -> C [ end ]"
4544

4645
def test_rules(self):
4746
""" Tests the rules """

‎pyformlang/indexed_grammar/utils.py

+2-16
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,7 @@
22

33
# pylint: disable=cell-var-from-loop
44

5-
from typing import Callable, List, Set, Iterable, Any
6-
7-
8-
def exists(list_elements: List[Any],
9-
check_function: Callable[[Any], bool]) -> bool:
10-
"""exists
11-
Check whether at least an element x of l is True for f(x)
12-
:param list_elements: A list of elements to test
13-
:param check_function: The checking function (takes one parameter and \
14-
return a boolean)
15-
"""
16-
for element in list_elements:
17-
if check_function(element):
18-
return True
19-
return False
5+
from typing import List, Set, Iterable, Any
206

217

228
def addrec_bis(l_sets: Iterable[Any],
@@ -58,7 +44,7 @@ def addrec_ter(l_sets: List[Any], marked_left: Set[Any]) -> bool:
5844
# End condition, nothing left to process
5945
temp_in = [x[0] for x in l_sets]
6046
exists_after = [
61-
exists(l_sets[index + 1:], lambda x: x[0] == l_sets[index][0])
47+
any(map(lambda x: x[0] == l_sets[index][0], l_sets[index + 1:]))
6248
for index in range(len(l_sets))]
6349
exists_before = [l_sets[index][0] in temp_in[:index]
6450
for index in range(len(l_sets))]

1 commit comments

Comments
 (1)

github-actions[bot] commented on Mar 23, 2025

@github-actions[bot]

Coverage

Coverage Report
FileStmtsMissCoverMissing
pyformlang
   __init__.py90100% 
pyformlang/cfg
   __init__.py30100% 
   cfg.py46622 99%
   cfg_variable_converter.py6544 94%
   cyk_table.py790100% 
   formal_grammar.py6911 99%
   llone_parser.py16333 98%
   parse_tree.py6511 98%
   recursive_decent_parser.py6122 97%
   set_queue.py150100% 
   utils.py250100% 
pyformlang/cfg/tests
   __init__.py00100% 
   test_cfg.py62622 99%
   test_llone_parser.py11711 99%
   test_production.py210100% 
   test_recursive_decent_parser.py2511 96%
   test_terminal.py330100% 
   test_variable.py180100% 
pyformlang/fcfg
   __init__.py40100% 
   fcfg.py13111 99%
   feature_production.py250100% 
   feature_structure.py19133 98%
   state.py360100% 
pyformlang/fcfg/tests
   __init__.py00100% 
   test_fcfg.py1690100% 
   test_feature_structure.py1590100% 
pyformlang/finite_automaton
   __init__.py70100% 
   deterministic_finite_automaton.py18322 99%
   deterministic_transition_function.py2411 96%
   doubly_linked_list.py350100% 
   doubly_linked_node.py100100% 
   epsilon_nfa.py21011 99%
   finite_automaton.py23111 99%
   hopcroft_processing_list.py240100% 
   nondeterministic_finite_automaton.py400100% 
   nondeterministic_transition_function.py480100% 
   partition.py400100% 
   transition_function.py320100% 
   utils.py300100% 
pyformlang/finite_automaton/tests
   __init__.py00100% 
   test_deterministic_finite_automaton.py2960100% 
   test_deterministic_transition_function.py8955 94%
   test_epsilon.py130100% 
   test_epsilon_nfa.py5950100% 
   test_nondeterministic_finite_automaton.py1600100% 
   test_nondeterministic_transition_function.py790100% 
   test_state.py280100% 
   test_symbol.py290100% 
pyformlang/fst
   __init__.py20100% 
   fst.py18611 99%
   transition_function.py3833 92%
   utils.py250100% 
pyformlang/fst/tests
   __init__.py00100% 
   test_fst.py1910100% 
pyformlang/indexed_grammar
   __init__.py90100% 
   consumption_rule.py3522 94%
   duplication_rule.py320100% 
   end_rule.py3311 97%
   indexed_grammar.py27111 99%
   production_rule.py3511 97%
   reduced_rule.py290100% 
   rule_ordering.py730100% 
   rules.py770100% 
   utils.py410100% 
pyformlang/indexed_grammar/tests
   __init__.py00100% 
   test_indexed_grammar.py2490100% 
   test_rules.py350100% 
pyformlang/objects
   __init__.py50100% 
   base_epsilon.py1511 93%
   base_terminal.py70100% 
   formal_object.py240100% 
pyformlang/objects/cfg_objects
   __init__.py60100% 
   cfg_object.py50100% 
   epsilon.py30100% 
   production.py4111 98%
   terminal.py100100% 
   utils.py140100% 
   variable.py130100% 
pyformlang/objects/finite_automaton_objects
   __init__.py50100% 
   epsilon.py30100% 
   finite_automaton_object.py50100% 
   state.py70100% 
   symbol.py50100% 
   utils.py140100% 
pyformlang/objects/pda_objects
   __init__.py60100% 
   epsilon.py30100% 
   pda_object.py50100% 
   stack_symbol.py70100% 
   state.py70100% 
   symbol.py50100% 
   utils.py2111 95%
pyformlang/objects/regex_objects
   __init__.py20100% 
   regex_objects.py630100% 
   utils.py220100% 
pyformlang/pda
   __init__.py40100% 
   pda.py31722 99%
   transition_function.py3933 92%
   utils.py5322 96%
pyformlang/pda/tests
   __init__.py00100% 
   test_pda.py3020100% 
pyformlang/regular_expression
   __init__.py30100% 
   python_regex.py26966 98%
   regex.py2811414 95%
   regex_reader.py15944 97%
pyformlang/regular_expression/tests
   __init__.py00100% 
   test_python_regex.py2780100% 
   test_regex.py4110100% 
pyformlang/rsa
   __init__.py30100% 
   box.py512525 51%
   recursive_automaton.py7299 88%
pyformlang/rsa/tests
   __init__.py00100% 
   test_rsa.py370100% 
pyformlang/tests
   __init__.py00100% 
TOTAL874110899% 

Tests Skipped Failures Errors Time
310 0 💤 0 ❌ 0 🔥 8.226s ⏱️
Please sign in to comment.