lecrapaud 0.4.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.

Files changed (60) hide show
  1. lecrapaud/__init__.py +0 -0
  2. lecrapaud/config.py +16 -0
  3. lecrapaud/db/__init__.py +0 -0
  4. lecrapaud/db/alembic/README +1 -0
  5. lecrapaud/db/alembic/env.py +78 -0
  6. lecrapaud/db/alembic/script.py.mako +26 -0
  7. lecrapaud/db/alembic/versions/2025_04_06_1738-7390745388e4_initial_setup.py +295 -0
  8. lecrapaud/db/alembic/versions/2025_04_06_1755-40cd8d3e798e_unique_constraint_for_data.py +30 -0
  9. lecrapaud/db/alembic/versions/2025_05_23_1724-2360941fa0bd_longer_string.py +52 -0
  10. lecrapaud/db/alembic/versions/2025_05_27_1159-b96396dcfaff_add_env_to_trading_tables.py +34 -0
  11. lecrapaud/db/alembic/versions/2025_05_27_1337-40cbfc215f7c_fix_nb_character_on_portfolio.py +39 -0
  12. lecrapaud/db/alembic/versions/2025_05_27_1526-3de994115317_to_datetime.py +36 -0
  13. lecrapaud/db/alembic/versions/2025_05_27_2003-25c227c684f8_add_fees_to_transactions.py +30 -0
  14. lecrapaud/db/alembic/versions/2025_05_27_2047-6b6f2d38e9bc_double_instead_of_float.py +132 -0
  15. lecrapaud/db/alembic/versions/2025_05_31_1111-c175e4a36d68_generalise_stock_to_group.py +36 -0
  16. lecrapaud/db/alembic/versions/2025_05_31_1256-5681095bfc27_create_investment_run_and_portfolio_.py +62 -0
  17. lecrapaud/db/alembic/versions/2025_05_31_1806-339927587383_add_investment_run_id.py +107 -0
  18. lecrapaud/db/alembic/versions/2025_05_31_1834-52b809a34371_make_nullablee.py +38 -0
  19. lecrapaud/db/alembic/versions/2025_05_31_1849-3b8550297e8e_change_date_to_datetime.py +44 -0
  20. lecrapaud/db/alembic/versions/2025_05_31_1852-e6b8c95d8243_add_date_to_portfolio_history.py +30 -0
  21. lecrapaud/db/alembic/versions/2025_06_10_1136-db8cdd83563a_addnewsandoptiontodata.py +32 -0
  22. lecrapaud/db/crud.py +179 -0
  23. lecrapaud/db/models/__init__.py +11 -0
  24. lecrapaud/db/models/base.py +6 -0
  25. lecrapaud/db/models/dataset.py +124 -0
  26. lecrapaud/db/models/feature.py +46 -0
  27. lecrapaud/db/models/feature_selection.py +126 -0
  28. lecrapaud/db/models/feature_selection_rank.py +80 -0
  29. lecrapaud/db/models/model.py +41 -0
  30. lecrapaud/db/models/model_selection.py +56 -0
  31. lecrapaud/db/models/model_training.py +54 -0
  32. lecrapaud/db/models/score.py +62 -0
  33. lecrapaud/db/models/target.py +59 -0
  34. lecrapaud/db/services.py +0 -0
  35. lecrapaud/db/setup.py +58 -0
  36. lecrapaud/directory_management.py +28 -0
  37. lecrapaud/feature_engineering.py +1119 -0
  38. lecrapaud/feature_selection.py +1229 -0
  39. lecrapaud/jobs/__init__.py +13 -0
  40. lecrapaud/jobs/config.py +17 -0
  41. lecrapaud/jobs/scheduler.py +36 -0
  42. lecrapaud/jobs/tasks.py +57 -0
  43. lecrapaud/model_selection.py +1571 -0
  44. lecrapaud/predictions.py +292 -0
  45. lecrapaud/search_space.py +844 -0
  46. lecrapaud/services/__init__.py +0 -0
  47. lecrapaud/services/embedding_categorical.py +71 -0
  48. lecrapaud/services/indicators.py +309 -0
  49. lecrapaud/speed_tests/experiments.py +139 -0
  50. lecrapaud/speed_tests/test-gpu-bilstm.ipynb +261 -0
  51. lecrapaud/speed_tests/test-gpu-resnet.ipynb +166 -0
  52. lecrapaud/speed_tests/test-gpu-transformers.ipynb +254 -0
  53. lecrapaud/speed_tests/tests.ipynb +145 -0
  54. lecrapaud/speed_tests/trash.py +37 -0
  55. lecrapaud/training.py +151 -0
  56. lecrapaud/utils.py +246 -0
  57. lecrapaud-0.4.0.dist-info/LICENSE +201 -0
  58. lecrapaud-0.4.0.dist-info/METADATA +103 -0
  59. lecrapaud-0.4.0.dist-info/RECORD +60 -0
  60. lecrapaud-0.4.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,13 @@
