Download app/pipelines/result_processing.py from RottenShadow/ailixir-drug-repurposing: direct link, hf CLI and curl.
- Browser
- Download file 4.26 kB
-
https://huggingface.co/spaces/RottenShadow/ailixir-drug-repurposing/resolve/main/app/pipelines/result_processing.py
- Command line
-
hf download hf://spaces/RottenShadow/ailixir-drug-repurposing/app/pipelines/result_processing.py
-
curl -L -o result_processing.py https://huggingface.co/spaces/RottenShadow/ailixir-drug-repurposing/resolve/main/app/pipelines/result_processing.py
4.26 kB
| """ | |
| Stage 5: Result Processing & Filtering | |
| Sorts results and labels them as 'Known Treatment' or 'Potential Discovery'. | |
| """ | |
| import logging | |
| from typing import List, Dict | |
| logger = logging.getLogger(__name__) | |
| class ResultProcessingPipeline: | |
| def process_final_results( | |
| results: List[Dict], | |
| known_drugs: List[str], | |
| min_score: float = 0.0 | |
| ) -> List[Dict]: | |
| """ | |
| Sorts results and labels them as 'Known Treatment' or 'Potential Discovery'. | |
| Args: | |
| results: List of prediction results | |
| known_drugs: List of known drugs for the disease | |
| min_score: Minimum binding affinity score to include (default: 0.0) | |
| Returns: | |
| Processed and sorted results | |
| """ | |
| logger.info(f"Processing {len(results)} results...") | |
| # Filter by minimum score | |
| filtered_results = [r for r in results if r['score'] >= min_score] | |
| logger.info(f"Filtered to {len(filtered_results)} results with score >= {min_score}") | |
| # Sort by score (descending) | |
| sorted_results = sorted(filtered_results, key=lambda x: x['score'], reverse=True) | |
| final_output = [] | |
| for res in sorted_results: | |
| # Check if drug is already known for this disease | |
| is_known = any( | |
| known.lower() in res['drug_name'].lower() | |
| for known in known_drugs | |
| ) | |
| res['status'] = "β Known Treatment" if is_known else "π Potential Discovery" | |
| final_output.append(res) | |
| logger.info(f"β Processing complete. Found {len(final_output)} candidates") | |
| return final_output | |
| def get_top_results(results: List[Dict], top_n: int = 15) -> List[Dict]: | |
| """ | |
| Returns the top N results. | |
| Args: | |
| results: List of processed results | |
| top_n: Number of top results to return | |
| Returns: | |
| Top N results | |
| """ | |
| return results[:top_n] | |
| def get_potential_discoveries(results: List[Dict]) -> List[Dict]: | |
| """ | |
| Returns only potential discoveries (non-known treatments). | |
| Args: | |
| results: List of processed results | |
| Returns: | |
| Potential discoveries only | |
| """ | |
| return [r for r in results if "Potential Discovery" in r.get('status', '')] | |
| def get_results_by_target(results: List[Dict], target_symbol: str) -> List[Dict]: | |
| """ | |
| Returns results filtered by target symbol. | |
| Args: | |
| results: List of processed results | |
| target_symbol: Target protein symbol to filter by | |
| Returns: | |
| Filtered results for the specific target | |
| """ | |
| return [r for r in results if r['target_symbol'] == target_symbol] | |
| def format_results_table(results: List[Dict], top_n: int = 15) -> str: | |
| """ | |
| Formats results as a string table. | |
| Args: | |
| results: List of results to format | |
| top_n: Number of results to display | |
| Returns: | |
| Formatted table string | |
| """ | |
| table = f"{'Drug Name':<20} | {'Target':<10} | {'Score':<8} | {'Status'}\n" | |
| table += "-" * 65 + "\n" | |
| for res in results[:top_n]: | |
| table += ( | |
| f"{res['drug_name']:<20} | " | |
| f"{res['target_symbol']:<10} | " | |
| f"{res['score']:<8} | " | |
| f"{res['status']}\n" | |
| ) | |
| return table | |
| def export_results_csv(results: List[Dict], filename: str) -> None: | |
| """ | |
| Exports results to CSV file. | |
| Args: | |
| results: List of results to export | |
| filename: Output CSV filename | |
| """ | |
| try: | |
| import pandas as pd | |
| df = pd.DataFrame(results) | |
| df.to_csv(filename, index=False) | |
| logger.info(f"β Results exported to {filename}") | |
| except Exception as e: | |
| logger.error(f"Error exporting results: {str(e)}") | |
| raise | |