ins-pricing 0.4.5__py3-none-any.whl → 0.5.1__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.
Files changed (93) hide show
  1. ins_pricing/README.md +48 -22
  2. ins_pricing/__init__.py +142 -90
  3. ins_pricing/cli/BayesOpt_entry.py +58 -46
  4. ins_pricing/cli/BayesOpt_incremental.py +77 -110
  5. ins_pricing/cli/Explain_Run.py +42 -23
  6. ins_pricing/cli/Explain_entry.py +551 -577
  7. ins_pricing/cli/Pricing_Run.py +42 -23
  8. ins_pricing/cli/bayesopt_entry_runner.py +51 -16
  9. ins_pricing/cli/utils/bootstrap.py +23 -0
  10. ins_pricing/cli/utils/cli_common.py +256 -256
  11. ins_pricing/cli/utils/cli_config.py +379 -360
  12. ins_pricing/cli/utils/import_resolver.py +375 -358
  13. ins_pricing/cli/utils/notebook_utils.py +256 -242
  14. ins_pricing/cli/watchdog_run.py +216 -198
  15. ins_pricing/frontend/__init__.py +10 -10
  16. ins_pricing/frontend/app.py +132 -61
  17. ins_pricing/frontend/config_builder.py +33 -0
  18. ins_pricing/frontend/example_config.json +11 -0
  19. ins_pricing/frontend/example_workflows.py +1 -1
  20. ins_pricing/frontend/runner.py +340 -388
  21. ins_pricing/governance/__init__.py +20 -20
  22. ins_pricing/governance/release.py +159 -159
  23. ins_pricing/modelling/README.md +1 -1
  24. ins_pricing/modelling/__init__.py +147 -92
  25. ins_pricing/modelling/{core/bayesopt → bayesopt}/README.md +31 -13
  26. ins_pricing/modelling/{core/bayesopt → bayesopt}/__init__.py +64 -102
  27. ins_pricing/modelling/{core/bayesopt → bayesopt}/config_components.py +12 -0
  28. ins_pricing/modelling/{core/bayesopt → bayesopt}/config_preprocess.py +589 -552
  29. ins_pricing/modelling/{core/bayesopt → bayesopt}/core.py +987 -958
  30. ins_pricing/modelling/{core/bayesopt → bayesopt}/model_explain_mixin.py +296 -296
  31. ins_pricing/modelling/{core/bayesopt → bayesopt}/model_plotting_mixin.py +488 -548
  32. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/__init__.py +27 -27
  33. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_ft_components.py +349 -342
  34. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_ft_trainer.py +921 -913
  35. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_gnn.py +794 -785
  36. ins_pricing/modelling/{core/bayesopt → bayesopt}/models/model_resn.py +454 -446
  37. ins_pricing/modelling/bayesopt/trainers/__init__.py +19 -0
  38. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_base.py +1294 -1282
  39. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_ft.py +64 -56
  40. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_glm.py +203 -198
  41. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_gnn.py +333 -325
  42. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_resn.py +279 -267
  43. ins_pricing/modelling/{core/bayesopt → bayesopt}/trainers/trainer_xgb.py +515 -313
  44. ins_pricing/modelling/bayesopt/utils/__init__.py +67 -0
  45. ins_pricing/modelling/bayesopt/utils/constants.py +21 -0
  46. ins_pricing/modelling/{core/bayesopt → bayesopt}/utils/distributed_utils.py +193 -186
  47. ins_pricing/modelling/bayesopt/utils/io_utils.py +7 -0
  48. ins_pricing/modelling/bayesopt/utils/losses.py +27 -0
  49. ins_pricing/modelling/bayesopt/utils/metrics_and_devices.py +17 -0
  50. ins_pricing/modelling/{core/bayesopt → bayesopt}/utils/torch_trainer_mixin.py +636 -623
  51. ins_pricing/modelling/{core/evaluation.py → evaluation.py} +113 -104
  52. ins_pricing/modelling/explain/__init__.py +55 -55
  53. ins_pricing/modelling/explain/metrics.py +27 -174
  54. ins_pricing/modelling/explain/permutation.py +237 -237
  55. ins_pricing/modelling/plotting/__init__.py +40 -36
  56. ins_pricing/modelling/plotting/compat.py +228 -0
  57. ins_pricing/modelling/plotting/curves.py +572 -572
  58. ins_pricing/modelling/plotting/diagnostics.py +163 -163
  59. ins_pricing/modelling/plotting/geo.py +362 -362
  60. ins_pricing/modelling/plotting/importance.py +121 -121
  61. ins_pricing/pricing/__init__.py +27 -27
  62. ins_pricing/pricing/factors.py +67 -56
  63. ins_pricing/production/__init__.py +35 -25
  64. ins_pricing/production/{predict.py → inference.py} +140 -57
  65. ins_pricing/production/monitoring.py +8 -21
  66. ins_pricing/reporting/__init__.py +11 -11
  67. ins_pricing/setup.py +1 -1
  68. ins_pricing/tests/production/test_inference.py +90 -0
  69. ins_pricing/utils/__init__.py +112 -78
  70. ins_pricing/utils/device.py +258 -237
  71. ins_pricing/utils/features.py +53 -0
  72. ins_pricing/utils/io.py +72 -0
  73. ins_pricing/utils/logging.py +34 -1
  74. ins_pricing/{modelling/core/bayesopt/utils → utils}/losses.py +125 -129
  75. ins_pricing/utils/metrics.py +158 -24
  76. ins_pricing/utils/numerics.py +76 -0
  77. ins_pricing/utils/paths.py +9 -1
  78. ins_pricing/utils/profiling.py +8 -4
  79. {ins_pricing-0.4.5.dist-info → ins_pricing-0.5.1.dist-info}/METADATA +1 -1
  80. ins_pricing-0.5.1.dist-info/RECORD +132 -0
  81. ins_pricing/modelling/core/BayesOpt.py +0 -146
  82. ins_pricing/modelling/core/__init__.py +0 -1
  83. ins_pricing/modelling/core/bayesopt/trainers/__init__.py +0 -19
  84. ins_pricing/modelling/core/bayesopt/utils/__init__.py +0 -86
  85. ins_pricing/modelling/core/bayesopt/utils/constants.py +0 -183
  86. ins_pricing/modelling/core/bayesopt/utils/io_utils.py +0 -126
  87. ins_pricing/modelling/core/bayesopt/utils/metrics_and_devices.py +0 -555
  88. ins_pricing/modelling/core/bayesopt/utils.py +0 -105
  89. ins_pricing/modelling/core/bayesopt/utils_backup.py +0 -1503
  90. ins_pricing/tests/production/test_predict.py +0 -233
  91. ins_pricing-0.4.5.dist-info/RECORD +0 -130
  92. {ins_pricing-0.4.5.dist-info → ins_pricing-0.5.1.dist-info}/WHEEL +0 -0
  93. {ins_pricing-0.4.5.dist-info → ins_pricing-0.5.1.dist-info}/top_level.txt +0 -0
