scikit-rank 0.1.0__tar.gz

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 (159) hide show
  1. scikit_rank-0.1.0/.editorconfig +19 -0
  2. scikit_rank-0.1.0/.gitignore +22 -0
  3. scikit_rank-0.1.0/.pi-subagents/artifacts/8682734e-5509-4c5e-850d-a0a13f741c27_scout_input.md +60 -0
  4. scikit_rank-0.1.0/.pi-subagents/artifacts/8682734e-5509-4c5e-850d-a0a13f741c27_scout_meta.json +28 -0
  5. scikit_rank-0.1.0/.pi-subagents/artifacts/8682734e-5509-4c5e-850d-a0a13f741c27_scout_output.md +59 -0
  6. scikit_rank-0.1.0/.pi-subagents/artifacts/8682734e-5509-4c5e-850d-a0a13f741c27_scout_transcript.jsonl +81 -0
  7. scikit_rank-0.1.0/.pi-subagents/artifacts/90504977-7ccf-44a0-8cb3-5a61c5a8bbf1_reviewer_input.md +54 -0
  8. scikit_rank-0.1.0/.pi-subagents/artifacts/90504977-7ccf-44a0-8cb3-5a61c5a8bbf1_reviewer_meta.json +29 -0
  9. scikit_rank-0.1.0/.pi-subagents/artifacts/90504977-7ccf-44a0-8cb3-5a61c5a8bbf1_reviewer_output.md +0 -0
  10. scikit_rank-0.1.0/.pi-subagents/artifacts/90504977-7ccf-44a0-8cb3-5a61c5a8bbf1_reviewer_transcript.jsonl +28 -0
  11. scikit_rank-0.1.0/.pi-subagents/artifacts/d1e0cf29-668a-4f19-99b6-0624bb51285a_reviewer_1_input.md +62 -0
  12. scikit_rank-0.1.0/.pi-subagents/artifacts/d1e0cf29-668a-4f19-99b6-0624bb51285a_reviewer_1_meta.json +29 -0
  13. scikit_rank-0.1.0/.pi-subagents/artifacts/d1e0cf29-668a-4f19-99b6-0624bb51285a_reviewer_1_output.md +1 -0
  14. scikit_rank-0.1.0/.pi-subagents/artifacts/d1e0cf29-668a-4f19-99b6-0624bb51285a_reviewer_1_transcript.jsonl +128 -0
  15. scikit_rank-0.1.0/.pi-subagents/artifacts/d1e0cf29-668a-4f19-99b6-0624bb51285a_scout_0_input.md +60 -0
  16. scikit_rank-0.1.0/.pi-subagents/artifacts/d1e0cf29-668a-4f19-99b6-0624bb51285a_scout_0_meta.json +28 -0
  17. scikit_rank-0.1.0/.pi-subagents/artifacts/d1e0cf29-668a-4f19-99b6-0624bb51285a_scout_0_output.md +234 -0
  18. scikit_rank-0.1.0/.pi-subagents/artifacts/d1e0cf29-668a-4f19-99b6-0624bb51285a_scout_0_transcript.jsonl +95 -0
  19. scikit_rank-0.1.0/.pi-subagents/artifacts/outputs/8682734e-5509-4c5e-850d-a0a13f741c27/audit-scout.md +59 -0
  20. scikit_rank-0.1.0/.pi-subagents/artifacts/outputs/d1e0cf29-668a-4f19-99b6-0624bb51285a/tmp/demo-api-recon.md +234 -0
  21. scikit_rank-0.1.0/.pre-commit-config.yaml +29 -0
  22. scikit_rank-0.1.0/.python-version +1 -0
  23. scikit_rank-0.1.0/LICENSE +201 -0
  24. scikit_rank-0.1.0/PKG-INFO +210 -0
  25. scikit_rank-0.1.0/README.md +189 -0
  26. scikit_rank-0.1.0/demo.ipynb +839 -0
  27. scikit_rank-0.1.0/devenv.lock +157 -0
  28. scikit_rank-0.1.0/devenv.nix +35 -0
  29. scikit_rank-0.1.0/devenv.yaml +13 -0
  30. scikit_rank-0.1.0/exps/README.md +115 -0
  31. scikit_rank-0.1.0/exps/bars/README.md +168 -0
  32. scikit_rank-0.1.0/exps/bars/_adapters.py +358 -0
  33. scikit_rank-0.1.0/exps/bars/_data.py +125 -0
  34. scikit_rank-0.1.0/exps/bars/_datasets.py +38 -0
  35. scikit_rank-0.1.0/exps/bars/_reporting.py +110 -0
  36. scikit_rank-0.1.0/exps/bars/configs/config_catboost_avazu_x1.yaml +31 -0
  37. scikit_rank-0.1.0/exps/bars/configs/config_catboost_criteo_x1.yaml +31 -0
  38. scikit_rank-0.1.0/exps/bars/configs/config_dcn_avazu_x1.yaml +32 -0
  39. scikit_rank-0.1.0/exps/bars/configs/config_dcn_avazu_x1_multihash.yaml +34 -0
  40. scikit_rank-0.1.0/exps/bars/configs/config_dcn_criteo_x1.yaml +33 -0
  41. scikit_rank-0.1.0/exps/bars/configs/config_dcn_criteo_x1_num_encoding.yaml +34 -0
  42. scikit_rank-0.1.0/exps/bars/configs/config_lgbm_avazu_x1.yaml +30 -0
  43. scikit_rank-0.1.0/exps/bars/configs/config_lgbm_criteo_x1.yaml +30 -0
  44. scikit_rank-0.1.0/exps/bars/configs/config_xgboost_avazu_x1.yaml +32 -0
  45. scikit_rank-0.1.0/exps/bars/configs/config_xgboost_criteo_x1.yaml +32 -0
  46. scikit_rank-0.1.0/exps/bars/results/avazu_x1/bars_parity/seed-190034/metrics.json +6 -0
  47. scikit_rank-0.1.0/exps/bars/results/avazu_x1/bars_parity/seed-2021/metrics.json +6 -0
  48. scikit_rank-0.1.0/exps/bars/results/avazu_x1/bars_parity/seed-27011/metrics.json +6 -0
  49. scikit_rank-0.1.0/exps/bars/results/avazu_x1/bars_parity/seed-948432/metrics.json +6 -0
  50. scikit_rank-0.1.0/exps/bars/results/avazu_x1/bars_parity/seed-992817/metrics.json +6 -0
  51. scikit_rank-0.1.0/exps/bars/results/avazu_x1/cat_encoding/seed-190034/metrics.json +6 -0
  52. scikit_rank-0.1.0/exps/bars/results/avazu_x1/cat_encoding/seed-2021/metrics.json +6 -0
  53. scikit_rank-0.1.0/exps/bars/results/avazu_x1/cat_encoding/seed-27011/metrics.json +6 -0
  54. scikit_rank-0.1.0/exps/bars/results/avazu_x1/cat_encoding/seed-948432/metrics.json +6 -0
  55. scikit_rank-0.1.0/exps/bars/results/avazu_x1/cat_encoding/seed-992817/metrics.json +6 -0
  56. scikit_rank-0.1.0/exps/bars/results/avazu_x1/catboost/seed-190034/metrics.json +7 -0
  57. scikit_rank-0.1.0/exps/bars/results/avazu_x1/catboost/seed-2021/metrics.json +7 -0
  58. scikit_rank-0.1.0/exps/bars/results/avazu_x1/catboost/seed-27011/metrics.json +7 -0
  59. scikit_rank-0.1.0/exps/bars/results/avazu_x1/catboost/seed-948432/metrics.json +7 -0
  60. scikit_rank-0.1.0/exps/bars/results/avazu_x1/catboost/seed-992817/metrics.json +7 -0
  61. scikit_rank-0.1.0/exps/bars/results/avazu_x1/lgbm/seed-190034/metrics.json +7 -0
  62. scikit_rank-0.1.0/exps/bars/results/avazu_x1/lgbm/seed-2021/metrics.json +7 -0
  63. scikit_rank-0.1.0/exps/bars/results/avazu_x1/lgbm/seed-27011/metrics.json +7 -0
  64. scikit_rank-0.1.0/exps/bars/results/avazu_x1/lgbm/seed-948432/metrics.json +7 -0
  65. scikit_rank-0.1.0/exps/bars/results/avazu_x1/lgbm/seed-992817/metrics.json +7 -0
  66. scikit_rank-0.1.0/exps/bars/results/avazu_x1/xgboost/seed-190034/metrics.json +7 -0
  67. scikit_rank-0.1.0/exps/bars/results/avazu_x1/xgboost/seed-2021/metrics.json +7 -0
  68. scikit_rank-0.1.0/exps/bars/results/avazu_x1/xgboost/seed-27011/metrics.json +7 -0
  69. scikit_rank-0.1.0/exps/bars/results/avazu_x1/xgboost/seed-948432/metrics.json +7 -0
  70. scikit_rank-0.1.0/exps/bars/results/avazu_x1/xgboost/seed-992817/metrics.json +7 -0
  71. scikit_rank-0.1.0/exps/bars/results/criteo_x1/bars_parity/seed-190034/metrics.json +6 -0
  72. scikit_rank-0.1.0/exps/bars/results/criteo_x1/bars_parity/seed-2021/metrics.json +6 -0
  73. scikit_rank-0.1.0/exps/bars/results/criteo_x1/bars_parity/seed-27011/metrics.json +6 -0
  74. scikit_rank-0.1.0/exps/bars/results/criteo_x1/bars_parity/seed-948432/metrics.json +6 -0
  75. scikit_rank-0.1.0/exps/bars/results/criteo_x1/bars_parity/seed-992817/metrics.json +6 -0
  76. scikit_rank-0.1.0/exps/bars/results/criteo_x1/catboost/seed-190034/metrics.json +7 -0
  77. scikit_rank-0.1.0/exps/bars/results/criteo_x1/catboost/seed-2021/metrics.json +7 -0
  78. scikit_rank-0.1.0/exps/bars/results/criteo_x1/catboost/seed-27011/metrics.json +7 -0
  79. scikit_rank-0.1.0/exps/bars/results/criteo_x1/catboost/seed-948432/metrics.json +7 -0
  80. scikit_rank-0.1.0/exps/bars/results/criteo_x1/catboost/seed-992817/metrics.json +7 -0
  81. scikit_rank-0.1.0/exps/bars/results/criteo_x1/lgbm/seed-190034/metrics.json +7 -0
  82. scikit_rank-0.1.0/exps/bars/results/criteo_x1/lgbm/seed-2021/metrics.json +7 -0
  83. scikit_rank-0.1.0/exps/bars/results/criteo_x1/lgbm/seed-27011/metrics.json +7 -0
  84. scikit_rank-0.1.0/exps/bars/results/criteo_x1/lgbm/seed-948432/metrics.json +7 -0
  85. scikit_rank-0.1.0/exps/bars/results/criteo_x1/lgbm/seed-992817/metrics.json +7 -0
  86. scikit_rank-0.1.0/exps/bars/results/criteo_x1/num_encoding/seed-190034/metrics.json +6 -0
  87. scikit_rank-0.1.0/exps/bars/results/criteo_x1/num_encoding/seed-2021/metrics.json +6 -0
  88. scikit_rank-0.1.0/exps/bars/results/criteo_x1/num_encoding/seed-27011/metrics.json +6 -0
  89. scikit_rank-0.1.0/exps/bars/results/criteo_x1/num_encoding/seed-948432/metrics.json +6 -0
  90. scikit_rank-0.1.0/exps/bars/results/criteo_x1/num_encoding/seed-992817/metrics.json +6 -0
  91. scikit_rank-0.1.0/exps/bars/results/criteo_x1/xgboost/seed-190034/metrics.json +7 -0
  92. scikit_rank-0.1.0/exps/bars/results/criteo_x1/xgboost/seed-2021/metrics.json +7 -0
  93. scikit_rank-0.1.0/exps/bars/results/criteo_x1/xgboost/seed-27011/metrics.json +7 -0
  94. scikit_rank-0.1.0/exps/bars/results/criteo_x1/xgboost/seed-948432/metrics.json +7 -0
  95. scikit_rank-0.1.0/exps/bars/results/criteo_x1/xgboost/seed-992817/metrics.json +7 -0
  96. scikit_rank-0.1.0/exps/bars/train.py +208 -0
  97. scikit_rank-0.1.0/exps/scripts/compare_auc_delong_xu.py +127 -0
  98. scikit_rank-0.1.0/exps/scripts/compare_predictions_auc.py +102 -0
  99. scikit_rank-0.1.0/exps/scripts/evaluate_ranking.py +177 -0
  100. scikit_rank-0.1.0/exps/scripts/mind_to_parquet.py +236 -0
  101. scikit_rank-0.1.0/exps/scripts/summarize_metrics.py +77 -0
  102. scikit_rank-0.1.0/exps/scripts/temporal_split.py +223 -0
  103. scikit_rank-0.1.0/exps/scripts/train_temporal_dcn.py +714 -0
  104. scikit_rank-0.1.0/exps/scripts/train_temporal_fuxictr.py +475 -0
  105. scikit_rank-0.1.0/exps/scripts/train_temporal_tabular.py +986 -0
  106. scikit_rank-0.1.0/exps/temporal_article/README.md +140 -0
  107. scikit_rank-0.1.0/exps/temporal_article/final_metrics.json +110 -0
  108. scikit_rank-0.1.0/exps/temporal_article/run_final.sh +141 -0
  109. scikit_rank-0.1.0/exps/vendor/fuxictr_v2_3_9/DCNv2.py +102 -0
  110. scikit_rank-0.1.0/exps/vendor/fuxictr_v2_3_9/README.md +13 -0
  111. scikit_rank-0.1.0/pyproject.toml +112 -0
  112. scikit_rank-0.1.0/src/scikit_rank/__init__.py +50 -0
  113. scikit_rank-0.1.0/src/scikit_rank/data.py +416 -0
  114. scikit_rank-0.1.0/src/scikit_rank/factories.py +490 -0
  115. scikit_rank-0.1.0/src/scikit_rank/modules/__init__.py +6 -0
  116. scikit_rank-0.1.0/src/scikit_rank/modules/dcn.py +843 -0
  117. scikit_rank-0.1.0/src/scikit_rank/modules/losses.py +1450 -0
  118. scikit_rank-0.1.0/src/scikit_rank/modules/reducers.py +64 -0
  119. scikit_rank-0.1.0/src/scikit_rank/preprocessing.py +537 -0
  120. scikit_rank-0.1.0/src/scikit_rank/run.py +379 -0
  121. scikit_rank-0.1.0/src/scikit_rank/sklearn/__init__.py +25 -0
  122. scikit_rank-0.1.0/src/scikit_rank/sklearn/_data_router.py +257 -0
  123. scikit_rank-0.1.0/src/scikit_rank/sklearn/_input_validation.py +93 -0
  124. scikit_rank-0.1.0/src/scikit_rank/sklearn/_types.py +24 -0
  125. scikit_rank-0.1.0/src/scikit_rank/sklearn/estimator.py +861 -0
  126. scikit_rank-0.1.0/src/scikit_rank/train/__init__.py +24 -0
  127. scikit_rank-0.1.0/src/scikit_rank/train/optimizers.py +436 -0
  128. scikit_rank-0.1.0/src/scikit_rank/train/options.py +380 -0
  129. scikit_rank-0.1.0/src/scikit_rank/train/trainer.py +186 -0
  130. scikit_rank-0.1.0/src/scikit_rank/utils/__init__.py +14 -0
  131. scikit_rank-0.1.0/src/scikit_rank/utils/ipc_materializer.py +88 -0
  132. scikit_rank-0.1.0/src/scikit_rank/utils/module_parser.py +125 -0
  133. scikit_rank-0.1.0/tests/__init__.py +1 -0
  134. scikit_rank-0.1.0/tests/conftest.py +20 -0
  135. scikit_rank-0.1.0/tests/test_accelerate_multiworker.py +147 -0
  136. scikit_rank-0.1.0/tests/test_data_router.py +202 -0
  137. scikit_rank-0.1.0/tests/test_dcn_features.py +332 -0
  138. scikit_rank-0.1.0/tests/test_ddp_loss_reduce.py +180 -0
  139. scikit_rank-0.1.0/tests/test_ddp_metric_gather.py +318 -0
  140. scikit_rank-0.1.0/tests/test_ddp_ranking_training.py +185 -0
  141. scikit_rank-0.1.0/tests/test_ddp_sharding.py +283 -0
  142. scikit_rank-0.1.0/tests/test_ema.py +158 -0
  143. scikit_rank-0.1.0/tests/test_embedding_features.py +123 -0
  144. scikit_rank-0.1.0/tests/test_encoder_specs.py +255 -0
  145. scikit_rank-0.1.0/tests/test_estimator_specs.py +79 -0
  146. scikit_rank-0.1.0/tests/test_extra_layers.py +117 -0
  147. scikit_rank-0.1.0/tests/test_group_batch_sampler.py +181 -0
  148. scikit_rank-0.1.0/tests/test_inner_cross_layers.py +128 -0
  149. scikit_rank-0.1.0/tests/test_lazy_arrow_source.py +94 -0
  150. scikit_rank-0.1.0/tests/test_lazy_dataframe_support.py +117 -0
  151. scikit_rank-0.1.0/tests/test_lazy_eager_parity.py +88 -0
  152. scikit_rank-0.1.0/tests/test_loss_model_alignment.py +123 -0
  153. scikit_rank-0.1.0/tests/test_multihash_features.py +169 -0
  154. scikit_rank-0.1.0/tests/test_optimizers.py +155 -0
  155. scikit_rank-0.1.0/tests/test_ple_encoder.py +117 -0
  156. scikit_rank-0.1.0/tests/test_quantile_normalize.py +160 -0
  157. scikit_rank-0.1.0/tests/test_ranker_eval_metrics.py +90 -0
  158. scikit_rank-0.1.0/tests/test_sklearn_compliance.py +54 -0
  159. scikit_rank-0.1.0/uv.lock +2473 -0
