class TestDeepPotAPBC(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        self.dp_original = DeepPot(FROZEN_MODEL)
        self.dp_compressed = DeepPot(COMPRESSED_MODEL)
        self.coords = np.array([
            12.83, 2.56, 2.18, 12.09, 2.87, 2.74, 00.25, 3.32, 1.68, 3.36,
            3.00, 1.81, 3.51, 2.51, 2.60, 4.27, 3.22, 1.56
        ])
        self.atype = [0, 1, 1, 0, 1, 1]
        self.box = np.array([13., 0., 0., 0., 13., 0., 0., 0., 13.])

    def test_attrs(self):
        self.assertEqual(self.dp_original.get_ntypes(), 2)
        self.assertAlmostEqual(self.dp_original.get_rcut(),
                               6.0,
                               places=default_places)
        self.assertEqual(self.dp_original.get_type_map(), ['O', 'H'])
        self.assertEqual(self.dp_original.get_dim_fparam(), 0)
        self.assertEqual(self.dp_original.get_dim_aparam(), 0)

        self.assertEqual(self.dp_compressed.get_ntypes(), 2)
        self.assertAlmostEqual(self.dp_compressed.get_rcut(),
                               6.0,
                               places=default_places)
        self.assertEqual(self.dp_compressed.get_type_map(), ['O', 'H'])
        self.assertEqual(self.dp_compressed.get_dim_fparam(), 0)
        self.assertEqual(self.dp_compressed.get_dim_aparam(), 0)

    def test_1frame(self):
        ee0, ff0, vv0 = self.dp_original.eval(self.coords,
                                              self.box,
                                              self.atype,
                                              atomic=False)
        ee1, ff1, vv1 = self.dp_compressed.eval(self.coords,
                                                self.box,
                                                self.atype,
                                                atomic=False)
        # check shape of the returns
        nframes = 1
        natoms = len(self.atype)
        self.assertEqual(ee0.shape, (nframes, 1))
        self.assertEqual(ff0.shape, (nframes, natoms, 3))
        self.assertEqual(vv0.shape, (nframes, 9))
        self.assertEqual(ee1.shape, (nframes, 1))
        self.assertEqual(ff1.shape, (nframes, natoms, 3))
        self.assertEqual(vv1.shape, (nframes, 9))
        # check values
        np.testing.assert_almost_equal(ff0, ff1, default_places)
        np.testing.assert_almost_equal(ee0, ee1, default_places)
        np.testing.assert_almost_equal(vv0, vv1, default_places)

    def test_1frame_atm(self):
        ee0, ff0, vv0, ae0, av0 = self.dp_original.eval(self.coords,
                                                        self.box,
                                                        self.atype,
                                                        atomic=True)
        ee1, ff1, vv1, ae1, av1 = self.dp_compressed.eval(self.coords,
                                                          self.box,
                                                          self.atype,
                                                          atomic=True)
        # check shape of the returns
        nframes = 1
        natoms = len(self.atype)
        self.assertEqual(ee0.shape, (nframes, 1))
        self.assertEqual(ff0.shape, (nframes, natoms, 3))
        self.assertEqual(vv0.shape, (nframes, 9))
        self.assertEqual(ae0.shape, (nframes, natoms, 1))
        self.assertEqual(av0.shape, (nframes, natoms, 9))
        self.assertEqual(ee1.shape, (nframes, 1))
        self.assertEqual(ff1.shape, (nframes, natoms, 3))
        self.assertEqual(vv1.shape, (nframes, 9))
        self.assertEqual(ae1.shape, (nframes, natoms, 1))
        self.assertEqual(av1.shape, (nframes, natoms, 9))
        # check values
        np.testing.assert_almost_equal(ff0, ff1, default_places)
        np.testing.assert_almost_equal(ae0, ae1, default_places)
        np.testing.assert_almost_equal(av0, av1, default_places)
        np.testing.assert_almost_equal(ee0, ee1, default_places)
        np.testing.assert_almost_equal(vv0, vv1, default_places)

    def test_2frame_atm(self):
        coords2 = np.concatenate((self.coords, self.coords))
        box2 = np.concatenate((self.box, self.box))
        ee0, ff0, vv0, ae0, av0 = self.dp_original.eval(coords2,
                                                        box2,
                                                        self.atype,
                                                        atomic=True)
        ee1, ff1, vv1, ae1, av1 = self.dp_compressed.eval(coords2,
                                                          box2,
                                                          self.atype,
                                                          atomic=True)
        # check shape of the returns
        nframes = 2
        natoms = len(self.atype)
        self.assertEqual(ee0.shape, (nframes, 1))
        self.assertEqual(ff0.shape, (nframes, natoms, 3))
        self.assertEqual(vv0.shape, (nframes, 9))
        self.assertEqual(ae0.shape, (nframes, natoms, 1))
        self.assertEqual(av0.shape, (nframes, natoms, 9))
        self.assertEqual(ee1.shape, (nframes, 1))
        self.assertEqual(ff1.shape, (nframes, natoms, 3))
        self.assertEqual(vv1.shape, (nframes, 9))
        self.assertEqual(ae1.shape, (nframes, natoms, 1))
        self.assertEqual(av1.shape, (nframes, natoms, 9))

        # check values
        np.testing.assert_almost_equal(ff0, ff1, default_places)
        np.testing.assert_almost_equal(ae0, ae1, default_places)
        np.testing.assert_almost_equal(av0, av1, default_places)
        np.testing.assert_almost_equal(ee0, ee1, default_places)
        np.testing.assert_almost_equal(vv0, vv1, default_places)
Ejemplo n.º 2
0
class TestDeepPotAPBC(unittest.TestCase):
    def setUp(self):
        convert_pbtxt_to_pb(
            str(tests_path / os.path.join("infer", "deeppot.pbtxt")),
            "deeppot.pb")
        self.dp = DeepPot("deeppot.pb")
        self.coords = np.array([
            12.83, 2.56, 2.18, 12.09, 2.87, 2.74, 00.25, 3.32, 1.68, 3.36,
            3.00, 1.81, 3.51, 2.51, 2.60, 4.27, 3.22, 1.56
        ])
        self.atype = [0, 1, 1, 0, 1, 1]
        self.box = np.array([13., 0., 0., 0., 13., 0., 0., 0., 13.])
        self.expected_e = np.array([
            -9.275780747115504710e+01, -1.863501786584258468e+02,
            -1.863392472863538103e+02, -9.279281325486221021e+01,
            -1.863671545232153903e+02, -1.863619822847602165e+02
        ])
        self.expected_f = np.array([
            -3.034045420701179663e-01, 8.405844663871177014e-01,
            7.696947487118485642e-02, 7.662001266663505117e-01,
            -1.880601391333554251e-01, -6.183333871091722944e-01,
            -5.036172391059643427e-01, -6.529525836149027151e-01,
            5.432962643022043459e-01, 6.382357912332115024e-01,
            -1.748518296794561167e-01, 3.457363524891907125e-01,
            1.286482986991941552e-03, 3.757251165286925043e-01,
            -5.972588700887541124e-01, -5.987006197104716154e-01,
            -2.004450304880958100e-01, 2.495901655353461868e-01
        ])
        self.expected_v = np.array([
            -2.912234126853306959e-01, -3.800610846612756388e-02,
            2.776624987489437202e-01, -5.053761003913598976e-02,
            -3.152373041953385746e-01, 1.060894290092162379e-01,
            2.826389131596073745e-01, 1.039129970665329250e-01,
            -2.584378792325942586e-01, -3.121722367954994914e-01,
            8.483275876786681990e-02, 2.524662342344257682e-01,
            4.142176771106586414e-02, -3.820285230785245428e-02,
            -2.727311173065460545e-02, 2.668859789777112135e-01,
            -6.448243569420382404e-02, -2.121731470426218846e-01,
            -8.624335220278558922e-02, -1.809695356746038597e-01,
            1.529875294531883312e-01, -1.283658185172031341e-01,
            -1.992682279795223999e-01, 1.409924999632362341e-01,
            1.398322735274434292e-01, 1.804318474574856390e-01,
            -1.470309318999652726e-01, -2.593983661598450730e-01,
            -4.236536279233147489e-02, 3.386387920184946720e-02,
            -4.174017537818433543e-02, -1.003500282164128260e-01,
            1.525690815194478966e-01, 3.398976109910181037e-02,
            1.522253908435125536e-01, -2.349125581341701963e-01,
            9.515545977581392825e-04, -1.643218849228543846e-02,
            1.993234765412972564e-02, 6.027265332209678569e-04,
            -9.563256398907417355e-02, 1.510815124001868293e-01,
            -7.738094816888557714e-03, 1.502832772532304295e-01,
            -2.380965783745832010e-01, -2.309456719810296654e-01,
            -6.666961081213038098e-02, 7.955566551234216632e-02,
            -8.099093777937517447e-02, -3.386641099800401927e-02,
            4.447884755740908608e-02, 1.008593228579038742e-01,
            4.556718179228393811e-02, -6.078081273849572641e-02
        ])

    def tearDown(self):
        os.remove("deeppot.pb")

    def test_attrs(self):
        self.assertEqual(self.dp.get_ntypes(), 2)
        self.assertAlmostEqual(self.dp.get_rcut(), 6.0, places=default_places)
        self.assertEqual(self.dp.get_type_map(), ['O', 'H'])
        self.assertEqual(self.dp.get_dim_fparam(), 0)
        self.assertEqual(self.dp.get_dim_aparam(), 0)

    def test_1frame(self):
        ee, ff, vv = self.dp.eval(self.coords,
                                  self.box,
                                  self.atype,
                                  atomic=False)
        # check shape of the returns
        nframes = 1
        natoms = len(self.atype)
        self.assertEqual(ee.shape, (nframes, 1))
        self.assertEqual(ff.shape, (nframes, natoms, 3))
        self.assertEqual(vv.shape, (nframes, 9))
        # check values
        np.testing.assert_almost_equal(ff.ravel(), self.expected_f.ravel(),
                                       default_places)
        expected_se = np.sum(self.expected_e.reshape([nframes, -1]), axis=1)
        np.testing.assert_almost_equal(ee.ravel(), expected_se.ravel(),
                                       default_places)
        expected_sv = np.sum(self.expected_v.reshape([nframes, -1, 9]), axis=1)
        np.testing.assert_almost_equal(vv.ravel(), expected_sv.ravel(),
                                       default_places)

    def test_1frame_atm(self):
        ee, ff, vv, ae, av = self.dp.eval(self.coords,
                                          self.box,
                                          self.atype,
                                          atomic=True)
        # check shape of the returns
        nframes = 1
        natoms = len(self.atype)
        self.assertEqual(ee.shape, (nframes, 1))
        self.assertEqual(ff.shape, (nframes, natoms, 3))
        self.assertEqual(vv.shape, (nframes, 9))
        self.assertEqual(ae.shape, (nframes, natoms, 1))
        self.assertEqual(av.shape, (nframes, natoms, 9))
        # check values
        np.testing.assert_almost_equal(ff.ravel(), self.expected_f.ravel(),
                                       default_places)
        np.testing.assert_almost_equal(ae.ravel(), self.expected_e.ravel(),
                                       default_places)
        np.testing.assert_almost_equal(av.ravel(), self.expected_v.ravel(),
                                       default_places)
        expected_se = np.sum(self.expected_e.reshape([nframes, -1]), axis=1)
        np.testing.assert_almost_equal(ee.ravel(), expected_se.ravel(),
                                       default_places)
        expected_sv = np.sum(self.expected_v.reshape([nframes, -1, 9]), axis=1)
        np.testing.assert_almost_equal(vv.ravel(), expected_sv.ravel(),
                                       default_places)

    def test_2frame_atm(self):
        coords2 = np.concatenate((self.coords, self.coords))
        box2 = np.concatenate((self.box, self.box))
        ee, ff, vv, ae, av = self.dp.eval(coords2,
                                          box2,
                                          self.atype,
                                          atomic=True)
        # check shape of the returns
        nframes = 2
        natoms = len(self.atype)
        self.assertEqual(ee.shape, (nframes, 1))
        self.assertEqual(ff.shape, (nframes, natoms, 3))
        self.assertEqual(vv.shape, (nframes, 9))
        self.assertEqual(ae.shape, (nframes, natoms, 1))
        self.assertEqual(av.shape, (nframes, natoms, 9))
        # check values
        expected_f = np.concatenate((self.expected_f, self.expected_f), axis=0)
        expected_e = np.concatenate((self.expected_e, self.expected_e), axis=0)
        expected_v = np.concatenate((self.expected_v, self.expected_v), axis=0)
        np.testing.assert_almost_equal(ff.ravel(), expected_f.ravel(),
                                       default_places)
        np.testing.assert_almost_equal(ae.ravel(), expected_e.ravel(),
                                       default_places)
        np.testing.assert_almost_equal(av.ravel(), expected_v.ravel(),
                                       default_places)
        expected_se = np.sum(expected_e.reshape([nframes, -1]), axis=1)
        np.testing.assert_almost_equal(ee.ravel(), expected_se.ravel(),
                                       default_places)
        expected_sv = np.sum(expected_v.reshape([nframes, -1, 9]), axis=1)
        np.testing.assert_almost_equal(vv.ravel(), expected_sv.ravel(),
                                       default_places)
class TestDeepPotAPBCExcludeTypes(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        self.dp_original = DeepPot(FROZEN_MODEL)
        self.dp_compressed = DeepPot(COMPRESSED_MODEL)
        self.coords = np.array([
            12.83, 2.56, 2.18, 12.09, 2.87, 2.74, 00.25, 3.32, 1.68, 3.36,
            3.00, 1.81, 3.51, 2.51, 2.60, 4.27, 3.22, 1.56
        ])
        self.atype = [0, 1, 1, 0, 1, 1]
        self.box = np.array([13., 0., 0., 0., 13., 0., 0., 0., 13.])

    @classmethod
    def tearDownClass(self):
        _file_delete(INPUT)
        _file_delete(FROZEN_MODEL)
        _file_delete(COMPRESSED_MODEL)
        _file_delete("out.json")
        _file_delete("compress.json")
        _file_delete("checkpoint")
        _file_delete("model.ckpt.meta")
        _file_delete("model.ckpt.index")
        _file_delete("model.ckpt.data-00000-of-00001")
        _file_delete("model.ckpt-100.meta")
        _file_delete("model.ckpt-100.index")
        _file_delete("model.ckpt-100.data-00000-of-00001")
        _file_delete("model-compression/checkpoint")
        _file_delete("model-compression/model.ckpt.meta")
        _file_delete("model-compression/model.ckpt.index")
        _file_delete("model-compression/model.ckpt.data-00000-of-00001")
        _file_delete("model-compression")
        _file_delete("input_v2_compat.json")
        _file_delete("lcurve.out")

    def test_attrs(self):
        self.assertEqual(self.dp_original.get_ntypes(), 2)
        self.assertAlmostEqual(self.dp_original.get_rcut(),
                               6.0,
                               places=default_places)
        self.assertEqual(self.dp_original.get_type_map(), ['O', 'H'])
        self.assertEqual(self.dp_original.get_dim_fparam(), 0)
        self.assertEqual(self.dp_original.get_dim_aparam(), 0)

        self.assertEqual(self.dp_compressed.get_ntypes(), 2)
        self.assertAlmostEqual(self.dp_compressed.get_rcut(),
                               6.0,
                               places=default_places)
        self.assertEqual(self.dp_compressed.get_type_map(), ['O', 'H'])
        self.assertEqual(self.dp_compressed.get_dim_fparam(), 0)
        self.assertEqual(self.dp_compressed.get_dim_aparam(), 0)

    def test_1frame(self):
        ee0, ff0, vv0 = self.dp_original.eval(self.coords,
                                              self.box,
                                              self.atype,
                                              atomic=False)
        ee1, ff1, vv1 = self.dp_compressed.eval(self.coords,
                                                self.box,
                                                self.atype,
                                                atomic=False)
        # check shape of the returns
        nframes = 1
        natoms = len(self.atype)
        self.assertEqual(ee0.shape, (nframes, 1))
        self.assertEqual(ff0.shape, (nframes, natoms, 3))
        self.assertEqual(vv0.shape, (nframes, 9))
        self.assertEqual(ee1.shape, (nframes, 1))
        self.assertEqual(ff1.shape, (nframes, natoms, 3))
        self.assertEqual(vv1.shape, (nframes, 9))
        # check values
        np.testing.assert_almost_equal(ff0, ff1, default_places)
        np.testing.assert_almost_equal(ee0, ee1, default_places)
        np.testing.assert_almost_equal(vv0, vv1, default_places)

    def test_1frame_atm(self):
        ee0, ff0, vv0, ae0, av0 = self.dp_original.eval(self.coords,
                                                        self.box,
                                                        self.atype,
                                                        atomic=True)
        ee1, ff1, vv1, ae1, av1 = self.dp_compressed.eval(self.coords,
                                                          self.box,
                                                          self.atype,
                                                          atomic=True)
        # check shape of the returns
        nframes = 1
        natoms = len(self.atype)
        self.assertEqual(ee0.shape, (nframes, 1))
        self.assertEqual(ff0.shape, (nframes, natoms, 3))
        self.assertEqual(vv0.shape, (nframes, 9))
        self.assertEqual(ae0.shape, (nframes, natoms, 1))
        self.assertEqual(av0.shape, (nframes, natoms, 9))
        self.assertEqual(ee1.shape, (nframes, 1))
        self.assertEqual(ff1.shape, (nframes, natoms, 3))
        self.assertEqual(vv1.shape, (nframes, 9))
        self.assertEqual(ae1.shape, (nframes, natoms, 1))
        self.assertEqual(av1.shape, (nframes, natoms, 9))
        # check values
        np.testing.assert_almost_equal(ff0, ff1, default_places)
        np.testing.assert_almost_equal(ae0, ae1, default_places)
        np.testing.assert_almost_equal(av0, av1, default_places)
        np.testing.assert_almost_equal(ee0, ee1, default_places)
        np.testing.assert_almost_equal(vv0, vv1, default_places)

    def test_2frame_atm(self):
        coords2 = np.concatenate((self.coords, self.coords))
        box2 = np.concatenate((self.box, self.box))
        ee0, ff0, vv0, ae0, av0 = self.dp_original.eval(coords2,
                                                        box2,
                                                        self.atype,
                                                        atomic=True)
        ee1, ff1, vv1, ae1, av1 = self.dp_compressed.eval(coords2,
                                                          box2,
                                                          self.atype,
                                                          atomic=True)
        # check shape of the returns
        nframes = 2
        natoms = len(self.atype)
        self.assertEqual(ee0.shape, (nframes, 1))
        self.assertEqual(ff0.shape, (nframes, natoms, 3))
        self.assertEqual(vv0.shape, (nframes, 9))
        self.assertEqual(ae0.shape, (nframes, natoms, 1))
        self.assertEqual(av0.shape, (nframes, natoms, 9))
        self.assertEqual(ee1.shape, (nframes, 1))
        self.assertEqual(ff1.shape, (nframes, natoms, 3))
        self.assertEqual(vv1.shape, (nframes, 9))
        self.assertEqual(ae1.shape, (nframes, natoms, 1))
        self.assertEqual(av1.shape, (nframes, natoms, 9))

        # check values
        np.testing.assert_almost_equal(ff0, ff1, default_places)
        np.testing.assert_almost_equal(ae0, ae1, default_places)
        np.testing.assert_almost_equal(av0, av1, default_places)
        np.testing.assert_almost_equal(ee0, ee1, default_places)
        np.testing.assert_almost_equal(vv0, vv1, default_places)
Ejemplo n.º 4
0
class TestDeepPotRPBC(unittest.TestCase):
    def setUp(self):
        convert_pbtxt_to_pb(
            str(tests_path / os.path.join("infer", "deeppot-r.pbtxt")),
            "deeppot.pb")
        self.dp = DeepPot("deeppot.pb")
        self.coords = np.array([
            12.83, 2.56, 2.18, 12.09, 2.87, 2.74, 00.25, 3.32, 1.68, 3.36,
            3.00, 1.81, 3.51, 2.51, 2.60, 4.27, 3.22, 1.56
        ])
        self.atype = [0, 1, 1, 0, 1, 1]
        self.box = np.array([13., 0., 0., 0., 13., 0., 0., 0., 13.])
        self.expected_e = np.array([
            -9.320909762801588272e+01, -1.868020345400987878e+02,
            -1.868011172371355997e+02, -9.320868430396934912e+01,
            -1.868010398844378415e+02, -1.868016706555875999e+02
        ])
        self.expected_f = np.array([
            6.385312846474267391e-04, -6.460452911141417731e-03,
            -5.652405655332678417e-04, -7.516468794343579736e-03,
            1.128804614240160216e-03, 5.531937784564192051e-03,
            1.914138124904981664e-03, 5.601819906021693503e-03,
            -5.131359585752605541e-03, -4.847104424804288617e-03,
            1.992071550328819614e-03, -4.028159855157302516e-03,
            1.236340684486603517e-03, -5.373955841338794344e-03,
            8.312829460571366513e-03, 8.574563125108854156e-03,
            3.111712681889538742e-03, -4.120007238692381148e-03
        ])
        self.expected_v = np.array([
            5.844056241889131371e-03, 4.663973497239899614e-04,
            -2.268382127762904633e-03, 4.663973497239897988e-04,
            2.349338784202595950e-03, -6.908546513234039253e-04,
            -2.268382127762904633e-03, -6.908546513234039253e-04,
            2.040499248150800561e-03, 4.238130266437327605e-03,
            -1.539867187443782223e-04, -2.393101333240631613e-03,
            -1.539867187443782223e-04, 4.410341945447907377e-04,
            9.544239698119633068e-06, -2.393101333240631613e-03,
            9.544239698119578858e-06, 1.877785959095269654e-03,
            5.798992562057291543e-03, 6.943392552230453693e-04,
            -1.180376879311998773e-03, 6.943392552230453693e-04,
            1.686725132156275536e-03, -1.461632060145726542e-03,
            -1.180376879311998556e-03, -1.461632060145726325e-03,
            1.749543733794208444e-03, 7.173915604192910439e-03,
            3.903218041111061569e-04, -5.747400467123527524e-04,
            3.903218041111061569e-04, 1.208289706621179949e-03,
            -1.826828914132010932e-03, -5.747400467123527524e-04,
            -1.826828914132011148e-03, 2.856960586657185906e-03,
            4.067553030177322240e-03, -3.267469855253819430e-05,
            -6.980667859103454904e-05, -3.267469855253830272e-05,
            1.387653029234650918e-03, -2.096820720698671855e-03,
            -6.980667859103444062e-05, -2.096820720698671855e-03,
            3.218305506720191278e-03, 4.753992590355240674e-03,
            1.224911338353675992e-03, -1.683421934571502484e-03,
            1.224911338353676209e-03, 7.332113564901583539e-04,
            -1.025577052190138451e-03, -1.683421934571502484e-03,
            -1.025577052190138234e-03, 1.456681925652047018e-03
        ])

    def tearDown(self):
        os.remove("deeppot.pb")

    def test_attrs(self):
        self.assertEqual(self.dp.get_ntypes(), 2)
        self.assertAlmostEqual(self.dp.get_rcut(), 6.0, places=default_places)
        self.assertEqual(self.dp.get_type_map(), ['O', 'H'])
        self.assertEqual(self.dp.get_dim_fparam(), 0)
        self.assertEqual(self.dp.get_dim_aparam(), 0)

    # def test_1frame(self):
    #     ee, ff, vv, ae, av = self.dp.eval(self.coords, self.box, self.atype, atomic = True)
    #     np.savetxt('ee.out', ae.reshape([1, -1]), delimiter=',')
    #     np.savetxt('ff.out', ff.reshape([1, -1]), delimiter=',')
    #     np.savetxt('vv.out', av.reshape([1, -1]), delimiter=',')

    def test_1frame(self):
        ee, ff, vv = self.dp.eval(self.coords,
                                  self.box,
                                  self.atype,
                                  atomic=False)
        # check shape of the returns
        nframes = 1
        natoms = len(self.atype)
        self.assertEqual(ee.shape, (nframes, 1))
        self.assertEqual(ff.shape, (nframes, natoms, 3))
        self.assertEqual(vv.shape, (nframes, 9))
        # check values
        np.testing.assert_almost_equal(ff.ravel(), self.expected_f.ravel(),
                                       default_places)
        expected_se = np.sum(self.expected_e.reshape([nframes, -1]), axis=1)
        np.testing.assert_almost_equal(ee.ravel(), expected_se.ravel(),
                                       default_places)
        expected_sv = np.sum(self.expected_v.reshape([nframes, -1, 9]), axis=1)
        np.testing.assert_almost_equal(vv.ravel(), expected_sv.ravel(),
                                       default_places)

    def test_1frame_atm(self):
        ee, ff, vv, ae, av = self.dp.eval(self.coords,
                                          self.box,
                                          self.atype,
                                          atomic=True)
        # check shape of the returns
        nframes = 1
        natoms = len(self.atype)
        self.assertEqual(ee.shape, (nframes, 1))
        self.assertEqual(ff.shape, (nframes, natoms, 3))
        self.assertEqual(vv.shape, (nframes, 9))
        self.assertEqual(ae.shape, (nframes, natoms, 1))
        self.assertEqual(av.shape, (nframes, natoms, 9))
        # check values
        np.testing.assert_almost_equal(ff.ravel(), self.expected_f.ravel(),
                                       default_places)
        np.testing.assert_almost_equal(ae.ravel(), self.expected_e.ravel(),
                                       default_places)
        np.testing.assert_almost_equal(av.ravel(), self.expected_v.ravel(),
                                       default_places)
        expected_se = np.sum(self.expected_e.reshape([nframes, -1]), axis=1)
        np.testing.assert_almost_equal(ee.ravel(), expected_se.ravel(),
                                       default_places)
        expected_sv = np.sum(self.expected_v.reshape([nframes, -1, 9]), axis=1)
        np.testing.assert_almost_equal(vv.ravel(), expected_sv.ravel(),
                                       default_places)

    def test_2frame_atm(self):
        coords2 = np.concatenate((self.coords, self.coords))
        box2 = np.concatenate((self.box, self.box))
        ee, ff, vv, ae, av = self.dp.eval(coords2,
                                          box2,
                                          self.atype,
                                          atomic=True)
        # check shape of the returns
        nframes = 2
        natoms = len(self.atype)
        self.assertEqual(ee.shape, (nframes, 1))
        self.assertEqual(ff.shape, (nframes, natoms, 3))
        self.assertEqual(vv.shape, (nframes, 9))
        self.assertEqual(ae.shape, (nframes, natoms, 1))
        self.assertEqual(av.shape, (nframes, natoms, 9))
        # check values
        expected_f = np.concatenate((self.expected_f, self.expected_f), axis=0)
        expected_e = np.concatenate((self.expected_e, self.expected_e), axis=0)
        expected_v = np.concatenate((self.expected_v, self.expected_v), axis=0)
        np.testing.assert_almost_equal(ff.ravel(), expected_f.ravel(),
                                       default_places)
        np.testing.assert_almost_equal(ae.ravel(), expected_e.ravel(),
                                       default_places)
        np.testing.assert_almost_equal(av.ravel(), expected_v.ravel(),
                                       default_places)
        expected_se = np.sum(expected_e.reshape([nframes, -1]), axis=1)
        np.testing.assert_almost_equal(ee.ravel(), expected_se.ravel(),
                                       default_places)
        expected_sv = np.sum(expected_v.reshape([nframes, -1, 9]), axis=1)
        np.testing.assert_almost_equal(vv.ravel(), expected_sv.ravel(),
                                       default_places)