def extract_stresses_and_forces(fit_data, values, args):
    """
    Returns the extracted forces and stress tensors for the dft training structures and then runs a shell relaxation (if core-shell) and single point canculation to get the forces and stress tensors using the fitted potential.

    Args:
        fit_data (:obj:`FitModel`): all structural data and associated properties defined, with methods for implementing the fitting process using LAMMPS. 
        args (list(str)): Keys relating to the fitting parameters for the system, such as charge, springs, and buckingham parameter
        values (list(float)): Values relating to the fitting arguments passes in.

    Returns:
        np.array, np.array, np.array, np.array: 3D array of dft forces in x,y,z for each atom in each structure; 3D array of fitted interatomic potential forces in x,y,z for each atom in each structure; 3D array of dft stress tensors in each structure; 3D array of fitted interatomic potential stress tensors in each structure.
    """
    fit_data.init_potential(values, args)
    ip_forces, ip_stresses = fit_data.get_forces_and_stresses()
    dft_forces = fit_data.expected_forces()
    dft_stresses = fit_data.expected_stresses()
    return dft_forces, ip_forces, dft_stresses, ip_stresses