@@ -0,0 +1,19 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ indent_style = space
6
+ indent_size = 4
7
+ end_of_line = lf
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
10
+
11
+ [*.{py,jsonnet,json,md}]
12
+ indent_size = 4
13
+
14
+ [*.{yml,yaml}]
15
+ indent_size = 2
16
+
17
+ [{Makefile,*.Dockerfile}]
18
+ indent_style = tab
19
+ tab_width = 4
@@ -0,0 +1,22 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+ .ipynb_checkpoints/
9
+
10
+ # Virtual environments
11
+ .venv
12
+
13
+ # Devenv
14
+ .devenv*
15
+ devenv.local.nix
16
+ devenv.local.yaml
17
+
18
+ # Direnv
19
+ .direnv
20
+
21
+ # Ouptuts
22
+ data
@@ -0,0 +1,60 @@
1
+ # Task for scout
2
+
3
+ Audit this repository for the requested cleanup/refactor. Identify package/module layout, build/test/docs configuration, every reference to scikit-rank/current package name and forbidden names beeformer/dcn-exps/tabicl (excluding ipynb), and recommend low-value tests to remove versus keep. Do not edit files. Report concise file paths and commands.
4
+
5
+ ---
6
+ **Output:**
7
+ Write your findings to exactly this path: /Users/a.n.milogradskiy/Developer/personal/scikit-rank/.pi-subagents/artifacts/outputs/8682734e-5509-4c5e-850d-a0a13f741c27/audit-scout.md
8
+ This path is authoritative for this run.
9
+ Ignore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.
10
+
11
+ ## Acceptance Contract
12
+ Acceptance level: reviewed
13
+ Completion is not accepted from prose alone. End with a structured acceptance report.
14
+
15
+ Criteria:
16
+ - criterion-1: Implement the requested change without widening scope
17
+ - criterion-2: Return evidence sufficient for an independent acceptance review
18
+
19
+ Required evidence: changed-files, tests-added, commands-run, validation-output, residual-risks, no-staged-files
20
+
21
+ Review gate: required by reviewer.
22
+
23
+ Finish with a fenced JSON block tagged `acceptance-report` in this shape:
24
+ Use empty arrays when no items apply; array fields contain strings unless object entries are shown.
25
+ ```acceptance-report
26
+ {
27
+ "criteriaSatisfied": [
28
+ {
29
+ "id": "criterion-1",
30
+ "status": "satisfied",
31
+ "evidence": "specific proof"
32
+ }
33
+ ],
34
+ "changedFiles": [
35
+ "src/file.ts"
36
+ ],
37
+ "testsAddedOrUpdated": [
38
+ "test/file.test.ts"
39
+ ],
40
+ "commandsRun": [
41
+ {
42
+ "command": "command",
43
+ "result": "passed",
44
+ "summary": "short result"
45
+ }
46
+ ],
47
+ "validationOutput": [
48
+ "validation output or concise summary"
49
+ ],
50
+ "residualRisks": [
51
+ "none"
52
+ ],
53
+ "noStagedFiles": true,
54
+ "diffSummary": "short description of the diff",
55
+ "reviewFindings": [
56
+ "blocker: file.ts:12 - issue found, or no blockers"
57
+ ],
58
+ "manualNotes": "anything else the parent should know"
59
+ }
60
+ ```
@@ -0,0 +1,28 @@
1
+ {
2
+ "runId": "8682734e-5509-4c5e-850d-a0a13f741c27",
3
+ "agent": "scout",
4
+ "task": "Audit this repository for the requested cleanup/refactor. Identify package/module layout, build/test/docs configuration, every reference to scikit-rank/current package name and forbidden names beeformer/dcn-exps/tabicl (excluding ipynb), and recommend low-value tests to remove versus keep. Do not edit files. Report concise file paths and commands.\n\n---\n**Output:**\nWrite your findings to exactly this path: /Users/a.n.milogradskiy/Developer/personal/scikit-rank/.pi-subagents/artifacts/outputs/8682734e-5509-4c5e-850d-a0a13f741c27/audit-scout.md\nThis path is authoritative for this run.\nIgnore any other output filename or output path mentioned elsewhere, including output destinations in the base agent prompt, system prompt, or task instructions.\n\n## Acceptance Contract\nAcceptance level: reviewed\nCompletion is not accepted from prose alone. End with a structured acceptance report.\n\nCriteria:\n- criterion-1: Implement the requested change without widening scope\n- criterion-2: Return evidence sufficient for an independent acceptance review\n\nRequired evidence: changed-files, tests-added, commands-run, validation-output, residual-risks, no-staged-files\n\nReview gate: required by reviewer.\n\nFinish with a fenced JSON block tagged `acceptance-report` in this shape:\nUse empty arrays when no items apply; array fields contain strings unless object entries are shown.\n```acceptance-report\n{\n \"criteriaSatisfied\": [\n {\n \"id\": \"criterion-1\",\n \"status\": \"satisfied\",\n \"evidence\": \"specific proof\"\n }\n ],\n \"changedFiles\": [\n \"src/file.ts\"\n ],\n \"testsAddedOrUpdated\": [\n \"test/file.test.ts\"\n ],\n \"commandsRun\": [\n {\n \"command\": \"command\",\n \"result\": \"passed\",\n \"summary\": \"short result\"\n }\n ],\n \"validationOutput\": [\n \"validation output or concise summary\"\n ],\n \"residualRisks\": [\n \"none\"\n ],\n \"noStagedFiles\": true,\n \"diffSummary\": \"short description of the diff\",\n \"reviewFindings\": [\n \"blocker: file.ts:12 - issue found, or no blockers\"\n ],\n \"manualNotes\": \"anything else the parent should know\"\n}\n```",
5
+ "exitCode": 0,
6
+ "model": "openai-codex/gpt-5.6-terra:low",
7
+ "attemptedModels": [
8
+ "openai-codex/gpt-5.6-terra:low"
9
+ ],
10
+ "modelAttempts": [
11
+ {
12
+ "model": "openai-codex/gpt-5.6-terra:low",
13
+ "success": true,
14
+ "exitCode": 0,
15
+ "usage": {
16
+ "input": 64973,
17
+ "output": 9106,
18
+ "cacheRead": 388608,
19
+ "cacheWrite": 0,
20
+ "cost": 0.3961745,
21
+ "turns": 10
22
+ }
23
+ }
24
+ ],
25
+ "transcriptPath": "/Users/a.n.milogradskiy/Developer/personal/scikit-rank/.pi-subagents/artifacts/8682734e-5509-4c5e-850d-a0a13f741c27_scout_transcript.jsonl",
26
+ "skills": [],
27
+ "timestamp": 1784053453342
28
+ }
@@ -0,0 +1,59 @@
1
+ # Code Context
2
+
3
+ ## Files Retrieved
4
+ 1. `pyproject.toml` (lines 1-112) — package name, Hatch target, deps, Ruff.
5
+ 2. `README.md` (lines 1-189) — primary docs; install/test/lint commands.
6
+ 3. `src/scikit_rank/__init__.py` (lines 1-53) — public API exports.
7
+ 4. `src/scikit_rank/sklearn/estimator.py` (lines 1-900) — `DCNBase`, classifier, regressor, ranker.
8
+ 5. `src/scikit_rank/{data.py,preprocessing.py,run.py,factories.py}`, `modules/`, `train/`, `utils/`, `sklearn/` — implementation.
9
+ 6. `tests/conftest.py` (lines 1-19), `tests/test_*.py` — 24 tests / 3,855 LOC.
10
+ 7. `.pre-commit-config.yaml` (lines 1-29), `devenv.nix` (lines 1-35), `devenv.yaml`, `uv.lock:2093` — tooling/lock.
11
+ 8. `exps/{README.md,bars/README.md,temporal_article/README.md}` — experiment docs.
12
+
13
+ ## Key Code
14
+ Distribution is `scikit-rank` (`pyproject.toml:2`); source/import package is `scikit_rank` (`pyproject.toml:48`). Hatch builds only `src/scikit_rank`. Public flow is `__init__` → sklearn estimator → `DataRouter`/`TabularPreprocessor` → factories/`TrainingRun` → `Trainer`; `modules/` holds DCNv2/losses/reducers.
15
+
16
+ A rename must update both forms, the lockfile, Hatch/Ruff config, docs/scripts/tests/docstrings, IPC prefix at `src/scikit_rank/data.py:376`, and temporary router columns at `src/scikit_rank/sklearn/_data_router.py:40-41` if internal residue is forbidden. `exps/bars/` is separate config-driven benchmark infrastructure; untracked `exps/temporal_article/run_final.sh` and FuxiCTR vendor files are not committed scope.
17
+
18
+ ## Architecture
19
+ sklearn wrappers share preprocessing, factory-built PyTorch DCNv2, and Accelerate/Ignite training. `DataRouter` supports eager and LazyFrame input; lazy data streams through Arrow IPC. Experiments are separate from the installable package.
20
+
21
+ ## Build/Test/Docs
22
+ * Build: `uv build`, Hatchling (`pyproject.toml:43-48`), Python `>=3.12,<3.14` (`:6`).
23
+ * Test: no pytest config/markers/CI found; `uv run python -m pytest -q` (`README.md:184-188`), pytest in dev group (`pyproject.toml:23-32`).
24
+ * Lint/hooks: Ruff (`pyproject.toml:50-112`); pre-commit excludes tests/exps/notebooks from Ruff (`.pre-commit-config.yaml:21-29`).
25
+ * Dev: devenv provides Python 3.12, uv, Ruff, pre-commit, OpenMP (`devenv.nix:19-34`).
26
+ * Docs: Markdown README/experiment READMEs; no Sphinx/MkDocs. Notebook excluded.
27
+
28
+ ## Name-reference Inventory
29
+ ```bash
30
+ git grep -inE 'scikit[ _-]?rank|beeformer|dcn-exps|tabicl' -- ':!*.ipynb'
31
+ git grep -ilE 'beeformer|dcn-exps|tabicl' -- ':!*.ipynb'
32
+ git ls-files | grep -iE 'scikit|beeformer|dcn-exps|tabicl'
33
+ ```
34
+ * `beeformer`, `dcn-exps`, `tabicl`: **zero tracked matches** (case-insensitive, notebook excluded). Ignored `.pytest_cache/v/cache/lastfailed` has historic `tabicl/...`; clear caches for whole-worktree acceptance scans.
35
+ * Main distribution/docs refs: `pyproject.toml:2,48,104`; `uv.lock:2093`; `README.md:1,5,12,45,51,60,83,95`; `exps/README.md:3,21,107`; `exps/bars/README.md:4,104,167`; `exps/bars/{_adapters.py,_data.py,train.py}`; `exps/scripts/{compare_predictions_auc.py,evaluate_ranking.py,train_temporal_dcn.py:25,27}`; `exps/temporal_article/{README.md,final_metrics.json}`.
36
+ * Source: all `src/scikit_rank/` paths plus intra-package imports/docstrings in `__init__.py`, `data.py`, `factories.py`, `preprocessing.py`, `run.py`, `modules/{__init__,dcn}.py`, `sklearn/{__init__,_data_router,_types,estimator}.py`, `train/{__init__,optimizers,options}.py`, `utils/{__init__,ipc_materializer}.py`.
37
+ * Tests: every test except `tests/conftest.py` references `scikit_rank`; exact inventory: `git grep -l scikit_rank -- tests`.
38
+
39
+ ## Test Triage
40
+ **Keep:** sklearn/loss contracts (`test_sklearn_compliance`, `test_estimator_specs`, `test_loss_model_alignment`, `test_ranker_eval_metrics`); data/lazy tests (`test_data_router`, `test_lazy_arrow_source`, `test_lazy_dataframe_support`, `test_lazy_eager_parity`); feature tests (`test_dcn_features`, `test_encoder_specs`, `test_embedding_features`, `test_multihash_features`, `test_ple_encoder`, `test_quantile_normalize`, `test_inner_cross_layers`, `test_extra_layers`); training tests (`test_group_batch_sampler`, `test_optimizers`, `test_ema`). Each covers a distinct advertised feature.
41
+
42
+ **Lowest-value consolidation only if DDP is deliberately de-scoped:** `test_accelerate_multiworker.py`, `test_ddp_loss_reduce.py`, `test_ddp_metric_gather.py`, `test_ddp_ranking_training.py`, `test_ddp_sharding.py` (1,113 LOC, overlapping subprocess setup). Do not remove while README promises multi-GPU/DDP. For faster retained-DDP CI, keep `test_ddp_ranking_training` and `test_group_batch_sampler`, consolidate unique reduce/gather/sharding assertions before removing probes.
43
+
44
+ ## Start Here
45
+ Open `pyproject.toml`, then update all `git grep` results, move `src/scikit_rank`, and validate install/import/full tests.
46
+
47
+ ## Commands Run
48
+ ```bash
49
+ git status --short; git ls-files
50
+ git grep -inE 'scikit[ _-]?rank|beeformer|dcn-exps|tabicl' -- ':!*.ipynb'
51
+ git grep -ilE 'beeformer|dcn-exps|tabicl' -- ':!*.ipynb'
52
+ git diff --cached --name-only
53
+ wc -l tests/test_*.py
54
+ ```
55
+ No tracked source/config was edited. Five pre-existing temporal experiment changes are unstaged; index is empty.
56
+
57
+ ```acceptance-report
58
+ {"criteriaSatisfied":[{"id":"criterion-1","status":"satisfied","evidence":"Read-only audit; bounded cleanup targets."},{"id":"criterion-2","status":"satisfied","evidence":"Paths, inventory commands, test triage, and Git state supplied."}],"changedFiles":[],"testsAddedOrUpdated":[],"commandsRun":[{"command":"git grep -inE 'scikit[ _-]?rank|beeformer|dcn-exps|tabicl' -- ':!*.ipynb'","result":"passed","summary":"Current-name refs found; no tracked forbidden-name match."},{"command":"git status --short && git diff --cached --name-only","result":"passed","summary":"Five pre-existing unstaged changes; index empty."},{"command":"wc -l tests/test_*.py","result":"passed","summary":"24 tests, 3,855 lines."}],"validationOutput":["Tracked forbidden names: zero matches excluding notebooks.","No staged files."],"residualRisks":["Ignored pytest cache contains tabicl paths.","Do not overwrite existing temporal experiment edits.","Removing DDP tests while retaining DDP claims risks regressions."],"noStagedFiles":true,"diffSummary":"No repository diff; audit artifact only.","reviewFindings":["No blockers: rename both scikit-rank and scikit_rank, lockfile, and all grep references."],"manualNotes":"No tests run: read-only audit."}
59
+ ```