(self)
| 107 | self.fail("Program creation failed.") |
| 108 | |
| 109 | def test_pickability(self): |
| 110 | |
| 111 | DEVICE = 'cpu' |
| 112 | if torch.cuda.is_available(): |
| 113 | DEVICE = 'cuda' |
| 114 | |
| 115 | # -------------------------------------- Making fake datasets -------------------------------------- |
| 116 | |
| 117 | multi_X = [] |
| 118 | for n_samples in [90, 100, 110]: |
| 119 | x1 = np.linspace(0, 10, n_samples) |
| 120 | x2 = np.linspace(0, 1 , n_samples) |
| 121 | X = np.stack((x1,x2),axis=0) |
| 122 | X = torch.tensor(X).to(DEVICE) |
| 123 | multi_X.append(X) |
| 124 | multi_X = multi_X*10 # (n_realizations,) of (n_dim, [n_samples depends on dataset],) |
| 125 | |
| 126 | n_samples_per_dataset = np.array([X.shape[1] for X in multi_X]) |
| 127 | n_all_samples = n_samples_per_dataset.sum() |
| 128 | n_realizations = len(multi_X) |
| 129 | def flatten_multi_data (multi_data,): |
| 130 | """ |
| 131 | Flattens multiple datasets into a single one for vectorized evaluation. |
| 132 | Parameters |
| 133 | ---------- |
| 134 | multi_data : list of length (n_realizations,) of torch.tensor of shape (..., [n_samples depends on dataset],) |
| 135 | List of datasets to be flattened. |
| 136 | Returns |
| 137 | ------- |
| 138 | torch.tensor of shape (..., n_all_samples) |
| 139 | Flattened data (n_all_samples = sum([n_samples depends on dataset])). |
| 140 | """ |
| 141 | flattened_data = torch.cat(multi_data, axis=-1) # (..., n_all_samples) |
| 142 | return flattened_data |
| 143 | |
| 144 | def unflatten_multi_data (flattened_data): |
| 145 | """ |
| 146 | Unflattens a single data into multiple ones. |
| 147 | Parameters |
| 148 | ---------- |
| 149 | flattened_data : torch.tensor of shape (..., n_all_samples) |
| 150 | Flattened data (n_all_samples = sum([n_samples depends on dataset])). |
| 151 | Returns |
| 152 | ------- |
| 153 | list of len (n_realizations,) of torch.tensor of shape (..., [n_samples depends on dataset],) |
| 154 | Unflattened data. |
| 155 | """ |
| 156 | return list(torch.split(flattened_data, n_samples_per_dataset.tolist(), dim=-1)) # (n_realizations,) of (..., [n_samples depends on dataset],) |
| 157 | |
| 158 | # y_weights_per_dataset = np.array([0, 0.001, 1.0]*10) # Shows weights work |
| 159 | y_weights_per_dataset = torch.tensor(np.array([1., 1., 1.]*10)) |
| 160 | multi_y_weights = [torch.full(size=(n_samples_per_dataset[i],), fill_value=y_weights_per_dataset[i]) for i in range (n_realizations)] |
| 161 | y_weights_flatten = flatten_multi_data(multi_y_weights) |
| 162 | |
| 163 | multi_X_flatten = flatten_multi_data(multi_X) # (n_dim, n_all_samples) |
| 164 | |
| 165 | # Making fake ideal parameters |
| 166 | # n_spe_params = 3 |
nothing calls this directly
no test coverage detected