rabukasim / tools /analysis /analyze_implementation_gaps.py
trioskosmos's picture
Upload folder using huggingface_hub
463f868 verified
"""
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")