sc2analyzer 0.1.0a1__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 (46) hide show
  1. sc2analyzer-0.1.0a1/PKG-INFO +10 -0
  2. sc2analyzer-0.1.0a1/README.md +3 -0
  3. sc2analyzer-0.1.0a1/pyproject.toml +25 -0
  4. sc2analyzer-0.1.0a1/setup.cfg +4 -0
  5. sc2analyzer-0.1.0a1/src/co_op/__init__.py +0 -0
  6. sc2analyzer-0.1.0a1/src/co_op/event.py +55 -0
  7. sc2analyzer-0.1.0a1/src/co_op/models/__init__.py +88 -0
  8. sc2analyzer-0.1.0a1/src/co_op/models/commander.py +8 -0
  9. sc2analyzer-0.1.0a1/src/co_op/models/player.py +13 -0
  10. sc2analyzer-0.1.0a1/src/co_op/models/unit.py +25 -0
  11. sc2analyzer-0.1.0a1/src/co_op/models/unit_cost.py +1929 -0
  12. sc2analyzer-0.1.0a1/src/co_op/models/unit_type/buildings_units.py +242 -0
  13. sc2analyzer-0.1.0a1/src/co_op/models/unit_type/commander_ability.py +123 -0
  14. sc2analyzer-0.1.0a1/src/co_op/models/unit_type/commander_units.py +157 -0
  15. sc2analyzer-0.1.0a1/src/co_op/models/unit_type/race_army_unit.py +97 -0
  16. sc2analyzer-0.1.0a1/src/co_op/models/unit_type/temporary_units.py +225 -0
  17. sc2analyzer-0.1.0a1/src/co_op/models/unit_types.py +80 -0
  18. sc2analyzer-0.1.0a1/src/co_op/replay/__init__.py +1 -0
  19. sc2analyzer-0.1.0a1/src/co_op/replay/analyser.py +132 -0
  20. sc2analyzer-0.1.0a1/src/co_op/replay/analyser_factory.py +35 -0
  21. sc2analyzer-0.1.0a1/src/co_op/replay/army_analyser.py +215 -0
  22. sc2analyzer-0.1.0a1/src/co_op/replay/army_processor.py +405 -0
  23. sc2analyzer-0.1.0a1/src/co_op/replay/economy_processor.py +66 -0
  24. sc2analyzer-0.1.0a1/src/co_op/replay/processor.py +69 -0
  25. sc2analyzer-0.1.0a1/src/co_op/replay/replay.py +30 -0
  26. sc2analyzer-0.1.0a1/src/co_op/replay/replay_factory.py +25 -0
  27. sc2analyzer-0.1.0a1/src/co_op/replay/unit_value.py +15 -0
  28. sc2analyzer-0.1.0a1/src/co_op/replay_reports.py +81 -0
  29. sc2analyzer-0.1.0a1/src/co_op/reports/army_value_report.py +69 -0
  30. sc2analyzer-0.1.0a1/src/co_op/reports/commanders.py +148 -0
  31. sc2analyzer-0.1.0a1/src/co_op/reports/resources/commanders_economy.py +38 -0
  32. sc2analyzer-0.1.0a1/src/co_op/reports/resources/economy_report.py +43 -0
  33. sc2analyzer-0.1.0a1/src/co_op/reports/resources/resource_bank.py +165 -0
  34. sc2analyzer-0.1.0a1/src/co_op/reports/resources/resource_bank_analysis.py +110 -0
  35. sc2analyzer-0.1.0a1/src/co_op/reports/resources/resource_bank_analysis_model.py +16 -0
  36. sc2analyzer-0.1.0a1/src/co_op/reports/resources/resource_efficiency_report.py +98 -0
  37. sc2analyzer-0.1.0a1/src/models/graph.py +8 -0
  38. sc2analyzer-0.1.0a1/src/models/strcraft_report.py +17 -0
  39. sc2analyzer-0.1.0a1/src/sc2analyzer.egg-info/PKG-INFO +10 -0
  40. sc2analyzer-0.1.0a1/src/sc2analyzer.egg-info/SOURCES.txt +44 -0
  41. sc2analyzer-0.1.0a1/src/sc2analyzer.egg-info/dependency_links.txt +1 -0
  42. sc2analyzer-0.1.0a1/src/sc2analyzer.egg-info/requires.txt +7 -0
  43. sc2analyzer-0.1.0a1/src/sc2analyzer.egg-info/top_level.txt +2 -0
  44. sc2analyzer-0.1.0a1/tests/test_army_processor.py +46 -0
  45. sc2analyzer-0.1.0a1/tests/test_replay_reports.py +12 -0
  46. sc2analyzer-0.1.0a1/tests/test_unit_types.py +48 -0
