diff --git a/gprMax/cmds_multiuse.py b/gprMax/cmds_multiuse.py index 837fdf92..7d3a4868 100644 --- a/gprMax/cmds_multiuse.py +++ b/gprMax/cmds_multiuse.py @@ -113,12 +113,12 @@ class Waveform(UserObjectMulti): wavetype = self.kwargs["wave_type"].lower() except KeyError: logger.exception( - f"{self.params_str()} must have one of the " + f"following types {','.join(WaveformUser.types)}." + f"{self.params_str()} must have one of the following types {','.join(WaveformUser.types)}." ) raise if wavetype not in WaveformUser.types: logger.exception( - f"{self.params_str()} must have one of the " + f"following types {','.join(WaveformUser.types)}." + f"{self.params_str()} must have one of the following types {','.join(WaveformUser.types)}." ) raise ValueError @@ -267,7 +267,7 @@ class VoltageSource(UserObjectMulti): # Check if there is a waveformID in the waveforms list if not any(x.ID == waveform_id for x in grid.waveforms): - logger.exception(self.params_str() + (" there is no waveform with " "the identifier " f"{waveform_id}.")) + logger.exception(self.params_str() + (" there is no waveform with " "the identifier {waveform_id}.")) raise ValueError v = VoltageSourceUser() @@ -296,7 +296,7 @@ class VoltageSource(UserObjectMulti): raise ValueError v.start = start v.stop = min(stop, grid.timewindow) - startstop = f" start time {v.start:g} secs, finish time " f"{v.stop:g} secs " + startstop = f" start time {v.start:g} secs, finish time {v.stop:g} secs " except KeyError: v.start = 0 v.stop = grid.timewindow @@ -386,7 +386,7 @@ class HertzianDipole(UserObjectMulti): # Check if there is a waveformID in the waveforms list if not any(x.ID == waveform_id for x in grid.waveforms): - logger.exception(f"{self.params_str()} there is no waveform " + f"with the identifier {waveform_id}.") + logger.exception(f"{self.params_str()} there is no waveform with the identifier {waveform_id}.") raise ValueError h = HertzianDipoleUser() @@ -415,18 +415,18 @@ class HertzianDipole(UserObjectMulti): stop = self.kwargs["stop"] if start < 0: logger.exception( - f"{self.params_str()} delay of the initiation of the " + f"source should not be less than zero." + f"{self.params_str()} delay of the initiation of the source should not be less than zero." ) raise ValueError if stop < 0: - logger.exception(f"{self.params_str()} time to remove the source " + f"should not be less than zero.") + logger.exception(f"{self.params_str()} time to remove the source should not be less than zero.") raise ValueError if stop - start <= 0: logger.exception(f"{self.params_str()} duration of the source should not be zero or less.") raise ValueError h.start = start h.stop = min(stop, grid.timewindow) - startstop = f" start time {h.start:g} secs, finish time " f"{h.stop:g} secs " + startstop = f" start time {h.start:g} secs, finish time {h.stop:g} secs " except KeyError: h.start = 0 h.stop = grid.timewindow @@ -527,7 +527,7 @@ class MagneticDipole(UserObjectMulti): # Check if there is a waveformID in the waveforms list if not any(x.ID == waveform_id for x in grid.waveforms): - logger.exception(f"{self.params_str()} there is no waveform " + f"with the identifier {waveform_id}.") + logger.exception(f"{self.params_str()} there is no waveform with the identifier {waveform_id}.") raise ValueError m = MagneticDipoleUser() @@ -558,7 +558,7 @@ class MagneticDipole(UserObjectMulti): raise ValueError m.start = start m.stop = min(stop, grid.timewindow) - startstop = f" start time {m.start:g} secs, " f"finish time {m.stop:g} secs " + startstop = f" start time {m.start:g} secs, finish time {m.stop:g} secs " except KeyError: m.start = 0 m.stop = grid.timewindow @@ -627,8 +627,8 @@ class TransmissionLine(UserObjectMulti): if config.sim_config.general["solver"] in ["cuda", "opencl"]: logger.exception( f"{self.params_str()} cannot currently be used " - + "with the CUDA or OpenCL-based solver. Consider " - + "using a #voltage_source instead." + "with the CUDA or OpenCL-based solver. Consider " + "using a #voltage_source instead." ) raise ValueError @@ -668,7 +668,7 @@ class TransmissionLine(UserObjectMulti): # Check if there is a waveformID in the waveforms list if not any(x.ID == waveform_id for x in grid.waveforms): - logger.exception(f"{self.params_str()} there is no waveform " + f"with the identifier {waveform_id}.") + logger.exception(f"{self.params_str()} there is no waveform with the identifier {waveform_id}.") raise ValueError t = TransmissionLineUser(grid) @@ -697,7 +697,7 @@ class TransmissionLine(UserObjectMulti): raise ValueError t.start = start t.stop = min(stop, grid.timewindow) - startstop = f" start time {t.start:g} secs, finish time " + f"{t.stop:g} secs " + startstop = f" start time {t.start:g} secs, finish time {t.stop:g} secs " except KeyError: t.start = 0 t.stop = grid.timewindow @@ -846,19 +846,17 @@ class RxArray(UserObjectMulti): dx, dy, dz = uip.discretise_point(dl) if xs > xf or ys > yf or zs > zf: - logger.exception( - f"{self.params_str()} the lower coordinates " + "should be less than the upper coordinates." - ) + logger.exception(f"{self.params_str()} the lower coordinates should be less than the upper coordinates.") raise ValueError if dx < 0 or dy < 0 or dz < 0: - logger.exception(f"{self.params_str()} the step size should not " + "be less than zero.") + logger.exception(f"{self.params_str()} the step size should not be less than zero.") raise ValueError if dx < 1: if dx == 0: dx = 1 else: logger.exception( - f"{self.params_str()} the step size should " + "not be less than the spatial discretisation." + f"{self.params_str()} the step size should not be less than the spatial discretisation." ) raise ValueError if dy < 1: @@ -866,7 +864,7 @@ class RxArray(UserObjectMulti): dy = 1 else: logger.exception( - f"{self.params_str()} the step size should " + "not be less than the spatial discretisation." + f"{self.params_str()} the step size should not be less than the spatial discretisation." ) raise ValueError if dz < 1: @@ -874,7 +872,7 @@ class RxArray(UserObjectMulti): dz = 1 else: logger.exception( - f"{self.params_str()} the step size should " + "not be less than the spatial discretisation." + f"{self.params_str()} the step size should not be less than the spatial discretisation." ) raise ValueError @@ -974,7 +972,7 @@ class Snapshot(UserObjectMulti): if time > 0: iterations = round_value((time / grid.dt)) + 1 else: - logger.exception(f"{self.params_str()} time value must be " + "greater than zero.") + logger.exception(f"{self.params_str()} time value must be greater than zero.") raise ValueError try: @@ -1009,12 +1007,10 @@ class Snapshot(UserObjectMulti): outputs = dict.fromkeys(SnapshotUser.allowableoutputs, True) if dx < 0 or dy < 0 or dz < 0: - logger.exception(f"{self.params_str()} the step size should not " + "be less than zero.") + logger.exception(f"{self.params_str()} the step size should not be less than zero.") raise ValueError if dx < 1 or dy < 1 or dz < 1: - logger.exception( - f"{self.params_str()} the step size should not " + "be less than the spatial discretisation." - ) + logger.exception(f"{self.params_str()} the step size should not be less than the spatial discretisation.") raise ValueError if iterations <= 0 or iterations > grid.iterations: logger.exception(f"{self.params_str()} time value is not valid.") @@ -1064,26 +1060,26 @@ class Material(UserObjectMulti): if er < 1: logger.exception( - f"{self.params_str()} requires a positive value of " + f"one or greater for static (DC) permittivity." + f"{self.params_str()} requires a positive value of one or greater for static (DC) permittivity." ) raise ValueError if se != "inf": se = float(se) if se < 0: - logger.exception(f"{self.params_str()} requires a positive " + f"value for electric conductivity.") + logger.exception(f"{self.params_str()} requires a positive value for electric conductivity.") raise ValueError else: se = float("inf") if mr < 1: logger.exception( - f"{self.params_str()} requires a positive value of " + f"one or greater for magnetic permeability." + f"{self.params_str()} requires a positive value of one or greater for magnetic permeability." ) raise ValueError if sm < 0: - logger.exception(f"{self.params_str()} requires a positive value " + f"for magnetic loss.") + logger.exception(f"{self.params_str()} requires a positive value for magnetic loss.") raise ValueError if any(x.ID == material_id for x in grid.materials): - logger.exception(f"{self.params_str()} with ID {material_id} " + f"already exists") + logger.exception(f"{self.params_str()} with ID {material_id} already exists") raise ValueError # Create a new instance of the Material class material @@ -1137,7 +1133,7 @@ class AddDebyeDispersion(UserObjectMulti): raise if poles < 0: - logger.exception(f"{self.params_str()} requires a positive value " + "for number of poles.") + logger.exception(f"{self.params_str()} requires a positive value for number of poles.") raise ValueError # Look up requested materials in existing list of material instances @@ -1163,9 +1159,7 @@ class AddDebyeDispersion(UserObjectMulti): disp_material.deltaer.append(er_delta[i]) disp_material.tau.append(tau[i]) else: - logger.exception( - f"{self.params_str()} requires positive " + "values for the permittivity difference." - ) + logger.exception(f"{self.params_str()} requires positive values for the permittivity difference.") raise ValueError if disp_material.poles > config.get_model_config().materials["maxpoles"]: config.get_model_config().materials["maxpoles"] = disp_material.poles @@ -1212,7 +1206,7 @@ class AddLorentzDispersion(UserObjectMulti): raise if poles < 0: - logger.exception(f"{self.params_str()} requires a positive value " + "for number of poles.") + logger.exception(f"{self.params_str()} requires a positive value for number of poles.") raise ValueError # Look up requested materials in existing list of material instances @@ -1284,11 +1278,11 @@ class AddDrudeDispersion(UserObjectMulti): alpha = self.kwargs["alpha"] material_ids = self.kwargs["material_ids"] except KeyError: - logger.exception(f"{self.params_str()} requires at least four " + "parameters.") + logger.exception(f"{self.params_str()} requires at least four parameters.") raise if poles < 0: - logger.exception(f"{self.params_str()} requires a positive value " + "for number of poles.") + logger.exception(f"{self.params_str()} requires a positive value for number of poles.") raise ValueError # Look up requested materials in existing list of material instances @@ -1364,30 +1358,30 @@ class SoilPeplinski(UserObjectMulti): water_fraction_upper = self.kwargs["water_fraction_upper"] ID = self.kwargs["id"] except KeyError: - logger.exception(f"{self.params_str()} requires at exactly seven " + "parameters.") + logger.exception(f"{self.params_str()} requires at exactly seven parameters.") raise if sand_fraction < 0: - logger.exception(f"{self.params_str()} requires a positive value " + "for the sand fraction.") + logger.exception(f"{self.params_str()} requires a positive value for the sand fraction.") raise ValueError if clay_fraction < 0: - logger.exception(f"{self.params_str()} requires a positive value " + "for the clay fraction.") + logger.exception(f"{self.params_str()} requires a positive value for the clay fraction.") raise ValueError if bulk_density < 0: - logger.exception(f"{self.params_str()} requires a positive value " + "for the bulk density.") + logger.exception(f"{self.params_str()} requires a positive value for the bulk density.") raise ValueError if sand_density < 0: - logger.exception(f"{self.params_str()} requires a positive value " + "for the sand particle density.") + logger.exception(f"{self.params_str()} requires a positive value for the sand particle density.") raise ValueError if water_fraction_lower < 0: logger.exception( - f"{self.params_str()} requires a positive value " + "for the lower limit of the water volumetric " + f"{self.params_str()} requires a positive value for the lower limit of the water volumetric " "fraction." ) raise ValueError if water_fraction_upper < 0: logger.exception( - f"{self.params_str()} requires a positive value " + "for the upper limit of the water volumetric " + f"{self.params_str()} requires a positive value for the upper limit of the water volumetric " "fraction." ) raise ValueError @@ -1444,46 +1438,44 @@ class MaterialRange(UserObjectMulti): ro_upper = self.kwargs["ro_upper"] ID = self.kwargs["id"] except KeyError: - logger.exception(f"{self.params_str()} requires at exactly nine " + "parameters.") + logger.exception(f"{self.params_str()} requires at exactly nine parameters.") raise if er_lower < 1: logger.exception( f"{self.params_str()} requires a value greater or equal to 1 " - + "for the lower range of relative permittivity." + "for the lower range of relative permittivity." ) raise ValueError if mr_lower < 1: logger.exception( f"{self.params_str()} requires a value greater or equal to 1 " - + "for the lower range of relative magnetic permeability." + "for the lower range of relative magnetic permeability." ) raise ValueError if sigma_lower < 0: - logger.exception(f"{self.params_str()} requires a positive value " + "for the lower limit of conductivity.") + logger.exception(f"{self.params_str()} requires a positive value for the lower limit of conductivity.") raise ValueError if ro_lower < 0: - logger.exception(f"{self.params_str()} requires a positive value " + "for the lower range magnetic loss.") + logger.exception(f"{self.params_str()} requires a positive value for the lower range magnetic loss.") raise ValueError if er_upper < 1: logger.exception( f"{self.params_str()} requires a value greater or equal to 1" - + "for the upper range of relative permittivity." + "for the upper range of relative permittivity." ) raise ValueError if mr_upper < 1: logger.exception( f"{self.params_str()} requires a value greater or equal to 1" - + "for the upper range of relative magnetic permeability" + "for the upper range of relative magnetic permeability" ) raise ValueError if sigma_upper < 0: - logger.exception(f"{self.params_str()} requires a positive value " + "for the upper range of conductivity.") + logger.exception(f"{self.params_str()} requires a positive value for the upper range of conductivity.") raise ValueError if ro_upper < 0: - logger.exception( - f"{self.params_str()} requires a positive value " + "for the upper range of magnetic loss." - ) + logger.exception(f"{self.params_str()} requires a positive value for the upper range of magnetic loss.") if any(x.ID == ID for x in grid.mixingmodels): logger.exception(f"{self.params_str()} with ID {ID} already exists") @@ -1521,7 +1513,7 @@ class MaterialList(UserObjectMulti): list_of_materials = self.kwargs["list_of_materials"] ID = self.kwargs["id"] except KeyError: - logger.exception(f"{self.params_str()} requires at at least 2 " + "parameters.") + logger.exception(f"{self.params_str()} requires at at least 2 parameters.") raise if any(x.ID == ID for x in grid.mixingmodels): @@ -1530,9 +1522,7 @@ class MaterialList(UserObjectMulti): s = ListMaterialUser(ID, list_of_materials) - logger.info( - f"{self.grid_name(grid)}A list of materials used to " + f"create {s.ID} that includes {s.mat}, created" - ) + logger.info(f"{self.grid_name(grid)}A list of materials used to create {s.ID} that includes {s.mat}, created") grid.mixingmodels.append(s) @@ -1579,7 +1569,7 @@ class GeometryView(UserObjectMulti): output_type = self.kwargs["output_type"].lower() filename = self.kwargs["filename"] except KeyError: - logger.exception(f"{self.params_str()} requires exactly eleven " + "parameters.") + logger.exception(f"{self.params_str()} requires exactly eleven parameters.") raise GeometryViewUser = self.geometry_view_constructor(grid, output_type) @@ -1597,18 +1587,16 @@ class GeometryView(UserObjectMulti): dx, dy, dz = uip.discretise_static_point(dl) if dx < 0 or dy < 0 or dz < 0: - logger.exception(f"{self.params_str()} the step size should not be " + "less than zero.") + logger.exception(f"{self.params_str()} the step size should not be less than zero.") raise ValueError if dx > grid.nx or dy > grid.ny or dz > grid.nz: - logger.exception(f"{self.params_str()} the step size should be " + "less than the domain size.") + logger.exception(f"{self.params_str()} the step size should be less than the domain size.") raise ValueError if dx < 1 or dy < 1 or dz < 1: - logger.exception( - f"{self.params_str()} the step size should not " + "be less than the spatial discretisation." - ) + logger.exception(f"{self.params_str()} the step size should not be less than the spatial discretisation.") raise ValueError if output_type not in ["n", "f"]: - logger.exception(f"{self.params_str()} requires type to be either " + "n (normal) or f (fine).") + logger.exception(f"{self.params_str()} requires type to be either n (normal) or f (fine).") raise ValueError if output_type == "f" and (dx * grid.dx != grid.dx or dy * grid.dy != grid.dy or dz * grid.dz != grid.dz): logger.exception( @@ -1656,7 +1644,7 @@ class GeometryObjectsWrite(UserObjectMulti): p2 = self.kwargs["p2"] basefilename = self.kwargs["filename"] except KeyError: - logger.exception(f"{self.params_str()} requires exactly seven " + "parameters.") + logger.exception(f"{self.params_str()} requires exactly seven parameters.") raise p1, p2 = uip.check_box_points(p1, p2, self.params_str()) @@ -1721,7 +1709,7 @@ class PMLCFS(UserObjectMulti): sigmamin = self.kwargs["sigmamin"] sigmamax = self.kwargs["sigmamax"] except KeyError: - logger.exception(f"{self.params_str()} requires exactly twelve " + "parameters.") + logger.exception(f"{self.params_str()} requires exactly twelve parameters.") raise if ( @@ -1730,7 +1718,7 @@ class PMLCFS(UserObjectMulti): or sigmascalingprofile not in CFSParameter.scalingprofiles.keys() ): logger.exception( - f"{self.params_str()} must have scaling type " + f"{','.join(CFSParameter.scalingprofiles.keys())}" + f"{self.params_str()} must have scaling type {','.join(CFSParameter.scalingprofiles.keys())}" ) raise ValueError if ( @@ -1738,9 +1726,7 @@ class PMLCFS(UserObjectMulti): or kappascalingdirection not in CFSParameter.scalingdirections or sigmascalingdirection not in CFSParameter.scalingdirections ): - logger.exception( - f"{self.params_str()} must have scaling type " + f"{','.join(CFSParameter.scalingdirections)}" - ) + logger.exception(f"{self.params_str()} must have scaling type {','.join(CFSParameter.scalingdirections)}") raise ValueError if ( float(alphamin) < 0 @@ -1749,7 +1735,7 @@ class PMLCFS(UserObjectMulti): or float(kappamax) < 0 or float(sigmamin) < 0 ): - logger.exception(f"{self.params_str()} minimum and maximum scaling " + "values must be greater than zero.") + logger.exception(f"{self.params_str()} minimum and maximum scaling values must be greater than zero.") raise ValueError # TODO: Fix handling of kappa for 2nd order PMLs # if float(kappamin) < 1: @@ -1795,7 +1781,7 @@ class PMLCFS(UserObjectMulti): grid.pmls["cfs"].append(cfs) if len(grid.pmls["cfs"]) > 2: - logger.exception(f"{self.params_str()} can only be used up to two " + "times, for up to a 2nd order PML.") + logger.exception(f"{self.params_str()} can only be used up to two times, for up to a 2nd order PML.") raise ValueError @@ -1814,4 +1800,4 @@ class Subgrid(UserObjectMulti): self.children_geometry.append(node) else: logger.exception("This object is unknown to gprMax.") - raise ValueError + raise ValueError diff --git a/testing/test_models.py b/testing/test_models.py index eb5944ee..196617b9 100644 --- a/testing/test_models.py +++ b/testing/test_models.py @@ -137,8 +137,8 @@ for i, model in enumerate(testmodels): if filetest[path + outputstest[0]].dtype != fileref[path + outputsref[0]].dtype: logger.warning( f"Type of floating point number in test model " - + f"({filetest[path + outputstest[0]].dtype}) does not " - + f"match type in reference solution ({fileref[path + outputsref[0]].dtype})\n" + f"({filetest[path + outputstest[0]].dtype}) does not " + f"match type in reference solution ({fileref[path + outputsref[0]].dtype})\n" ) float_or_doubleref = fileref[path + outputsref[0]].dtype float_or_doubletest = filetest[path + outputstest[0]].dtype @@ -271,11 +271,11 @@ for name, data in sorted(testresults.items()): if "analytical" in name: logger.info( f"Test '{name}.in' using v.{data['Test version']} compared " - + f"to analytical solution. Max difference {data['Max diff']:.2f}dB." + f"to analytical solution. Max difference {data['Max diff']:.2f}dB." ) else: logger.info( f"Test '{name}.in' using v.{data['Test version']} compared to " - + f"reference solution using v.{data['Ref version']}. Max difference " - + f"{data['Max diff']:.2f}dB." + f"reference solution using v.{data['Ref version']}. Max difference " + f"{data['Max diff']:.2f}dB." ) diff --git a/toolboxes/Plotting/plot_source_wave.py b/toolboxes/Plotting/plot_source_wave.py index 83ad83ec..1c25c375 100644 --- a/toolboxes/Plotting/plot_source_wave.py +++ b/toolboxes/Plotting/plot_source_wave.py @@ -169,10 +169,10 @@ if __name__ == "__main__": # Check waveform parameters if args.type.lower() not in Waveform.types: - logging.exception(f"The waveform must have one of the following types " + f"{', '.join(Waveform.types)}") + logging.exception(f"The waveform must have one of the following types {', '.join(Waveform.types)}") raise ValueError if args.freq <= 0: - logging.exception("The waveform requires an excitation frequency value of " + "greater than zero") + logging.exception("The waveform requires an excitation frequency value of greater than zero") raise ValueError # Create waveform instance diff --git a/toolboxes/Utilities/convert_png2h5.py b/toolboxes/Utilities/convert_png2h5.py index 8de71dc9..5f9a02bf 100644 --- a/toolboxes/Utilities/convert_png2h5.py +++ b/toolboxes/Utilities/convert_png2h5.py @@ -55,11 +55,7 @@ class Cursor(object): ) # Convert pixel values from float (0-1) to integer (0-255) match = pixel_match(materials, pixel) if match is False: - logger.info( - "x, y: {} {} px; RGB: {}; material ID: {}".format( - int(x), int(y), pixel[:-1], len(self.materials) - ) - ) + logger.info(f"x, y: {int(x)} {int(y)} px; RGB: {pixel[:-1]}; material ID: {len(self.materials)}") materials.append(pixel) @@ -103,7 +99,7 @@ if __name__ == "__main__": imdata = np.rot90(im, k=3) # Rotate 90CW imdata = np.floor(imdata * 255).astype(np.int16) # Convert pixel values from float (0-1) to integer (0-255) - logger.info("Reading PNG image file: {}".format(os.path.split(args.imagefile)[1])) + logger.info(f"Reading PNG image file: {os.path.split(args.imagefile)[1]}") logger.info( " 1. Select discrete material colours by clicking on parts of the image.\n 2. When all materials have been selected close the image." ) @@ -122,7 +118,7 @@ if __name__ == "__main__": dx_dy_dz = (args.dxdydz[0][0], args.dxdydz[0][1], args.dxdydz[0][2]) # Filename for geometry (HDF5) file - hdf5file = os.path.splitext(args.imagefile)[0] + ".h5" + hdf5file = f"{os.path.splitext(args.imagefile)[0]}.h5" # Array to store geometry data (initialised as background, i.e. -1) data = np.ones((imdata.shape[0], imdata.shape[1], args.zcells), dtype=np.int16) * -1 @@ -140,4 +136,4 @@ if __name__ == "__main__": # Write data to file fout.create_dataset("data", data=data) - logger.info("Written HDF5 file: {}".format(os.path.split(hdf5file)[1])) + logger.info(f"Written HDF5 file: {os.path.split(hdf5file)[1]}")