File size: 4,432 Bytes
463f868
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
"""

Analyze which parsed abilities are missing implementation in game_state.py

"""

import json
import os
import re
from collections import Counter

# Load parsed abilities
with open("docs/full_ability_coverage.json", "r", encoding="utf-8") as f:
    coverage = json.load(f)

# Collect all parsed effect types, conditions, and costs
all_effects = []
all_conditions = []
all_costs = []
all_triggers = []

for card in coverage["with_ability"]:
    if card["parsed"]:
        all_effects.extend(card["parsed"]["effects"])
        all_conditions.extend(card["parsed"]["conditions"])
        all_costs.extend(card["parsed"]["costs"])
        all_triggers.extend(card["parsed"]["triggers"])

effect_counts = Counter(all_effects)
condition_counts = Counter(all_conditions)
cost_counts = Counter(all_costs)
trigger_counts = Counter(all_triggers)

# Now read game engine files to find implemented effects
engine_path = "engine/game"
implementation_code = ""

for root, dirs, files in os.walk(engine_path):
    for file in files:
        if file.endswith(".py"):
            with open(os.path.join(root, file), "r", encoding="utf-8") as f:
                implementation_code += f.read() + "\n"

# Find all EffectType checks in implementation code
implemented_effects = set(re.findall(r"EffectType\.(\w+)", implementation_code))
implemented_conditions = set(re.findall(r"ConditionType\.(\w+)", implementation_code))
implemented_costs = set(re.findall(r"AbilityCostType\.(\w+)", implementation_code))

# Compare
parsed_effects = set(effect_counts.keys())
parsed_conditions = set(condition_counts.keys())
parsed_costs = set(cost_counts.keys())

missing_effects = parsed_effects - implemented_effects
missing_conditions = parsed_conditions - implemented_conditions
missing_costs = parsed_costs - implemented_costs

print("=" * 80)
print("ABILITY IMPLEMENTATION GAP ANALYSIS")
print("=" * 80)

print("\n## EFFECTS")
print(f"Total Unique Effects Parsed: {len(parsed_effects)}")
print(f"Effects Implemented in game_state.py: {len(implemented_effects)}")
print(f"Missing Implementations: {len(missing_effects)}")

if missing_effects:
    print("\n### Missing Effect Implementations:")
    for effect in sorted(missing_effects):
        count = effect_counts[effect]
        print(f"  - {effect:30s} (used in {count:4d} abilities)")
else:
    print("\n✓ All effects are implemented!")

print("\n## CONDITIONS")
print(f"Total Unique Conditions Parsed: {len(parsed_conditions)}")
print(f"Conditions Implemented in game_state.py: {len(implemented_conditions)}")
print(f"Missing Implementations: {len(missing_conditions)}")

if missing_conditions:
    print("\n### Missing Condition Implementations:")
    for cond in sorted(missing_conditions):
        count = condition_counts[cond]
        print(f"  - {cond:30s} (used in {count:4d} abilities)")
else:
    print("\n✓ All conditions are implemented!")

print("\n## COSTS")
print(f"Total Unique Costs Parsed: {len(parsed_costs)}")
print(f"Costs Implemented in game_state.py: {len(implemented_costs)}")
print(f"Missing Implementations: {len(missing_costs)}")

if missing_costs:
    print("\n### Missing Cost Implementations:")
    for cost in sorted(missing_costs):
        count = cost_counts[cost]
        print(f"  - {cost:30s} (used in {count:4d} abilities)")
else:
    print("\n✓ All costs are implemented!")

print("\n## SUMMARY")
print(f"Total Missing Implementations: {len(missing_effects) + len(missing_conditions) + len(missing_costs)}")

# Save detailed report
report = {
    "effects": {
        "parsed": list(parsed_effects),
        "implemented": list(implemented_effects),
        "missing": list(missing_effects),
        "counts": dict(effect_counts),
    },
    "conditions": {
        "parsed": list(parsed_conditions),
        "implemented": list(implemented_conditions),
        "missing": list(missing_conditions),
        "counts": dict(condition_counts),
    },
    "costs": {
        "parsed": list(parsed_costs),
        "implemented": list(implemented_costs),
        "missing": list(missing_costs),
        "counts": dict(cost_counts),
    },
}

with open("docs/implementation_gaps.json", "w", encoding="utf-8") as f:
    json.dump(report, f, indent=2, ensure_ascii=False)

print("\nDetailed report saved to: docs/implementation_gaps.json")