def DumpPipeline(export_rendering, simulation_input_map, screenshot_info): global write_frequencies, cp_views, cp_writers # Initialize the write frequency map for key in simulation_input_map.values(): write_frequencies[key] = [] # Start trace smtrace.start_trace(CaptureAllProperties=True, UseGuiName=True) # update trace globals. smtrace.trace_globals.proxy_ctor_hook = staticmethod(cp_hook) smtrace.trace_globals.trace_output = [] # Get list of proxy lists proxy_lists = smstate.get_proxy_lists_ordered_by_group(WithRendering=export_rendering) # Now register the proxies with the smtrace module for proxy_list in proxy_lists: smstate.register_proxies_by_dependency(proxy_list) # Calling append_trace causes the smtrace module to sort out all the # registered proxies and their properties and write them as executable # python. smtrace.append_trace() # Stop trace and print it to the console smtrace.stop_trace() for view_proxy in view_proxies: # Locate which simulation input this write is connected to, if any. If so, # we update the write_frequencies datastructure accordingly. sim_inputs = cp_locate_simulation_inputs_for_view(view_proxy) proxyName = servermanager.ProxyManager().GetProxyName("views", view_proxy) image_write_frequency = screenshot_info[proxyName][1] for sim_input_name in sim_inputs: if not image_write_frequency in write_frequencies[sim_input_name]: write_frequencies[sim_input_name].append(image_write_frequency) write_frequencies[sim_input_name].sort() # Create global fields values pipelineClassDef = "write_frequencies = " + str(write_frequencies) + "\n" pipelineClassDef += "simulation_input_map = " + str(simulation_input_map) + "\n" pipelineClassDef += "\n" pipelineClassDef += "# ----------------------- Pipeline definition -----------------------\n\n" # Create the resulting string that will contains the pipeline definition pipelineClassDef += "def CreatePipeline(datadescription):\n" pipelineClassDef += " class Pipeline:\n" pipelineClassDef += " global cp_views, cp_writers\n" for original_line in smtrace.trace_globals.trace_output: for line in original_line.split("\n"): pipelineClassDef += " " + line + "\n"; smtrace.clear_trace() pipelineClassDef += " return Pipeline()\n"; return pipelineClassDef
def DumpPipeline(export_rendering, simulation_input_map, screenshot_info): """ Method that will dump the current pipeline and return it as a string trace - export_rendering : boolean telling if we want to export rendering - simulation_input_map: string->string map with key being the proxyname while value being the simulation input name. - screenshot_info : map with information about screenshots key -> view proxy name value -> [filename, writefreq, fitToScreen, magnification, width, height] """ # reset the global variables. reset_cpstate_globals() cpstate_globals.export_rendering = export_rendering cpstate_globals.simulation_input_map = simulation_input_map cpstate_globals.screenshot_info = screenshot_info # Initialize the write frequency map for key in cpstate_globals.simulation_input_map.values(): cpstate_globals.write_frequencies[key] = [] # Start trace capture_modified_properties = not smstate._save_full_state smtrace.start_trace(CaptureAllProperties=True, CaptureModifiedProperties=capture_modified_properties, UseGuiName=True) # Disconnect the smtrace module's observer. It should not be # active while tracing the state. smtrace.reset_trace_observer() # update trace globals. smtrace.trace_globals.proxy_ctor_hook = staticmethod(cp_hook) smtrace.trace_globals.trace_output.clear() # Get list of proxy lists proxy_lists = smstate.get_proxy_lists_ordered_by_group(WithRendering=cpstate_globals.export_rendering) # Now register the proxies with the smtrace module for proxy_list in proxy_lists: smstate.register_proxies_by_dependency(proxy_list) # Calling append_trace causes the smtrace module to sort out all the # registered proxies and their properties and write them as executable # python. smtrace.append_trace() # Stop trace and print it to the console smtrace.stop_trace() # During tracing, cp_hook() will fill up the cpstate_globals.view_proxies # list with view proxies, if rendering was enabled. for view_proxy in cpstate_globals.view_proxies: # Locate which simulation input this write is connected to, if any. If so, # we update the write_frequencies datastructure accordingly. sim_inputs = locate_simulation_inputs_for_view(view_proxy) proxyName = servermanager.ProxyManager().GetProxyName("views", view_proxy) image_write_frequency = cpstate_globals.screenshot_info[proxyName][1] for sim_input_name in sim_inputs: if not image_write_frequency in cpstate_globals.write_frequencies[sim_input_name]: cpstate_globals.write_frequencies[sim_input_name].append(image_write_frequency) cpstate_globals.write_frequencies[sim_input_name].sort() # Create global fields values pipelineClassDef = "\n" pipelineClassDef += "# ----------------------- CoProcessor definition -----------------------\n\n" # Create the resulting string that will contains the pipeline definition pipelineClassDef += "def CreateCoProcessor():\n" pipelineClassDef += " def _CreatePipeline(coprocessor, datadescription):\n" pipelineClassDef += " class Pipeline:\n"; # add the traced code. for original_line in smtrace.trace_globals.trace_output.raw_data(): for line in original_line.split("\n"): pipelineClassDef += " " + line + "\n"; smtrace.clear_trace() pipelineClassDef += " return Pipeline()\n"; pipelineClassDef += "\n" pipelineClassDef += " class CoProcessor(coprocessing.CoProcessor):\n" pipelineClassDef += " def CreatePipeline(self, datadescription):\n" pipelineClassDef += " self.Pipeline = _CreatePipeline(self, datadescription)\n" pipelineClassDef += "\n" pipelineClassDef += " coprocessor = CoProcessor()\n"; pipelineClassDef += " freqs = " + str(cpstate_globals.write_frequencies) + "\n" pipelineClassDef += " coprocessor.SetUpdateFrequencies(freqs)\n" pipelineClassDef += " return coprocessor\n" return pipelineClassDef
else: datadescription.GetInputDescriptionByName(input_name).AllFieldsOff() datadescription.GetInputDescriptionByName(input_name).GenerateMeshOff() """ do_coprocessing = "" for original_line in smtrace.trace_globals.trace_output: for line in original_line.split("\n"): do_coprocessing += " " + line + "\n"; request_data_description = "" for sim_input in write_frequencies: freqs = write_frequencies[sim_input] if len(freqs) == 0: continue freqs.sort() condition_str = "(timestep % " + " == 0) or (timestep % ".join(map(str, freqs)) + " == 0)" request_data_description += timestep_expression % (sim_input, condition_str) rescale_data_range = %4 fileName = "%5" outFile = open(fileName, 'w') outFile.write(output_contents % (request_data_description, do_coprocessing, rescale_data_range)) outFile.close() smtrace.clear_trace()
def DumpPipeline(export_rendering, simulation_input_map, screenshot_info): """ Method that will dump the current pipeline and return it as a string trace - export_rendering : boolean telling if we want to export rendering - simulation_input_map: string->string map with key being the proxyname while value being the simulation input name. - screenshot_info : map with information about screenshots key -> view proxy name value -> [filename, writefreq, fitToScreen, magnification, width, height] """ # reset the global variables. reset_cpstate_globals() cpstate_globals.export_rendering = export_rendering cpstate_globals.simulation_input_map = simulation_input_map cpstate_globals.screenshot_info = screenshot_info # Initialize the write frequency map for key in cpstate_globals.simulation_input_map.values(): cpstate_globals.write_frequencies[key] = [] # Start trace smtrace.start_trace(CaptureAllProperties=True, UseGuiName=True) # Disconnect the smtrace module's observer. It should not be # active while tracing the state. smtrace.reset_trace_observer() # update trace globals. smtrace.trace_globals.proxy_ctor_hook = staticmethod(cp_hook) smtrace.trace_globals.trace_output = [] # Get list of proxy lists proxy_lists = smstate.get_proxy_lists_ordered_by_group( WithRendering=cpstate_globals.export_rendering) # Now register the proxies with the smtrace module for proxy_list in proxy_lists: smstate.register_proxies_by_dependency(proxy_list) # Calling append_trace causes the smtrace module to sort out all the # registered proxies and their properties and write them as executable # python. smtrace.append_trace() # Stop trace and print it to the console smtrace.stop_trace() # During tracing, cp_hook() will fill up the cpstate_globals.view_proxies # list with view proxies, if rendering was enabled. for view_proxy in cpstate_globals.view_proxies: # Locate which simulation input this write is connected to, if any. If so, # we update the write_frequencies datastructure accordingly. sim_inputs = locate_simulation_inputs_for_view(view_proxy) proxyName = servermanager.ProxyManager().GetProxyName( "views", view_proxy) image_write_frequency = cpstate_globals.screenshot_info[proxyName][1] for sim_input_name in sim_inputs: if not image_write_frequency in cpstate_globals.write_frequencies[ sim_input_name]: cpstate_globals.write_frequencies[sim_input_name].append( image_write_frequency) cpstate_globals.write_frequencies[sim_input_name].sort() # Create global fields values pipelineClassDef = "\n" pipelineClassDef += "# ----------------------- CoProcessor definition -----------------------\n\n" # Create the resulting string that will contains the pipeline definition pipelineClassDef += "def CreateCoProcessor():\n" pipelineClassDef += " def _CreatePipeline(coprocessor, datadescription):\n" pipelineClassDef += " class Pipeline:\n" # add the traced code. for original_line in smtrace.trace_globals.trace_output: for line in original_line.split("\n"): pipelineClassDef += " " + line + "\n" smtrace.clear_trace() pipelineClassDef += " return Pipeline()\n" pipelineClassDef += "\n" pipelineClassDef += " class CoProcessor(coprocessing.CoProcessor):\n" pipelineClassDef += " def CreatePipeline(self, datadescription):\n" pipelineClassDef += " self.Pipeline = _CreatePipeline(self, datadescription)\n" pipelineClassDef += "\n" pipelineClassDef += " coprocessor = CoProcessor()\n" pipelineClassDef += " freqs = " + str( cpstate_globals.write_frequencies) + "\n" pipelineClassDef += " coprocessor.SetUpdateFrequencies(freqs)\n" pipelineClassDef += " return coprocessor\n" return pipelineClassDef