code: def optimizer_array(self):
          
          if self.__dict__.get('_optimizer_copy_', None) is None or self.size != self._optimizer_copy_.size:
              self._optimizer_copy_ = np.empty(self.size)
  
          if not self._optimizer_copy_transformed:
              self._optimizer_copy_.flat = self.param_array.flat
              #py3 fix
              #[np.put(self._optimizer_copy_, ind, c.finv(self.param_array[ind])) for c, ind in self.constraints.iteritems() if c != __fixed__]
              [np.put(self._optimizer_copy_, ind, c.finv(self.param_array[ind])) for c, ind in self.constraints.items() if c != __fixed__]
              self._optimizer_copy_transformed = True
  
          if self._has_fixes():# or self._has_ties()):
              self._ensure_fixes()
              return self._optimizer_copy_[self._fixes_]
          return self._optimizer_copy_
docs: Array for the optimizer to work on.
          This array always lives in the space for the optimizer.
          Thus, it is untransformed, going from Transformations.
  
          Setting this array, will make sure the transformed parameters for this model
          will be set accordingly. It has to be set with an array, retrieved from
          this method, as e.g. fixing will resize the array.
  
          The optimizer should only interfere with this array, such that transformations
          are secured.