CLAUDE: Complete Phase 3B - Add all 6 infield error charts
Added complete error chart data for all infield positions to finalize Phase 3B X-Check league config tables implementation. Changes: - Added CATCHER_ERROR_CHART (17 ratings: 0-16) - Added FIRST_BASE_ERROR_CHART (31 ratings: 0-30) - Added SECOND_BASE_ERROR_CHART (40 ratings: 0-71, sparse) - Added THIRD_BASE_ERROR_CHART (45 ratings: 0-65, sparse) - Added SHORTSTOP_ERROR_CHART (43 ratings: 0-88, sparse) - Added PITCHER_ERROR_CHART (40 ratings: 0-51, sparse) All charts follow same structure as outfield charts with E3 field (empty for infield positions). Total ~250 lines of error chart data. Testing: - Updated test_infield_error_charts_complete() to verify charts populated - All 36 X-Check table tests passing - Verified chart structure matches outfield charts Phase 3B Status: 100% COMPLETE ✅ All defense tables complete, all error charts complete, ready for Phase 3C 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
0b6076d5b8
commit
cc5bf43e84
@ -161,16 +161,256 @@ CF_ERROR_CHART: dict[int, dict[str, List[int]]] = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Infield Error Charts
|
# Infield Error Charts
|
||||||
# TODO: Add P, C, 1B, 2B, 3B, SS error charts
|
# Note: Infield charts do not use E3 (unlike outfield charts)
|
||||||
# Structure same as OF charts above
|
# Structure: same as OF but E3 is always empty
|
||||||
# Placeholder for now - to be filled with actual data
|
|
||||||
|
|
||||||
PITCHER_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO
|
# Catcher Error Chart
|
||||||
CATCHER_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO
|
CATCHER_ERROR_CHART: dict[int, dict[str, List[int]]] = {
|
||||||
FIRST_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO
|
0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []},
|
||||||
SECOND_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO
|
1: {'RP': [5], 'E1': [17], 'E2': [], 'E3': []},
|
||||||
THIRD_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO
|
2: {'RP': [5], 'E1': [3, 17, 18], 'E2': [], 'E3': []},
|
||||||
SHORTSTOP_ERROR_CHART: dict[int, dict[str, List[int]]] = {} # TODO
|
3: {'RP': [5], 'E1': [3, 16, 10], 'E2': [], 'E3': []},
|
||||||
|
4: {'RP': [5], 'E1': [16, 17], 'E2': [18], 'E3': []},
|
||||||
|
5: {'RP': [5], 'E1': [4, 16, 17], 'E2': [18], 'E3': []},
|
||||||
|
6: {'RP': [5], 'E1': [14], 'E2': [18], 'E3': []},
|
||||||
|
7: {'RP': [5], 'E1': [3, 15, 16], 'E2': [18], 'E3': []},
|
||||||
|
8: {'RP': [5], 'E1': [6, 15], 'E2': [18], 'E3': []},
|
||||||
|
9: {'RP': [5], 'E1': [3, 13], 'E2': [18], 'E3': []},
|
||||||
|
10: {'RP': [5], 'E1': [12], 'E2': [18], 'E3': []},
|
||||||
|
11: {'RP': [5], 'E1': [3, 11], 'E2': [18], 'E3': []},
|
||||||
|
12: {'RP': [5], 'E1': [6, 15, 16, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
13: {'RP': [5], 'E1': [4, 6, 15, 16, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
14: {'RP': [5], 'E1': [12, 16, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
15: {'RP': [5], 'E1': [11, 15], 'E2': [3, 18], 'E3': []},
|
||||||
|
16: {'RP': [5], 'E1': [7, 14, 16, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
}
|
||||||
|
|
||||||
|
# First Base Error Chart
|
||||||
|
FIRST_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = {
|
||||||
|
0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []},
|
||||||
|
1: {'RP': [5], 'E1': [17, 18], 'E2': [], 'E3': []},
|
||||||
|
2: {'RP': [5], 'E1': [3, 16, 18], 'E2': [], 'E3': []},
|
||||||
|
3: {'RP': [5], 'E1': [3, 15], 'E2': [18], 'E3': []},
|
||||||
|
4: {'RP': [5], 'E1': [14], 'E2': [18], 'E3': []},
|
||||||
|
5: {'RP': [5], 'E1': [14, 17], 'E2': [18], 'E3': []},
|
||||||
|
6: {'RP': [5], 'E1': [3, 13], 'E2': [18], 'E3': []},
|
||||||
|
7: {'RP': [5], 'E1': [3, 9], 'E2': [18], 'E3': []},
|
||||||
|
8: {'RP': [5], 'E1': [6, 15, 16, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
9: {'RP': [5], 'E1': [7, 14, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
10: {'RP': [5], 'E1': [11, 15], 'E2': [3, 18], 'E3': []},
|
||||||
|
11: {'RP': [5], 'E1': [6, 8, 15], 'E2': [3, 18], 'E3': []},
|
||||||
|
12: {'RP': [5], 'E1': [6, 9, 15], 'E2': [3, 18], 'E3': []},
|
||||||
|
13: {'RP': [5], 'E1': [11, 13], 'E2': [17], 'E3': []},
|
||||||
|
14: {'RP': [5], 'E1': [3, 9, 12], 'E2': [17], 'E3': []},
|
||||||
|
15: {'RP': [5], 'E1': [7, 12, 14], 'E2': [17], 'E3': []},
|
||||||
|
16: {'RP': [5], 'E1': [3, 11, 12, 16], 'E2': [17], 'E3': []},
|
||||||
|
17: {'RP': [5], 'E1': [3, 6, 11, 12], 'E2': [17], 'E3': []},
|
||||||
|
18: {'RP': [5], 'E1': [11, 12, 14], 'E2': [17], 'E3': []},
|
||||||
|
19: {'RP': [5], 'E1': [10, 11, 15, 16], 'E2': [17, 18], 'E3': []},
|
||||||
|
20: {'RP': [5], 'E1': [6, 10, 11, 15], 'E2': [17, 18], 'E3': []},
|
||||||
|
21: {'RP': [5], 'E1': [3, 9, 10, 12], 'E2': [17, 18], 'E3': []},
|
||||||
|
22: {'RP': [5], 'E1': [7, 11, 12, 14], 'E2': [17, 18], 'E3': []},
|
||||||
|
23: {'RP': [5], 'E1': [10, 11, 12, 16], 'E2': [17, 18], 'E3': []},
|
||||||
|
24: {'RP': [5], 'E1': [11, 12, 13, 14], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
25: {'RP': [5], 'E1': [9, 11, 12, 14], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
26: {'RP': [5], 'E1': [9, 12, 13, 14, 15], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
27: {'RP': [5], 'E1': [7, 8, 11, 13, 14], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
28: {'RP': [5], 'E1': [7, 11, 12, 13, 14], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
29: {'RP': [5], 'E1': [9, 10, 11, 12, 17], 'E2': [16], 'E3': []},
|
||||||
|
30: {'RP': [5], 'E1': [10, 11, 12, 13, 15, 18], 'E2': [16], 'E3': []},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Second Base Error Chart
|
||||||
|
SECOND_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = {
|
||||||
|
0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []},
|
||||||
|
1: {'RP': [5], 'E1': [18], 'E2': [], 'E3': []},
|
||||||
|
2: {'RP': [5], 'E1': [3, 18], 'E2': [], 'E3': []},
|
||||||
|
3: {'RP': [5], 'E1': [3, 17], 'E2': [], 'E3': []},
|
||||||
|
4: {'RP': [5], 'E1': [3, 17], 'E2': [18], 'E3': []},
|
||||||
|
5: {'RP': [5], 'E1': [16], 'E2': [18], 'E3': []},
|
||||||
|
6: {'RP': [5], 'E1': [3, 16], 'E2': [18], 'E3': []},
|
||||||
|
8: {'RP': [5], 'E1': [16, 17], 'E2': [18], 'E3': []},
|
||||||
|
10: {'RP': [5], 'E1': [4, 16, 17], 'E2': [18], 'E3': []},
|
||||||
|
11: {'RP': [5], 'E1': [15, 17], 'E2': [18], 'E3': []},
|
||||||
|
12: {'RP': [5], 'E1': [15, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
13: {'RP': [5], 'E1': [14], 'E2': [3, 18], 'E3': []},
|
||||||
|
14: {'RP': [5], 'E1': [15, 16], 'E2': [3, 18], 'E3': []},
|
||||||
|
15: {'RP': [5], 'E1': [14, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
16: {'RP': [5], 'E1': [15, 16, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
17: {'RP': [5], 'E1': [6, 15], 'E2': [3, 18], 'E3': []},
|
||||||
|
18: {'RP': [5], 'E1': [13], 'E2': [3, 18], 'E3': []},
|
||||||
|
19: {'RP': [5], 'E1': [6, 15, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
20: {'RP': [5], 'E1': [3, 13, 18], 'E2': [17], 'E3': []},
|
||||||
|
21: {'RP': [5], 'E1': [4, 13], 'E2': [17], 'E3': []},
|
||||||
|
22: {'RP': [5], 'E1': [12, 18], 'E2': [17], 'E3': []},
|
||||||
|
23: {'RP': [5], 'E1': [11], 'E2': [17], 'E3': []},
|
||||||
|
24: {'RP': [5], 'E1': [11, 18], 'E2': [17], 'E3': []},
|
||||||
|
25: {'RP': [5], 'E1': [3, 11, 18], 'E2': [17], 'E3': []},
|
||||||
|
26: {'RP': [5], 'E1': [13, 15], 'E2': [17], 'E3': []},
|
||||||
|
27: {'RP': [5], 'E1': [13, 15, 18], 'E2': [17], 'E3': []},
|
||||||
|
28: {'RP': [5], 'E1': [3, 13, 15], 'E2': [17, 18], 'E3': []},
|
||||||
|
29: {'RP': [5], 'E1': [3, 11, 16], 'E2': [17, 18], 'E3': []},
|
||||||
|
30: {'RP': [5], 'E1': [12, 15], 'E2': [17, 18], 'E3': []},
|
||||||
|
32: {'RP': [5], 'E1': [11, 15], 'E2': [17, 18], 'E3': []},
|
||||||
|
34: {'RP': [5], 'E1': [12, 14], 'E2': [17, 18], 'E3': []},
|
||||||
|
37: {'RP': [5], 'E1': [11, 15, 18], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
39: {'RP': [5], 'E1': [12, 13], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
41: {'RP': [5], 'E1': [11, 13], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
44: {'RP': [5], 'E1': [9, 12, 18], 'E2': [16], 'E3': []},
|
||||||
|
47: {'RP': [5], 'E1': [7, 12, 14], 'E2': [16], 'E3': []},
|
||||||
|
50: {'RP': [5], 'E1': [11, 13, 15, 18], 'E2': [16], 'E3': []},
|
||||||
|
53: {'RP': [5], 'E1': [11, 12, 15], 'E2': [16, 18], 'E3': []},
|
||||||
|
56: {'RP': [5], 'E1': [6, 12, 13, 15], 'E2': [16, 18], 'E3': []},
|
||||||
|
59: {'RP': [5], 'E1': [6, 11, 13, 15], 'E2': [3, 16, 18], 'E3': []},
|
||||||
|
62: {'RP': [5], 'E1': [6, 11, 12, 15], 'E2': [3, 16, 18], 'E3': []},
|
||||||
|
65: {'RP': [5], 'E1': [7, 12, 13, 14], 'E2': [3, 16, 18], 'E3': []},
|
||||||
|
68: {'RP': [5], 'E1': [10, 11, 12], 'E2': [16, 17], 'E3': []},
|
||||||
|
71: {'RP': [5], 'E1': [11, 12, 13, 15], 'E2': [16, 17], 'E3': []},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Third Base Error Chart
|
||||||
|
THIRD_BASE_ERROR_CHART: dict[int, dict[str, List[int]]] = {
|
||||||
|
0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []},
|
||||||
|
1: {'RP': [5], 'E1': [3], 'E2': [18], 'E3': []},
|
||||||
|
2: {'RP': [5], 'E1': [3, 4], 'E2': [18], 'E3': []},
|
||||||
|
3: {'RP': [5], 'E1': [3, 4], 'E2': [17], 'E3': []},
|
||||||
|
4: {'RP': [5], 'E1': [3, 16], 'E2': [17], 'E3': []},
|
||||||
|
5: {'RP': [5], 'E1': [15], 'E2': [17], 'E3': []},
|
||||||
|
6: {'RP': [5], 'E1': [4, 15], 'E2': [17], 'E3': []},
|
||||||
|
8: {'RP': [5], 'E1': [3, 15, 16], 'E2': [17, 18], 'E3': []},
|
||||||
|
10: {'RP': [5], 'E1': [13], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
11: {'RP': [5], 'E1': [6, 15, 17], 'E2': [16], 'E3': []},
|
||||||
|
12: {'RP': [5], 'E1': [12], 'E2': [16], 'E3': []},
|
||||||
|
13: {'RP': [5], 'E1': [11], 'E2': [16, 18], 'E3': []},
|
||||||
|
14: {'RP': [5], 'E1': [3, 4, 14, 15], 'E2': [16, 18], 'E3': []},
|
||||||
|
15: {'RP': [5], 'E1': [13, 15], 'E2': [3, 16, 18], 'E3': []},
|
||||||
|
16: {'RP': [5], 'E1': [4, 7, 14], 'E2': [3, 16, 18], 'E3': []},
|
||||||
|
17: {'RP': [5], 'E1': [12, 15], 'E2': [16, 17], 'E3': []},
|
||||||
|
18: {'RP': [5], 'E1': [3, 11, 15], 'E2': [16, 17], 'E3': []},
|
||||||
|
19: {'RP': [5], 'E1': [7, 14, 16, 17], 'E2': [15], 'E3': []},
|
||||||
|
20: {'RP': [5], 'E1': [11, 14], 'E2': [15], 'E3': []},
|
||||||
|
21: {'RP': [5], 'E1': [6, 11, 16], 'E2': [15, 18], 'E3': []},
|
||||||
|
22: {'RP': [5], 'E1': [12, 14, 16], 'E2': [15, 18], 'E3': []},
|
||||||
|
23: {'RP': [5], 'E1': [11, 13], 'E2': [3, 15, 18], 'E3': []},
|
||||||
|
24: {'RP': [5], 'E1': [9, 12], 'E2': [3, 15, 18], 'E3': []},
|
||||||
|
25: {'RP': [5], 'E1': [6, 8, 13], 'E2': [15, 17], 'E3': []},
|
||||||
|
26: {'RP': [5], 'E1': [10, 11], 'E2': [15, 17], 'E3': []},
|
||||||
|
27: {'RP': [5], 'E1': [9, 12, 16], 'E2': [15, 17, 18], 'E3': []},
|
||||||
|
28: {'RP': [5], 'E1': [11, 13, 15], 'E2': [14], 'E3': []},
|
||||||
|
29: {'RP': [5], 'E1': [9, 12, 15], 'E2': [14], 'E3': []},
|
||||||
|
30: {'RP': [5], 'E1': [6, 8, 13, 15], 'E2': [14, 18], 'E3': []},
|
||||||
|
31: {'RP': [5], 'E1': [10, 11, 15], 'E2': [14, 18], 'E3': []},
|
||||||
|
32: {'RP': [5], 'E1': [11, 13, 14, 17], 'E2': [15, 16, 18], 'E3': []},
|
||||||
|
33: {'RP': [5], 'E1': [8, 11, 13], 'E2': [15, 16, 18], 'E3': []},
|
||||||
|
34: {'RP': [5], 'E1': [6, 9, 12, 15], 'E2': [14, 17], 'E3': []},
|
||||||
|
35: {'RP': [5], 'E1': [11, 12, 13], 'E2': [14, 17], 'E3': []},
|
||||||
|
37: {'RP': [5], 'E1': [9, 11, 12], 'E2': [15, 16, 17], 'E3': []},
|
||||||
|
39: {'RP': [5], 'E1': [7, 9, 12, 14, 18], 'E2': [6, 15], 'E3': []},
|
||||||
|
41: {'RP': [5], 'E1': [10, 11, 12, 16], 'E2': [13], 'E3': []},
|
||||||
|
44: {'RP': [5], 'E1': [4, 11, 12, 13, 14], 'E2': [6, 15, 17], 'E3': []},
|
||||||
|
47: {'RP': [5], 'E1': [8, 9, 11, 12], 'E2': [13, 17], 'E3': []},
|
||||||
|
50: {'RP': [5], 'E1': [9, 10, 11, 12], 'E2': [14, 15, 18], 'E3': []},
|
||||||
|
53: {'RP': [5], 'E1': [6, 8, 9, 10, 11], 'E2': [13, 16], 'E3': []},
|
||||||
|
56: {'RP': [5], 'E1': [8, 9, 10, 15, 14, 17], 'E2': [3, 11, 18], 'E3': []},
|
||||||
|
59: {'RP': [5], 'E1': [4, 7, 9, 10, 11, 12], 'E2': [13, 15], 'E3': []},
|
||||||
|
62: {'RP': [5], 'E1': [7, 8, 9, 10, 11, 14], 'E2': [12, 16, 18], 'E3': []},
|
||||||
|
65: {'RP': [5], 'E1': [7, 8, 9, 10, 12, 13], 'E2': [11, 16, 18], 'E3': []},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Shortstop Error Chart
|
||||||
|
SHORTSTOP_ERROR_CHART: dict[int, dict[str, List[int]]] = {
|
||||||
|
0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []},
|
||||||
|
1: {'RP': [5], 'E1': [18], 'E2': [], 'E3': []},
|
||||||
|
2: {'RP': [5], 'E1': [3, 18], 'E2': [], 'E3': []},
|
||||||
|
3: {'RP': [5], 'E1': [17], 'E2': [], 'E3': []},
|
||||||
|
4: {'RP': [5], 'E1': [17], 'E2': [18], 'E3': []},
|
||||||
|
5: {'RP': [5], 'E1': [3, 17], 'E2': [18], 'E3': []},
|
||||||
|
6: {'RP': [5], 'E1': [16], 'E2': [18], 'E3': []},
|
||||||
|
7: {'RP': [5], 'E1': [3, 16], 'E2': [18], 'E3': []},
|
||||||
|
8: {'RP': [5], 'E1': [16, 17], 'E2': [18], 'E3': []},
|
||||||
|
10: {'RP': [5], 'E1': [6, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
12: {'RP': [5], 'E1': [15], 'E2': [3, 18], 'E3': []},
|
||||||
|
14: {'RP': [5], 'E1': [4, 15], 'E2': [17], 'E3': []},
|
||||||
|
16: {'RP': [5], 'E1': [14], 'E2': [17], 'E3': []},
|
||||||
|
17: {'RP': [5], 'E1': [15, 16], 'E2': [17], 'E3': []},
|
||||||
|
18: {'RP': [5], 'E1': [15, 16, 18], 'E2': [17], 'E3': []},
|
||||||
|
19: {'RP': [5], 'E1': [4, 14], 'E2': [17], 'E3': []},
|
||||||
|
20: {'RP': [5], 'E1': [4, 15, 16], 'E2': [17], 'E3': []},
|
||||||
|
21: {'RP': [5], 'E1': [6, 15], 'E2': [17], 'E3': []},
|
||||||
|
22: {'RP': [5], 'E1': [6, 15], 'E2': [17, 18], 'E3': []},
|
||||||
|
23: {'RP': [5], 'E1': [3, 13], 'E2': [17, 18], 'E3': []},
|
||||||
|
24: {'RP': [5], 'E1': [4, 6, 15], 'E2': [17, 18], 'E3': []},
|
||||||
|
25: {'RP': [5], 'E1': [4, 13], 'E2': [17, 18], 'E3': []},
|
||||||
|
26: {'RP': [5], 'E1': [12], 'E2': [17, 18], 'E3': []},
|
||||||
|
27: {'RP': [5], 'E1': [3, 12], 'E2': [17, 18], 'E3': []},
|
||||||
|
28: {'RP': [5], 'E1': [6, 15, 16], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
29: {'RP': [5], 'E1': [11], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
30: {'RP': [5], 'E1': [4, 12], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
31: {'RP': [5], 'E1': [4, 6, 15, 16], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
32: {'RP': [5], 'E1': [13, 15], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
33: {'RP': [5], 'E1': [13, 15], 'E2': [16], 'E3': []},
|
||||||
|
34: {'RP': [5], 'E1': [13, 15, 18], 'E2': [16], 'E3': []},
|
||||||
|
36: {'RP': [5], 'E1': [13, 15, 17], 'E2': [16], 'E3': []},
|
||||||
|
38: {'RP': [5], 'E1': [13, 14], 'E2': [16], 'E3': []},
|
||||||
|
40: {'RP': [5], 'E1': [11, 15], 'E2': [16, 18], 'E3': []},
|
||||||
|
42: {'RP': [5], 'E1': [12, 14], 'E2': [16, 18], 'E3': []},
|
||||||
|
44: {'RP': [5], 'E1': [8, 13], 'E2': [16, 18], 'E3': []},
|
||||||
|
48: {'RP': [5], 'E1': [6, 12, 15], 'E2': [3, 18, 18], 'E3': []},
|
||||||
|
52: {'RP': [5], 'E1': [11, 13, 18], 'E2': [16, 17], 'E3': []},
|
||||||
|
56: {'RP': [5], 'E1': [11, 12, 18], 'E2': [16, 17], 'E3': []},
|
||||||
|
60: {'RP': [5], 'E1': [7, 11, 14], 'E2': [15], 'E3': []},
|
||||||
|
64: {'RP': [5], 'E1': [6, 9, 12], 'E2': [15, 18], 'E3': []},
|
||||||
|
68: {'RP': [5], 'E1': [9, 12, 14], 'E2': [15, 18], 'E3': []},
|
||||||
|
72: {'RP': [5], 'E1': [6, 11, 13, 15], 'E2': [4, 16, 17], 'E3': []},
|
||||||
|
76: {'RP': [5], 'E1': [9, 12, 13], 'E2': [15, 17], 'E3': []},
|
||||||
|
80: {'RP': [5], 'E1': [4, 11, 12, 13], 'E2': [15, 17], 'E3': []},
|
||||||
|
84: {'RP': [5], 'E1': [10, 11, 12], 'E2': [3, 15, 17], 'E3': []},
|
||||||
|
88: {'RP': [5], 'E1': [9, 11, 12, 16], 'E2': [14], 'E3': []},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Pitcher Error Chart
|
||||||
|
PITCHER_ERROR_CHART: dict[int, dict[str, List[int]]] = {
|
||||||
|
0: {'RP': [5], 'E1': [], 'E2': [], 'E3': []},
|
||||||
|
4: {'RP': [5], 'E1': [14], 'E2': [18], 'E3': []},
|
||||||
|
6: {'RP': [5], 'E1': [3, 13], 'E2': [18], 'E3': []},
|
||||||
|
7: {'RP': [5], 'E1': [3, 12], 'E2': [18], 'E3': []},
|
||||||
|
8: {'RP': [5], 'E1': [6, 15, 16, 17], 'E2': [3, 18], 'E3': []},
|
||||||
|
10: {'RP': [5], 'E1': [11, 15], 'E2': [3, 18], 'E3': []},
|
||||||
|
11: {'RP': [5], 'E1': [12, 15, 16], 'E2': [3, 18], 'E3': []},
|
||||||
|
12: {'RP': [5], 'E1': [6, 12, 15], 'E2': [3, 18], 'E3': []},
|
||||||
|
13: {'RP': [5], 'E1': [11, 13], 'E2': [17], 'E3': []},
|
||||||
|
14: {'RP': [5], 'E1': [7, 13, 14], 'E2': [17], 'E3': []},
|
||||||
|
15: {'RP': [5], 'E1': [4, 11, 12], 'E2': [17], 'E3': []},
|
||||||
|
16: {'RP': [5], 'E1': [4, 9, 12, 16], 'E2': [17], 'E3': []},
|
||||||
|
17: {'RP': [5], 'E1': [3, 6, 11, 12], 'E2': [17], 'E3': []},
|
||||||
|
18: {'RP': [5], 'E1': [11, 12, 14], 'E2': [17], 'E3': []},
|
||||||
|
19: {'RP': [5], 'E1': [6, 9, 12, 15], 'E2': [17, 18], 'E3': []},
|
||||||
|
20: {'RP': [5], 'E1': [6, 10, 11, 15], 'E2': [17, 18], 'E3': []},
|
||||||
|
21: {'RP': [5], 'E1': [7, 11, 13, 14], 'E2': [17, 18], 'E3': []},
|
||||||
|
22: {'RP': [5], 'E1': [8, 12, 13, 14], 'E2': [17, 18], 'E3': []},
|
||||||
|
23: {'RP': [5], 'E1': [10, 11, 12, 16], 'E2': [17, 18], 'E3': []},
|
||||||
|
24: {'RP': [5], 'E1': [10, 11, 12, 15], 'E2': [17, 18], 'E3': []},
|
||||||
|
26: {'RP': [5], 'E1': [9, 12, 13, 14, 15], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
27: {'RP': [5], 'E1': [10, 11, 12, 13], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
28: {'RP': [5], 'E1': [9, 10, 11, 12], 'E2': [3, 17, 18], 'E3': []},
|
||||||
|
30: {'RP': [5], 'E1': [3, 10, 11, 12, 13, 15], 'E2': [16], 'E3': []},
|
||||||
|
31: {'RP': [5], 'E1': [10, 11, 12, 13, 14], 'E2': [16], 'E3': []},
|
||||||
|
33: {'RP': [5], 'E1': [3, 8, 10, 11, 12, 13], 'E2': [16], 'E3': []},
|
||||||
|
34: {'RP': [5], 'E1': [9, 10, 11, 12, 13], 'E2': [16, 18], 'E3': []},
|
||||||
|
35: {'RP': [5], 'E1': [9, 10, 11, 12, 14, 15], 'E2': [16, 18], 'E3': []},
|
||||||
|
36: {'RP': [5], 'E1': [3, 4, 6, 7, 9, 10, 11, 12], 'E2': [16, 18], 'E3': []},
|
||||||
|
38: {'RP': [5], 'E1': [6, 8, 10, 11, 12, 13, 15], 'E2': [16, 18], 'E3': []},
|
||||||
|
39: {'RP': [5], 'E1': [6, 7, 8, 9, 10, 12, 13], 'E2': [3, 16, 18], 'E3': []},
|
||||||
|
40: {'RP': [5], 'E1': [4, 6, 9, 10, 11, 12, 13, 15], 'E2': [3, 16, 18], 'E3': []},
|
||||||
|
42: {'RP': [5], 'E1': [7, 9, 10, 11, 12, 13, 14], 'E2': [3, 16, 18], 'E3': []},
|
||||||
|
43: {'RP': [5], 'E1': [6, 7, 8, 9, 10, 12, 13, 14], 'E2': [3, 16, 18], 'E3': []},
|
||||||
|
44: {'RP': [5], 'E1': [3, 7, 8, 9, 10, 11, 12, 13], 'E2': [16, 17], 'E3': []},
|
||||||
|
46: {'RP': [5], 'E1': [6, 8, 9, 10, 11, 12, 13, 15], 'E2': [16, 17, 18], 'E3': []},
|
||||||
|
47: {'RP': [5], 'E1': [7, 8, 9, 10, 11, 12, 13, 15], 'E2': [16, 17, 18], 'E3': []},
|
||||||
|
48: {'RP': [5], 'E1': [7, 8, 9, 10, 11, 12, 13, 14], 'E2': [16, 17, 18], 'E3': []},
|
||||||
|
50: {'RP': [5], 'E1': [7, 8, 9, 10, 11, 12, 13, 14], 'E2': [15, 17], 'E3': []},
|
||||||
|
51: {'RP': [5], 'E1': [7, 8, 9, 10, 11, 12, 13, 14], 'E2': [15, 16], 'E3': []},
|
||||||
|
}
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# HOLDING RUNNER RESPONSIBILITY CHART
|
# HOLDING RUNNER RESPONSIBILITY CHART
|
||||||
|
|||||||
@ -137,14 +137,22 @@ class TestErrorCharts:
|
|||||||
assert 'E2' in chart
|
assert 'E2' in chart
|
||||||
assert 'E3' in chart
|
assert 'E3' in chart
|
||||||
|
|
||||||
def test_infield_error_charts_are_placeholder(self):
|
def test_infield_error_charts_complete(self):
|
||||||
"""Infield error charts should be empty placeholders for now."""
|
"""Infield error charts should now have data (Phase 3B completed)."""
|
||||||
assert len(PITCHER_ERROR_CHART) == 0
|
# Verify all infield charts now have data (not empty placeholders)
|
||||||
assert len(CATCHER_ERROR_CHART) == 0
|
assert len(PITCHER_ERROR_CHART) > 0
|
||||||
assert len(FIRST_BASE_ERROR_CHART) == 0
|
assert len(CATCHER_ERROR_CHART) > 0
|
||||||
assert len(SECOND_BASE_ERROR_CHART) == 0
|
assert len(FIRST_BASE_ERROR_CHART) > 0
|
||||||
assert len(THIRD_BASE_ERROR_CHART) == 0
|
assert len(SECOND_BASE_ERROR_CHART) > 0
|
||||||
assert len(SHORTSTOP_ERROR_CHART) == 0
|
assert len(THIRD_BASE_ERROR_CHART) > 0
|
||||||
|
assert len(SHORTSTOP_ERROR_CHART) > 0
|
||||||
|
|
||||||
|
# Verify structure matches outfield charts (has E3 even if empty)
|
||||||
|
for rating_dict in CATCHER_ERROR_CHART.values():
|
||||||
|
assert 'RP' in rating_dict
|
||||||
|
assert 'E1' in rating_dict
|
||||||
|
assert 'E2' in rating_dict
|
||||||
|
assert 'E3' in rating_dict
|
||||||
|
|
||||||
def test_error_rating_0_has_minimal_errors(self):
|
def test_error_rating_0_has_minimal_errors(self):
|
||||||
"""Error rating 0 should have fewest error opportunities."""
|
"""Error rating 0 should have fewest error opportunities."""
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user