import pandas as pd import numpy as np import plotly.graph_objects as go import gradio as gr from io import StringIO import os import logging # Set up logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) # Force CPU-only mode os.environ['CUDA_VISIBLE_DEVICES'] = '' logger.info("Starting application setup") # Embed the CSV data directly in the code csv_data = '''cik,institution,final_score,long_term_performance_score,conviction_and_strategy_score,research_quality_and_adaptability_score,influence_and_governance_score,top_holdings_performance_score 0001843237,CEPHEI CAPITAL MANAGEMENT (HONG KONG) LTD,36,14,11,7,3,1 0001407024,NNS HOLDING,24,5,8,5,4,2 0001451928,SAC CAPITAL ADVISORS LP,50,20,10,12,6,2 0001905393,"PCG WEALTH ADVISORS, LLC",68,25,15,14,11,3 0001425362,"WHITE RIVER INVESTMENT PARTNERS, LLC",31,7,10,8,4,2 0001730210,"TRH FINANCIAL, LLC",72,28,16,15,10,3 0001165880,MONTPELIER RE HOLDINGS LTD,68,25,18,12,10,3 0001352776,REGIS MANAGEMENT CO LLC,73,28,17,14,11,3 0001582272,"BATTERY GLOBAL ADVISORS, LLC",65,22,16,14,10,3 0001466715,TRISHIELD CAPITAL MANAGEMENT LLC,59,18,,,, 0001092688,IBBOTSON ASSOCIATES INC,69,28,16,12,10,3 0001054880,HUTCHENS INVESTMENT MANAGEMENT INC,69,25,,,,3 0001650781,AXAR CAPITAL MANAGEMENT L.P.,51,16,14,12,6,3 0001425160,MERCHANTS' GATE CAPITAL LP,55,23,12,10,8,2 0001921487,"BEACON CAPITAL MANAGEMENT, LLC",78,25,22,15,12,4 ''' # Load the data from the embedded CSV string df = pd.read_csv(StringIO(csv_data)) logger.info(f"Data loaded. Shape: {df.shape}") # Clean the data df = df.dropna(subset=['final_score']) df = df.assign(institution=df['institution'].str.strip()) logger.info(f"Data cleaned. Shape after cleaning: {df.shape}") def create_radar_chart(institution): logger.info(f"Creating radar chart for {institution}") # Get the data for the selected institution inst_data = df[df['institution'] == institution].iloc[0] # Prepare the data for the radar chart categories = ['Long-term Performance', 'Conviction & Strategy', 'Research Quality', 'Influence & Governance', 'Top Holdings Performance'] values = [inst_data['long_term_performance_score'], inst_data['conviction_and_strategy_score'], inst_data['research_quality_and_adaptability_score'], inst_data['influence_and_governance_score'], inst_data['top_holdings_performance_score']] # Create the radar chart fig = go.Figure() fig.add_trace(go.Scatterpolar( r=values, theta=categories, fill='toself', name=institution )) fig.update_layout( polar=dict( radialaxis=dict( visible=True, range=[0, max(values)] )), showlegend=False, title=f"{institution} Performance Metrics" ) return fig def create_bar_chart(institution): logger.info(f"Creating bar chart for {institution}") # Get the data for the selected institution inst_data = df[df['institution'] == institution].iloc[0] # Prepare the data for the bar chart categories = ['Final Score', 'Long-term Performance', 'Conviction & Strategy', 'Research Quality', 'Influence & Governance', 'Top Holdings Performance'] values = [inst_data['final_score'], inst_data['long_term_performance_score'], inst_data['conviction_and_strategy_score'], inst_data['research_quality_and_adaptability_score'], inst_data['influence_and_governance_score'], inst_data['top_holdings_performance_score']] # Create the bar chart fig = go.Figure(go.Bar( x=categories, y=values, text=values, textposition='auto', )) fig.update_layout( title=f"{institution} Scores Comparison", xaxis_title="Metrics", yaxis_title="Score", yaxis=dict(range=[0, 100]) ) return fig def update_dashboard(institution): logger.info(f"Updating dashboard for {institution}") radar_chart = create_radar_chart(institution) bar_chart = create_bar_chart(institution) inst_data = df[df['institution'] == institution].iloc[0] cik = inst_data['cik'] final_score = inst_data['final_score'] return (f"CIK: {cik}", f"Final Score: {final_score:.2f}", radar_chart, bar_chart) logger.info("Creating Gradio interface") # Create the Gradio interface iface = gr.Interface( fn=update_dashboard, inputs=gr.Dropdown(choices=sorted(df['institution'].unique()), label="Select an Institution"), outputs=[ gr.Textbox(label="CIK"), gr.Textbox(label="Final Score"), gr.Plot(label="Performance Metrics Radar Chart"), gr.Plot(label="Scores Comparison Bar Chart") ], title="Institution Performance Dashboard", description="Select an institution to view its performance metrics and scores." ) logger.info("Launching Gradio interface") # For Hugging Face Spaces deployment iface.launch( share=False, # Disable sharing as it's not needed in Spaces debug=True # Enable debug mode for more detailed error messages ) logger.info("Application setup complete")