<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def write_lammps_inputs(output_dir, script_template, settings=None, data=None, script_filename="in.lammps", make_dir_if_not_present=True, **kwargs):
 """ Writes input files for a LAMMPS run. Input script is constructed from a str template with placeholders to be filled by custom settings. Data file is either written from a LammpsData instance or copied from an existing file if read_data cmd is inspected in the input script. Other supporting files are not handled at the moment. Args: output_dir (str):
 Directory to output the input files. script_template (str):
 String template for input script with placeholders. The format for placeholders has to be '$variable_name', e.g., '$temperature' settings (dict):
 Contains values to be written to the placeholders, e.g., {'temperature': 1}. Default to None. data (LammpsData or str):
 Data file as a LammpsData instance or path to an existing data file. Default to None, i.e., no data file supplied. Useful only when read_data cmd is in the script. script_filename (str):
 Filename for the input script. make_dir_if_not_present (bool):
 Set to True if you want the directory (and the whole path) to be created if it is not present. **kwargs: kwargs supported by LammpsData.write_file. Examples: units metal atom_style atomic lattice fcc 3.615 region box block 0 20 0 20 0 20 create_box 1 box create_atoms 1 box pair_style eam pair_coeff 1 1 Cu_u3.eam velocity all create 1600.0 376847 loop geom neighbor 1.0 bin neigh_modify delay 5 every 1 fix 1 all nvt temp 1600.0 1600.0 0.1 timestep 0.005 run 100 """

    variables = {} if settings is None else settings
    template = Template(script_template)
    input_script = template.safe_substitute(**variables)
    if make_dir_if_not_present and not os.path.exists(output_dir):
        os.makedirs(output_dir)
    with open(os.path.join(output_dir, script_filename), "w") as f:
        f.write(input_script)
    read_data = re.search(r"read_data\s+(.*)\n", input_script)
    if read_data:
        data_filename = read_data.group(1).split()[0]
        if isinstance(data, LammpsData):
            data.write_file(os.path.join(output_dir, data_filename), **kwargs)
        elif isinstance(data, str) and os.path.exists(data):
            shutil.copyfile(data, os.path.join(output_dir, data_filename))
        else:
            warnings.warn("No data file supplied. Skip writing %s."
                          % data_filename)