code: def to_string(self, cart_coords=False):
          
          def para_dict_to_string(para, joiner=" "):
              para_str = []
              # sorted is only done to make unittests work reliably
              for par, val in sorted(para.items()):
                  if val is None or val == "":
                      para_str.append(par)
                  elif isinstance(val, dict):
                      val_str = para_dict_to_string(val, joiner=",")
                      para_str.append("{}=({})".format(par, val_str))
                  else:
                      para_str.append("{}={}".format(par, val))
              return joiner.join(para_str)
  
          output = []
          if self.link0_parameters:
              output.append(para_dict_to_string(self.link0_parameters, "\n"))
          output.append("{diez} {func}/{bset} {route}"
                        .format(diez=self.dieze_tag, func=self.functional,
                                bset=self.basis_set,
                                route=para_dict_to_string(self.route_parameters))
                        )
          output.append("")
          output.append(self.title)
          output.append("")
          output.append("{} {}".format(self.charge, self.spin_multiplicity))
          if isinstance(self._mol, Molecule):
              if cart_coords is True:
                  output.append(self.get_cart_coords())
              else:
                  output.append(self.get_zmatrix())
          else:
              output.append(str(self._mol))
          output.append("")
          if self.gen_basis is not None:
              output.append("{:s}\n".format(self.gen_basis))
          output.append(para_dict_to_string(self.input_parameters, "\n"))
          output.append("\n")
          return "\n".join(output)
docs: Return GaussianInput string
  
          Option: whe cart_coords sets to True return the cartesian coordinates
                  instead of the z-matrix