lecrapaud 0.19.2__py3-none-any.whl → 0.20.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of lecrapaud might be problematic. Click here for more details.
- lecrapaud/api.py +3 -0
- lecrapaud/config.py +1 -0
- lecrapaud/db/alembic/versions/2025_10_25_0635-07e303521594_add_unique_constraint_to_score.py +39 -0
- lecrapaud/db/alembic/versions/2025_10_26_1727-033e0f7eca4f_merge_score_and_model_trainings_into_.py +264 -0
- lecrapaud/db/models/__init__.py +2 -4
- lecrapaud/db/models/base.py +103 -65
- lecrapaud/db/models/experiment.py +53 -46
- lecrapaud/db/models/feature_selection.py +0 -3
- lecrapaud/db/models/feature_selection_rank.py +0 -18
- lecrapaud/db/models/model_selection.py +2 -2
- lecrapaud/db/models/{score.py → model_selection_score.py} +29 -12
- lecrapaud/db/session.py +1 -0
- lecrapaud/experiment.py +7 -4
- lecrapaud/feature_engineering.py +6 -9
- lecrapaud/feature_selection.py +0 -1
- lecrapaud/model_selection.py +478 -170
- lecrapaud/search_space.py +2 -1
- lecrapaud/utils.py +22 -2
- {lecrapaud-0.19.2.dist-info → lecrapaud-0.20.0.dist-info}/METADATA +1 -1
- {lecrapaud-0.19.2.dist-info → lecrapaud-0.20.0.dist-info}/RECORD +22 -21
- lecrapaud/db/models/model_training.py +0 -64
- {lecrapaud-0.19.2.dist-info → lecrapaud-0.20.0.dist-info}/WHEEL +0 -0
- {lecrapaud-0.19.2.dist-info → lecrapaud-0.20.0.dist-info}/licenses/LICENSE +0 -0
lecrapaud/search_space.py
CHANGED
|
@@ -51,7 +51,8 @@ from keras.activations import sigmoid
|
|
|
51
51
|
from ray import tune
|
|
52
52
|
import pandas as pd
|
|
53
53
|
|
|
54
|
-
# we cannot use tune.sample_from function to make conditionnal search space,
|
|
54
|
+
# we cannot use tune.sample_from function to make conditionnal search space,
|
|
55
|
+
# because hyperopt and bayesian opt need a fixed search space
|
|
55
56
|
|
|
56
57
|
ml_models = [
|
|
57
58
|
{
|
lecrapaud/utils.py
CHANGED
|
@@ -232,9 +232,28 @@ def remove_accents(text: str) -> str:
|
|
|
232
232
|
def serialize_for_json(obj):
|
|
233
233
|
"""
|
|
234
234
|
Recursively convert any object into a JSON-serializable structure.
|
|
235
|
-
|
|
235
|
+
Handles NumPy types, datetime objects, and class instances.
|
|
236
236
|
"""
|
|
237
|
-
|
|
237
|
+
import numpy as np
|
|
238
|
+
from datetime import datetime, date
|
|
239
|
+
import pandas as pd
|
|
240
|
+
|
|
241
|
+
# Handle NumPy types
|
|
242
|
+
if isinstance(obj, (np.integer, np.int64, np.int32, np.int16)):
|
|
243
|
+
return int(obj)
|
|
244
|
+
elif isinstance(obj, (np.floating, np.float64, np.float32, np.float16)):
|
|
245
|
+
return float(obj)
|
|
246
|
+
elif isinstance(obj, np.ndarray):
|
|
247
|
+
return obj.tolist()
|
|
248
|
+
elif isinstance(obj, np.bool_):
|
|
249
|
+
return bool(obj)
|
|
250
|
+
|
|
251
|
+
# Handle datetime types
|
|
252
|
+
elif isinstance(obj, (datetime, date, pd.Timestamp)):
|
|
253
|
+
return obj.isoformat()
|
|
254
|
+
|
|
255
|
+
# Handle basic Python types
|
|
256
|
+
elif isinstance(obj, (str, int, float, bool, type(None))):
|
|
238
257
|
return obj
|
|
239
258
|
elif isinstance(obj, dict):
|
|
240
259
|
return {str(k): serialize_for_json(v) for k, v in obj.items()}
|
|
@@ -244,6 +263,7 @@ def serialize_for_json(obj):
|
|
|
244
263
|
# A class/type object like int, str, etc.
|
|
245
264
|
return obj.__name__
|
|
246
265
|
elif hasattr(obj, "__class__"):
|
|
266
|
+
# For other objects, return their string representation
|
|
247
267
|
return f"{obj.__class__.__name__}()"
|
|
248
268
|
else:
|
|
249
269
|
return str(obj)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
lecrapaud/__init__.py,sha256=oCxbtw_nk8rlOXbXbWo0RRMlsh6w-hTiZ6e5PRG_wp0,28
|
|
2
|
-
lecrapaud/api.py,sha256=
|
|
3
|
-
lecrapaud/config.py,sha256=
|
|
2
|
+
lecrapaud/api.py,sha256=xPa8GG5o9ngjJaGgBWhojzGzRq1tbFL5nsCv5U1Ehjw,22681
|
|
3
|
+
lecrapaud/config.py,sha256=QK1MxWsEddXii02Rme31tCGDyMFsfHHF2Zy-lLIOuSY,1218
|
|
4
4
|
lecrapaud/db/__init__.py,sha256=82o9fMfaqKXPh2_rt44EzNRVZV1R4LScEnQYvj_TjK0,34
|
|
5
5
|
lecrapaud/db/alembic/README,sha256=MVlc9TYmr57RbhXET6QxgyCcwWP7w-vLkEsirENqiIQ,38
|
|
6
6
|
lecrapaud/db/alembic/env.py,sha256=RvTTBa3bDVBxmDtapAfzUoeWBgmVQU3s9U6HmQCAP84,2421
|
|
@@ -12,24 +12,25 @@ lecrapaud/db/alembic/versions/2025_06_25_1759-72aa496ca65b_.py,sha256=MiqooJuZ1e
|
|
|
12
12
|
lecrapaud/db/alembic/versions/2025_08_25_1434-7ed9963e732f_add_best_score_to_model_selection.py,sha256=gyQDFFHp1dlILuDtXSPdUU_MsLlX-UzTP-E96Aj_Hto,966
|
|
13
13
|
lecrapaud/db/alembic/versions/2025_08_28_1516-c36e9fee22b9_add_avg_precision_to_score.py,sha256=Bpi1zegNGX1qU-8RVzRfwjyv2cVaQ5P9cpKQ1QDJgxs,945
|
|
14
14
|
lecrapaud/db/alembic/versions/2025_08_28_1622-8b11c1ba982e_change_name_column.py,sha256=g6H2Z9MwB6UEiqdGlBoHBXpO9DTaWkwHt8FS6joVOm0,1191
|
|
15
|
+
lecrapaud/db/alembic/versions/2025_10_25_0635-07e303521594_add_unique_constraint_to_score.py,sha256=FshOF1t-NWXrBtXT3wMNGFslJ4sWUxzvBEXSymu05cI,1043
|
|
16
|
+
lecrapaud/db/alembic/versions/2025_10_26_1727-033e0f7eca4f_merge_score_and_model_trainings_into_.py,sha256=htHUD4zPJr-0z_DQfTi8r9RsFVe9m7SL0f7oRIvLIcQ,10999
|
|
15
17
|
lecrapaud/db/alembic.ini,sha256=Zw2rdwsKV6c7J1SPtoFIPDX08_oTP3MuUKnNxBDiY8I,3796
|
|
16
|
-
lecrapaud/db/models/__init__.py,sha256
|
|
17
|
-
lecrapaud/db/models/base.py,sha256=
|
|
18
|
-
lecrapaud/db/models/experiment.py,sha256=
|
|
18
|
+
lecrapaud/db/models/__init__.py,sha256=-XoCN1eeLihnNxBMl90lXrgrTSDkMbeqgienMqFi5f4,702
|
|
19
|
+
lecrapaud/db/models/base.py,sha256=0548x4ftd6Oim9BJmtD7Er4izM6u0QCrlTG5560384w,9458
|
|
20
|
+
lecrapaud/db/models/experiment.py,sha256=BOQzaAkEuR_ZA9tleUCB8m3RRLAuCKwlrF5BVAvOMNo,15562
|
|
19
21
|
lecrapaud/db/models/feature.py,sha256=5o77O2FyRObnLOCGNj8kaPSGM3pLv1Ov6mXXHYkmnYY,1136
|
|
20
|
-
lecrapaud/db/models/feature_selection.py,sha256=
|
|
21
|
-
lecrapaud/db/models/feature_selection_rank.py,sha256=
|
|
22
|
+
lecrapaud/db/models/feature_selection.py,sha256=PBNWk9QaLb7-_xyrLlOUfab0y2xEj3agAIzt1gxssZQ,3172
|
|
23
|
+
lecrapaud/db/models/feature_selection_rank.py,sha256=POo-OLdaxU3eaH6fC6fTOj7Fnv0ujvTXgYZMzjjwTfE,1773
|
|
22
24
|
lecrapaud/db/models/model.py,sha256=F0hyMjd4FFHCv6_arIWBEmBCGOfG3b6_uzU8ExtFE90,952
|
|
23
|
-
lecrapaud/db/models/model_selection.py,sha256=
|
|
24
|
-
lecrapaud/db/models/
|
|
25
|
-
lecrapaud/db/models/score.py,sha256=oo9-IAP8iRgrQYe39W_T1nW4zA_E3cLuTnFaDPAAK1A,1703
|
|
25
|
+
lecrapaud/db/models/model_selection.py,sha256=V2hh7aTof83GPfv4pMYkyA6zR1fiC4Cyj7Z3hzwqhQM,2014
|
|
26
|
+
lecrapaud/db/models/model_selection_score.py,sha256=7u96v90_C0G5OJDsE7sQ3V99VPQc_7ZvwNx9-y1r2Z8,2258
|
|
26
27
|
lecrapaud/db/models/target.py,sha256=DKnfeaLU8eT8J_oh_vuFo5-o1CaoXR13xBbswme6Bgk,1649
|
|
27
28
|
lecrapaud/db/models/utils.py,sha256=-a-nWWmpJ2XzidIxo2COVUTrGZIPYCfBzjhcszJj_bM,1109
|
|
28
|
-
lecrapaud/db/session.py,sha256=
|
|
29
|
+
lecrapaud/db/session.py,sha256=u9NCwUoV5VbtScRb6HOSQr4oTEjIwj0waP5mGlc1qJg,3735
|
|
29
30
|
lecrapaud/directories.py,sha256=0LrANuDgbuneSLker60c6q2hmGnQ3mKHIztTGzTx6Gw,826
|
|
30
|
-
lecrapaud/experiment.py,sha256=
|
|
31
|
-
lecrapaud/feature_engineering.py,sha256=
|
|
32
|
-
lecrapaud/feature_selection.py,sha256
|
|
31
|
+
lecrapaud/experiment.py,sha256=S9qdhSTFX8M7Fxjnlsl0PsPBTuexF-7Ogto2rWb46yM,2607
|
|
32
|
+
lecrapaud/feature_engineering.py,sha256=a1B4AbACZZiIxCmxyyfjekyWi6qTBt1E77cd36O89yI,39209
|
|
33
|
+
lecrapaud/feature_selection.py,sha256=-uk3Wi2bwPEO-_rOz-TQceMB5uxN9El16EWn5f-gdIM,43536
|
|
33
34
|
lecrapaud/integrations/openai_integration.py,sha256=hHLF3fk5Bps8KNbNrEL3NUFa945jwClE6LrLpuMZOd4,7459
|
|
34
35
|
lecrapaud/jobs/__init__.py,sha256=ZkrsyTOR21c_wN7RY8jPhm8jCrL1oCEtTsf3VFIlQiE,292
|
|
35
36
|
lecrapaud/jobs/config.py,sha256=AmO0j3RFjx8H66dfKw_7vnshaOJb9Ox5BAZ9cwwLFMY,377
|
|
@@ -39,10 +40,10 @@ lecrapaud/misc/tabpfn_tests.ipynb,sha256=VkgsCUJ30d8jaL2VaWtQAgb8ngHPNtPgnXLs7QQ
|
|
|
39
40
|
lecrapaud/misc/test-gpu-bilstm.ipynb,sha256=4nLuZRJVe2kn6kEmauhRiz5wkWT9AVrYhI9CEk_dYUY,9608
|
|
40
41
|
lecrapaud/misc/test-gpu-resnet.ipynb,sha256=27Vu7nYwujYeh3fOxBNCnKJn3MXNPKZU-U8oDDUbymg,4944
|
|
41
42
|
lecrapaud/misc/test-gpu-transformers.ipynb,sha256=k6MBSs_Um1h4PykvE-LTBcdpbWLbIFST_xl_AFW2jgI,8444
|
|
42
|
-
lecrapaud/model_selection.py,sha256=
|
|
43
|
-
lecrapaud/search_space.py,sha256=
|
|
44
|
-
lecrapaud/utils.py,sha256=
|
|
45
|
-
lecrapaud-0.
|
|
46
|
-
lecrapaud-0.
|
|
47
|
-
lecrapaud-0.
|
|
48
|
-
lecrapaud-0.
|
|
43
|
+
lecrapaud/model_selection.py,sha256=6VYwrvneA6qsRTewaHzXLXV4AGCwwEtaDfQja_AX2Wo,87856
|
|
44
|
+
lecrapaud/search_space.py,sha256=caCehJklD3-sgmlisJj_GmuB7LJiVvTF71gEjPGDvV4,36336
|
|
45
|
+
lecrapaud/utils.py,sha256=vsNBd2Nnhpjo65Ugz2GFJaRhq3U3_eWERfofpevo5Ls,8884
|
|
46
|
+
lecrapaud-0.20.0.dist-info/METADATA,sha256=DpCGcnGtDcnOdO_tgulp24kUSMfJ4ApxReIjIJ_-9qs,11137
|
|
47
|
+
lecrapaud-0.20.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
48
|
+
lecrapaud-0.20.0.dist-info/licenses/LICENSE,sha256=MImCryu0AnqhJE_uAZD-PIDKXDKb8sT7v0i1NOYeHTM,11350
|
|
49
|
+
lecrapaud-0.20.0.dist-info/RECORD,,
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
from sqlalchemy import (
|
|
2
|
-
Column,
|
|
3
|
-
Integer,
|
|
4
|
-
String,
|
|
5
|
-
DateTime,
|
|
6
|
-
Date,
|
|
7
|
-
Float,
|
|
8
|
-
JSON,
|
|
9
|
-
Table,
|
|
10
|
-
ForeignKey,
|
|
11
|
-
BigInteger,
|
|
12
|
-
Index,
|
|
13
|
-
TIMESTAMP,
|
|
14
|
-
UniqueConstraint,
|
|
15
|
-
)
|
|
16
|
-
from sqlalchemy import desc, asc, cast, text, func
|
|
17
|
-
|
|
18
|
-
from sqlalchemy.orm import relationship, Mapped, mapped_column, DeclarativeBase
|
|
19
|
-
|
|
20
|
-
from lecrapaud.db.session import get_db
|
|
21
|
-
from lecrapaud.db.models.base import Base
|
|
22
|
-
from lecrapaud.config import LECRAPAUD_TABLE_PREFIX
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class ModelTraining(Base):
|
|
26
|
-
|
|
27
|
-
id = Column(BigInteger, primary_key=True, index=True, autoincrement=True)
|
|
28
|
-
created_at = Column(
|
|
29
|
-
TIMESTAMP(timezone=True), server_default=func.now(), nullable=False
|
|
30
|
-
)
|
|
31
|
-
updated_at = Column(
|
|
32
|
-
TIMESTAMP(timezone=True),
|
|
33
|
-
server_default=func.now(),
|
|
34
|
-
onupdate=func.now(),
|
|
35
|
-
nullable=False,
|
|
36
|
-
)
|
|
37
|
-
best_params = Column(JSON)
|
|
38
|
-
model_path = Column(String(255))
|
|
39
|
-
training_time = Column(Integer)
|
|
40
|
-
model_id = Column(
|
|
41
|
-
BigInteger, ForeignKey(f"{LECRAPAUD_TABLE_PREFIX}_models.id"), nullable=False
|
|
42
|
-
)
|
|
43
|
-
model_selection_id = Column(
|
|
44
|
-
BigInteger,
|
|
45
|
-
ForeignKey(f"{LECRAPAUD_TABLE_PREFIX}_model_selections.id", ondelete="CASCADE"),
|
|
46
|
-
nullable=False,
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
model = relationship("Model", lazy="selectin")
|
|
50
|
-
model_selection = relationship(
|
|
51
|
-
"ModelSelection", back_populates="model_trainings", lazy="selectin"
|
|
52
|
-
)
|
|
53
|
-
score = relationship(
|
|
54
|
-
"Score",
|
|
55
|
-
back_populates="model_trainings",
|
|
56
|
-
cascade="all, delete-orphan",
|
|
57
|
-
lazy="selectin",
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
__table_args__ = (
|
|
61
|
-
UniqueConstraint(
|
|
62
|
-
"model_id", "model_selection_id", name="uq_model_training_composite"
|
|
63
|
-
),
|
|
64
|
-
)
|
|
File without changes
|
|
File without changes
|