""" Analyze ALL camera control mappings to find patterns in @@ values """ import sys import os import json from collections import defaultdict os.chdir(r'C:\DEV\COPILOT_codex') sys.path.insert(0, r'C:\DEV\COPILOT_codex') from geviset_parser import load_set from pathlib import Path set_file = Path(r"C:\DEV\COPILOT\TestMKS_original.set") tree = load_set(set_file) # Find MappingRules mapping_rules = None for child in tree.get("children", []): if child.get("name") == "MappingRules" and child.get("type") == "folder": mapping_rules = child break # Collect all output actions and their @@ values action_at_at_values = defaultdict(list) print("=" * 80) print("ANALYZING ALL CAMERA CONTROL ACTIONS") print("=" * 80) print() for mapping in mapping_rules.get("children", []): if mapping.get("type") != "folder": continue # Get mapping name and @@ mapping_name = None mapping_at_at = None rules_folder = None for child in mapping.get("children", []): if child.get("name") == "@": mapping_name = child.get("value") if child.get("name") == "@@": mapping_at_at = child.get("value") if child.get("name") == "Rules" and child.get("type") == "folder": rules_folder = child if not rules_folder: continue # Check output actions for output in rules_folder.get("children", []): if output.get("type") != "folder": continue output_name = None output_at_at = None action_string = None server_type = None for field in output.get("children", []): if field.get("name") == "@": output_name = field.get("value") if field.get("name") == "@@": output_at_at = field.get("value") if field.get("name") == "GscAction": action_string = field.get("value") server_type = "GSC" if field.get("name") == "GCoreAction": action_string = field.get("value") server_type = "G-Core" if action_string: # Extract action name from string like "@ PanLeft ()" or "@ PanLeft (Comment: "", Camera: 101027)" action_name = action_string.split("(")[0].strip().replace("@ ", "") # Store the @@ value for this action type key = f"{server_type}:{action_name}" action_at_at_values[key].append({ "mapping": mapping_name, "output": output_name, "at_at": output_at_at, "action_string": action_string }) print(f"Found {len(action_at_at_values)} unique action types") print() # Show summary of @@ values per action type print("@@ VALUES BY ACTION TYPE:") print("-" * 80) for action_type in sorted(action_at_at_values.keys()): values = action_at_at_values[action_type] at_at_values = [v["at_at"] for v in values] unique_values = set(at_at_values) print(f"\n{action_type}:") print(f" Occurrences: {len(values)}") print(f" @@ values: {unique_values}") if len(unique_values) == 1: print(f" [OK] CONSISTENT VALUE: {list(unique_values)[0]}") else: print(f" [WARN] INCONSISTENT - varies across mappings") # Show a few examples for v in values[:3]: print(f" - {v['mapping']}: @@ = {v['at_at']}") # Save detailed data output_file = Path(r"C:\DEV\COPILOT\action_at_at_values.json") with output_file.open("w") as f: json.dump(dict(action_at_at_values), f, indent=2) print() print("=" * 80) print(f"Detailed data saved to: {output_file}") print("=" * 80)