Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Task6 (probably not) #5

Merged
merged 11 commits into from
May 11, 2024
Merged

Task6 (probably not) #5

merged 11 commits into from
May 11, 2024

Conversation

heli0dus
Copy link
Owner

No description provided.

@heli0dus heli0dus requested a review from WoWaster April 25, 2024 11:24
@heli0dus
Copy link
Owner Author

Пушу больше с просьбой посмотреть и подсказать, где мне ловить багу: здесь или в 3/4 домашке. Я вроде старался по максимуму по статье действовать так что казалось бы здесь должно быть нормально, но тесты валятся(

@WoWaster
Copy link
Collaborator

Я вот так поправил тесты:

diff --git a/tests/autotests/test_task6.py b/tests/autotests/test_task6.py
index d3f0dbc..6f7c09f 100644
--- a/tests/autotests/test_task6.py
+++ b/tests/autotests/test_task6.py
@@ -93,7 +93,7 @@ IS_START = "is_start"

 @pytest.fixture(scope="function", params=range(5))
 def graph(request) -> MultiDiGraph:
-    n_of_nodes = random.randint(20, 40)
+    n_of_nodes = random.randint(1, 10)
     return cd.graphs.labeled_scale_free_graph(n_of_nodes, labels=LABELS)


@@ -131,7 +131,15 @@ class TestReachability:
             for node_from, nodes_to in rpq.items():
                 for node_to in nodes_to:
                     rpq_set.add((node_from, node_to))
-            assert cfpq == rpq_set
+            if cfpq == rpq_set:
+                assert True
+            else:
+                print(graph.edges(data=True))
+                print(regex_str)
+                print(start_nodes, final_nodes)
+                print(cfpq)
+                print(rpq_set)
+                assert False

     @pytest.mark.parametrize("eq_grammars", GRAMMARS, ids=lambda grammars: grammars)
     def test_different_grammars(self, graph, eq_grammars):

Нашел пару графов поменьше и перетащил в свои эталонные решения.

Вот на такой вывод в вашей реализации:

[(0, 1, {'label': 'a'}), (1, 2, {'label': 'b'}), (2, 0, {'label': 'a'})]
a*
{0, 1, 2} {0, 1}
set()
{(0, 1), (2, 0), (2, 1)}

Моя эталонная выдала [(2, 0), (2, 1), (1, 1), (0, 0), (0, 1)]. Из этого я сделал два вывода:

  1. Бóльшая проблема у вас с CFPQ, он выдает пустое множество даже там, где оно не пусто
  2. Это уже нас косяк, но у вас получилось сдать 3 и 4 задачки, которые некорректно обрабатывают пустые строки

@heli0dus
Copy link
Owner Author

Я тут немного интересную деталь заметил
Для pyformlang регулярка "abc*" - это то же самое, что "(abc)*"
От нас ожидалось, что мы ещё ручками попарсим регулярки прежде, чем генерировать автомат или это неожиданное поведение библиотеки?

@heli0dus
Copy link
Owner Author

Просто я уже часов не знаю сколько (минимум 30) пытаюсь всё заставить починить и бэктрэкинг багов в итоге меня првиёл к такому интересному фокусу библиотеки, в результате которого немудрено, что всё идёт не очень по плану

@heli0dus
Copy link
Owner Author

Здесь отбой, я просто зря руками писал, а не копипастил из тестов строку регулярки
Крыша уже немного едет от этого дебага

@heli0dus
Copy link
Owner Author

И всё-таки эта шизофрения была к месту
В тестах к 6 задаче пробелы стоят и парсится всё нормально
А вот в тестах к 4 пробелов нет и эта проблема есть

@heli0dus
Copy link
Owner Author

Вообще наверное важно обозначить один пренеприятный феномен, всплывший в ходе этого расследования с поисками багов

Я попросил пару человек загнать пример, описаный Вами выше, в свои решения для 4 и 6 домашки
И там получилась очень занятное веселье, что у всех, кого я спрашивал, это выдало просто 2 пустых сета
Из этого вытекает несколько мажорная проблема

Так как тесты не сравнивают ответ с эталонным решением, а сравнивают решения между собой, рабочим сценарием прохождения тестов становится ситуация, когда все задания дают одинаково неправильный овтет на одинаковые данные. В результате получается какая-то неприятная неуверенность в том, это новое решение домашки неправильное или это все предыдущие неправильные, просто одинаково неправильные (в моём случае с этой домашкой оказалось, что и то, и другое)

Честно не знаю, как такую ситуацию решать, но обозначить её всё-таки стоит

@WoWaster
Copy link
Collaborator

Про проблему знаем. Наверное, как раз после моего первого ответа вам, мы её взяли на контроль. В следующих итерациях курса хотим добавить некоторый набор контролируемых тестов, чтобы оценить "вменяемость" решения в отрыве от остальных. Хотелось бы, конечно, сейчас, но тогда велик шанс, что у большинства уже сдавших задачки всё сломается :(.

Про косяк с регулярками тоже. Оно должно будет в скором времени починиться, хотя почему у вас пару коммитов назад оно чинилось именно добавлением пробелов я сходу не понял. Надеюсь в последних коммитах у вас всё правда хорошо.

Эту задачку я точно готов зачесь в полный балл за ваши страдания с дебагом.

@heli0dus
Copy link
Owner Author

С регулярками та мистория была в том, что когда я дебажил 3 и 4 домашки, то не мог понять, почему 4 выдаёт мне лишние конечные вершины на abc*. Я просто понял, как парвильно смотреть на этот вывод и что неправильный ответ в той ситуации давала 3 домашка, а не 4

@heli0dus heli0dus merged commit 99bbf6b into main May 11, 2024
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants