summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Luevano <55825613+luevano@users.noreply.github.com>2019-12-23 12:23:46 -0700
committerDavid Luevano <55825613+luevano@users.noreply.github.com>2019-12-23 12:23:46 -0700
commitdb64425a5580a49312e313a6e75e7a296eb93b35 (patch)
tree7ae0d56a48fd68749541304656306628f9a2afd1
parent72be4105825c639cf9dfad6229c7a1d62a16c44d (diff)
Restructure code and bug fix
-rw-r--r--lj_matrix/__init__.py4
-rw-r--r--lj_matrix/__main__.py31
-rw-r--r--lj_matrix/lj_matrix.py6
-rw-r--r--lj_matrix/parallel_create_matrices.py70
-rw-r--r--lj_matrix/read_qm7_data.py6
5 files changed, 83 insertions, 34 deletions
diff --git a/lj_matrix/__init__.py b/lj_matrix/__init__.py
index 5019bd51d..d7794d3be 100644
--- a/lj_matrix/__init__.py
+++ b/lj_matrix/__init__.py
@@ -21,7 +21,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""
from lj_matrix.misc import printc
-from lj_matrix.read_qm7_data import read_nc_data, reas_db_data, read_qm7_data
+from lj_matrix.read_qm7_data import read_nc_data, read_db_data, read_qm7_data
from lj_matrix.c_matrix import c_matrix, c_matrix_multiple
from lj_matrix.lj_matrix import lj_matrix, lj_matrix_multiple
from lj_matrix.frob_norm import frob_norm
@@ -34,7 +34,7 @@ from lj_matrix.do_ml import do_ml
# be able to access:
__all__ = ['printc',
'read_nc_data',
- 'reas_db_data',
+ 'read_db_data',
'read_qm7_data',
'c_matrix',
'c_matrix_multiple',
diff --git a/lj_matrix/__main__.py b/lj_matrix/__main__.py
index 0b2a7c6f8..8e52031f1 100644
--- a/lj_matrix/__main__.py
+++ b/lj_matrix/__main__.py
@@ -26,8 +26,7 @@ from multiprocessing import Process, Pipe
import pandas as pd
from lj_matrix.misc import printc
from lj_matrix.read_qm7_data import read_qm7_data
-from lj_matrix.c_matrix import c_matrix_multiple
-from lj_matrix.lj_matrix import lj_matrix_multiple
+from lj_matrix.parallel_create_matrices import parallel_create_matrices
from lj_matrix.do_ml import do_ml
@@ -40,32 +39,10 @@ def ml():
init_time = time.perf_counter()
# Data reading.
- zi_data, molecules, nuclear_charge, energy_pbe0, energy_delta =\
- read_qm7_data()
+ molecules, nuclear_charge, energy_pbe0, energy_delta = read_qm7_data()
# Matrices calculation.
- procs = []
- pipes = []
-
- # cm_recv, cm_send = Pipe(False)
- # p1 = Process(target=c_matrix_multiple,
- # args=(molecules, nuclear_charge, cm_send))
- # procs.append(p1)
- # pipes.append(cm_recv)
- # p1.start()
-
- ljm_recv, ljm_send = Pipe(False)
- p2 = Process(target=lj_matrix_multiple,
- args=(molecules, nuclear_charge, ljm_send, 1, 0.25))
- procs.append(p2)
- pipes.append(ljm_recv)
- p2.start()
-
- # cm_data = pipes[0].recv()
- ljm_data = pipes[0].recv()
-
- for proc in procs:
- proc.join()
+ cm_data, ljm_data = parallel_create_matrices(molecules, nuclear_charge)
# ML calculation.
procs = []
@@ -234,6 +211,6 @@ def pl():
if __name__ == '__main__':
- # ml()
+ ml()
# pl()
print('OK!')
diff --git a/lj_matrix/lj_matrix.py b/lj_matrix/lj_matrix.py
index 2a56a3cdf..0c16b5686 100644
--- a/lj_matrix/lj_matrix.py
+++ b/lj_matrix/lj_matrix.py
@@ -38,6 +38,8 @@ def lj_matrix(mol_data,
Creates the Lennard-Jones Matrix from the molecule data given.
mol_data: molecule data, matrix of atom coordinates.
nc_data: nuclear charge data, array of atom data.
+ sigma: sigma value.
+ epsilon: epsilon value.
max_len: maximum amount of atoms in molecule.
as_eig: if data should be returned as matrix or array of eigenvalues.
bohr_radius_units: if units should be in bohr's radius units.
@@ -171,8 +173,8 @@ def lj_matrix(mol_data,
def lj_matrix_multiple(mol_data,
nc_data,
pipe=None,
- sigma=1,
- epsilon=1,
+ sigma=1.0,
+ epsilon=1.0,
max_len=25,
as_eig=True,
bohr_radius_units=False):
diff --git a/lj_matrix/parallel_create_matrices.py b/lj_matrix/parallel_create_matrices.py
new file mode 100644
index 000000000..0ab691525
--- /dev/null
+++ b/lj_matrix/parallel_create_matrices.py
@@ -0,0 +1,70 @@
+"""MIT License
+
+Copyright (c) 2019 David Luevano Alvarado
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+"""
+from multiprocessing import Process, Pipe
+from lj_matrix.c_matrix import c_matrix_multiple
+from lj_matrix.lj_matrix import lj_matrix_multiple
+
+
+def parallel_create_matrices(mol_data,
+ nc_data,
+ sigma=1.0,
+ epsilon=1.0,
+ max_len=25,
+ as_eig=True,
+ bohr_radius_units=False):
+ """
+ Creates the Coulomb and L-J matrices in parallel.
+ mol_data: molecule data, matrix of atom coordinates.
+ nc_data: nuclear charge data, array of atom data.
+ sigma: sigma value for L-J matrix.
+ epsilon: epsilon value for L-J matrix.
+ max_len: maximum amount of atoms in molecule.
+ as_eig: if data should be returned as matrix or array of eigenvalues.
+ bohr_radius_units: if units should be in bohr's radius units.
+ """
+
+ # Matrices calculation.
+ procs = []
+ pipes = []
+
+ cm_recv, cm_send = Pipe(False)
+ p1 = Process(target=c_matrix_multiple,
+ args=(mol_data, nc_data, cm_send))
+ procs.append(p1)
+ pipes.append(cm_recv)
+ p1.start()
+
+ ljm_recv, ljm_send = Pipe(False)
+ p2 = Process(target=lj_matrix_multiple,
+ args=(mol_data, nc_data, ljm_send, sigma, epsilon))
+ procs.append(p2)
+ pipes.append(ljm_recv)
+ p2.start()
+
+ cm_data = pipes[0].recv()
+ ljm_data = pipes[1].recv()
+
+ for proc in procs:
+ proc.join()
+
+ return cm_data, ljm_data
diff --git a/lj_matrix/read_qm7_data.py b/lj_matrix/read_qm7_data.py
index b54691fb0..9bb7629ca 100644
--- a/lj_matrix/read_qm7_data.py
+++ b/lj_matrix/read_qm7_data.py
@@ -51,7 +51,7 @@ def read_nc_data(data_path):
# 'hof_qm7.txt.txt' retrieved from
# https://github.com/qmlcode/tutorial
-def reas_db_data(zi_data,
+def read_db_data(zi_data,
data_path,
r_seed=111):
"""
@@ -135,10 +135,10 @@ def read_qm7_data():
zi_data = read_nc_data(data_path)
molecules, nuclear_charge, energy_pbe0, energy_delta = \
- reas_db_data(zi_data, data_path)
+ read_db_data(zi_data, data_path)
os.chdir(init_path)
toc = time.perf_counter()
printc('\tData reading took {:.4f} seconds.'.format(toc-tic), 'GREEN')
- return zi_data, molecules, nuclear_charge, energy_pbe0, energy_delta
+ return molecules, nuclear_charge, energy_pbe0, energy_delta