(X, nzeros)
| 145 | # XXX: not clear whether this function is correct in general, but works for |
| 146 | # 784D with the nzeros we get for 32 and 64 codebooks |
| 147 | def _insert_zeros(X, nzeros): |
| 148 | N, D = X.shape |
| 149 | D_new = D + nzeros |
| 150 | X_new = np.zeros((N, D_new), dtype=X.dtype) |
| 151 | |
| 152 | step = int(D / (nzeros + 1)) - 1 |
| 153 | |
| 154 | for i in range(nzeros): |
| 155 | in_start = step * i |
| 156 | in_end = in_start + step |
| 157 | # out_start = in_start + i + 1 |
| 158 | out_start = (step + 1) * i |
| 159 | out_end = out_start + step |
| 160 | X_new[:, out_start:out_end] = X[:, in_start:in_end] |
| 161 | |
| 162 | # out_start = out_end |
| 163 | # out_end += step |
| 164 | |
| 165 | out_end += 1 # account for the last 0 |
| 166 | remaining_len = D - in_end |
| 167 | out_remaining_len = D_new - out_end |
| 168 | # print "step", step |
| 169 | # print "in_start, in_end", in_start, in_end |
| 170 | # print "out_start, out_end", out_start, out_end |
| 171 | # print "D, D_new", D, D_new |
| 172 | # print "remaining_len, out_remaining_len", remaining_len, out_remaining_len |
| 173 | assert remaining_len == out_remaining_len |
| 174 | |
| 175 | assert remaining_len >= 0 |
| 176 | if remaining_len: |
| 177 | # X_new[:, out_end:out_end+remaining_len] = X[:, in_end:D] |
| 178 | X_new[:, out_end:] = X[:, in_end:] |
| 179 | |
| 180 | assert np.array_equal(X[:, 0], X_new[:, 0]) |
| 181 | assert np.array_equal(X[:, -1], X_new[:, -1]) |
| 182 | |
| 183 | return X_new |
| 184 | |
| 185 | |
| 186 | def ensure_num_cols_multiple_of(X, multiple_of): |
no outgoing calls
no test coverage detected