From d0974bed66224ab136e548d92cb87a342cbe4131 Mon Sep 17 00:00:00 2001 From: "Adam Ginsburg (keflavich)" Date: Fri, 4 Feb 2022 11:59:33 -0500 Subject: [PATCH 1/2] now it works in a noteobok too Conflicts: scousepy/scouse.py --- scousepy/scouse.py | 44 ++++++++++++++++++++++++++++++++------ scousepy/scousecoverage.py | 7 ++++++ scousepy/stage_1.py | 2 +- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/scousepy/scouse.py b/scousepy/scouse.py index 06a6128..9673dfc 100644 --- a/scousepy/scouse.py +++ b/scousepy/scouse.py @@ -21,6 +21,8 @@ import time import pyspeckit import random +import asyncio + warnings.simplefilter('ignore', wcs.FITSFixedWarning) from .stage_3 import * @@ -348,16 +350,40 @@ def stage_1(config='', interactive=True): # Interactive coverage generator coverageobject=ScouseCoverage(scouseobject=self,verbose=self.verbose, interactive=interactive) + print(f"Checking if interactive: {interactive}") if interactive: - coverageobject.show() - if coverageobject.config_file is None or len(coverageobject.config_file) == 0: - raise ValueError("Coverage configuration was set to be 'interactive', but the " - "interactive plot window did not wait for input. If you are running in " - "Jupyter notebooks or Spyder then try running scouse as a script instead. " - "Alternatively set interactive=False and manually update coverage.config.") + coverageobject.show() + if not coverageobject.coverage_is_complete: + # we are in a notebook and need asyncio + async def wait_on_interactive(): + while coverageobject.config_file is None: + await asyncio.sleep(1) + self.save_coverage(coverageobject, old_log) + self.run_coverage(coverageobject) + plt.close(coverageobject.fig.number) + + loop = asyncio.get_event_loop() + loop.create_task(wait_on_interactive()) + else: + self.save_coverage(coverageobject, old_log) + self.run_coverage(coverageobject) + + print(f"coverageobject.config_file = {coverageobject.config_file}") + #if coverageobject.config_file is None or len(coverageobject.config_file) == 0: + # raise ValueError("Coverage configuration was set to be 'interactive', but the " + # "interactive plot window did not wait for input. You will need to either " + # "manually create the coverage.config file or re-start with a blocking " + # "matplotlib frontend.") + return self + + def save_coverage(self, coverageobject, old_log): + from .io import import_from_config + with warnings.catch_warnings(): + warnings.simplefilter('ignore') # write out the config file for the coverage - self.coverage_config_file_path=os.path.join(self.outputdirectory,self.filename,'config_files','coverage.config') + self.coverage_config_file_path=os.path.join(self.outputdirectory, + self.filename, 'config_files', 'coverage.config') with open(self.coverage_config_file_path, 'w') as file: for line in coverageobject.config_file: file.write(line) @@ -365,6 +391,10 @@ def stage_1(config='', interactive=True): import_from_config(self, self.coverage_config_file_path) log.setLevel(old_log) + def run_coverage(self, coverageobject): + from .stage_1 import generate_SAAs, plot_coverage, compute_noise, get_x_axis + from .verbose_output import print_to_terminal + # start the time once the coverage has been generated starttime = time.time() diff --git a/scousepy/scousecoverage.py b/scousepy/scousecoverage.py index 6697e79..1d5984a 100644 --- a/scousepy/scousecoverage.py +++ b/scousepy/scousecoverage.py @@ -29,6 +29,8 @@ class ScouseCoverage(object): """ def __init__(self, scouseobject=None, create_config_file=True, verbose=True, interactive=True): + self.coverage_is_complete = False + # For moments self.scouseobject=scouseobject self.verbose=verbose @@ -388,6 +390,9 @@ def __init__(self, scouseobject=None, create_config_file=True, verbose=True, int self.run_coverage(None) # complete the coverage task self.coverage_complete(None) + else: + self.fig.canvas.flush_events() + self.fig.canvas.draw_idle() def show(self): @@ -432,6 +437,8 @@ def coverage_complete(self, event): self.samplesize=0.0 self.config_file=make_config_file(self) + self.coverage_is_complete = True + # close the window self.close_window() diff --git a/scousepy/stage_1.py b/scousepy/stage_1.py index 0746108..12f605c 100644 --- a/scousepy/stage_1.py +++ b/scousepy/stage_1.py @@ -155,7 +155,7 @@ def generate_SAAs(scouseobject, coverageobject): if scouseobject.njobs > 1: # if __name__ == 'scousepy.stage_1': # print(__name__) - results = parallel_map(create_saa, inputlist, numcores=scouseobject.njobs) + results = list(parallel_map(create_saa, inputlist, numcores=scouseobject.njobs)) else: if scouseobject.verbose: results=[create_saa(input) for input in tqdm(inputlist)] From d304a3352141a853de69d5d6210bfa10d368df4a Mon Sep 17 00:00:00 2001 From: "Adam Ginsburg (keflavich)" Date: Fri, 4 Feb 2022 11:12:24 -0500 Subject: [PATCH 2/2] remove debug --- scousepy/scouse.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/scousepy/scouse.py b/scousepy/scouse.py index 9673dfc..63387f7 100644 --- a/scousepy/scouse.py +++ b/scousepy/scouse.py @@ -350,7 +350,6 @@ def stage_1(config='', interactive=True): # Interactive coverage generator coverageobject=ScouseCoverage(scouseobject=self,verbose=self.verbose, interactive=interactive) - print(f"Checking if interactive: {interactive}") if interactive: coverageobject.show() if not coverageobject.coverage_is_complete: @@ -368,12 +367,6 @@ async def wait_on_interactive(): self.save_coverage(coverageobject, old_log) self.run_coverage(coverageobject) - print(f"coverageobject.config_file = {coverageobject.config_file}") - #if coverageobject.config_file is None or len(coverageobject.config_file) == 0: - # raise ValueError("Coverage configuration was set to be 'interactive', but the " - # "interactive plot window did not wait for input. You will need to either " - # "manually create the coverage.config file or re-start with a blocking " - # "matplotlib frontend.") return self def save_coverage(self, coverageobject, old_log):