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/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, because hyperopt and bayesian opt need a fixed 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
- Classes and class instances are converted to readable strings like 'ClassName()'.
235
+ Handles NumPy types, datetime objects, and class instances.
236
236
  """
237
- if isinstance(obj, (str, int, float, bool, type(None))):
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
  Metadata-Version: 2.4
2
2
  Name: lecrapaud
3
- Version: 0.19.2
3
+ Version: 0.20.0
4
4
  Summary: Framework for machine and deep learning, with regression, classification and time series analysis
5
5
  License: Apache License
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  lecrapaud/__init__.py,sha256=oCxbtw_nk8rlOXbXbWo0RRMlsh6w-hTiZ6e5PRG_wp0,28
2
- lecrapaud/api.py,sha256=GsylHdScug-D8ePbPKo5r7Wa0myj9Ol0OqNwlNsbgs8,22518
3
- lecrapaud/config.py,sha256=itiqC31HB8i2Xo-kn2viCQrg_9tnA07-TJuZ-xdnx44,1126
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=Lhyw9fVLdom0Fc6yIP-ip8FjkU1EwVwjae5q2VM815Q,740
17
- lecrapaud/db/models/base.py,sha256=Sc6g38LsNsjn9-qpWOMSsZlbUER0Xr56-yLIJLpTMDU,7808
18
- lecrapaud/db/models/experiment.py,sha256=9eHQ6p_bcHr0UMWiJBetkAE79p_KO3rUVNTS6WIJpNQ,15265
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=mk42xuw1Sm_7Pznfg7TNc5_S4hscdw79QgIe3Bt9ZRI,3245
21
- lecrapaud/db/models/feature_selection_rank.py,sha256=Ydsb_rAT58FoSH13wkGjGPByzsjPx3DITXgJ2jgZmow,2198
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=tJuICcporf3TxQHbJbHxnKgkaVc02z2kJJoCYS2nDcw,2001
24
- lecrapaud/db/models/model_training.py,sha256=jAIYPdwBln2jf593soLQ730uYrTfNK8zdG8TesOqmh0,1698
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=87W5AkGRYu8b2rF5FNQ0MFC6wtGc-gGagNJQN_0vnDQ,3667
29
+ lecrapaud/db/session.py,sha256=u9NCwUoV5VbtScRb6HOSQr4oTEjIwj0waP5mGlc1qJg,3735
29
30
  lecrapaud/directories.py,sha256=0LrANuDgbuneSLker60c6q2hmGnQ3mKHIztTGzTx6Gw,826
30
- lecrapaud/experiment.py,sha256=1xLWjOrqAxJh9CdXOx9ppQuRFRRj0GH-xYZqg-ty9hI,2463
31
- lecrapaud/feature_engineering.py,sha256=aeK58ahZXFY8AoLiNM2HVBflF9V-E4dUT6XhzHpk2Cs,39265
32
- lecrapaud/feature_selection.py,sha256=6ry-oVPQHbipm1XSE5YsH7AY0lQFt4CFbWiHiRs1nxg,43593
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=z6sMU6ZGaymZOWdJehPw4yaWdzcYTABWweyH5LvCJwk,76980
43
- lecrapaud/search_space.py,sha256=FCIEHZBK1pUQ4CphJuxwXY2N_BdrCelRzHsCXnNLlVI,36334
44
- lecrapaud/utils.py,sha256=ATKu9pbXjYFRa2YzBYjqyLHJrzfnZ7SJrOD_qAnEBYE,8242
45
- lecrapaud-0.19.2.dist-info/METADATA,sha256=cbNwzeWVppM5fGxhHgZ1ocIeJi6O6RPIxSPojjOIoio,11137
46
- lecrapaud-0.19.2.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
47
- lecrapaud-0.19.2.dist-info/licenses/LICENSE,sha256=MImCryu0AnqhJE_uAZD-PIDKXDKb8sT7v0i1NOYeHTM,11350
48
- lecrapaud-0.19.2.dist-info/RECORD,,
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
- )