from environment.env import DataCleaningEnv from environment.models import DataCleaningAction env = DataCleaningEnv() results = [] for task, actions in [ ("csv-doctor", [ ("drop_duplicates", {}), ("normalize_format", {"column":"salary","format_type":"strip_currency"}), ("fill_missing", {"column":"age","strategy":"median"}), ("cast_column", {"column":"age","dtype":"int"}), ("fill_missing", {"column":"salary","strategy":"median"}), ("fill_missing", {"column":"email","strategy":"constant","fill_value":"unknown@example.com"}), ("standardize_text", {"column":"name","operations":["title"]}), ("standardize_text", {"column":"department","operations":["strip"]}), ]), ("schema-enforcer", [ ("normalize_format", {"column":"phone","format_type":"phone"}), ("normalize_format", {"column":"birth_date","format_type":"date"}), ("normalize_format", {"column":"email","format_type":"email"}), ("normalize_format", {"column":"zip_code","format_type":"zip_code"}), ("normalize_format", {"column":"country","format_type":"text_case","output_format":"upper"}), ("standardize_text", {"column":"first_name","operations":["title"]}), ("standardize_text", {"column":"last_name","operations":["title"]}), ]), ("pipeline-debugger", [ ("fix_referential_integrity", {"child_column":"customer_id","parent_table":"customers","parent_column":"customer_id","action":"drop"}), ("drop_duplicates", {"subset":["customer_id","product","price","quantity","order_date"]}), ("clip_outliers", {"column":"price","method":"iqr","threshold":1.5}), ("clip_outliers", {"column":"quantity","method":"iqr","threshold":1.5}), ("merge_tables", {"right_table":"customers","left_on":"customer_id","right_on":"customer_id","how":"left","columns":["segment"]}), ]), ]: r = env.reset(task_name=task, seed=42) init = r.observation.current_score for at, params in actions: env.step(DataCleaningAction(action_type=at, parameters=params)) final = env.state().current_score results.append((task, init, final)) print(f"SCORE|{task}|{init:.4f}|{final:.4f}|{final-init:+.4f}|{'PASS' if final > init else 'FAIL'}")