def calculate_objective_function( self, param: parametrization.Parametrization) -> np.ndarray: # TODO(logansu): Remove hack. This is hack because multiple # parametrizations are currently handled as a single composite # parametrization. if isinstance(param, parametrization.CompositeParam): constraints = [] for subparam in param._params: constraints += self._build_constraints(subparam.to_vector(), subparam._num_pixels) else: constraints = self._build_constraints(param.to_vector(), param._num_pixels) return np.hstack(constraints)
def calculate_gradient( self, param: parametrization.Parametrization) -> np.ndarray: # TODO(logansu): Remove hack. This is hack because multiple # parametrizations are currently handled as a single composite # parametrization. if isinstance(param, parametrization.CompositeParam): # The gradient is block-diagonal, with one block per # sub-parametrization. grad_blocks = [] for subparam in param._params: grad_blocks.append( self._build_constraint_grads(subparam.to_vector())) return scipy.linalg.block_diag(*grad_blocks) return self._build_constraint_grads(param.to_vector())
def calculate_gradient(self, param: Parametrization) -> float: """Returns zero. """ return np.zeros(self.value_shape + (len(param.to_vector()), ))