Spaces:
				
			
			
	
			
			
					
		Running
		
			on 
			
			CPU Upgrade
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
			on 
			
			CPU Upgrade
	space for time
Browse files- app.py +2 -1
 - evaluator.py +13 -40
 
    	
        app.py
    CHANGED
    
    | 
         @@ -461,7 +461,8 @@ def create_evaluation_tabs(results_dfs: Dict[str, pd.DataFrame]) -> None: 
     | 
|
| 461 | 
         
             
                """
         
     | 
| 462 | 
         
             
                # Create Overview tab first
         
     | 
| 463 | 
         
             
                overview_df = create_overview_dataframe(results_dfs)
         
     | 
| 464 | 
         
            -
                 
     | 
| 
         | 
|
| 465 | 
         | 
| 466 | 
         
             
                # Create individual evaluation tabs
         
     | 
| 467 | 
         
             
                for eval_type in OTHER_EVAL_TYPES:
         
     | 
| 
         | 
|
| 461 | 
         
             
                """
         
     | 
| 462 | 
         
             
                # Create Overview tab first
         
     | 
| 463 | 
         
             
                overview_df = create_overview_dataframe(results_dfs)
         
     | 
| 464 | 
         
            +
                n_overview_columns = len(overview_df.columns)
         
     | 
| 465 | 
         
            +
                create_dataframe_tab("Overview", overview_df, widths=["20%"]+["10%"]*(n_overview_columns-1))
         
     | 
| 466 | 
         | 
| 467 | 
         
             
                # Create individual evaluation tabs
         
     | 
| 468 | 
         
             
                for eval_type in OTHER_EVAL_TYPES:
         
     | 
    	
        evaluator.py
    CHANGED
    
    | 
         @@ -5,7 +5,6 @@ from typing import Dict, List, Tuple 
     | 
|
| 5 | 
         
             
            import numpy as np
         
     | 
| 6 | 
         
             
            import torch
         
     | 
| 7 | 
         
             
            import json
         
     | 
| 8 | 
         
            -
            from fairchem.core.modules.evaluator import Evaluator
         
     | 
| 9 | 
         | 
| 10 | 
         
             
            from fairchem.data.omol.modules.evaluator import (
         
     | 
| 11 | 
         
             
                ligand_pocket,
         
     | 
| 
         @@ -95,21 +94,12 @@ def s2ef_metrics( 
     | 
|
| 95 | 
         
             
                submission_filename: Path,
         
     | 
| 96 | 
         
             
                subsets: list = ["all"],
         
     | 
| 97 | 
         
             
            ) -> Dict[str, float]:
         
     | 
| 98 | 
         
            -
                eval_metrics = {
         
     | 
| 99 | 
         
            -
                    "energy": ["mae"],
         
     | 
| 100 | 
         
            -
                    "forces": ["mae"],
         
     | 
| 101 | 
         
            -
                }
         
     | 
| 102 | 
         
            -
                evaluator = Evaluator(eval_metrics=eval_metrics)
         
     | 
| 103 | 
         
            -
             
     | 
| 104 | 
         
            -
                # Get order once for all subsets
         
     | 
| 105 | 
         
             
                order = get_order(submission_filename, annotations_path)
         
     | 
| 106 | 
         | 
| 107 | 
         
             
                with np.load(submission_filename) as data:
         
     | 
| 108 | 
         
             
                    forces = data["forces"]
         
     | 
| 109 | 
         
             
                    energy = data["energy"][order]
         
     | 
| 110 | 
         
            -
                     
     | 
| 111 | 
         
            -
                    forces = np.array(np.split(forces, np.cumsum(natoms)[:-1]), dtype=object)[order]
         
     | 
| 112 | 
         
            -
                    natoms = natoms[order]
         
     | 
| 113 | 
         | 
| 114 | 
         
             
                if len(set(np.where(np.isinf(energy))[0])) != 0:
         
     | 
| 115 | 
         
             
                    inf_energy_ids = list(set(np.where(np.isinf(energy))[0]))
         
     | 
| 
         @@ -132,36 +122,19 @@ def s2ef_metrics( 
     | 
|
| 132 | 
         
             
                            [data_id in allowed_ids for data_id in target_data_ids]
         
     | 
| 133 | 
         
             
                        )
         
     | 
| 134 | 
         | 
| 135 | 
         
            -
                    sub_energy =  
     | 
| 136 | 
         
            -
                     
     | 
| 137 | 
         
            -
                     
     | 
| 138 | 
         
            -
             
     | 
| 139 | 
         
            -
                    submission_data = {
         
     | 
| 140 | 
         
            -
                        "energy": sub_energy,
         
     | 
| 141 | 
         
            -
                        "forces": sub_forces,
         
     | 
| 142 | 
         
            -
                        "natoms": sub_natoms,
         
     | 
| 143 | 
         
            -
                    }
         
     | 
| 144 | 
         | 
| 145 | 
         
            -
                     
     | 
| 146 | 
         
            -
                     
     | 
| 147 | 
         
            -
             
     | 
| 148 | 
         
            -
             
     | 
| 149 | 
         
            -
             
     | 
| 150 | 
         
            -
             
     | 
| 151 | 
         
            -
                        dtype=torch.long,
         
     | 
| 152 | 
         
            -
                    )
         
     | 
