Skip to content

Commit 89fa929

Browse files
fixed issue with unexpected shapes / types of volume variables
Fix addresses scalar, pre-sized, and domain-less volume variables
1 parent 7715d78 commit 89fa929

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

pyvcell/_internal/simdata/zarr_writer.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -144,21 +144,29 @@ def _get_domain_mask(dname: str) -> np.ndarray:
144144

145145
# add volumetric functions
146146
for f in volume_functions:
147-
func_data = f.evaluate(variable_bindings=bindings).reshape((num_z, num_y, num_x))
147+
evaluated_data = f.evaluate(variable_bindings=bindings)
148+
is_pre_sized: bool = evaluated_data.shape == (num_z, num_y, num_x)
149+
if evaluated_data.shape == (): # scalar value
150+
func_data = np.zeros((num_z, num_y, num_x), dtype=evaluated_data.dtype)
151+
func_data.fill(evaluated_data.min()) # min of a scalar value is the value itself.
152+
else:
153+
func_data = evaluated_data if is_pre_sized else evaluated_data.reshape((num_z, num_y, num_x))
148154
z1[t, c, :, :, :] = func_data
149-
domain_name = f.name.split("::")[0]
150-
function_name = f.name.split("::")[1]
155+
name_parts = f.name.split("::")
156+
if len(name_parts) > 2:
157+
raise ValueError(f"Volume function name `{f.name}` is not in the expected format")
158+
domain_half: str = f.name.split("::")[0] if len(name_parts) == 2 else ""
159+
name_half: str = f.name.split("::")[-1]
151160
if t == 0:
152161
channel_metadata.append({
153162
"index": c,
154-
"label": function_name,
155-
"domain_name": domain_name,
163+
"label": name_half,
164+
"domain_name": domain_half,
156165
"min_values": [],
157166
"max_values": [],
158167
"mean_values": [],
159168
})
160-
domain_mask = _get_domain_mask(domain_name)
161-
masked = func_data[domain_mask]
169+
masked = func_data if len(domain_half) == 0 else func_data[_get_domain_mask(domain_half)]
162170
channel_metadata[c]["min_values"].append(float(np.min(masked)))
163171
channel_metadata[c]["max_values"].append(float(np.max(masked)))
164172
channel_metadata[c]["mean_values"].append(float(np.mean(masked)))

0 commit comments

Comments
 (0)