From 6de75cdead83953d728b35ac80b8f6f0e60a18ed Mon Sep 17 00:00:00 2001 From: David Hendriks <davidhendriks93@gmail.com> Date: Wed, 9 Dec 2020 00:40:16 +0000 Subject: [PATCH] fixed bugs and removed some tasks --- binarycpython/utils/grid.py | 48 +++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/binarycpython/utils/grid.py b/binarycpython/utils/grid.py index df752eb9b..356774313 100644 --- a/binarycpython/utils/grid.py +++ b/binarycpython/utils/grid.py @@ -40,6 +40,7 @@ from binarycpython.utils.functions import ( verbose_print, binarycDecoder, merge_dicts, + BinaryCEncoder ) from binarycpython.utils.hpc_functions import ( get_condor_version, @@ -268,39 +269,40 @@ class Population: Function to add grid variables to the grid_options. TODO: Fix this complex function. - TODO: update the description - The execution of the grid generation will be through a nested forloop, - and will rely heavily on the eval() functionality of python. Which, in terms of safety is - very bad, but in terms of flexibility is very good. + The execution of the grid generation will be through a nested forloop. + Each of the grid variables will get create a deeper for loop. + The real function that generates the numbers will get written to a new file in the TMP_DIR, and then loaded imported and evaluated. + beware that if you insert some destructive piece of code, it will be executed anyway. Use at own risk. + name: - name of parameter + name of parameter. This is evaluated as a parameter and you can use it throughout the rest of the function example: name = 'lnm1' longname: Long name of parameter example: longname = 'Primary mass' range: - Range of values to take - example: range = [log($mmin),log($mmax)] + Range of values to take. Does not get used really, the spacingfunction is used to get the values from + example: range = [math.log(m_min), math.log(m_max)] resolution: - Resolution of the sampled range (amount of samples) - example: resolution = $resolution->{m1} + Resolution of the sampled range (amount of samples). TODO: check if this is used anywhere + example: resolution = resolution["M_1"] spacingfunction: - Function determining how the range is sampled - example: spacingfunction = "const(log($mmin),log($mmax),$resolution->{m1})" + Function determining how the range is sampled. You can either use a real function, or a string representation of a function call. Will get written to a file and then evaluated. + example: spacingfunction = "const(math.log(m_min), math.log(m_max), {})".format(resolution['M_1']) precode: - # TODO: think of good description. - example: precode = '$m1=exp($lnm1);' + Extra room for some code. This code will be evaluated within the loop of the sampling function (i.e. a value for lnm1 is chosen already) + example: precode = 'M_1=math.exp(lnm1);' probdist: FUnction determining the probability that gets asigned to the sampled parameter - example: probdist = 'Kroupa2001($m1)*$m1' + example: probdist = 'Kroupa2001(M_1)*M_1' dphasevol: part of the parameter space that the total probability is calculated with - example: dphasevol = '$dlnm1' + example: dphasevol = 'dlnm1' condition: condition that has to be met in order for the grid generation to continue - example: condition = '$self->{_grid_options}{binary}==1' + example: condition = 'self.grid_options['binary']==1' """ # Add grid_variable @@ -457,17 +459,23 @@ class Population: with open(settings_fullname, "w") as file: file.write( json.dumps( - all_info_cleaned, indent=4, default=binaryc_json_serializer + all_info_cleaned, indent=4, + default=binaryc_json_serializer, ) ) - else: verbose_print( "Writing settings to {}".format(outfile), self.grid_options["verbosity"], 1, ) - # if not outfile.endswith('json'): + if not outfile.endswith('json'): + verbose_print( + "Error: outfile ({}) must end with .json".format(outfile), + self.grid_options["verbosity"], + 0, + ) + raise ValueError with open(outfile, "w") as file: file.write( json.dumps( @@ -1123,7 +1131,7 @@ class Population: code_string += ( indent * (depth + 1) + "{}".format( - grid_variable["precode"].replace("\n", "\n" + indent * (depth)) + grid_variable["precode"].replace("\n", "\n" + indent * (depth+1)) ) + "\n" ) -- GitLab