in src/rime/util/score_array.py [0:0]
def reindex(self, index, axis=0, fill_value=float("nan"), old_index=None):
""" reindex with new hidden dim to express fill_value(0) as act(-inf * 1) """
if axis == 1:
return self.T.reindex(index, fill_value=fill_value).T
assert old_index is None or np.all(self.index == old_index), \
f"old index must be compatible {self.index} vs {old_index}"
ind_logits = np.vstack([self.ind_logits, self.ind_default])
ind_logits = np.hstack([ind_logits, np.zeros_like(ind_logits[:, :1])])
ind_default = np.hstack([self.ind_default, np.zeros_like(self.ind_default[:1])])
with warnings.catch_warnings():
warnings.filterwarnings("ignore", "divide by zero encountered in log")
if self.act in ['exp', 'softplus']:
ind_logits[-1, -1] = np.log(fill_value)
elif self.act == 'sigmoid':
ind_logits[-1, -1] = np.log(fill_value) - np.log(1 - fill_value)
elif self.act == '_nnmf':
ind_logits[-1, -1] = fill_value
else:
raise NotImplementedError
col_logits = np.hstack([self.col_logits, np.ones_like(self.col_logits[:, :1])])
col_default = np.hstack([self.col_default, np.ones_like(self.col_default[:1])])
new_ind = pd.Series(
np.arange(len(self)), index=self.index
).reindex(index, fill_value=-1).values
return self.__class__(
ind_logits[new_ind], col_logits, index, self.columns, self.act,
ind_default, col_default)