Skip to content

Commit bbf6d32

Browse files
committed
add catala
1 parent f066037 commit bbf6d32

24 files changed

Lines changed: 1668 additions & 0 deletions

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,7 @@
22
shell.nix
33

44
doc/dist/
5+
6+
catala/_target/
7+
8+
catala/_build/

_shell.nix

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ buildInputs = [
77
python313 poetry #python
88
go-task # alternative to make
99
nodejs_24 #for the doc
10+
opam curl git ninja #for catala
11+
1012
];
1113
shellHook = ''
1214
export SENTRY_DSN="variable value"
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
# This file has been generated by the Catala compiler, do not edit!
2+
3+
from catala_runtime import *
4+
from typing import Any, List, Callable, Tuple
5+
from enum import Enum
6+
from . import Date_internal as date_internal
7+
from . import List_internal as list_internal
8+
from . import List_fr as list_fr
9+
10+
class Mois_Code(Enum):
11+
Janvier = 0
12+
Fevrier = 1
13+
Mars = 2
14+
Avril = 3
15+
Mai = 4
16+
Juin = 5
17+
Juillet = 6
18+
Aout = 7
19+
Septembre = 8
20+
Octobre = 9
21+
Novembre = 10
22+
Decembre = 11
23+
24+
class Mois:
25+
def __init__(self, code: Mois_Code, value: Any) -> None:
26+
self.code = code
27+
self.value = value
28+
29+
30+
def __eq__(self, other: object) -> bool:
31+
if isinstance(other, Mois):
32+
return self.code == other.code and self.value == other.value
33+
else:
34+
return False
35+
36+
37+
def __ne__(self, other: object) -> bool:
38+
return not (self == other)
39+
40+
def __str__(self) -> str:
41+
return "{}({})".format(self.code, self.value)
42+
43+
class JourDeLaSemaine_Code(Enum):
44+
Lundi = 0
45+
Mardi = 1
46+
Mercredi = 2
47+
Jeudi = 3
48+
Vendredi = 4
49+
Samedi = 5
50+
Dimanche = 6
51+
52+
class JourDeLaSemaine:
53+
def __init__(self, code: JourDeLaSemaine_Code, value: Any) -> None:
54+
self.code = code
55+
self.value = value
56+
57+
58+
def __eq__(self, other: object) -> bool:
59+
if isinstance(other, JourDeLaSemaine):
60+
return self.code == other.code and self.value == other.value
61+
else:
62+
return False
63+
64+
65+
def __ne__(self, other: object) -> bool:
66+
return not (self == other)
67+
68+
def __str__(self) -> str:
69+
return "{}({})".format(self.code, self.value)
70+
71+
72+
def min(d1:Date, d2:Date):
73+
if (d1 <= d2):
74+
min__1 = (d1)
75+
else:
76+
min__1 = (d2)
77+
return min__1
78+
79+
def max(d1:Date, d2:Date):
80+
if (d1 >= d2):
81+
max__1 = (d1)
82+
else:
83+
max__1 = (d2)
84+
return max__1
85+
86+
def depuis_annee_mois_jour(pos:SourcePosition, dannee:Integer, dmois:Integer, djour:Integer):
87+
return date_internal.of_ymd(pos, dannee, dmois, djour)
88+
89+
def vers_annee_mois_jour(d:Date):
90+
return date_internal.to_ymd(d)
91+
92+
def dernier_jour_du_mois(d:Date):
93+
return date_internal.last_day_of_month(d)
94+
95+
def mois_vers_entier(m:Mois):
96+
if m.code == Mois_Code.Janvier:
97+
mois_vers_entier__1 = (Integer(1))
98+
elif m.code == Mois_Code.Fevrier:
99+
mois_vers_entier__1 = (Integer(2))
100+
elif m.code == Mois_Code.Mars:
101+
mois_vers_entier__1 = (Integer(3))
102+
elif m.code == Mois_Code.Avril:
103+
mois_vers_entier__1 = (Integer(4))
104+
elif m.code == Mois_Code.Mai:
105+
mois_vers_entier__1 = (Integer(5))
106+
elif m.code == Mois_Code.Juin:
107+
mois_vers_entier__1 = (Integer(6))
108+
elif m.code == Mois_Code.Juillet:
109+
mois_vers_entier__1 = (Integer(7))
110+
elif m.code == Mois_Code.Aout:
111+
mois_vers_entier__1 = (Integer(8))
112+
elif m.code == Mois_Code.Septembre:
113+
mois_vers_entier__1 = (Integer(9))
114+
elif m.code == Mois_Code.Octobre:
115+
mois_vers_entier__1 = (Integer(10))
116+
elif m.code == Mois_Code.Novembre:
117+
mois_vers_entier__1 = (Integer(11))
118+
elif m.code == Mois_Code.Decembre:
119+
mois_vers_entier__1 = (Integer(12))
120+
return mois_vers_entier__1
121+
122+
def entier_vers_mois(pos:SourcePosition, i:Integer):
123+
if (i == Integer(1)):
124+
entier_vers_mois__1 = (Mois(Mois_Code.Janvier, Unit()))
125+
elif (i == Integer(2)):
126+
entier_vers_mois__1 = (Mois(Mois_Code.Fevrier, Unit()))
127+
elif (i == Integer(3)):
128+
entier_vers_mois__1 = (Mois(Mois_Code.Mars, Unit()))
129+
elif (i == Integer(4)):
130+
entier_vers_mois__1 = (Mois(Mois_Code.Avril, Unit()))
131+
elif (i == Integer(5)):
132+
entier_vers_mois__1 = (Mois(Mois_Code.Mai, Unit()))
133+
elif (i == Integer(6)):
134+
entier_vers_mois__1 = (Mois(Mois_Code.Juin, Unit()))
135+
elif (i == Integer(7)):
136+
entier_vers_mois__1 = (Mois(Mois_Code.Juillet, Unit()))
137+
elif (i == Integer(8)):
138+
entier_vers_mois__1 = (Mois(Mois_Code.Aout, Unit()))
139+
elif (i == Integer(9)):
140+
entier_vers_mois__1 = (Mois(Mois_Code.Septembre, Unit()))
141+
elif (i == Integer(10)):
142+
entier_vers_mois__1 = (Mois(Mois_Code.Octobre, Unit()))
143+
elif (i == Integer(11)):
144+
entier_vers_mois__1 = (Mois(Mois_Code.Novembre, Unit()))
145+
elif (i == Integer(12)):
146+
entier_vers_mois__1 = (Mois(Mois_Code.Decembre, Unit()))
147+
else:
148+
erreur = (date_internal.of_ymd(pos, Integer(-1), Integer(-1), Integer(-1)))
149+
pos__1 = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=172, start_column=65, end_line=172, end_column=75, law_headings=["Mois nommés", "Dates"]))
150+
raise Impossible(pos__1, None)
151+
return entier_vers_mois__1
152+
153+
def est_assez_age_arrondi_inferieur(date_de_naissance:Date, age:Duration, a_date:Date):
154+
return (a_date >= date_internal.add_rounded_down(date_de_naissance, age))
155+
156+
def est_assez_age_arrondi_superieur(date_de_naissance:Date, age:Duration, a_date:Date):
157+
return (a_date >= date_internal.add_rounded_up(date_de_naissance, age))
158+
159+
def dernier_jour_de_l_annee(d:Date):
160+
ymd = (vers_annee_mois_jour(d))
161+
pos = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=112, start_column=5, end_line=112, end_column=27, law_headings=["Aller vers le passé ou le futur", "Dates"]))
162+
return depuis_annee_mois_jour(pos, ymd[0], Integer(12), Integer(31))
163+
164+
def premier_jour_de_l_annee(d:Date):
165+
ymd = (vers_annee_mois_jour(d))
166+
pos = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=103, start_column=5, end_line=103, end_column=27, law_headings=["Aller vers le passé ou le futur", "Dates"]))
167+
return depuis_annee_mois_jour(pos, ymd[0], Integer(1), Integer(1))
168+
169+
def premier_jour_du_mois(d:Date):
170+
ymd = (vers_annee_mois_jour(d))
171+
pos = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=86, start_column=5, end_line=86, end_column=27, law_headings=["Aller vers le passé ou le futur", "Dates"]))
172+
return depuis_annee_mois_jour(pos, ymd[0], ymd[1], Integer(1))
173+
174+
def acces_jour(d:Date):
175+
return vers_annee_mois_jour(d)[2]
176+
177+
def acces_mois(d:Date):
178+
return vers_annee_mois_jour(d)[1]
179+
180+
def acces_annee(d:Date):
181+
return vers_annee_mois_jour(d)[0]
182+
183+
def est_assez_jeune_arrondi_inferieur(date_de_naissance:Date, age:Duration, a_date:Date):
184+
return not est_assez_age_arrondi_inferieur(date_de_naissance, age, a_date)
185+
186+
def est_assez_jeune_arrondi_superieur(date_de_naissance:Date, age:Duration, a_date:Date):
187+
return not est_assez_age_arrondi_superieur(date_de_naissance, age, a_date)
188+
189+
def jour_de_la_semaine(date_donnee:Date):
190+
month_number = (acces_mois(date_donnee))
191+
if (month_number < Integer(3)):
192+
year_number = ((acces_annee(date_donnee) - Integer(1)))
193+
else:
194+
year_number = (acces_annee(date_donnee))
195+
n_number__1 = (list_fr.nieme_element([Integer(0), Integer(3), Integer(2), Integer(5), Integer(0), Integer(3), Integer(5), Integer(1), Integer(4), Integer(6), Integer(2), Integer(4)], month_number))
196+
if n_number__1.value is not None:
197+
n_number = (n_number__1.value)
198+
else:
199+
pos = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=273, start_column=16, end_line=273, end_column=26, law_headings=["Détermination du jour de la semaine d'une date donnée (algorithme de Sakamoto)", "Dates"]))
200+
raise Impossible(pos, None)
201+
pos = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=277, start_column=31, end_line=277, end_column=32, law_headings=["Détermination du jour de la semaine d'une date donnée (algorithme de Sakamoto)", "Dates"]))
202+
pos__1 = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=278, start_column=31, end_line=278, end_column=32, law_headings=["Détermination du jour de la semaine d'une date donnée (algorithme de Sakamoto)", "Dates"]))
203+
pos__2 = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=279, start_column=31, end_line=279, end_column=32, law_headings=["Détermination du jour de la semaine d'une date donnée (algorithme de Sakamoto)", "Dates"]))
204+
pos__3 = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=284, start_column=33, end_line=284, end_column=34, law_headings=["Détermination du jour de la semaine d'une date donnée (algorithme de Sakamoto)", "Dates"]))
205+
pos__4 = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=285, start_column=33, end_line=285, end_column=34, law_headings=["Détermination du jour de la semaine d'une date donnée (algorithme de Sakamoto)", "Dates"]))
206+
pos__5 = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=286, start_column=33, end_line=286, end_column=34, law_headings=["Détermination du jour de la semaine d'une date donnée (algorithme de Sakamoto)", "Dates"]))
207+
pos__6 = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=289, start_column=7, end_line=289, end_column=8, law_headings=["Détermination du jour de la semaine d'une date donnée (algorithme de Sakamoto)", "Dates"]))
208+
day_number = (((((((year_number + integer_of_decimal(div(pos, year_number, Integer(4)))) - integer_of_decimal(div(pos__1, year_number, Integer(100)))) + integer_of_decimal(div(pos__2, year_number, Integer(400)))) + n_number) + acces_jour(date_donnee)) - (Integer(7) * integer_of_decimal(div(pos__6, (((((year_number + integer_of_decimal(div(pos__3, year_number, Integer(4)))) - integer_of_decimal(div(pos__4, year_number, Integer(100)))) + integer_of_decimal(div(pos__5, year_number, Integer(400)))) + n_number) + acces_jour(date_donnee)), Integer(7))))))
209+
jour_de_la_semaine__2 = (list_fr.nieme_element([JourDeLaSemaine(JourDeLaSemaine_Code.Lundi, Unit()), JourDeLaSemaine(JourDeLaSemaine_Code.Mardi, Unit()), JourDeLaSemaine(JourDeLaSemaine_Code.Mercredi, Unit()), JourDeLaSemaine(JourDeLaSemaine_Code.Jeudi, Unit()), JourDeLaSemaine(JourDeLaSemaine_Code.Vendredi, Unit()), JourDeLaSemaine(JourDeLaSemaine_Code.Samedi, Unit()), JourDeLaSemaine(JourDeLaSemaine_Code.Dimanche, Unit())], (day_number + Integer(1))))
210+
if jour_de_la_semaine__2.value is not None:
211+
jour_de_la_semaine__1 = (jour_de_la_semaine__2.value)
212+
else:
213+
pos__7 = (SourcePosition(filename="libcatala/date_fr.catala_fr", start_line=294, start_column=14, end_line=294, end_column=24, law_headings=["Détermination du jour de la semaine d'une date donnée (algorithme de Sakamoto)", "Dates"]))
214+
raise Impossible(pos__7, None)
215+
return jour_de_la_semaine__1
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# This file has been generated by the Catala compiler, do not edit!
2+
3+
from catala_runtime import *
4+
from typing import Any, List, Callable, Tuple
5+
from enum import Enum
6+
7+
# Fixme: at the moment this and the corresponding part of the runtime
8+
# are still based on the Python date module and not on Dates_calc
9+
10+
def of_ymd(pos:SourcePosition, dyear:Integer, dmonth:Integer, dday:Integer):
11+
return Date((dyear.value, dmonth.value, dday.value), pos)
12+
13+
def to_ymd(d:Date):
14+
return (Integer(d.value.year),
15+
Integer(d.value.month),
16+
Integer(d.value.day))
17+
18+
def last_day_of_month(d:Date):
19+
return Date(d.value.last_day_of_month())
20+
21+
def add_rounded_down(d:Date, dur:Duration):
22+
return d.__add__(dur, dates.DateRounding.RoundDown)
23+
24+
def add_rounded_up(d:Date, dur:Duration):
25+
return d.__add__(dur, dates.DateRounding.RoundUp)
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# This file has been generated by the Catala compiler, do not edit!
2+
3+
from catala_runtime import *
4+
from typing import Any, List, Callable, Tuple
5+
from enum import Enum
6+
from . import Decimal_internal as decimal_internal
7+
8+
9+
def min(d1:Decimal, d2:Decimal):
10+
if (d1 > d2):
11+
min__1 = (d2)
12+
else:
13+
min__1 = (d1)
14+
return min__1
15+
16+
def max(d1:Decimal, d2:Decimal):
17+
if (d1 > d2):
18+
max__1 = (d1)
19+
else:
20+
max__1 = (d2)
21+
return max__1
22+
23+
def troncature(d:Decimal):
24+
if (d == decimal_of_string("0")):
25+
troncature__1 = (decimal_of_string("0"))
26+
elif (d > decimal_of_string("0")):
27+
troncature__1 = (decimal_round((d - decimal_of_string("1/2"))))
28+
else:
29+
troncature__1 = (decimal_round((d + decimal_of_string("1/2"))))
30+
return troncature__1
31+
32+
def arrondi_a_la_decimale(d:Decimal, nieme_decimale:Integer):
33+
return decimal_internal.round_to_decimal(d, nieme_decimale)
34+
35+
def somme(l:List[Decimal]):
36+
def somme__1(total:Decimal, x:Decimal):
37+
return (total + x)
38+
return list_fold_left(somme__1, decimal_of_string("0"), l)
39+
40+
def plafond(d:Decimal, valeur_max:Decimal):
41+
return min(d, valeur_max)
42+
43+
def plancher(d:Decimal, valeur_min:Decimal):
44+
return max(d, valeur_min)
45+
46+
def arrondi_par_defaut(d:Decimal):
47+
if (d > decimal_of_string("0")):
48+
arrondi_par_defaut__1 = (troncature(d))
49+
elif (troncature(d) == d):
50+
arrondi_par_defaut__1 = (d)
51+
else:
52+
arrondi_par_defaut__1 = (troncature((d - decimal_of_string("1"))))
53+
return arrondi_par_defaut__1
54+
55+
def arrondi_par_exces(d:Decimal):
56+
if (d >= decimal_of_string("0")):
57+
if (troncature(d) == d):
58+
arrondi_par_exces__1 = (d)
59+
else:
60+
arrondi_par_exces__1 = (troncature((d + decimal_of_string("1"))))
61+
else:
62+
arrondi_par_exces__1 = (decimal_round((d + decimal_of_string("1/2"))))
63+
return arrondi_par_exces__1
64+
65+
def positif(d:Decimal):
66+
return plancher(d, decimal_of_string("0"))
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from catala_runtime import *
2+
3+
def round_to_decimal2(variable: Decimal, n_decimal: Integer) -> Decimal:
4+
if n_decimal == Integer(0):
5+
return decimal_round(variable)
6+
pow_10 = Decimal(pow(10, abs(int(n_decimal.value))))
7+
if n_decimal > Integer(0):
8+
return decimal_round(variable * pow_10) / pow_10
9+
else:
10+
return decimal_round(variable / pow_10) * pow_10
11+
12+
def round_to_decimal(variable: Decimal, n_decimal: Integer) -> Decimal:
13+
r = round_to_decimal2(variable, n_decimal)
14+
return r
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# This file has been generated by the Catala compiler, do not edit!
2+
3+
from catala_runtime import *
4+
from typing import Any, List, Callable, Tuple
5+
from enum import Enum
6+
7+
8+
def positif(d:Duration):
9+
pos = (SourcePosition(filename="libcatala/duration_fr.catala_fr", start_line=17, start_column=10, end_line=17, end_column=11, law_headings=["Fonctions utilitaires", "Durées"]))
10+
if gt_duration(pos, d, Duration((0,0,0))):
11+
positif__1 = (d)
12+
else:
13+
positif__1 = (Duration((0,0,0)))
14+
return positif__1
15+
16+
def somme(l:List[Duration]):
17+
def somme__1(total:Duration, x:Duration):
18+
return (total + x)
19+
return list_fold_left(somme__1, Duration((0,0,0)), l)

0 commit comments

Comments
 (0)