GEDKeeper
GEDKeeper copied to clipboard
Калькулятор родственных связей ошибается на уровень.
Братьев считает правильно. Двоюродных считает правильно. Для троюродных в качестве троюродного берёт родителя троюродного, а не самого троюродного.
V2.20.1.0
Спасибо! Обязательно посмотрю и попробую исправить к следующему выпуску (2.21).
2.21.0.0
Сломалось совсем
Подставляет мать 2-го человека, А родство вроде правильно.
Проверю
Не могу воспроизвести. Приведите скриншот дерева с включенным отображением отношений и выделенным неправильным, чтобы было понятно о чем речь.
Возможно, что алгоритм просто не может воспроизвести всю цепочку родства. Поэтому выводится только фрагмент той цепочки, которая удалась. Алгоритм работает так: строится граф всех связей, затем выделяется цепь связей от одного заданного человека до другого. Затем определяется отношение каждого звена с учетом предыдущего. Если где-то образовался обрыв - выводится только фрагмент. У вас скорее всего именно эта ситуация.
То есть, да, сестра, но подставляется мать. На троюродных аналогично. Вообще сразу после фикса я сам собирал из исходников и работало. А релиз - нет
Проверил на нескольких похожих семьях у меня в базе, пока никак - ни в релизе, ни в рабочем проекте :(
Неизвестно.ged.zip Сделал простенький файл. Сразу после добавления братья правильно определялись. После сохранения и перезапуска программы - неправильно.
И снова сама связь считается правильно, а вместо 2-го человека берётся его мать.
Если удалить мать, то снова считается правильно.
родители A и A(F), дети AA и AB
Но непонятно, почему при изначальном создании работало правильно.
Да, баг подтвержден, повторимость есть. Занятно - в прошлом алгоритм имел похожую часть, как вы добавили. Может не в точности, но что-то похожее. Нужно будет поднять историю коммитов и посмотреть как выглядело и понять - почему я это "соптимизировал".
Вы молодец :) и в коде разобрались, и патч сделали. Серьезный подход, уважаю! 👍
Но непонятно, почему при изначальном создании работало правильно.
Мне еще больше непонятно, почему при неработающем калькуляторе эта же самая ситуация на том-же файле в древе выдает правильный результат.
Могу предположить, что нисходящая ветка родства для калькулятора заполнятся по другому. То есть ребра те же самые в том же порядке, но каждое отдельное ребро перевернуто. И тут код адаптировано под перевернутое ребро, а подсунули неперевернутое. a-b, b-c, c-d и b-a, c-b, d-c. Бралось последнее ребро, но не конечная точка.
Я проверил ваш патч в работе, всё хорошо работает. Каких либо проблем не заметил. И код нормальный. Вы можете сделать коммит и PR от себя? Я бы хотел, чтобы ваше участие было в истории :)
А теперь задача с звёздочкой. :-)
Родство через жену
Кажется работает. Немножко странно выглядит, что начинается рассказ не с перевого выбранного, но так изначально было (см первый скриншот выше),
Ужас! Вот это круто! На таких примерах я не тестировал, да. Вы меня повергли в нокаут с такими экспериментами :)
А задача с 3-мя звёздочками - искать разные пути и их тоже выводить. Но эту багу наверное надо закрыть.