def prepare_plots_file(n_clicks, file_format_values, width, height, units, dpi): opls_data = OPLSModel() OPLSDashboard.check_clicks(n_clicks) if not opls_data.results_file_ready: return 3600000 job = opls_data.download_plots(file_format_values, width, height, units, dpi) print(f'Started ') rds.set_value(f'{OPLSModel.redis_prefix}_job_id', job.id) return [500]
def set_file_info(self): rds.set_value(f'{self.redis_prefix}_dataframe_filename', self._dataframe_filename.encode('utf-8')) rds.set_value(f'{self.redis_prefix}_results_filename', self._results_filename.encode('utf-8')) rds.set_value(f'{self.redis_prefix}_loaded_collection_ids', msgpack.dumps(self._loaded_collection_ids))
def download_plots(self, file_formats, width, height, units, dpi): rds.set_value(f'{self.redis_prefix}_image_save_progress', 0) rds.set_value(f'{self.redis_prefix}_image_save_label', 'Starting job') rds.set_value(f'{self.redis_prefix}_image_save_progress_fraction', f'0/0') if self.results_file_ready: base_filename = f'opls_results_{self.results_collection_id}' root_dir = tempfile.mkdtemp() plot_dir = os.path.join(root_dir, f'{base_filename}_plots') os.mkdir(plot_dir) file_formats = file_formats or [] if self.results_file_ready: groups = h5py.File(self.results_filename).keys() figure_data = {} for group in groups: is_discrimination = 'accuracy' in h5py.File( self.results_filename)[group].attrs quality_graph, score_graph = self.get_quality_plot( group, 'plotly_white', False) if is_discrimination: (q_squared_graph, discriminant_q_squared_graph, accuracy_graph, roc_auc_graph) = self.get_metric_kde_plot( group, 'plotly_white', False) else: q_squared_graph = self.get_metric_kde_plot( group, 'plotly_white', False) discriminant_q_squared_graph = accuracy_graph = roc_auc_graph = None figure_data.update({ f'{group}_quality_metrics': quality_graph.to_plotly_json()['props']['figure'], f'{group}_scores': score_graph.to_plotly_json()['props']['figure'], f'{group}_q_squared_kde': q_squared_graph.to_plotly_json()['props']['figure'] }) if is_discrimination: figure_data.update({ f'{group}_discriminant_q_squared_kde': discriminant_q_squared_graph.to_plotly_json() ['props']['figure'], f'{group}_accuracy_kde': accuracy_graph.to_plotly_json()['props']['figure'], f'{group}_roc_auc_kde': roc_auc_graph.to_plotly_json()['props']['figure'] }) return save_figures.queue(figure_data, file_formats, width, height, units, dpi, plot_dir, f'user{current_user.id}', self.redis_prefix) raise RuntimeError('Plots not ready!')
def special_numeric_df_label(self, value): value = value.encode('utf-8') if isinstance(value, str) else value rds.set_value(f'{self._redis_prefix}_special_numeric_df_label', value)
def region_n_clicks(self, value): rds.set_value(f'{self._redis_prefix}_region_n_clicks', value)
def baseline_n_clicks(self, value): rds.set_value(f'{self._redis_prefix}_baseline_n_clicks', value)
def normalize_n_clicks(self, value): rds.set_value(f'{self._redis_prefix}_normalize_n_clicks', value)
def y_axis_range(self, value): rds.set_value(f'{self._redis_prefix}_y_axis_range', msgpack.dumps(value))
def processing_log(self, value): value = value.encode('utf-8') if isinstance(value, str) else value rds.set_value(f'{self._redis_prefix}_processing_log', value)
def save_figures(figure_data, file_formats, width, height, units, dpi, output_dir, redis_hash_name, redis_prefix): archive_name = pathlib.Path(output_dir).with_suffix('.zip') output_path = pathlib.Path(output_dir) n_steps = len(figure_data) * len(file_formats) + 1 progress = 0 rds.set_value(f'{redis_prefix}_image_save_progress', 0, redis_hash_name) rds.set_value(f'{redis_prefix}_image_save_progress_fraction', f'0/{n_steps}', redis_hash_name) rds.set_value(f'{redis_prefix}_image_save_label', 'Saving images', redis_hash_name) i = 0 for file_format in file_formats: format_path = output_path.joinpath(file_format) format_path.mkdir(parents=True, exist_ok=True) for name, figure in figure_data.items(): path = format_path.joinpath(name).with_suffix(f'.{file_format}') rds.set_value(f'{redis_prefix}_image_save_label', f'Saving {path.name}', redis_hash_name) progress += 100 / n_steps save_figure(figure, file_format, width, height, units, dpi, path) i += 1 rds.set_value(f'{redis_prefix}_image_save_progress', progress, redis_hash_name) rds.set_value(f'{redis_prefix}_image_save_progress_fraction', f'{i}/{n_steps}', redis_hash_name) rds.set_value(f'{redis_prefix}_image_save_label', f'Creating archive {archive_name}', redis_hash_name) out_filename = shutil.make_archive(output_path, 'zip', output_path.parent, output_path.stem) shutil.rmtree(output_path) rds.set_value(f'{redis_prefix}_image_save_progress', 100, redis_hash_name) rds.set_value(f'{redis_prefix}_image_save_progress_fraction', f'{n_steps}/{n_steps}', redis_hash_name) rds.set_value(f'{redis_prefix}_image_save_label', f'Created archive {archive_name}', redis_hash_name) return out_filename
def set_plot_data(cls, plot_data: Dict[str, List[Dict[str, Any]]]) -> None: rds.set_value(f'{cls.redis_prefix}_plot_data', msgpack.dumps(plot_data))
def job_id(self, value): rds.set_value(f'{self.redis_prefix}_job_id', value)
def results_collection_id(self, value): rds.set_value(f'{self.redis_prefix}_results_collection_id', msgpack.dumps(value))