From fd4f607a9764fb64c7fc7a7fc7c06eacb4fe11d6 Mon Sep 17 00:00:00 2001 From: craig-warren Date: Wed, 8 Apr 2020 09:47:44 +0100 Subject: [PATCH] Code cleanups from pylint. --- gprMax/cmds_multiple.py | 2 +- gprMax/fractals.py | 6 ++++++ gprMax/gprMax.py | 2 +- gprMax/subgrids/base.py | 5 ++++- gprMax/subgrids/multi.py | 6 ++++++ gprMax/subgrids/precursor_nodes.py | 12 +++++------ gprMax/utilities.py | 34 ++++++++---------------------- 7 files changed, 33 insertions(+), 34 deletions(-) diff --git a/gprMax/cmds_multiple.py b/gprMax/cmds_multiple.py index e68097c6..eb14b284 100644 --- a/gprMax/cmds_multiple.py +++ b/gprMax/cmds_multiple.py @@ -53,7 +53,7 @@ class UserObjectMulti: def __str__(self): """Readable user string as per hash commands.""" s = '' - for k, v in self.kwargs.items(): + for _, v in self.kwargs.items(): if isinstance(v, tuple) or isinstance(v, list): v = ' '.join([str(el) for el in v]) s += str(v) + ' ' diff --git a/gprMax/fractals.py b/gprMax/fractals.py index 14fee38b..d6956de1 100644 --- a/gprMax/fractals.py +++ b/gprMax/fractals.py @@ -130,6 +130,12 @@ class FractalVolume: self.nx = xf - xs self.ny = yf - ys self.nz = zf - zs + self.originalxs = xs + self.originalxf = xf + self.originalys = ys + self.originalyf = yf + self.originalzs = zs + self.originalzf = zf self.averaging = False self.seed = None self.dimension = dimension diff --git a/gprMax/gprMax.py b/gprMax/gprMax.py index 76bbcc7e..54b4f642 100644 --- a/gprMax/gprMax.py +++ b/gprMax/gprMax.py @@ -25,7 +25,7 @@ from .contexts import Context, MPIContext from .utilities import setup_logging logger = logging.getLogger(__name__) -setup_logging(level=25) +setup_logging(level=20) def run( scenes=None, diff --git a/gprMax/subgrids/base.py b/gprMax/subgrids/base.py index 3728a580..948c04d6 100644 --- a/gprMax/subgrids/base.py +++ b/gprMax/subgrids/base.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with gprMax. If not, see . +import logging import numpy as np -from scipy.constants import c from ..grid import FDTDGrid +logger = logging.getLogger(__name__) + class SubGridBase(FDTDGrid): @@ -65,6 +67,7 @@ class SubGridBase(FDTDGrid): def main_grid_index_to_subgrid_index(self, i, j, k): """Calculate local subgrid index from global main grid index.""" + logger.debug('SubGridBase has no i0, j0, k0 members.') i_s = self.n_boundary_cells_x + (i - self.i0) * self.ratio j_s = self.n_boundary_cells_y + (j - self.j0) * self.ratio k_s = self.n_boundary_cells_z + (k - self.k0) * self.ratio diff --git a/gprMax/subgrids/multi.py b/gprMax/subgrids/multi.py index ace79cce..8a5cfb05 100644 --- a/gprMax/subgrids/multi.py +++ b/gprMax/subgrids/multi.py @@ -16,8 +16,12 @@ # You should have received a copy of the GNU General Public License # along with gprMax. If not, see . +import logging + from ..receivers import Rx +logger = logging.getLogger(__name__) + class ReferenceRx(Rx): """Receiver that mimicks a receiver in coarse grid. @@ -27,6 +31,8 @@ class ReferenceRx(Rx): position as the coarse grid. """ + logger.debug('ReferenceRx has no offset member.') + def get_field(self, str_id, field): """Return the field value at the equivalent coarse yee cell. diff --git a/gprMax/subgrids/precursor_nodes.py b/gprMax/subgrids/precursor_nodes.py index 5d19241c..43a6c0d1 100644 --- a/gprMax/subgrids/precursor_nodes.py +++ b/gprMax/subgrids/precursor_nodes.py @@ -16,11 +16,12 @@ # You should have received a copy of the GNU General Public License # along with gprMax. If not, see . -import sys - +import logging import numpy as np from scipy import interpolate +logger = logging.getLogger(__name__) + def calculate_weighting_coefficients(x1, x): c1 = (x - x1) / x @@ -28,7 +29,7 @@ def calculate_weighting_coefficients(x1, x): return (c1, c2) -class PrecusorNodesBase: +class PrecursorNodesBase: def __init__(self, fdtd_grid, sub_grid): self.G = fdtd_grid @@ -66,7 +67,6 @@ class PrecusorNodesBase: self.initialize_magnetic_slices_array() self.initialize_electric_slices_array() - def _initialize_fields(self): # Initialise the precursor arrays @@ -276,7 +276,7 @@ class PrecusorNodesBase: setattr(self, obj[0], f) -class PrecursorNodes(PrecusorNodesBase): +class PrecursorNodes(PrecursorNodesBase): def __init__(self, fdtd_grid, sub_grid): super().__init__(fdtd_grid, sub_grid) @@ -402,7 +402,7 @@ class PrecursorNodes(PrecusorNodesBase): return f_1, f_2 -class PrecursorNodesFiltered(PrecusorNodesBase): +class PrecursorNodesFiltered(PrecursorNodesBase): def __init__(self, fdtd_grid, sub_grid): super().__init__(fdtd_grid, sub_grid) diff --git a/gprMax/utilities.py b/gprMax/utilities.py index 180f248e..68341386 100644 --- a/gprMax/utilities.py +++ b/gprMax/utilities.py @@ -324,10 +324,7 @@ def get_host_info(): pass # Hyperthreading - if threadspercore == 2: - hyperthreading = True - else: - hyperthreading = False + hyperthreading = True if threadspercore == 2 else False # OS version osversion = platform.platform() @@ -341,14 +338,17 @@ def get_host_info(): hostinfo['osversion'] = osversion hostinfo['hyperthreading'] = hyperthreading hostinfo['logicalcores'] = psutil.cpu_count() + try: # Get number of physical CPU cores, i.e. avoid hyperthreading with OpenMP hostinfo['physicalcores'] = psutil.cpu_count(logical=False) except ValueError: hostinfo['physicalcores'] = hostinfo['logicalcores'] + # Handle case where cpu_count returns None on some machines if not hostinfo['physicalcores']: hostinfo['physicalcores'] = hostinfo['logicalcores'] + hostinfo['ram'] = psutil.virtual_memory().total hostinfo['ompthreads'] = 1 @@ -366,13 +366,17 @@ def set_omp_threads(nthreads=None): # Should waiting threads consume CPU power (can drastically effect # performance) os.environ['OMP_WAIT_POLICY'] = 'ACTIVE' + # Number of threads may be adjusted by the run time environment to best # utilize system resources os.environ['OMP_DYNAMIC'] = 'FALSE' + # Each place corresponds to a single core (having one or more hardware threads) os.environ['OMP_PLACES'] = 'cores' + # Bind threads to physical cores os.environ['OMP_PROC_BIND'] = 'TRUE' + # Prints OMP version and environment variables (useful for debug) # os.environ['OMP_DISPLAY_ENV'] = 'TRUE' @@ -531,27 +535,7 @@ def detect_gpus(): return gpus -# def check_gpus(gpus): -# """Check if requested Nvidia GPU(s) deviceID(s) exist. - -# Args: -# gpus (list): List of GPU object(s). -# """ - -# # Check if requested device ID(s) exist -# for ID in deviceIDs: -# if ID not in deviceIDsavail: -# raise GeneralError(f'GPU with device ID {ID} does not exist') - -# # Gather information about selected/detected GPUs -# gpus = [] -# for ID in deviceIDsavail: -# gpu = GPU(deviceID=ID) -# gpu.get_gpu_info(drv) -# gpus.append(gpu) - - def timer(): """Function to return time in fractional seconds.""" - logger.debug('"thread_time" not currently available in macOS and bug (https://bugs.python.org/issue36205) with "process_time"') + logger.debug('"thread_time" not currently available in macOS and bug (https://bugs.python.org/issue36205) with "process_time", so use "perf_counter".') return timer_fn()