import pandas as pd from .model import SystemModel class ModelDiag: def __init__( self, model: SystemModel, data : pd.DataFrame, c_var: list, d_var: list, ) -> None: self.model = model self.data = data.iloc[[0],:] self.c_var = c_var self.d_var = d_var def summary_diag(self): print('-'*20+'系统模型诊断'+'-'*20) with pd.option_context('display.max_rows', None,'display.max_columns', None,'display.width',500): derivate_c_info = self.diag_c_var_derivate() print('-'*20+'系统连续变量偏导'+'-'*20) print(derivate_c_info) def diag_c_var_derivate(self) -> pd.DataFrame: derivate_1 = self.model.predict_derivate_1(data=self.data,vars=self.c_var) derivate_2 = self.model.predict_derivate_2(data=self.data,vars=self.c_var) derivate_1 = process_derivate(derivate_1,'D1') derivate_2 = process_derivate(derivate_2,'D2') derivate = derivate_1.join(derivate_2).round(4) return derivate def diag_d_var_change(self) -> pd.DataFrame: ... def process_derivate(df:pd.DataFrame,D_name): df = ( df .reset_index() .assign(__VAR__SAMPLE=lambda dt:dt.__VAR__SAMPLE.str.extract('__(.+)__')) .melt(id_vars='__VAR__SAMPLE',var_name='SYS_OUTPUT',value_name=D_name) .rename(columns={'__VAR__SAMPLE':'OPT_VAR'}) .set_index(['SYS_OUTPUT','OPT_VAR']) ) return df