def from_string(cls, string_input):
        """
        Read an NwInput from a string. Currently tested to work with
        files generated from this class itself.

        Args:
            string_input: string_input to parse.

        Returns:
            NwInput object
        """
        directives = []
        tasks = []
        charge = None
        spin_multiplicity = None
        title = None
        basis_set = None
        basis_set_option = None
        theory_directives = {}
        geom_options = None
        symmetry_options = None
        memory_options = None
        lines = string_input.strip().split("\n")
        while len(lines) > 0:
            l = lines.pop(0).strip()
            if l == "":
                continue

            toks = l.split()
            if toks[0].lower() == "geometry":
                geom_options = toks[1:]
                l = lines.pop(0).strip()
                toks = l.split()
                if toks[0].lower() == "symmetry":
                    symmetry_options = toks[1:]
                    l = lines.pop(0).strip()
                # Parse geometry
                species = []
                coords = []
                while l.lower() != "end":
                    toks = l.split()
                    species.append(toks[0])
                    coords.append([float(i) for i in toks[1:]])
                    l = lines.pop(0).strip()
                mol = Molecule(species, coords)
            elif toks[0].lower() == "charge":
                charge = int(toks[1])
            elif toks[0].lower() == "title":
                title = l[5:].strip().strip("\"")
            elif toks[0].lower() == "basis":
                # Parse basis sets
                l = lines.pop(0).strip()
                basis_set = {}
                while l.lower() != "end":
                    toks = l.split()
                    basis_set[toks[0]] = toks[-1].strip("\"")
                    l = lines.pop(0).strip()
            elif toks[0].lower() in NwTask.theories:
                # read the basis_set_option
                if len(toks) > 1:
                    basis_set_option = toks[1]
                # Parse theory directives.
                theory = toks[0].lower()
                l = lines.pop(0).strip()
                theory_directives[theory] = {}
                while l.lower() != "end":
                    toks = l.split()
                    theory_directives[theory][toks[0]] = toks[-1]
                    if toks[0] == "mult":
                        spin_multiplicity = float(toks[1])
                    l = lines.pop(0).strip()
            elif toks[0].lower() == "task":
                tasks.append(
                    NwTask(charge=charge,
                           spin_multiplicity=spin_multiplicity,
                           title=title, theory=toks[1],
                           operation=toks[2], basis_set=basis_set,
                           basis_set_option=basis_set_option,
                           theory_directives=theory_directives.get(toks[1])))
            elif toks[0].lower() == "memory":
                    memory_options = ' '.join(toks[1:])
            else:
                directives.append(l.strip().split())

        return NwInput(mol, tasks=tasks, directives=directives,
                       geometry_options=geom_options,
                       symmetry_options=symmetry_options,
                       memory_options=memory_options)
def from_string ( cls , string_input ) : directives = [ ] tasks = [ ] charge = None spin_multiplicity = None title = None basis_set = None basis_set_option = None theory_directives = { } geom_options = None symmetry_options = None memory_options = None lines = string_input . strip ( ) . split ( "\n" ) while len ( lines ) > 0 : l = lines . pop ( 0 ) . strip ( ) if l == "" : continue toks = l . split ( ) if toks [ 0 ] . lower ( ) == "geometry" : geom_options = toks [ 1 : ] l = lines . pop ( 0 ) . strip ( ) toks = l . split ( ) if toks [ 0 ] . lower ( ) == "symmetry" : symmetry_options = toks [ 1 : ] l = lines . pop ( 0 ) . strip ( ) species = [ ] coords = [ ] while l . lower ( ) != "end" : toks = l . split ( ) species . append ( toks [ 0 ] ) coords . append ( [ float ( i ) for i in toks [ 1 : ] ] ) l = lines . pop ( 0 ) . strip ( ) mol = Molecule ( species , coords ) elif toks [ 0 ] . lower ( ) == "charge" : charge = int ( toks [ 1 ] ) elif toks [ 0 ] . lower ( ) == "title" : title = l [ 5 : ] . strip ( ) . strip ( "\"" ) elif toks [ 0 ] . lower ( ) == "basis" : l = lines . pop ( 0 ) . strip ( ) basis_set = { } while l . lower ( ) != "end" : toks = l . split ( ) basis_set [ toks [ 0 ] ] = toks [ - 1 ] . strip ( "\"" ) l = lines . pop ( 0 ) . strip ( ) elif toks [ 0 ] . lower ( ) in NwTask . theories : if len ( toks ) > 1 : basis_set_option = toks [ 1 ] theory = toks [ 0 ] . lower ( ) l = lines . pop ( 0 ) . strip ( ) theory_directives [ theory ] = { } while l . lower ( ) != "end" : toks = l . split ( ) theory_directives [ theory ] [ toks [ 0 ] ] = toks [ - 1 ] if toks [ 0 ] == "mult" : spin_multiplicity = float ( toks [ 1 ] ) l = lines . pop ( 0 ) . strip ( ) elif toks [ 0 ] . lower ( ) == "task" : tasks . append ( NwTask ( charge = charge , spin_multiplicity = spin_multiplicity , title = title , theory = toks [ 1 ] , operation = toks [ 2 ] , basis_set = basis_set , basis_set_option = basis_set_option , theory_directives = theory_directives . get ( toks [ 1 ] ) ) ) elif toks [ 0 ] . lower ( ) == "memory" : memory_options = ' ' . join ( toks [ 1 : ] ) else : directives . append ( l . strip ( ) . split ( ) ) return NwInput ( mol , tasks = tasks , directives = directives , geometry_options = geom_options , symmetry_options = symmetry_options , memory_options = memory_options )
Read an NwInput from a string. Currently tested to work with
        files generated from this class itself.

        Args:
            string_input: string_input to parse.

        Returns:
            NwInput object