Projet

Général

Profil

Bug #21290

La mécanique d'intervalle ne marche pas quand on cherche un intervalle totalement inclu dans un autre

Ajouté par Benjamin Dauvergne il y a plus de 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
22 janvier 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Si on stcoke [1, 10[ et qu'on cherche [2, 3] on ne récupère pas [1, 10].


Fichiers

Révisions associées

Révision ca7d336c (diff)
Ajouté par Benjamin Dauvergne il y a plus de 6 ans

tests: remove warning (#21290)

tests/test_api.py::TestApp
cannot collect test class 'TestApp' because it has a init constructor

Révision b26c5c22 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 6 ans

fix interval sets when overlap is contained completely in an interval (#21290)

Also add more documentations and tests.

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

J'ai corrigé et j'ai ajouté un peu plus de doc qui explique comment ça marche, la correction consiste à stocker l'intervalle aussi dans les points intérieurs, et pas seulement aux extrémités puis quand on recherche à regarder un point plus loin, i.e. relâcher la contrainte self.points[i] <= end et ne la testant qu'en sortie de boucle de recherche, car si un interval est totalement inclu il le sera dans un intervalle qui sera lié à un point juste après l'intervalle qu'on cherche.

#2

Mis à jour par Frédéric Péters il y a plus de 6 ans

Ça correspond à un moment particulier/visible dans Chrono ?

#3

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Non justement je n'avais pas vu le problème jusqu'à présent, mais comme je ne peux exclure que ça puisse arriver j'ai préféré prendre les devants, en l'état actuelle des choses le code est ncohérent, remove_overlap() ne faisant pas ce qu'elle dit faire dans le cas que je décrits. En tentant d'imaginer un cas concret j'imagine deux types de rendez vous (sans savoir si c'est possible) pour un même guichet de 45 minutes et 15 minutes, on a un RDV de 45 minutes de 10h à 10h45 possible mais on a un RDV déjà booké de 10h15 à 10h30, dans ce cas là le RDV de 10h ne sera pas retiré de la liste des possibles.

#4

Mis à jour par Frédéric Péters il y a plus de 6 ans

Je n'avais pas regardé davantage, merci pour l'explication de la situation possible.

"Maintain a list of mostly non overlapping intervals, allow removing overlap.

Fait tout de suite,

    "Maintain a list of mostly non overlapping intervals, allow removing overlap.
                                                                                ^
SyntaxError: EOL while scanning string literal

Ensuite, à corriger ça l'exécution de différents tests échoue, sur :

    def __insert_point(self, point, interval):
        i = bisect.bisect_left(self.points, point)
>       if i >= len(self.container) or self.points[i] != point:
E       IndexError: list index out of range

chrono/interval.py:72: IndexError

(ex: test_booking_api_meeting_different_durations_book_short)

#5

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Patch proposed changé de Oui à Non

Et en relisant je vois encore d'autres problèmes au niveau de search() notamment qu'un interval va pouvoir être renvoyé plusieurs fois contrairement à ce que dit le commentaire à cet endroit. je reviens avec du mieux.

#6

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Lancez sur la totalité des tests ça passe, j'ai aussi corrigé le souci de retour multiple d'un même intervalle par les itérateurs. Au passage je corrige 3 warnings dans les tests.

#7

Mis à jour par Frédéric Péters il y a plus de 6 ans

  • Statut changé de Nouveau à En cours

Ack.

#8

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Statut changé de En cours à Résolu (à déployer)
#9

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF