docs: def optimizer(self) -> non_linear.NonLinearOptimizer:
          """
          The optimizer object that was used in this phase
          """
          if self.__optimizer is None:
              with open(os.path.join(self.directory, ".optimizer.pickle"), "r+b") as f:
                  self.__optimizer = pickle.loads(f.read())
          return self.__optimizer