11from __future__ import annotations
22
3- from dataclasses import dataclass
3+ from dataclasses import dataclass , field
44from datetime import timedelta
55
66from . import bindings
7+ from .declarations import CommandDecl , Declarations
78from .egraph_state import EGraphState
9+ from .pretty import pretty_decl
10+
11+
12+ def _format_rule_key (decls : Declarations , key : CommandDecl ) -> str :
13+ return pretty_decl (decls , key )
814
915
1016@dataclass
@@ -25,19 +31,32 @@ def from_bindings(cls, report: bindings.RuleReport) -> RuleReport:
2531@dataclass
2632class RuleSetReport :
2733 changed : bool
28- rule_reports : dict [str , list [RuleReport ]]
34+ rule_reports : dict [CommandDecl , list [RuleReport ]]
2935 search_and_apply_time : timedelta
3036 merge_time : timedelta
37+ _decls : Declarations = field (repr = False , default = None )
3138
3239 @classmethod
33- def from_bindings (cls , report : bindings .RuleSetReport , translate_key : callable ) -> RuleSetReport :
40+ def from_bindings (
41+ cls , report : bindings .RuleSetReport , translate_key : callable , decls : Declarations
42+ ) -> RuleSetReport :
3443 return cls (
3544 changed = report .changed ,
3645 rule_reports = {
3746 translate_key (k ): [RuleReport .from_bindings (rr ) for rr in v ] for k , v in report .rule_reports .items ()
3847 },
3948 search_and_apply_time = report .search_and_apply_time ,
4049 merge_time = report .merge_time ,
50+ _decls = decls ,
51+ )
52+
53+ def __repr__ (self ) -> str :
54+ rule_reports_str = {_format_rule_key (self ._decls , k ): v for k , v in self .rule_reports .items ()}
55+ return (
56+ f"RuleSetReport(changed={ self .changed } , "
57+ f"rule_reports={ rule_reports_str } , "
58+ f"search_and_apply_time={ self .search_and_apply_time } , "
59+ f"merge_time={ self .merge_time } )"
4160 )
4261
4362
@@ -47,9 +66,11 @@ class IterationReport:
4766 rebuild_time : timedelta
4867
4968 @classmethod
50- def from_bindings (cls , report : bindings .IterationReport , translate_key : callable ) -> IterationReport :
69+ def from_bindings (
70+ cls , report : bindings .IterationReport , translate_key : callable , decls : Declarations
71+ ) -> IterationReport :
5172 return cls (
52- rule_set_report = RuleSetReport .from_bindings (report .rule_set_report , translate_key ),
73+ rule_set_report = RuleSetReport .from_bindings (report .rule_set_report , translate_key , decls ),
5374 rebuild_time = report .rebuild_time ,
5475 )
5576
@@ -60,26 +81,40 @@ class RunReport:
6081
6182 iterations : list [IterationReport ]
6283 updated : bool
63- search_and_apply_time_per_rule : dict [str , timedelta ]
64- num_matches_per_rule : dict [str , int ]
84+ search_and_apply_time_per_rule : dict [CommandDecl , timedelta ]
85+ num_matches_per_rule : dict [CommandDecl , int ]
6586 search_and_apply_time_per_ruleset : dict [str , timedelta ]
6687 merge_time_per_ruleset : dict [str , timedelta ]
6788 rebuild_time_per_ruleset : dict [str , timedelta ]
89+ _decls : Declarations = field (repr = False , default = None )
90+
91+ def __repr__ (self ) -> str :
92+ time_per_rule = {_format_rule_key (self ._decls , k ): v for k , v in self .search_and_apply_time_per_rule .items ()}
93+ matches_per_rule = {_format_rule_key (self ._decls , k ): v for k , v in self .num_matches_per_rule .items ()}
94+ return (
95+ f"RunReport(iterations={ self .iterations } , "
96+ f"updated={ self .updated } , "
97+ f"search_and_apply_time_per_rule={ time_per_rule } , "
98+ f"num_matches_per_rule={ matches_per_rule } , "
99+ f"search_and_apply_time_per_ruleset={ self .search_and_apply_time_per_ruleset } , "
100+ f"merge_time_per_ruleset={ self .merge_time_per_ruleset } , "
101+ f"rebuild_time_per_ruleset={ self .rebuild_time_per_ruleset } )"
102+ )
68103
69104 @classmethod
70105 def from_bindings (cls , report : bindings .RunReport , state : EGraphState ) -> RunReport :
71106 return cls (
72- iterations = [IterationReport .from_bindings (it , state .translate_rule_key ) for it in report .iterations ],
107+ iterations = [
108+ IterationReport .from_bindings (it , state .translate_rule_key , state .__egg_decls__ )
109+ for it in report .iterations
110+ ],
73111 updated = report .updated ,
74112 search_and_apply_time_per_rule = {
75113 state .translate_rule_key (k ): v for k , v in report .search_and_apply_time_per_rule .items ()
76114 },
77115 num_matches_per_rule = {state .translate_rule_key (k ): v for k , v in report .num_matches_per_rule .items ()},
78- search_and_apply_time_per_ruleset = {
79- state .translate_rule_key (k ): v for k , v in report .search_and_apply_time_per_ruleset .items ()
80- },
81- merge_time_per_ruleset = {state .translate_rule_key (k ): v for k , v in report .merge_time_per_ruleset .items ()},
82- rebuild_time_per_ruleset = {
83- state .translate_rule_key (k ): v for k , v in report .rebuild_time_per_ruleset .items ()
84- },
116+ search_and_apply_time_per_ruleset = report .search_and_apply_time_per_ruleset ,
117+ merge_time_per_ruleset = report .merge_time_per_ruleset ,
118+ rebuild_time_per_ruleset = report .rebuild_time_per_ruleset ,
119+ _decls = state .__egg_decls__ ,
85120 )
0 commit comments