spells-mtg 0.10.7__tar.gz → 0.10.9__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.

Potentially problematic release.


This version of spells-mtg might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spells-mtg
3
- Version: 0.10.7
3
+ Version: 0.10.9
4
4
  Summary: analaysis of 17Lands.com public datasets
5
5
  Author-Email: Joel Barnes <oelarnes@gmail.com>
6
6
  License: MIT
@@ -412,6 +412,7 @@ A table of all included columns. Columns can be referenced by enum or by string
412
412
  | `PACK_NUM` | `"pack_num"` | `DRAFT` | `GROUP_BY` | 1-indexed | Int |
413
413
  | `PICK_NUMBER` | `"pick_number"` | `DRAFT` | `FILTER_ONLY` | Dataset Column | Int |
414
414
  | `PICK_NUM` | `"pick_num"` | `DRAFT` | `GROUP_BY` | 1-indexed | Int |
415
+ | `PICK_INDEX` | `"pick_index"` | `DRAFT` | `GROUP_BY` | 0-indexed, through 39/42/45 depending on set | Int |
415
416
  | `TAKEN_AT` | `"taken_at` | `DRAFT` | `PICK_SUM` | Summable alias of `PICK_NUM` | Int |
416
417
  | `NUM_DRAFTS` | `"num_drafts"` | `DRAFT` | `PICK_SUM` | | Int |
417
418
  | `NUM_TAKEN` | `"num_taken"` | `DRAFT` | `PICK_SUM` | Sum 1 over rows | Int |
@@ -401,6 +401,7 @@ A table of all included columns. Columns can be referenced by enum or by string
401
401
  | `PACK_NUM` | `"pack_num"` | `DRAFT` | `GROUP_BY` | 1-indexed | Int |
402
402
  | `PICK_NUMBER` | `"pick_number"` | `DRAFT` | `FILTER_ONLY` | Dataset Column | Int |
403
403
  | `PICK_NUM` | `"pick_num"` | `DRAFT` | `GROUP_BY` | 1-indexed | Int |
404
+ | `PICK_INDEX` | `"pick_index"` | `DRAFT` | `GROUP_BY` | 0-indexed, through 39/42/45 depending on set | Int |
404
405
  | `TAKEN_AT` | `"taken_at` | `DRAFT` | `PICK_SUM` | Summable alias of `PICK_NUM` | Int |
405
406
  | `NUM_DRAFTS` | `"num_drafts"` | `DRAFT` | `PICK_SUM` | | Int |
406
407
  | `NUM_TAKEN` | `"num_taken"` | `DRAFT` | `PICK_SUM` | Sum 1 over rows | Int |
@@ -11,7 +11,7 @@ dependencies = [
11
11
  ]
12
12
  requires-python = ">=3.11"
13
13
  readme = "README.md"
14
- version = "0.10.7"
14
+ version = "0.10.9"
15
15
 
16
16
  [project.license]
17
17
  text = "MIT"
@@ -10,10 +10,17 @@ Caches are cleared per-set when new files are downloaded.
10
10
  from enum import StrEnum
11
11
  import os
12
12
  import sys
13
-
14
13
  import polars as pl
15
14
 
16
15
 
16
+ class Env(StrEnum):
17
+ PROD = "prod"
18
+ TEST = "test"
19
+
20
+
21
+ env = Env.PROD
22
+
23
+
17
24
  class EventType(StrEnum):
18
25
  PREMIER = "PremierDraft"
19
26
  TRADITIONAL = "TradDraft"
@@ -28,8 +35,30 @@ def spells_print(mode, content):
28
35
  print(f" 🪄 {mode} ✨ {content}")
29
36
 
30
37
 
38
+ def set_test_env():
39
+ global env
40
+ env = Env.TEST
41
+
42
+
43
+ def set_prod_env():
44
+ global env
45
+ env = Env.PROD
46
+
47
+
31
48
  def data_home() -> str:
32
49
  is_win = sys.platform == "win32"