| 153 | 
         | 
| 154 | 
         
            -
                     
     | 
| 155 | 
         
            -
                        "energy": target_energy_tensor,
         
     | 
| 156 | 
         
            -
                        "forces": target_force_tensors,
         
     | 
| 157 | 
         
            -
                        "natoms": target_natoms_tensor,
         
     | 
| 158 | 
         
            -
                    }
         
     | 
| 159 | 
         
            -
             
     | 
| 160 | 
         
            -
                    subset_metrics = evaluator.eval(
         
     | 
| 161 | 
         
            -
                        submission_data, annotations_data, prev_metrics={}
         
     | 
| 162 | 
         
            -
                    )
         
     | 
| 163 | 
         
            -
                    for key in ["energy_mae", "forces_mae"]:
         
     | 
| 164 | 
         
            -
                        metrics[f"{subset}_{key}"] = subset_metrics[key]["metric"]
         
     | 
| 165 | 
         | 
| 166 | 
         
             
                return metrics
         
     | 
| 167 | 
         | 
| 
         @@ -217,4 +190,4 @@ def evaluate( 
     | 
|
| 217 | 
         
             
                else:
         
     | 
| 218 | 
         
             
                    raise ValueError(f"Unknown eval_type: {eval_type}")
         
     | 
| 219 | 
         | 
| 220 | 
         
            -
                return metrics
         
     | 
| 
         | 
|
| 5 | 
         
             
            import numpy as np
         
     | 
| 6 | 
         
             
            import torch
         
     | 
| 7 | 
         
             
            import json
         
     | 
| 
         | 
|
| 8 | 
         | 
| 9 | 
         
             
            from fairchem.data.omol.modules.evaluator import (
         
     | 
| 10 | 
         
             
                ligand_pocket,
         
     | 
| 
         | 
|
| 94 | 
         
             
                submission_filename: Path,
         
     | 
| 95 | 
         
             
                subsets: list = ["all"],
         
     | 
| 96 | 
         
             
            ) -> Dict[str, float]:
         
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 97 | 
         
             
                order = get_order(submission_filename, annotations_path)
         
     | 
| 98 | 
         | 
| 99 | 
         
             
                with np.load(submission_filename) as data:
         
     | 
| 100 | 
         
             
                    forces = data["forces"]
         
     | 
| 101 | 
         
             
                    energy = data["energy"][order]
         
     | 
| 102 | 
         
            +
                    forces = np.array(np.split(forces, np.cumsum(data["natoms"])[:-1]), dtype=object)[order]
         
     | 
| 
         | 
|
| 
         | 
|
| 103 | 
         | 
| 104 | 
         
             
                if len(set(np.where(np.isinf(energy))[0])) != 0:
         
     | 
| 105 | 
         
             
                    inf_energy_ids = list(set(np.where(np.isinf(energy))[0]))
         
     | 
| 
         | 
|
| 122 | 
         
             
                            [data_id in allowed_ids for data_id in target_data_ids]
         
     | 
| 123 | 
         
             
                        )
         
     | 
| 124 | 
         | 
| 125 | 
         
            +
                    sub_energy = energy[subset_mask]
         
     | 
| 126 | 
         
            +
                    sub_target_energy = target_energy[subset_mask]
         
     | 
| 127 | 
         
            +
                    energy_mae = np.mean(np.abs(sub_target_energy - sub_energy))
         
     | 
| 128 | 
         
            +
                    metrics[f"{subset}_energy_mae"] = energy_mae
         
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 129 | 
         | 
| 130 | 
         
            +
                    forces_mae = 0
         
     | 
| 131 | 
         
            +
                    natoms = 0
         
     | 
| 132 | 
         
            +
                    for sub_forces, sub_target_forces in zip(forces[subset_mask], target_forces[subset_mask]):
         
     | 
| 133 | 
         
            +
                        forces_mae += np.sum(np.abs(sub_target_forces - sub_forces))
         
     | 
| 134 | 
         
            +
                        natoms += sub_forces.shape[0]
         
     | 
| 135 | 
         
            +
                    forces_mae /= (3*natoms)
         
     | 
| 
         | 
|
| 
         | 
|
| 136 | 
         | 
| 137 | 
         
            +
                    metrics[f"{subset}_forces_mae"] = forces_mae
         
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 138 | 
         | 
| 139 | 
         
             
                return metrics
         
     | 
| 140 | 
         | 
| 
         | 
|
| 190 | 
         
             
                else:
         
     | 
| 191 | 
         
             
                    raise ValueError(f"Unknown eval_type: {eval_type}")
         
     | 
| 192 | 
         | 
| 193 | 
         
            +
                return metrics
         
     |