idaes-pse
idaes-pse copied to clipboard
Flowsheet diff crashes when unit is removed
When running the visualizer tutorial, if the saved file has F102 but the model does not (which happens when running again from the beginning), the flowsheet diff dumps the following stack trace:
------------------
model.fs.visualize("Hydrodealkylation")
------------------
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_38176\222046181.py in <cell line: 1>()
----> 1 model.fs.visualize("Hydrodealkylation")
c:\users\dangunter\src\idaes\dangunter\idaes-pse\idaes\core\base\flowsheet_model.py in visualize(self, model_name, **kwargs)
238 None
239 """
--> 240 visualize(self, model_name, **kwargs)
241
242 @deprecated(
c:\users\dangunter\src\idaes\dangunter\idaes-pse\idaes\core\ui\fsvis\fsvis.py in visualize(flowsheet, name, save, load_from_saved, save_dir, save_time_interval, overwrite, browser, port, log_level, quiet, loop_forever)
166 # Add our flowsheet to it
167 try:
--> 168 new_name = web_server.add_flowsheet(name, flowsheet, datastore)
169 except (errors.ProcessingError, errors.DatastoreError) as err:
170 raise errors.VisualizerError(f"Cannot add flowsheet: {err}")
c:\users\dangunter\src\idaes\dangunter\idaes-pse\idaes\core\ui\fsvis\model_server.py in add_flowsheet(self, id_, flowsheet, store)
121 # First try to update, so as not to overwrite saved value
122 try:
--> 123 self.update_flowsheet(id_)
124 except errors.FlowsheetNotFoundInDatastore:
125 _log.debug(f"No existing flowsheet found in {store}: saving new value")
c:\users\dangunter\src\idaes\dangunter\idaes-pse\idaes\core\ui\fsvis\model_server.py in update_flowsheet(self, id_)
194 raise errors.ProcessingError(f"Cannot serialize flowsheet: {err}")
195 # Compare saved and current value
--> 196 diff = FlowsheetDiff(saved, obj_dict)
197 _log.debug(f"diff: {diff}")
198 if not diff:
c:\users\dangunter\src\idaes\dangunter\idaes-pse\idaes\core\ui\flowsheet.py in __init__(self, old_flowsheet, new_flowsheet, validate)
867 self._old, self._new = old_flowsheet, new_flowsheet
868 self._len = None
--> 869 self._diff = self._compute_diff()
870 self._layout = self._compute_layout() if self._diff else None
871
c:\users\dangunter\src\idaes\dangunter\idaes-pse\idaes\core\ui\flowsheet.py in _compute_diff(self)
927 dest_unit_model = old_data[key]["dest"]
928 diff["change"]["unit_models"][src_unit_model] = copy.deepcopy(
--> 929 new_model["unit_models"][src_unit_model]
930 )
931 diff["change"]["unit_models"][dest_unit_model] = copy.deepcopy(
KeyError: 'F102'
KeyError: 'F102'