50
+ global env
51
+
52
+ if env == Env.TEST:
53
+ return os.path.expanduser(
54
+ os.environ.get(
55
+ "SPELLS_TEST_HOME",
56
+ r"~\AppData\Local\SpellsTest"
57
+ if is_win
58
+ else "~/.local/share/spellstest/",
59
+ )
60
+ )
61
+
33
62
  return os.path.expanduser(
34
63
  os.environ.get(
35
64
  "SPELLS_DATA_HOME",
@@ -41,6 +70,46 @@ def data_home() -> str:
41
70
  )
42
71
 
43
72
 
73
+ def create_test_data(set_code: str, test_num_drafts: int = 100):
74
+ """
75
+ run from prod environment to write test data for `set_code` into
76
+ the test environment. Then set `SPELLS_DATA_HOME=test_data_home`
77
+ to run from the test environment
78
+ """
79
+
80
+ context_df = pl.scan_parquet(data_file_path(set_code, "context")).collect()
81
+ picks_per_pack = context_df["picks_per_pack"][0]
82
+
83
+ draft_df = (
84
+ pl.scan_parquet(data_file_path(set_code, "draft"))
85
+ .head(50 * (test_num_drafts + 2))
86
+ .collect()
87
+ )
88
+
89
+ sample_draft_ids = (
90
+ draft_df.group_by("draft_id")
91
+ .len()
92
+ .filter(pl.col("len") == picks_per_pack * 3)["draft_id"][0:test_num_drafts]
93
+ )
94
+
95
+ draft_sample_df = draft_df.filter(pl.col("draft_id").is_in(sample_draft_ids))
96
+ game_sample_df = (
97
+ pl.scan_parquet(data_file_path(set_code, "game"))
98
+ .filter(pl.col("draft_id").is_in(sample_draft_ids))
99
+ .collect()
100
+ )
101
+ card_df = pl.scan_parquet(data_file_path(set_code, "card")).collect()
102
+
103
+ set_test_env()
104
+ if not os.path.isdir(set_dir := external_set_path(set_code)):
105
+ os.makedirs(set_dir)
106
+ context_df.write_parquet(data_file_path(set_code, "context"))
107
+ draft_sample_df.write_parquet(data_file_path(set_code, "draft"))
108
+ game_sample_df.write_parquet(data_file_path(set_code, "game"))
109
+ card_df.write_parquet(data_file_path(set_code, "card"))
110
+ set_prod_env()
111
+
112
+
44
113
  def data_dir_path(cache_dir: DataDir) -> str:
45
114
  """
46
115
  Where 17Lands data is stored. MDU_DATA_DIR environment variable is used, if it exists,
@@ -166,6 +166,10 @@ _specs: dict[str, ColSpec] = {
166
166
  col_type=ColType.GROUP_BY,
167
167
  expr=pl.col(ColName.PICK_NUMBER) + 1,
168
168
  ),
169
+ ColName.PICK_INDEX: ColSpec(
170
+ col_type=ColType.GROUP_BY,
171
+ expr=lambda set_context: pl.col(ColName.PICK_NUMBER) + pl.col(ColName.PACK_NUMBER) * set_context['picks_per_pack']
172
+ ),
169
173
  ColName.TAKEN_AT: ColSpec(
170
174
  col_type=ColType.PICK_SUM,
171
175
  expr=pl.col(ColName.PICK_NUM),
@@ -60,6 +60,7 @@ class ColName(StrEnum):
60
60
  PACK_NUM = "pack_num" # pack_number plus 1
61
61
  PICK_NUMBER = "pick_number"
62
62
  PICK_NUM = "pick_num" # pick_number plus 1
63
+ PICK_INDEX = "pick_index" # 0 - 3 * picks_per_pack - 1
63
64
  TAKEN_AT = "taken_at"
64
65
  NUM_TAKEN = "num_taken"
65
66
  NUM_DRAFTS = "num_drafts"
File without changes
File without changes
File without changes
File without changes