@@ -18,6 +18,10 @@ import time
18
18
  from contextlib import contextmanager
19
19
  from typing import Optional
20
20
 
21
+ from ins_pricing.utils import get_logger
22
+
23
+ _logger = get_logger("ins_pricing.utils.profiling")
24
+
21
25
  try:
22
26
  import psutil
23
27
  HAS_PSUTIL = True
@@ -96,7 +100,7 @@ def profile_section(
96
100
  if logger:
97
101
  logger.log(log_level, msg)
98
102
  else:
99
- print(msg)
103
+ _logger.log(log_level, msg)
100
104
 
101
105
 
102
106
  def get_memory_info() -> dict:
@@ -250,7 +254,7 @@ def cleanup_memory(logger: Optional[logging.Logger] = None) -> None:
250
254
  if logger:
251
255
  logger.info(msg)
252
256
  else:
253
- print(msg)
257
+ _logger.info(msg)
254
258
 
255
259
 
256
260
  class MemoryMonitor:
@@ -301,7 +305,7 @@ class MemoryMonitor:
301
305
  if self.logger:
302
306
  self.logger.info(msg)
303
307
  else:
304
- print(msg)
308
+ _logger.info(msg)
305
309
 
306
310
  return self
307
311
 
@@ -323,7 +327,7 @@ class MemoryMonitor:
323
327
  if self.logger:
324
328
  self.logger.info(msg)
325
329
  else:
326
- print(msg)
330
+ _logger.info(msg)
327
331
 
328
332
  # Check threshold and cleanup if needed
329
333
  if self.threshold_gb is not None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ins_pricing
3
- Version: 0.4.5
3
+ Version: 0.5.1
4
4
  Summary: Reusable modelling, pricing, governance, and reporting utilities.
5
5
  Author: meishi125478
6
6
  License: Proprietary
@@ -0,0 +1,132 @@
1
+ ins_pricing/README.md,sha256=pufz_ChEpXXfLk96prv8ciqwgyVvHE5aEZ8iAH-u6k0,3679
2
+ ins_pricing/__init__.py,sha256=pATYokjg75DXHd2zyoct62efui98SCBO2H8B06Q68r0,4317
3
+ ins_pricing/exceptions.py,sha256=5fZavPV4zNJ7wPC75L215KkHXX9pRrfDAYZOdSKJMGo,4778
4
+ ins_pricing/setup.py,sha256=cbVFHNm5swws1eyPy6zTkZYH2GGwRehcJiKLAZ_2mNE,1702
5
+ ins_pricing/cli/BayesOpt_entry.py,sha256=AMdHJim2fG1_Z6DRZopt3wMWeYwTOnmcL2_8iO490kY,2058
6
+ ins_pricing/cli/BayesOpt_incremental.py,sha256=SerZyK2a6Lr3EBvuuay_Yq1dSQ8u2KvtKuePoLS7Y9w,36422
7
+ ins_pricing/cli/Explain_Run.py,sha256=zDtHZ6tbLXN7-mw7yCAK4R1D4oOfHr-oYwcHhuTgjXg,1281
8
+ ins_pricing/cli/Explain_entry.py,sha256=yWhJDIUJdbVefAa0QFBDMhwhCx42HIN4cC8ZfLEos9M,23880
9
+ ins_pricing/cli/Pricing_Run.py,sha256=mIND374OqQMOIcEMD_XdCOtMuD_RBXuG6pQhrMyr9lE,1328
10
+ ins_pricing/cli/__init__.py,sha256=F296f1J_tBPv33lDJQ6LaN_CPwMJTMtOuTsMof0dr2o,50
11
+ ins_pricing/cli/bayesopt_entry_runner.py,sha256=TlA0aBOenB1L4O_nq9xo3qeUgy68CpTsjVwSdlybjlA,57023
12
+ ins_pricing/cli/watchdog_run.py,sha256=45p-tV9pvuRczPdo8Gb-awk1ih7vnMI4XDXO56kc1Bk,6995
13
+ ins_pricing/cli/utils/__init__.py,sha256=u3kt1B27OiuOEgw6PQN-fNs9vNiAjdPyybsRQsZkM_I,54
14
+ ins_pricing/cli/utils/bootstrap.py,sha256=tlTgFQcnnJQftzreixHm4Ls487Zpo5zLAq1BS7BWysg,689
15
+ ins_pricing/cli/utils/cli_common.py,sha256=Tjr20GWK3XT-KidrFCHwodrRukpaInNzsMzEgM9MgYQ,8530
16
+ ins_pricing/cli/utils/cli_config.py,sha256=RFFulQVrZDIGSGL4PoIboWikpwJIPQxQ2iZt34Yqkfg,14752
17
+ ins_pricing/cli/utils/evaluation_context.py,sha256=0zuDOcVzkWiuj4HyAT0psaAfEbSqpDXEGXSjxztHY6E,9485
18
+ ins_pricing/cli/utils/import_resolver.py,sha256=xowiDSBce1VfvBpcjQSCY87c--h-O_u92dgDlSdxA7w,13697
19
+ ins_pricing/cli/utils/notebook_utils.py,sha256=N6-SFvBc81Mr43wWKd1N7RspjHMusfiODvm9In7II9s,12673
20
+ ins_pricing/cli/utils/run_logging.py,sha256=V3Wh2EV6c1Mo0QTvfe4hl2J4LOR6bdQsT210o__YBWk,3677
21
+ ins_pricing/frontend/README.md,sha256=MKQuVtwpvrOKBJhcz9wgVtMc-jKERYATRNDIj-hA78Y,17551
22
+ ins_pricing/frontend/__init__.py,sha256=mbvo89webbtirzVCNmp26FrtYmLFtuwxkmZ5tcdab2U,405
23
+ ins_pricing/frontend/app.py,sha256=Wd-ZDXQwl3c8EhxC3qWq3-Oe91PhcbEiWXT6ofrEROY,42006
24
+ ins_pricing/frontend/config_builder.py,sha256=fXgzNpzriEymB4oRl0MY-O5_zSe5fQTTQj5q-61stSw,14181
25
+ ins_pricing/frontend/example_config.json,sha256=2YcBo9QtC63EKbnCsrBKtqo08--K2WFPqjN-pfXXKnA,1102
26
+ ins_pricing/frontend/example_workflows.py,sha256=-yyoEucItAdVMVnmt6X7oDldaAqe5bWdrstMoNpZOxo,36815
27
+ ins_pricing/frontend/ft_workflow.py,sha256=CWrviErHEjZ2NPibIbPh69AYKPVkn-mXY7uncPihn-0,11206
28
+ ins_pricing/frontend/runner.py,sha256=U28q2n4ky1B2TF0wdkolbJxRse15aNZbq7liQN9P9kU,11428
29
+ ins_pricing/governance/README.md,sha256=XnXLS5RPzWhEiicJ3WtGmpN935jppHhPftA9Lo2DPnQ,511
30
+ ins_pricing/governance/__init__.py,sha256=kCVZ_eNJnVNCFtefJBFz78KZxaR41IU1L2JoefiojiU,625
31
+ ins_pricing/governance/approval.py,sha256=cjJQjU1ziR-d-9wVSXyMyX6S5zijJqDWERZNxjqGAUE,2879
32
+ ins_pricing/governance/audit.py,sha256=f0aw-LaOxH5NGzxwczeLrGMJcxO-JDRn99BpI55KRn4,1040
33
+ ins_pricing/governance/registry.py,sha256=2uxQL6qMGY5IYWJti9MpaV_auvL--piJaasFrX20ghk,3139
34
+ ins_pricing/governance/release.py,sha256=9s-6V41RFaJ-z0V0RFw3_xgrk77BYfun0WN_w3uspqc,4946
35
+ ins_pricing/modelling/README.md,sha256=eSi6OoVjz-609_XFZ2yXWfOGuK00mb9x5EYL3PgXDEs,2151
36
+ ins_pricing/modelling/__init__.py,sha256=1Z_fDHMpuGYOGh4s662mHh4EGMQkYG5hH8Fcg5Aln3I,4366
37
+ ins_pricing/modelling/evaluation.py,sha256=tgmQ-7RHhOkzPCLHtfm4HHNLJVwxYaFExnCVjoBqoeM,4154
38
+ ins_pricing/modelling/bayesopt/README.md,sha256=9WBmvcEupOYUSA8LNIUHxs9rNCoEfT0Bq-gewpsAQZw,2544
39
+ ins_pricing/modelling/bayesopt/__init__.py,sha256=wkTYjfU9Oi6sNCrn4pmF1QevEc2f_EF6k_PIiCYt-aY,1555
40
+ ins_pricing/modelling/bayesopt/config_components.py,sha256=Pr3F3LNJTBwHoLegsYyrC8OrkQsbuSL4yQDEySQf5dU,12823
41
+ ins_pricing/modelling/bayesopt/config_preprocess.py,sha256=xwC7SNqs5suMnhuB-qZEyfTcJHLm2OUFUShOvzYjpgk,24629
42
+ ins_pricing/modelling/bayesopt/core.py,sha256=318JwzECkgjW6jpMQuT0bDZY7f-Gn4u3wBraJ9BlFCk,47316
43
+ ins_pricing/modelling/bayesopt/model_explain_mixin.py,sha256=8LX72wJrzkyINI0AOE5labGhsH2VT1muIRDTiHQ2JQ4,11973
44
+ ins_pricing/modelling/bayesopt/model_plotting_mixin.py,sha256=3y-fxn9eP9RJNBLRRWLi1QJFKerww7KtEz8Z-LUh0Uw,19413
45
+ ins_pricing/modelling/bayesopt/models/__init__.py,sha256=gFMAdElw08bnSM2qldv3IT8O6NSlWEUevHUfFrVtYGM,875
46
+ ins_pricing/modelling/bayesopt/models/model_ft_components.py,sha256=Ij9aX3vrKZJGbRTSBEz9UNyPCQ-QV4Nxy1HbpbFnzDo,12443
47
+ ins_pricing/modelling/bayesopt/models/model_ft_trainer.py,sha256=hvJxMma9Ug6ssvi9tMUD0coEYdPj4fuprRGdQDA59KI,41042
48
+ ins_pricing/modelling/bayesopt/models/model_gnn.py,sha256=CfgIwD1DQ1V6_1p0HAaPzjT9M5XwvHU9XGptu4sCw04,34041
49
+ ins_pricing/modelling/bayesopt/models/model_resn.py,sha256=mstCB3ERb-FGGP26KAd9FTQ9K8vHoKYTVcQIafW8AWg,18361
50
+ ins_pricing/modelling/bayesopt/trainers/__init__.py,sha256=O7u5452eQV9da6jBJRhjn_KkFLe4APGTq1x018wMqdM,734
51
+ ins_pricing/modelling/bayesopt/trainers/trainer_base.py,sha256=0oT9m_cZ12FjbInIHyWXKnbT0tREQoNKwPtkuWg0aSI,57593
52
+ ins_pricing/modelling/bayesopt/trainers/trainer_ft.py,sha256=jEQy6qxBqDT-Y-YloYHmWFUwRy0mXUuH9p4OHRpFVpg,37368
53
+ ins_pricing/modelling/bayesopt/trainers/trainer_glm.py,sha256=LPciwyuvtEvj0h0RGRNxGyL9ArH15ByiXRwh8V-TdpQ,8320
54
+ ins_pricing/modelling/bayesopt/trainers/trainer_gnn.py,sha256=EwGPD1kRtQSE6FxZdsQv-UStMl8tw7Ts5YIk6yONzlY,14973
55
+ ins_pricing/modelling/bayesopt/trainers/trainer_resn.py,sha256=0cSgdM-mcxTjq0r3kqIXyDjKMuoIwg5U3hMcXWmz0TA,12627
56
+ ins_pricing/modelling/bayesopt/trainers/trainer_xgb.py,sha256=GWW9kPD4hNEIASFNTB8rPh7gDp4w6yrIuNVMDee1SkA,21474
57
+ ins_pricing/modelling/bayesopt/utils/__init__.py,sha256=SnFPs_g4eut2h2RrBjOO40Vh-tBBTCWOIHPdm7vMfqk,1553
58
+ ins_pricing/modelling/bayesopt/utils/constants.py,sha256=SNC5NJ1FfRQ-iuNmM8xHlaoaFgNpy1vnS_QOqNbJYRE,485
59
+ ins_pricing/modelling/bayesopt/utils/distributed_utils.py,sha256=jSiDyC7p9SPwllDkCZoLIJeijpLvGcXvQ9l9l2jA6K4,6180
60
+ ins_pricing/modelling/bayesopt/utils/io_utils.py,sha256=2Bg0fz1dngmBU8G8GZp3-CGLIGyhAxeMxwzIXYRINMc,224
61
+ ins_pricing/modelling/bayesopt/utils/losses.py,sha256=m4moKKwfKFl6yDIa9SGQV1u1sgX5MpKoSDF2KI85wyc,634
62
+ ins_pricing/modelling/bayesopt/utils/metrics_and_devices.py,sha256=-TKUHBEumWC4UssZIuthr5yzRBiKFivYXvI9-rCIvxg,317
63
+ ins_pricing/modelling/bayesopt/utils/torch_trainer_mixin.py,sha256=-iVSq6JCGNJaSsyKw-RJCmQ3kufTz_Q3OHINfABYBG8,26737
64
+ ins_pricing/modelling/explain/__init__.py,sha256=WU4Fy0mEvqnmpX-aalKktj1goo9tnKCht9WOrWmZAtI,1342
65
+ ins_pricing/modelling/explain/gradients.py,sha256=9TqCws_p49nFxVMcjVxe4KCZ7frezeL0uV_LCdoM5yo,11088
66
+ ins_pricing/modelling/explain/metrics.py,sha256=9Dh-RcmV1uUlo8eacswsGeNTxTBRwSnjFHncFUFZZ8g,473
67
+ ins_pricing/modelling/explain/permutation.py,sha256=-_6KRkMA1EKHXrfCVs6ohjS9pI65af5zfWKSLLYHZkc,9599
68
+ ins_pricing/modelling/explain/shap_utils.py,sha256=70zRIHPPdoECFOFQeBTRxLZF-6sjaGJBNMIRS4_kmVI,10462
69
+ ins_pricing/modelling/plotting/__init__.py,sha256=AfqRYacai9UzMPBy4xQk3PdVTbCwT31saInSOJKIbeM,1398
70
+ ins_pricing/modelling/plotting/common.py,sha256=_kFq7JMA0LnKIp4bqAFvr-24VaHjj9pegDMm1qP9_7Y,1439
71
+ ins_pricing/modelling/plotting/compat.py,sha256=rmOct4rrjIX7EFodMfWnDtd8D4qE1inNTMvE9FUWa9k,8039
72
+ ins_pricing/modelling/plotting/curves.py,sha256=AyNeESaXOIN6efd3K0vAQ7hmDU4ifJNq6lx_9e3Xi7c,19000
73
+ ins_pricing/modelling/plotting/diagnostics.py,sha256=iHvZY1zCnFRbSczVluMYYRkkQXc-mwo0Z1DXyL3XMkI,5357
74
+ ins_pricing/modelling/plotting/geo.py,sha256=jQogaHt57W1-f8vzeGUdWE1oON2k4WVZKf2qoOM2Ct8,11401
75
+ ins_pricing/modelling/plotting/importance.py,sha256=j5FkPJH9FA6mJHMUfNkqU4Yi7IcqdGdIpcG-d76ORiw,3817
76
+ ins_pricing/pricing/README.md,sha256=PEcyw5oDkqJHOqnNdzBdbbpZwG4SOlnhMwY-owwQ0GI,1064
77
+ ins_pricing/pricing/__init__.py,sha256=hPgQP4IyhLfP1hEC5XckNzYmByhYEdlqw1D83X0hC8s,1022
78
+ ins_pricing/pricing/calibration.py,sha256=cx9fbDoOnNEMGPH6Js1EDMfVwy9J7zf_90yuNwD7W6I,6196
79
+ ins_pricing/pricing/data_quality.py,sha256=8FecBE60cABsTZE7HETuoKCEOXIrirGAFgg5wQCZrmU,4043
80
+ ins_pricing/pricing/exposure.py,sha256=rw8kKZ_1QdeGTCm13ck9NXrRBPt6TunxRw2s_qkHYkg,2575
81
+ ins_pricing/pricing/factors.py,sha256=d4wTWwqZHAKtL9ZNoicEmfAQSxQ7a-XKhXBpoynfH2o,6576
82
+ ins_pricing/pricing/monitoring.py,sha256=GnfF2g1C9KzDks9ELBykfAd0zzVBUvjuTWoffa7aGbI,613
83
+ ins_pricing/pricing/rate_table.py,sha256=llDW95i7gR6cCtGFwcGqgpgFvOOPCURaJWmuQw1oce8,2473
84
+ ins_pricing/production/__init__.py,sha256=4PkwZFR3qmTXyY7g3xELqobC1KcFcozJaJ95hPPB9to,1231
85
+ ins_pricing/production/drift.py,sha256=q_oE_h2NbVETTBkh9QUu8Y68ERuFFcrfKpOb3zBcvsA,383
86
+ ins_pricing/production/inference.py,sha256=RaTQAI92XGuvb0cU224EEfQTzGs8ODshwCSFfkAyKog,27286
87
+ ins_pricing/production/monitoring.py,sha256=0quH2bvsDIHefVxwEE4lRIHC61t51fVEo1x6bdfhQdw,4144
88
+ ins_pricing/production/preprocess.py,sha256=cl20X0rVcKNCjVJswB8SdHffMgox6Qga4Ac29L6pW5g,9404
89
+ ins_pricing/production/scoring.py,sha256=yFmMmbYb7w_RC4uZOCMnAjLMRcjXQWIuT1nsfu-bwuc,1379
90
+ ins_pricing/reporting/README.md,sha256=kTVdB6pNewwh1HlCHrI2SzWTgprtQoQprLRQ2qLdgNA,486
91
+ ins_pricing/reporting/__init__.py,sha256=9MIGXjLrmW4lRunRz3dGhdeEGBkYJbrOO07C1ZPl6Ck,295
92
+ ins_pricing/reporting/report_builder.py,sha256=53ZFqGUx2isAoigT5IDwvXkek67zN7-6IgKeGpJhO7c,2241
93
+ ins_pricing/reporting/scheduler.py,sha256=9koG_1cmWvLqrS66uzMJuAlYI2VTkynV19ssB2TtcKU,1336
94
+ ins_pricing/tests/governance/__init__.py,sha256=5Nxg4_dIxY_J58_x2QOXrrRgw6L51Md0Wnt5Up-chqg,39
95
+ ins_pricing/tests/governance/test_audit.py,sha256=ubybXSTVILPN4VxQ2fMnG6oPNv4LjJJE3EsQ53NYdLU,1702
96
+ ins_pricing/tests/governance/test_registry.py,sha256=TvkNMLHViNuopjjho6oETwZ9d6MNaNM1xbL6URPDKSk,4602
97
+ ins_pricing/tests/governance/test_release.py,sha256=Cdo6prZ0xlioAP2AYHodzgASEIa6ZCLjbXW9Me2RGKk,2347
98
+ ins_pricing/tests/modelling/conftest.py,sha256=0KUXnkTgIGEIsf0J4uzIx5Kq4JkDyFo81Mv0qvIzW9k,180
99
+ ins_pricing/tests/modelling/test_cross_val_generic.py,sha256=iLZOFmdyrycB15lFWoQphkFlEjzZTozQXTLVOHLw2Qg,1721
100
+ ins_pricing/tests/modelling/test_distributed_utils.py,sha256=9cStpDw7jPdQwmm0Po-G2tB04uzSR1CoOUZMLuB61yI,466
101
+ ins_pricing/tests/modelling/test_explain.py,sha256=NZqKYuL-eSf9eC5ttjcMirfOc48ORMXZQm5PjmYk4jY,1445
102
+ ins_pricing/tests/modelling/test_geo_tokens_split.py,sha256=Ti57IynKB0aWOosr0g2RcZlDZyZC012XZ-hm6tWXBJg,1554
103
+ ins_pricing/tests/modelling/test_graph_cache.py,sha256=QEI5cLLtQ9_zwRR50KqUf8qxo9Jcp1WLxIGs4dSoMNk,821
104
+ ins_pricing/tests/modelling/test_plotting.py,sha256=4gJax72l40fQrjyJQLOgUmaT6xn6zXpujEaFNeHVwGw,1911
105
+ ins_pricing/tests/modelling/test_plotting_library.py,sha256=SB5RjKTaPydK848V0xpqEaJtEWhRv6ZfnHmnnzjaPh4,4079
106
+ ins_pricing/tests/modelling/test_preprocessor.py,sha256=FqbKltV803Pd-ZY1xBc4XF1T-INDuUliaVcMIDPmBxI,1438
107
+ ins_pricing/tests/pricing/__init__.py,sha256=SVfgUYBlCmc4wjYLMRX5xPFgQZxTS3aHBOA_Cx1aJg4,36
108
+ ins_pricing/tests/pricing/test_calibration.py,sha256=hLZuSWOH4t9WKcQ-2srvYp4P5ldr1Yh1dhl7s61vMp8,2420
109
+ ins_pricing/tests/pricing/test_exposure.py,sha256=CrpSncVce-PGt2XzjOX6qV0SA22vKPUv1u8RlKQjt_g,2054
110
+ ins_pricing/tests/pricing/test_factors.py,sha256=NTE7lz1RWChhoRt2K5003DoNRqG_Gu4X1Aauy2NexOg,5093
111
+ ins_pricing/tests/pricing/test_rate_table.py,sha256=ICHfAQsC9TaxXbQVKM5AvBaJXRTVY723Vaz1XOWNMW8,1250
112
+ ins_pricing/tests/production/__init__.py,sha256=WFWlvBVdjg-E-nKaiJ8VTKNELYufJusufpij1p1xwso,39
113
+ ins_pricing/tests/production/test_inference.py,sha256=l1wxpuukgdr4DLO_pSwyqxByIoVHQHmPR6LYIMQmeE0,2417
114
+ ins_pricing/tests/production/test_monitoring.py,sha256=jettbaVLH4a3efLWeiQ6FFukGEw7mmz6_AeYhYX0caQ,11409
115
+ ins_pricing/tests/production/test_preprocess.py,sha256=tsHYANwJjNlaSo8O4qiwqBvMOMtwmtZymRFm6UrODrE,11084
116
+ ins_pricing/tests/production/test_scoring.py,sha256=fKz2tJomodrRt333apCrjtyJCwg9RHRbWm0lvcU6xm0,9848
117
+ ins_pricing/utils/__init__.py,sha256=Rt5ObBJU--Dy4TA5-HbUZQ2_9BOl5-J3ZhSQovXQ2dw,3641
118
+ ins_pricing/utils/device.py,sha256=6G4BuQowmjwPPHOZepU-o4IJA9vipGDBMBa3vF1Z5P0,8460
119
+ ins_pricing/utils/features.py,sha256=_uPkX6wpzdC3XTeAYSI1qLYDVTN1Lcfh4OJ8OtBw5-8,1704
120
+ ins_pricing/utils/io.py,sha256=uu7PqXVbcvfSnN3ry6PsCKCaYy6kxL3GLXuJRciVDWA,2678
121
+ ins_pricing/utils/logging.py,sha256=XGM8swSRItNR1Qghd36QfojOMKj9AX-lIt-LFgcljvA,3230
122
+ ins_pricing/utils/losses.py,sha256=u7JFgjnu9kuGD4tB8Lgvfihit5lOL0mbExN2h_JV5mg,4008
123
+ ins_pricing/utils/metrics.py,sha256=hh4PeDBYh3cXiOuTq6e6B084Lz1WbrzDvdJ85JRkx6A,13675
124
+ ins_pricing/utils/numerics.py,sha256=gLz3MVaTzz3xyH_qKaONRslBzUdJ7RCY7JoRGWbwa-U,2207
125
+ ins_pricing/utils/paths.py,sha256=ds_nt2JmP4Gq8nERJUdUFjh3rxGL2duOXNMifgutI6g,9153
126
+ ins_pricing/utils/profiling.py,sha256=dwbJIEgZFr-Ow0-F1KT94fBfNev1g2HT_UWqJQ2FCvc,11265
127
+ ins_pricing/utils/torch_compat.py,sha256=UrRsqx2qboDG8WE0OmxNOi08ojwE-dCxTQh0N2s3Rgw,2441
128
+ ins_pricing/utils/validation.py,sha256=4Tw9VUJPk0N-WO3YUqZP-xXRl1Xpubkm0vi3WzzZrv4,13348
129
+ ins_pricing-0.5.1.dist-info/METADATA,sha256=xsczDkdeHh7VLt5cFlsZ9MwA5agobSC12PBvsxu-Tp0,5891
130
+ ins_pricing-0.5.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
131
+ ins_pricing-0.5.1.dist-info/top_level.txt,sha256=haZuNQpHKNBEPZx3NjLnHp8pV3I_J9QG8-HyJn00FA0,12
132
+ ins_pricing-0.5.1.dist-info/RECORD,,
@@ -1,146 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import torch
4
-
5
- try:
6
- from .bayesopt.config_preprocess import (
7
- BayesOptConfig,
8
- DatasetPreprocessor,
9
- OutputManager,
10
- VersionManager,
11
- )
12
- from .bayesopt.core import BayesOptModel
13
- from .bayesopt.models import (
14
- FeatureTokenizer,
15
- FTTransformerCore,
16
- FTTransformerSklearn,
17
- GraphNeuralNetSklearn,
18
- MaskedTabularDataset,
19
- ResBlock,
20
- ResNetSequential,
21
- ResNetSklearn,
22
- ScaledTransformerEncoderLayer,
23
- SimpleGraphLayer,
24
- SimpleGNN,
25
- TabularDataset,
26
- )
27
- from .bayesopt.trainers import (
28
- FTTrainer,
29
- GLMTrainer,
30
- GNNTrainer,
31
- ResNetTrainer,
32
- TrainerBase,
33
- XGBTrainer,
34
- _xgb_cuda_available,
35
- )
36
- from .bayesopt.utils import (
37
- EPS,
38
- DistributedUtils,
39
- IOUtils,
40
- PlotUtils,
41
- TorchTrainerMixin,
42
- TrainingUtils,
43
- compute_batch_size,
44
- csv_to_dict,
45
- ensure_parent_dir,
46
- free_cuda,
47
- infer_factor_and_cate_list,
48
- plot_dlift_list,
49
- plot_lift_list,
50
- set_global_seed,
51
- split_data,
52
- tweedie_loss,
53
- )
54
- except ImportError: # pragma: no cover
55
- from bayesopt.config_preprocess import (
56
- BayesOptConfig,
57
- DatasetPreprocessor,
58
- OutputManager,
59
- VersionManager,
60
- )
61
- from bayesopt.core import BayesOptModel
62
- from bayesopt.models import (
63
- FeatureTokenizer,
64
- FTTransformerCore,
65
- FTTransformerSklearn,
66
- GraphNeuralNetSklearn,
67
- MaskedTabularDataset,
68
- ResBlock,
69
- ResNetSequential,
70
- ResNetSklearn,
71
- ScaledTransformerEncoderLayer,
72
- SimpleGraphLayer,
73
- SimpleGNN,
74
- TabularDataset,
75
- )
76
- from bayesopt.trainers import (
77
- FTTrainer,
78
- GLMTrainer,
79
- GNNTrainer,
80
- ResNetTrainer,
81
- TrainerBase,
82
- XGBTrainer,
83
- _xgb_cuda_available,
84
- )
85
- from bayesopt.utils import (
86
- EPS,
87
- DistributedUtils,
88
- IOUtils,
89
- PlotUtils,
90
- TorchTrainerMixin,
91
- TrainingUtils,
92
- compute_batch_size,
93
- csv_to_dict,
94
- ensure_parent_dir,
95
- free_cuda,
96
- infer_factor_and_cate_list,
97
- plot_dlift_list,
98
- plot_lift_list,
99
- set_global_seed,
100
- split_data,
101
- tweedie_loss,
102
- )
103
-
104
- __all__ = [
105
- "BayesOptConfig",
106
- "DatasetPreprocessor",
107
- "OutputManager",
108
- "VersionManager",
109
- "BayesOptModel",
110
- "FeatureTokenizer",
111
- "FTTransformerCore",
112
- "FTTransformerSklearn",
113
- "GraphNeuralNetSklearn",
114
- "MaskedTabularDataset",
115
- "ResBlock",
116
- "ResNetSequential",
117
- "ResNetSklearn",
118
- "ScaledTransformerEncoderLayer",
119
- "SimpleGraphLayer",
120
- "SimpleGNN",
121
- "TabularDataset",
122
- "FTTrainer",
123
- "GLMTrainer",
124
- "GNNTrainer",
125
- "ResNetTrainer",
126
- "TrainerBase",
127
- "XGBTrainer",
128
- "_xgb_cuda_available",
129
- "EPS",
130
- "DistributedUtils",
131
- "IOUtils",
132
- "PlotUtils",
133
- "TorchTrainerMixin",
134
- "TrainingUtils",
135
- "compute_batch_size",
136
- "csv_to_dict",
137
- "ensure_parent_dir",
138
- "free_cuda",
139
- "infer_factor_and_cate_list",
140
- "plot_dlift_list",
141
- "plot_lift_list",
142
- "set_global_seed",
143
- "split_data",
144
- "tweedie_loss",
145
- "torch",
146
- ]
@@ -1 +0,0 @@
1
- """Core modelling modules (bayesopt + evaluation)."""
@@ -1,19 +0,0 @@
1
- """Trainer implementations split by model type."""
2
- from __future__ import annotations
3
-
4
- from .trainer_base import TrainerBase
5
- from .trainer_ft import FTTrainer
6
- from .trainer_glm import GLMTrainer
7
- from .trainer_gnn import GNNTrainer
8
- from .trainer_resn import ResNetTrainer
9
- from .trainer_xgb import XGBTrainer, _xgb_cuda_available
10
-
11
- __all__ = [
12
- "TrainerBase",
13
- "FTTrainer",
14
- "GLMTrainer",
15
- "GNNTrainer",
16
- "ResNetTrainer",
17
- "XGBTrainer",
18
- "_xgb_cuda_available",
19
- ]
@@ -1,86 +0,0 @@
1
- """Backward compatibility re-exports from refactored utils modules.
2
-
3
- This module ensures all existing imports continue to work:
4
- from ins_pricing.modelling.core.bayesopt.utils import EPS, IOUtils, ...
5
-
6
- The utils.py file has been split into focused modules for better maintainability:
7
- - constants.py: EPS, set_global_seed, etc.
8
- - io_utils.py: IOUtils for file I/O
9
- - distributed_utils.py: DistributedUtils, TrainingUtils for DDP
10
- - torch_trainer_mixin.py: TorchTrainerMixin for PyTorch training
11
- - metrics_and_devices.py: Metrics, GPU/device management, CV strategies, plotting
12
- """
13
-
14
- from __future__ import annotations
15
-
16
- # Constants and simple utilities
17
- from .constants import (
18
- EPS,
19
- set_global_seed,
20
- ensure_parent_dir,
21
- compute_batch_size,
22
- tweedie_loss,
23
- infer_factor_and_cate_list,
24
- )
25
-
26
- # I/O utilities
27
- from .io_utils import (
28
- IOUtils,
29
- csv_to_dict,
30
- )
31
-
32
- # Distributed training
33
- from .distributed_utils import (
34
- DistributedUtils,
35
- TrainingUtils,
36
- free_cuda,
37
- )
38
-
39
- # PyTorch training mixin
40
- from .torch_trainer_mixin import (
41
- TorchTrainerMixin,
42
- )
43
-
44
- # Metrics, devices, CV, and plotting
45
- from .metrics_and_devices import (
46
- get_logger,
47
- MetricFactory,
48
- GPUMemoryManager,
49
- DeviceManager,
50
- CVStrategyResolver,
51
- PlotUtils,
52
- split_data,
53
- plot_lift_list,
54
- plot_dlift_list,
55
- _OrderedSplitter,
56
- )
57
-
58
- __all__ = [
59
- # Constants
60
- 'EPS',
61
- 'set_global_seed',
62
- 'ensure_parent_dir',
63
- 'compute_batch_size',
64
- 'tweedie_loss',
65
- 'infer_factor_and_cate_list',
66
- # I/O
67
- 'IOUtils',
68
- 'csv_to_dict',
69
- # Distributed
70
- 'DistributedUtils',
71
- 'TrainingUtils',
72
- 'free_cuda',
73
- # PyTorch
74
- 'TorchTrainerMixin',
75
- # Utilities
76
- 'get_logger',
77
- 'MetricFactory',
78
- 'GPUMemoryManager',
79
- 'DeviceManager',
80
- 'CVStrategyResolver',
81
- 'PlotUtils',
82
- 'split_data',
83
- 'plot_lift_list',
84
- 'plot_dlift_list',
85
- '_OrderedSplitter',
86
- ]
@@ -1,183 +0,0 @@
1
- """Core constants and simple utility functions.
2
-
3
- This module contains:
4
- - EPS constant for numerical stability
5
- - set_global_seed() for reproducibility
6
- - ensure_parent_dir() for file operations
7
- - compute_batch_size() for adaptive batching
8
- - tweedie_loss() for regression loss
9
- - infer_factor_and_cate_list() for automatic feature detection
10
- """
11
-
12
- from __future__ import annotations
13
-
14
- import random
15
- from pathlib import Path
16
- from typing import List, Optional, Tuple
17
-
18
- import numpy as np
19
- import pandas as pd
20
- import torch
21
-
22
- # Constants
23
- # =============================================================================
24
- EPS = 1e-8
25
- """Small epsilon value for numerical stability."""
26
-
27
-
28
- # Simple utility functions
29
- # =============================================================================
30
-
31
- def set_global_seed(seed: int) -> None:
32
- """Set random seed for reproducibility across all libraries.
33
-
34
- Args:
35
- seed: Random seed value
36
- """
37
- random.seed(seed)
38
- np.random.seed(seed)
39
- torch.manual_seed(seed)
40
- if torch.cuda.is_available():
41
- torch.cuda.manual_seed_all(seed)
42
-
43
-
44
- def ensure_parent_dir(file_path: str) -> None:
45
- """Create parent directories when missing.
46
-
47
- Args:
48
- file_path: Path to file whose parent directory should be created
49
- """
50
- directory = Path(file_path).parent
51
- if directory and not directory.exists():
52
- directory.mkdir(parents=True, exist_ok=True)
53
-
54
-
55
- def compute_batch_size(data_size: int, learning_rate: float,
56
- batch_num: int, minimum: int) -> int:
57
- """Compute adaptive batch size based on data size and learning rate.
58
-
59
- Args:
60
- data_size: Total number of samples
61
- learning_rate: Learning rate value
62
- batch_num: Target number of batches
63
- minimum: Minimum batch size
64
-
65
- Returns:
66
- Computed batch size
67
- """
68
- estimated = int((learning_rate / 1e-4) ** 0.5 *
69
- (data_size / max(batch_num, 1)))
70
- return max(1, min(data_size, max(minimum, estimated)))
71
-
72
-
73
- def tweedie_loss(pred, target, p=1.5, eps=1e-6, max_clip=1e6):
74
- """Compute Tweedie deviance loss for PyTorch.
75
-
76
- Reference: https://scikit-learn.org/stable/modules/model_evaluation.html
77
-
78
- Args:
79
- pred: Predicted values (tensor)
80
- target: True values (tensor)
81
- p: Tweedie power parameter (1.0-2.0)
82
- eps: Small epsilon for numerical stability
83
- max_clip: Maximum value for clipping
84
-
85
- Returns:
86
- Tweedie negative log-likelihood (tensor)
87
- """
88
- # Clamp predictions to positive values for stability
89
- pred_clamped = torch.clamp(pred, min=eps)
90
-
91
- if p == 1:
92
- # Poisson
93
- term1 = target * torch.log(target / pred_clamped + eps)
94
- term2 = -target + pred_clamped
95
- term3 = 0
96
- elif p == 0:
97
- # Gaussian
98
- term1 = 0.5 * torch.pow(target - pred_clamped, 2)
99
- term2 = 0
100
- term3 = 0
101
- elif p == 2:
102
- # Gamma
103
- term1 = torch.log(pred_clamped / target + eps)
104
- term2 = -target / pred_clamped + 1
105
- term3 = 0
106
- else:
107
- # General Tweedie
108
- term1 = torch.pow(target, 2 - p) / ((1 - p) * (2 - p))
109
- term2 = target * torch.pow(pred_clamped, 1 - p) / (1 - p)
110
- term3 = torch.pow(pred_clamped, 2 - p) / (2 - p)
111
-
112
- return torch.nan_to_num(
113
- 2 * (term1 - term2 + term3),
114
- nan=eps,
115
- posinf=max_clip,
116
- neginf=-max_clip
117
- )
118
-
119
-
120
- def infer_factor_and_cate_list(
121
- train_df: pd.DataFrame,
122
- test_df: pd.DataFrame,
123
- resp_nme: str,
124
- weight_nme: str,
125
- binary_resp_nme: Optional[str] = None,
126
- factor_nmes: Optional[List[str]] = None,
127
- cate_list: Optional[List[str]] = None,
128
- infer_categorical_max_unique: int = 50,
129
- infer_categorical_max_ratio: float = 0.05
130
- ) -> Tuple[List[str], List[str]]:
131
- """Infer factor_nmes/cate_list when feature names are not provided.
132
-
133
- Rules:
134
- - factor_nmes: start from shared train/test columns, exclude target/weight/(optional binary target).
135
- - cate_list: object/category/bool plus low-cardinality integer columns.
136
- - Always intersect with shared train/test columns to avoid mismatches.
137
-
138
- Args:
139
- train_df: Training DataFrame
140
- test_df: Test DataFrame
141
- resp_nme: Response/target column name
142
- weight_nme: Sample weight column name
143
- binary_resp_nme: Optional binary response column name
144
- factor_nmes: Optional list of feature column names
145
- cate_list: Optional list of categorical feature names
146
- infer_categorical_max_unique: Max unique values for categorical inference
147
- infer_categorical_max_ratio: Max ratio of unique/total for categorical inference
148
-
149
- Returns:
150
- Tuple of (factor_nmes, cate_list)
151
- """
152
- excluded = {resp_nme, weight_nme}
153
- if binary_resp_nme:
154
- excluded.add(binary_resp_nme)
155
-
156
- common_cols = [c for c in train_df.columns if c in test_df.columns]
157
- if factor_nmes is None:
158
- factors = [c for c in common_cols if c not in excluded]
159
- else:
160
- factors = [
161
- c for c in factor_nmes if c in common_cols and c not in excluded
162
- ]
163
-
164
- if cate_list is not None:
165
- cats = [c for c in cate_list if c in factors]
166
- return factors, cats
167
-
168
- n_rows = max(1, len(train_df))
169
- cats: List[str] = []
170
- for col in factors:
171
- s = train_df[col]
172
- if (pd.api.types.is_bool_dtype(s) or
173
- pd.api.types.is_object_dtype(s) or
174
- isinstance(s.dtype, pd.CategoricalDtype)):
175
- cats.append(col)
176
- continue
177
- if pd.api.types.is_integer_dtype(s):
178
- nunique = int(s.nunique(dropna=True))
179
- if (nunique <= infer_categorical_max_unique or
180
- (nunique / n_rows) <= infer_categorical_max_ratio):
181
- cats.append(col)
182
-
183
- return factors, cats