1
+ from celery import Celery, signals
2
+ from src.jobs import config
3
+ from src.utils import setup_logger
4
+
5
+
6
+ @signals.setup_logging.connect
7
+ def configure_celery_logging(**kwargs):
8
+ setup_logger()
9
+
10
+
11
+ app = Celery("src")
12
+ app.config_from_object(config)
13
+ app.autodiscover_tasks(["src.jobs"])
@@ -0,0 +1,17 @@
1
+ from src.config import REDIS_URL
2
+
3
+ REDIS_URL = REDIS_URL + "/1"
4
+ broker_url = REDIS_URL
5
+ result_backend = REDIS_URL
6
+
7
+ # For RedBeat
8
+ redbeat_redis_url = REDIS_URL
9
+ beat_scheduler = "redbeat.RedBeatScheduler"
10
+
11
+ timezone = "UTC"
12
+
13
+ task_acks_late = True
14
+ task_reject_on_worker_lost = True
15
+ worker_prefetch_multiplier = 1
16
+ task_acks_on_failure_or_timeout = False
17
+ worker_concurrency = 1
@@ -0,0 +1,36 @@
1
+ from redbeat.schedulers import RedBeatSchedulerEntry
2
+ from celery.schedules import crontab
3
+ from src.jobs.tasks import app
4
+
5
+
6
+ def schedule_tasks():
7
+ schedule_tasks_list = [
8
+ {
9
+ "name": "task_send_daily_emails",
10
+ "task": "src.jobs.tasks.task_send_daily_emails",
11
+ "schedule": crontab(minute=00, hour=12),
12
+ },
13
+ {
14
+ "name": "task_training_experiment",
15
+ "task": "src.jobs.tasks.task_training_experiment",
16
+ "schedule": crontab(minute=45, hour=00),
17
+ },
18
+ ]
19
+
20
+ for task in schedule_tasks_list:
21
+ entry = RedBeatSchedulerEntry(**task, app=app)
22
+ entry.save()
23
+
24
+
25
+ def unschedule_tasks():
26
+ unschedule_task_keys = [
27
+ "redbeat:task_send_daily_emails",
28
+ "redbeat:task_train_models",
29
+ ]
30
+
31
+ for key in unschedule_task_keys:
32
+ try:
33
+ entry = RedBeatSchedulerEntry.from_key(key, app=app)
34
+ entry.delete()
35
+ except KeyError:
36
+ pass
@@ -0,0 +1,57 @@
1
+ from src.jobs import app
2
+
3
+ # from honeybadger import honeybadger
4
+ from src.send_daily_emails import send_daily_emails
5
+ from src.config import DATASET_ID, RECEIVER_EMAIL
6
+ from src.training import run_training
7
+ from src.constants import stock_list_3
8
+ from src.search_space import get_models_idx
9
+
10
+
11
+ @app.task(
12
+ bind=True,
13
+ autoretry_for=(Exception,),
14
+ retry_backoff=True,
15
+ retry_kwargs={"max_retries": 5},
16
+ acks_late=True,
17
+ )
18
+ def task_send_daily_emails(self):
19
+ try:
20
+ print(f"[Attempt #{self.request.retries}] task_send_daily_emails")
21
+ dataset_id = int(DATASET_ID)
22
+ email = RECEIVER_EMAIL
23
+ return send_daily_emails(email, dataset_id)
24
+ except Exception as e:
25
+ print(e)
26
+ # honeybadger.notify(e)
27
+ raise
28
+
29
+
30
+ @app.task(
31
+ bind=True,
32
+ autoretry_for=(Exception,),
33
+ retry_backoff=True,
34
+ retry_kwargs={"max_retries": 5},
35
+ acks_late=True,
36
+ )
37
+ def task_training_experiment(self):
38
+ try:
39
+ print(f"[Attempt #{self.request.retries}] task_training_experiment")
40
+ run_training(
41
+ years_of_data=20,
42
+ list_of_groups=stock_list_3,
43
+ targets_numbers=range(1, 15),
44
+ percentile=20,
45
+ corr_threshold=80,
46
+ max_features=25,
47
+ models_idx=get_models_idx("linear", "xgb"),
48
+ number_of_trials=20,
49
+ perform_hyperoptimization=True,
50
+ perform_crossval=False,
51
+ preserve_model=False,
52
+ session_name="20y_stock_list_3_linear_xgb",
53
+ )
54
+ except Exception as e:
55
+ print(e)
56
+ # honeybadger.notify(e)
57
+ raise