code: def optimizer_array(self, p):
          
          f = None
          if self.has_parent() and self.constraints[__fixed__].size != 0:
              f = np.ones(self.size).astype(bool)
              f[self.constraints[__fixed__]] = FIXED
          elif self._has_fixes():
              f = self._fixes_
          if f is None:
              self.param_array.flat = p
              [np.put(self.param_array, ind, c.f(self.param_array.flat[ind]))
               #py3 fix
               #for c, ind in self.constraints.iteritems() if c != __fixed__]
               for c, ind in self.constraints.items() if c != __fixed__]
          else:
              self.param_array.flat[f] = p
              [np.put(self.param_array, ind[f[ind]], c.f(self.param_array.flat[ind[f[ind]]]))
               #py3 fix
               #for c, ind in self.constraints.iteritems() if c != __fixed__]
               for c, ind in self.constraints.items() if c != __fixed__]
          #self._highest_parent_.tie.propagate_val()
  
          self._optimizer_copy_transformed = False
          self.trigger_update()
docs: Make sure the optimizer copy does not get touched, thus, we only want to
          set the values *inside* not the array itself.
  
          Also we want to update param_array in here.