@@ -0,0 +1,10 @@
1
+ Metadata-Version: 2.4
2
+ Name: sc2analyzer
3
+ Version: 0.1.0a1
4
+ Requires-Dist: numpy>=1.26
5
+ Requires-Dist: build
6
+ Requires-Dist: twine
7
+ Requires-Dist: pytest
8
+ Requires-Dist: sc2reader>=1.8
9
+ Requires-Dist: pandas
10
+ Requires-Dist: matplotlib
@@ -0,0 +1,3 @@
1
+ # CO-OP games
2
+ ## Links
3
+ [s2protocol code](https://github.com/Blizzard/s2protocol)
@@ -0,0 +1,25 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+
6
+ [project]
7
+ name = "sc2analyzer"
8
+ version = "0.1.0a1"
9
+
10
+ dependencies = [
11
+ #"pandas>=2.2",
12
+ "numpy>=1.26",
13
+ "build",
14
+ "twine",
15
+ "pytest",
16
+ "sc2reader>=1.8",
17
+ "pandas",
18
+ "matplotlib"
19
+ ]
20
+
21
+ [tool.setuptools.packages.find]
22
+ where = ["src"]
23
+
24
+ [tool.setuptools.package-dir]
25
+ "" = "src"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
File without changes
@@ -0,0 +1,55 @@
1
+ from sc2reader.events import Event
2
+
3
+
4
+ class CoOpEvent:
5
+ PLAYER_EVENT = "PlayerEvent"
6
+ GAME_EVENT = "GameEvent"
7
+ UNITBORN_EVENT = "UnitBornEvent"
8
+ def __init__(self, events:list[Event]):
9
+ self.events = events
10
+ self.event_types = self.get_event_types()
11
+ self.players_events = self.arrange_events()
12
+
13
+ def get_event_types(self)->dict[str, set[str]]:
14
+ game_events = set()
15
+ player_events = set()
16
+ for event in self.events:
17
+ value = getattr(event, "control_pid", None)
18
+ if value == None:
19
+ game_events.add(event.name)
20
+ else:
21
+ player_events.add(event.name)
22
+
23
+ types = dict()
24
+ types[self.GAME_EVENT] = game_events
25
+ types[self.PLAYER_EVENT] = player_events
26
+
27
+ return types
28
+
29
+ def arrange_events(self)->dict[int, list]:
30
+ events = {}
31
+ for event in self.events:
32
+ if event.name in self.event_types[self.PLAYER_EVENT]:
33
+ id = event.control_pid
34
+ event_list = []
35
+ if id in events:
36
+ event_list = events[id]
37
+ event_list.append(event)
38
+ events[id] = event_list
39
+
40
+ return events
41
+ def get_unit_born_events(self):
42
+ events = list[Event]()
43
+ for event in self.events:
44
+ if event.name == self.UNITBORN_EVENT:
45
+ events.append(event)
46
+
47
+ return events
48
+
49
+ def get_unit_born_events_for_player(self, id:int)->list[Event]:
50
+ events = list[Event]()
51
+ for event in self.players_events[id]:
52
+ if event.name == self.UNITBORN_EVENT:
53
+ events.append(event)
54
+
55
+ return events
@@ -0,0 +1,88 @@
1
+ HEROS = {
2
+ "Dehaka",
3
+ "Tychus"
4
+ }
5
+
6
+ COMMANDER_POWER_UNITS = {
7
+ "TychusCoop",
8
+ "TychusWarhound",
9
+ "TychusMedic",
10
+ "TychusHERC",
11
+ "TychusFirebat",
12
+
13
+ "DehakaCoop",
14
+ "DehakaCoopClone",
15
+ "DehakaMurvar",
16
+ "DehakaDakrun",
17
+ "DehakaGlevig",
18
+
19
+ #aba
20
+ "Brutalisk",
21
+ "Leviathan",
22
+ }
23
+
24
+ POWER_VALUES = {
25
+ "DehakaCoop": 1000,
26
+ "DehakaCoopClone": 300,
27
+ "DehakaMurvar": 800,
28
+ "DehakaDakrun": 800,
29
+ "DehakaGlevig": 800,
30
+
31
+ "TychusCoop": 1000,
32
+ "TychusWarhound": 800,
33
+ "TychusMedic": 700,
34
+ "TychusHERC": 700,
35
+ "TychusFirebat": 800,
36
+ }
37
+
38
+ HERO_IGNOR = [
39
+ "DehakaTrainEggRoach",
40
+ "DehakaTrainEggDrone",
41
+ "DehakaDrone",
42
+ "DehakaHatchery",
43
+ "DehakaCoopReviveCocoonFootPrint",
44
+ "DehakaTrainEggHydralisk",
45
+ "TychusSCV",
46
+ "TychusCommandCenter",
47
+ "TychusResearchCenter",
48
+ "TychusWarhoundAutoTurret",
49
+ "TychusResearchCenterUnlocked",
50
+ "TychusResearchCenterLocked",
51
+ "SupplyDepotLowered",
52
+ "Egg",
53
+ "SiegeTankSieged",
54
+ "Larva",
55
+ "ToxicNestBurrowed",
56
+
57
+ #"BiomassPickup",
58
+ ]
59
+ DEHAKA = {
60
+ "DehakaTrainEggRoach",
61
+ "DehakaTrainEggDrone",
62
+ "DehakaDrone",
63
+ "DehakaCreeperFlying",
64
+ }
65
+ TYCHUS_OUTLAWS = {
66
+ "TychusMedic",
67
+ "TychusSCV",
68
+ "TychusWarhoundAutoTurret",
69
+ "TychusResearchCenterUnlocked",
70
+ "TychusResearchCenterLocked",
71
+ "TychusHERC",
72
+ "TychusOdin",
73
+ "TychusCommandCenter",
74
+ "TychusResearchCenter"
75
+ "CoopCasterTychus"
76
+ "TychusCoop",
77
+ "TychusWarhound",
78
+ "TychusFirebat",
79
+ "TychusHERC"
80
+ "Tychus",
81
+ "Sirius",
82
+ "Nux",
83
+ "Sam",
84
+ "Blaze",
85
+ "Rattlesnake",
86
+ "Vega",
87
+ "Cannonball"
88
+ }
@@ -0,0 +1,8 @@
1
+ from dataclasses import dataclass, field
2
+
3
+ @dataclass
4
+ class Commander:
5
+ unit_id: int
6
+ owner: int
7
+ name: str
8
+ units_ids: set[int] = field(default_factory=set)
@@ -0,0 +1,13 @@
1
+ from dataclasses import dataclass
2
+
3
+ from sc2reader.events import Event
4
+
5
+
6
+ @dataclass
7
+ class Player:
8
+ id: int
9
+ name: str
10
+ commander: str
11
+ race: str
12
+ events: list[Event]
13
+
@@ -0,0 +1,25 @@
1
+ from dataclasses import dataclass, field
2
+
3
+
4
+ @dataclass
5
+ class Unit:
6
+ unit_id: int
7
+ owner: int
8
+
9
+ current_type: str
10
+
11
+ # TODO: refact to is_commander_ability
12
+ commander_ability = False
13
+
14
+ is_army = False
15
+ is_building = False
16
+ is_worker = False
17
+ is_temporary = False
18
+ is_commander_unit = False
19
+ is_commander = False
20
+
21
+
22
+ birth_frame: int
23
+ death_frame: int | None = None
24
+
25
+ type_history: list = field(default_factory=list)