Hi @srojas92 ,
Thanks for the logs. There are a couple of interesting errors in your log file that are not related to plenums at all but they are likely bugs or at least things that we should be handling more gracefully.
For example, it looks like you are trying to join some rooms together here and this fails:
2025.02.03 14:23:37.193|info|🐍 Join rooms script is running...
2025.02.03 14:23:37.291|error|join_rooms failed. Error message: Error: Traceback (most recent call last):
File "/lib/python311.zip/_pyodide/_base.py", line 573, in eval_code_async
await CodeRunner(
File "/lib/python311.zip/_pyodide/_base.py", line 393, in run_async
coroutine = eval(self.code, globals, locals)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<exec>", line 28, in <module>
File "/home/pyodide/dragonfly/room2d.py", line 3774, in join_room_2ds
h_bnds = Room2D.grouped_horizontal_boundary(room_2ds, min_separation, tolerance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/pyodide/dragonfly/room2d.py", line 4098, in grouped_horizontal_boundary
closed_polys = Polygon2D.gap_crossing_boundary(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/pyodide/ladybug_geometry/geometry2d/polygon.py", line 2129, in gap_crossing_boundary
ext_bounds = Polyline2D.join_segments(all_segs, tolerance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/pyodide/ladybug_geometry/geometry2d/polyline.py", line 365, in join_segments
grouped_verts = _group_vertices(segments, tolerance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/pyodide/ladybug_geometry/_polyline.py", line 18, in _group_vertices
base_seg = segments[0]
~~~~~~~~^^^
IndexError: list index out of range
From the message, I would infer that this happened because one (or more) of the rooms that you selected was degenerate (with zero volume). If this explanation is correct, then I should add something to scrub out degenerate rooms from the selection before trying to join them. Does this explanation sound right to you given what you remember about this session?
The other interesting error that doesn’t seem to have anything to do with the plenums is this one:
2025.02.03 17:35:25.746|info|🐍 Validate script is running...
2025.02.03 17:35:25.804|error|validate failed. Error message: Error: Traceback (most recent call last):
File "/lib/python311.zip/_pyodide/_base.py", line 573, in eval_code_async
await CodeRunner(
File "/lib/python311.zip/_pyodide/_base.py", line 393, in run_async
coroutine = eval(self.code, globals, locals)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<exec>", line 13, in <module>
pyodide.ffi.JsException: RuntimeError: memory access out of bounds
2025.02.03 17:35:29.987|info|[Put]: preferences success
2025.02.03 17:35:35.660|info|[Put]: preferences success
2025.02.03 17:35:48.690|info|✅ Snapshot opened!
2025.02.03 17:35:48.705|info|🐍 Import script is running...
2025.02.03 17:35:48.828|error|import_file failed. Error message: Error: Traceback (most recent call last):
File "/lib/python311.zip/_pyodide/_base.py", line 573, in eval_code_async
await CodeRunner(
File "/lib/python311.zip/_pyodide/_base.py", line 393, in run_async
coroutine = eval(self.code, globals, locals)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<exec>", line 18, in <module>
pyodide.ffi.JsException: RuntimeError: memory access out of bounds
I might need @antonellodinunzio to help understand this one since it seems very deep and has something to do with how pyodide is managing memory. There’s no chance that you were maxing out your RAM in this session, right?
As for the duplicate identifier issue with plenums, I don’t see how you could easily create this situation if you are using the new method that we are rolling out for assigning plenums using “ceiling plenum depth” and “floor plenum depth” properties. You can see in the source code here that creating the plenum automatically creates a new ID that is different from the base room (with either _Floor_Plenum
or _Ceiling_Plenum
added to it):
I would infer that, in your case here, you accidentally created plenums of the same base room twice, resulting in a plenum of a plenum. Both of those two plenums had the same ID so that could give you the validation error. You should be able to get rid of the error by deleting one of the plenums (I think the duplicates should be on the same story on top of one another). Then, you probably have to re-adjust the plenum room floor heights and/or floor-to-ceiling heights to get everything continuous along the vertical dimension again.
This all gives me some confidence that managing plenums through “ceiling plenum depth” and “floor plenum depth” properties was the right way to go. As long as you stick to managing plenums that way, you won’t ever accidentally create this situation where you have a plenum of a plenum. And I would say that, until we roll out the new workflow, you should use the “Separate Plenums” command with caution - double checking whether you have already created a plenum before you run it.