-
Notifications
You must be signed in to change notification settings - Fork 99
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
Remplace les méthodes .period par une instanciation de la classe Period() #1961
base: master
Are you sure you want to change the base?
Conversation
Je ne suis pas totalement fan de la nouvelle syntaxe qui remplace la méthode |
Hello @eraviart , la méthode a tout simplement disparu car elle faisait râler les linters. Par contre on perde l'élégance du chaining. Pourrais-tu jeter un coup d'oeil à ma proposition sur core pour combler ce vide? 🙂 |
@maukoquiroga Les lignes que j'ai remplacées partent d'un instant pour construire une période. Or il me semble que la solution avec la méthode Pour faire un test, j'ai pris le premier diff de cette PR : Qu'est ce que cela deviendrait avec la méthode |
Hello @eraviart ! En effet, Pour
Normalement, cela devrait en être l'équivalent :
Peut-être que la méthode Tu as aussi deux autres pour le passé:
Le seul point qui posait souci est que la méthode
Enfin tout cela ce n'est qu'un wrap d' |
J'ai cru comprendre que le problème de la suppressions de |
Hello @eraviart
Ce n'est pas le problème mais l'un de problèmes, et qui n'est pas spécifique aux De ce fait, une proposition de re-fusionner Par contre, si par exemple les périodes ou les instants changaient pour avoir moins de logique et devenir plus des containers d'information, on pourrait le fusionner, mais cela ne justifierait pas encore amha La proposition que j'ai faite dans openfisca/openfisca-core#1138 va dans le sens de ce que j'ai cru être le design des
Dans ce scénario - qui n'est qu'un possible -, Par contre, si l'on disait que Si cela te convient, je te propose qu'on merge cette pull request et que l'on continue cette discussion directement sur openfisca/openfisca-core#1138. |
66314da
to
046b280
Compare
046b280
to
36f04a5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Merci @eraviart pour cette migration 🙌
Un détail que nous pouvons mettre à jour dans le CHANGELOG de cette PR : la version v37
de core a été dépubliée au bénéfice de la v38.0.2
comme indiqué dans le CHANGELOG openfisca-core.
up_to_this_month = period.start.offset('first-of', 'year').period('month', period.start.month) | ||
up_to_previous_month = period.start.offset('first-of', 'year').period('month', period.start.month - 1) | ||
up_to_this_month = Period(('month', period.start.offset('first-of', 'year'), period.start.month)) | ||
up_to_previous_month = Period(('month', period.start.offset('first-of', 'year'), period.start.month - 1)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Une limite peut-être à notre syntaxe qui existait précédemment à cette PR :
Ici Period(('month', period.start.offset('first-of', 'year'), period.start.month - 1))
ne fonctionne que parce que period.start.month > 1
.
Sinon, on obtient une AssertionError
pas très claire sur la démarche à suivre. Extrait de l'erreur avec l'ancienne syntaxe :
File "/Users/sch/.local/share/virtualenvs/fr1961/lib/python3.7/site-packages/openfisca_core/periods/instant_.py", line 97, in period
assert isinstance(size, int) and size >= 1, 'Invalid size: {} of type {}'.format(size, type(size))
AssertionError: Invalid size: 0 of type <class 'int'>
PR testée dans un script vérifiant l'égalité des résultats entre l'ancienne et la nouvelle syntaxe (ce qui m'a semblé plus simple que de lire et l'ancienne et la nouvelle syntaxe 😊 😬 ). Ce mini script nous fait aussi un bilan des syntaxes utilisées dans openfisca-france pour ce sujet alors je partage au cas où : from openfisca_core.periods import Instant, Period, YEAR, MONTH
first_jan = Instant((2023, 1, 1))
first_feb = Instant((2023, 2, 1))
period_mois = Period((MONTH, first_jan, 1))
period_mois_superieur_un = Period((MONTH, first_feb, 1))
period_annee = Period((YEAR, first_jan, 1))
assert period_mois.start.offset('first-of', 'year').period('month', 11) == Period(('month', period_mois.start.offset('first-of', 'year'), 11))
assert period_mois.start.offset('first-of', 'year').period('month', period_mois.start.month) == Period(('month', period_mois.start.offset('first-of', 'year'), period_mois.start.month))
assert period_mois_superieur_un.start.offset('first-of', 'year').period('month', period_mois_superieur_un.start.month - 1) == Period(('month', period_mois_superieur_un.start.offset('first-of', 'year'), period_mois_superieur_un.start.month - 1))
assert period_mois.start.offset('first-of', 'month').offset(-11, 'month').period('month', 11) == Period(('month', period_mois.start.offset('first-of', 'month').offset(-11, 'month'), 11))
ecart_avec_2000 = period_annee.start.offset('first-of', 'year').year - 2000
assert period_annee.start.offset('first-of', 'year').period('year').offset(-ecart_avec_2000) == Period(('year', period_annee.start.offset('first-of', 'year'), 1)).offset(-ecart_avec_2000)
assert period_mois.start.period('year').offset(-1).offset(-1, 'month') == Period(('year', period_mois.start, 1)).offset(-1).offset(-1, 'month')
assert period_mois.start.period('year').offset(-1) == Period(('year', period_mois.start, 1)).offset(-1)
assert period_mois.start.offset('first-of', 'month').period('month') == Period(('month', period_mois.start.offset('first-of', 'month'), 1))
assert period_mois.start.offset('first-of', 'year').period('year') == Period(('year', period_mois.start.offset('first-of', 'year'), 1))
assert period_mois.first_month.start.period('month', 3).offset(-3) == Period(('month', period_mois.first_month.start, 3)).offset(-3)
assert period_mois.start.period('month', 3).offset(-3) == Period(('month', period_mois.start, 3)).offset(-3)
assert period_mois.start.period('month').offset(-1) == Period(('month', period_mois.start, 1)).offset(-1)
assert period_mois.start.offset('first-of', 'year').period('year', 2).offset(-1) == Period(('year', period_mois.start.offset('first-of', 'year'), 2)).offset(-1)
assert period_annee.start.offset('first-of', 'year').offset(9, 'month').period('month') == Period(('month', period_annee.start.offset('first-of', 'year').offset(9, 'month'), 1))
assert period_annee.start.offset('first-of', 'year').offset(11, 'month').period('month') == Period(('month', period_annee.start.offset('first-of', 'year').offset(11, 'month'), 1))
assert period_mois.start.period('month', 6).offset(-6) == Period(('month', period_mois.start, 6)).offset(-6)
assert period_annee.start.period('year').offset(-1) == Period(('year', period_annee.start, 1)).offset(-1)
assert period_mois.start.period('month').offset('first-of') == Period(('month', period_mois.start, 1)).offset('first-of') |
model
.