def test_repr(self): array2d = [[1, 2], [3, 4]] arrayrepr = repr(np.array(array2d)) array_id = (3, 4) data = DataArray(preset_data=array2d) self.assertEqual(repr(data), 'DataArray[2,2]:\n' + arrayrepr) data.array_id = array_id self.assertEqual(repr(data), 'DataArray[2,2]: ' + str(array_id) + '\n' + arrayrepr)
def _create_data_array( self, action_indices: Tuple[int], result, parameter: Parameter = None, is_setpoint: bool = False, name: str = None, label: str = None, unit: str = None, ): """Create a data array from a parameter and result. The data array shape is extracted from the result shape, and the current loop dimensions. The data array is added to the current data set. Args: parameter: Parameter for which to create a DataArray. Can also be a string, in which case it is the data_array name result: Result returned by the Parameter action_indices: Action indices for which to store parameter is_setpoint: Whether the Parameter is used for sweeping or measuring label: Data array label. If not provided, the parameter label is used. If the parameter is a name string, the label is extracted from the name. unit: Data array unit. If not provided, the parameter unit is used. Returns: Newly created data array """ if parameter is None and name is None: raise SyntaxError( "When creating a data array, must provide either a parameter or a name" ) if len(running_measurement().data_arrays) >= self.max_arrays: raise RuntimeError( f"Number of arrays in dataset exceeds " f"Measurement.max_arrays={self.max_arrays}. Perhaps you forgot" f"to encapsulate a loop with a Sweep()?" ) array_kwargs = { "is_setpoint": is_setpoint, "action_indices": action_indices, "shape": self.loop_shape, } if is_setpoint or isinstance(result, (np.ndarray, list)): array_kwargs["shape"] += np.shape(result) # Use dummy index (1, ) if measurement is performed outside a Sweep if not array_kwargs["shape"]: array_kwargs["shape"] = (1,) if isinstance(parameter, Parameter): array_kwargs["parameter"] = parameter # Add a custom name if name is not None: array_kwargs["full_name"] = name if label is not None: array_kwargs["label"] = label if unit is not None: array_kwargs["unit"] = unit else: array_kwargs["name"] = name if label is None: label = name[0].capitalize() + name[1:].replace("_", " ") array_kwargs["label"] = label array_kwargs["unit"] = unit or "" # Add setpoint arrays if not is_setpoint: array_kwargs["set_arrays"] = self._add_set_arrays( action_indices, result, parameter=parameter, name=(name or parameter.name) ) data_array = DataArray(**array_kwargs) data_array.array_id = data_array.full_name data_array.array_id += "_" + "_".join(str(k) for k in action_indices) data_array.init_data() self.dataset.add_array(data_array) with self.timings.record(['dataset', 'save_metadata']): self.dataset.save_metadata() # Add array to set_arrays or to data_arrays of this Measurement if is_setpoint: self.set_arrays[action_indices] = data_array else: self.data_arrays[action_indices] = data_array return data_array