Loading TODO.org +22 −15 Original line number Diff line number Diff line Loading @@ -17,10 +17,21 @@ We can do that with providing a logging string alltogether, or generate a loggin In either way, this should be passed to stardata->preferences->custom_output_function as a pointer to that function *** Provide string for logging In perl this is done in the following way: **** code to input And then to use it via $population->set( C_logging_code => ' PRINTF("MY_STELLAR_DATA %g %g %g %g\n", stardata->model.time, stardata->star[0].mass, stardata->model.probability, stardata->model.dt); ' ); **** code to handle that input sub binary_c_log_code { my ($code) = @_; Loading Loading @@ -56,22 +67,13 @@ void custom_output_function(SV * x) "; } And then to use it via $population->set( C_logging_code => ' PRINTF("MY_STELLAR_DATA %g %g %g %g\n", stardata->model.time, stardata->star[0].mass, stardata->model.probability, stardata->model.dt); ' ); Or use it via: *** auto logging We should also try to be able to have the code autogenerate some logging function via the following: **** input in perl $population->set( C_auto_logging => { 'MY_STELLAR_DATA' => [ Loading @@ -82,7 +84,7 @@ $population->set( C_auto_logging => { ] }); **** code to handle that input Which is handled in perl via (see binary_grid2.pm sub autogen_C_logging_code { Loading Loading @@ -122,8 +124,8 @@ sub autogen_C_logging_code *** TODO Make function in python that puts code into c function *** DONE Make function in python that puts code into c function CLOSED: [2019-10-31 Thu 11:13] *** DONE Make function in python that generates c-function from a list of arguments CLOSED: [2019-10-29 Tue 23:52] *** TODO Resolve current issue malloc Loading @@ -135,6 +137,11 @@ ImportError: /home/david/projects/binary_c_root/binary_c-python/libbinary_c_api. I get this error when I am using the master version of binary_c with either branches of the python wrapper *** TODO Make sure this works with the last major release of binaryc *** TODO Finish testing a simpler case (see other repo) ** General: *** DONE Get a more reliable way of loading the default values (running a ./tbse echo or something?) CLOSED: [2019-10-29 Tue 17:44] Loading binaryc_python_utils/example_perl.pm +83 −83 Original line number Diff line number Diff line # Autologging # Perl code for autogeneration # sub autogen_C_logging_code # { # # given a hash of arrays of variable names, where the hash # # key is the header, autogenerate PRINTF statements # my ($self) = @_; # my $code = undef; # if(defined $self->{_grid_options}->{C_auto_logging} && # ref $self->{_grid_options}->{C_auto_logging} eq 'HASH' # ) # { # $code = ''; sub autogen_C_logging_code { # given a hash of arrays of variable names, where the hash # key is the header, autogenerate PRINTF statements my ($self) = @_; my $code = undef; if(defined $self->{_grid_options}->{C_auto_logging} && ref $self->{_grid_options}->{C_auto_logging} eq 'HASH' ) { $code = ''; # foreach my $header (keys %{$self->{_grid_options}->{C_auto_logging}}) # { # if(ref $self->{_grid_options}->{C_auto_logging}->{$header} eq 'ARRAY') # { # $code .= 'PRINTF("'.$header.' '; # foreach my $x (@{$self->{_grid_options}->{C_auto_logging}->{$header}}) # { # $code .= '%g '; # } # $code .= '\n"'; foreach my $header (keys %{$self->{_grid_options}->{C_auto_logging}}) { if(ref $self->{_grid_options}->{C_auto_logging}->{$header} eq 'ARRAY') { $code .= 'PRINTF("'.$header.' '; foreach my $x (@{$self->{_grid_options}->{C_auto_logging}->{$header}}) { $code .= '%g '; } $code .= '\n"'; # foreach my $x (@{$self->{_grid_options}->{C_auto_logging}->{$header}}) # { # $code .= ',((double)stardata->'.$x.')'; # } # $code .= ');' # } # } # } # print "MADE AUTO CODE \n\n************************************************************\n\n$code\n\n************************************************************\n"; foreach my $x (@{$self->{_grid_options}->{C_auto_logging}->{$header}}) { $code .= ',((double)stardata->'.$x.')'; } $code .= ');' } } } print "MADE AUTO CODE \n\n************************************************************\n\n$code\n\n************************************************************\n"; # return $code; # } return $code; } # Which is used in flexi-grid via this: # $population->set( C_auto_logging => { # 'MY_STELLAR_DATA' => # [ # 'model.time', # 'star[0].mass', # 'model.probability', # 'model.dt' # ] # }); Which is used in flexi-grid via this: $population->set( C_auto_logging => { 'MY_STELLAR_DATA' => [ 'model.time', 'star[0].mass', 'model.probability', 'model.dt' ] }); # binary_c_log_code # sub binary_c_log_code # { # my ($code) = @_; # return " # #pragma push_macro(\"MAX\") # #pragma push_macro(\"MIN\") # #undef MAX # #undef MIN # #include \"binary_c.h\" sub binary_c_log_code { my ($code) = @_; return " #pragma push_macro(\"MAX\") #pragma push_macro(\"MIN\") #undef MAX #undef MIN #include \"binary_c.h\" # void custom_output_function(SV * x); # SV * custom_output_function_pointer(void); void custom_output_function(SV * x); SV * custom_output_function_pointer(void); # SV * custom_output_function_pointer() # { # /* # * use PTR2UV to convert the function pointer # * &custom_output_function to an unsigned int, # * which is then converted to a Perl SV # */ # return (SV*)newSVuv(PTR2UV(&custom_output_function)); # } SV * custom_output_function_pointer() { /* * use PTR2UV to convert the function pointer * &custom_output_function to an unsigned int, * which is then converted to a Perl SV */ return (SV*)newSVuv(PTR2UV(&custom_output_function)); } # void custom_output_function(SV * x) # { # struct stardata_t * stardata = (struct stardata_t *)x; # $code; # } # #undef MAX # #undef MIN # #pragma pop_macro(\"MIN\") # #pragma pop_macro(\"MAX\") # "; # } void custom_output_function(SV * x) { struct stardata_t * stardata = (struct stardata_t *)x; $code; } #undef MAX #undef MIN #pragma pop_macro(\"MIN\") #pragma pop_macro(\"MAX\") "; } # And then to use it via # $population->set( # C_logging_code => ' # PRINTF("MY_STELLAR_DATA %g %g %g %g\n", # stardata->model.time, # stardata->star[0].mass, # stardata->model.probability, # stardata->model.dt); # ' # ); And then to use it via $population->set( C_logging_code => ' PRINTF("MY_STELLAR_DATA %g %g %g %g\n", stardata->model.time, stardata->star[0].mass, stardata->model.probability, stardata->model.dt); ' ); binaryc_python_utils/logging_functions.py +0 −11 Original line number Diff line number Diff line import textwrap # Functions for the automatic logging of stuff # https://stackoverflow.com/questions/41954269/create-c-function-pointers-structure-in-python # https://stackabuse.com/enhancing-python-with-custom-c-extensions/ Read # https://stackoverflow.com/questions/49941617/runtime-generation-and-compilation-of-cython-functions # https://realpython.com/cpython-source-code-guide/ # https://docs.python.org/3.6/c-api/index.html # https://stackoverflow.com/questions/6626167/build-a-pyobject-from-a-c-function # https://docs.python.org/3.6/extending/newtypes_tutorial.html?highlight=pointer # https://realpython.com/cpython-source-code-guide/ # https://diseraluca.github.io/blog/2019/03/21/wetting-feet-with-python-c-api # https://docs.python.org/3/c-api/function.html # See example_perl.pm autologging def autogen_C_logging_code(logging_dict): Loading Loading
TODO.org +22 −15 Original line number Diff line number Diff line Loading @@ -17,10 +17,21 @@ We can do that with providing a logging string alltogether, or generate a loggin In either way, this should be passed to stardata->preferences->custom_output_function as a pointer to that function *** Provide string for logging In perl this is done in the following way: **** code to input And then to use it via $population->set( C_logging_code => ' PRINTF("MY_STELLAR_DATA %g %g %g %g\n", stardata->model.time, stardata->star[0].mass, stardata->model.probability, stardata->model.dt); ' ); **** code to handle that input sub binary_c_log_code { my ($code) = @_; Loading Loading @@ -56,22 +67,13 @@ void custom_output_function(SV * x) "; } And then to use it via $population->set( C_logging_code => ' PRINTF("MY_STELLAR_DATA %g %g %g %g\n", stardata->model.time, stardata->star[0].mass, stardata->model.probability, stardata->model.dt); ' ); Or use it via: *** auto logging We should also try to be able to have the code autogenerate some logging function via the following: **** input in perl $population->set( C_auto_logging => { 'MY_STELLAR_DATA' => [ Loading @@ -82,7 +84,7 @@ $population->set( C_auto_logging => { ] }); **** code to handle that input Which is handled in perl via (see binary_grid2.pm sub autogen_C_logging_code { Loading Loading @@ -122,8 +124,8 @@ sub autogen_C_logging_code *** TODO Make function in python that puts code into c function *** DONE Make function in python that puts code into c function CLOSED: [2019-10-31 Thu 11:13] *** DONE Make function in python that generates c-function from a list of arguments CLOSED: [2019-10-29 Tue 23:52] *** TODO Resolve current issue malloc Loading @@ -135,6 +137,11 @@ ImportError: /home/david/projects/binary_c_root/binary_c-python/libbinary_c_api. I get this error when I am using the master version of binary_c with either branches of the python wrapper *** TODO Make sure this works with the last major release of binaryc *** TODO Finish testing a simpler case (see other repo) ** General: *** DONE Get a more reliable way of loading the default values (running a ./tbse echo or something?) CLOSED: [2019-10-29 Tue 17:44] Loading
binaryc_python_utils/example_perl.pm +83 −83 Original line number Diff line number Diff line # Autologging # Perl code for autogeneration # sub autogen_C_logging_code # { # # given a hash of arrays of variable names, where the hash # # key is the header, autogenerate PRINTF statements # my ($self) = @_; # my $code = undef; # if(defined $self->{_grid_options}->{C_auto_logging} && # ref $self->{_grid_options}->{C_auto_logging} eq 'HASH' # ) # { # $code = ''; sub autogen_C_logging_code { # given a hash of arrays of variable names, where the hash # key is the header, autogenerate PRINTF statements my ($self) = @_; my $code = undef; if(defined $self->{_grid_options}->{C_auto_logging} && ref $self->{_grid_options}->{C_auto_logging} eq 'HASH' ) { $code = ''; # foreach my $header (keys %{$self->{_grid_options}->{C_auto_logging}}) # { # if(ref $self->{_grid_options}->{C_auto_logging}->{$header} eq 'ARRAY') # { # $code .= 'PRINTF("'.$header.' '; # foreach my $x (@{$self->{_grid_options}->{C_auto_logging}->{$header}}) # { # $code .= '%g '; # } # $code .= '\n"'; foreach my $header (keys %{$self->{_grid_options}->{C_auto_logging}}) { if(ref $self->{_grid_options}->{C_auto_logging}->{$header} eq 'ARRAY') { $code .= 'PRINTF("'.$header.' '; foreach my $x (@{$self->{_grid_options}->{C_auto_logging}->{$header}}) { $code .= '%g '; } $code .= '\n"'; # foreach my $x (@{$self->{_grid_options}->{C_auto_logging}->{$header}}) # { # $code .= ',((double)stardata->'.$x.')'; # } # $code .= ');' # } # } # } # print "MADE AUTO CODE \n\n************************************************************\n\n$code\n\n************************************************************\n"; foreach my $x (@{$self->{_grid_options}->{C_auto_logging}->{$header}}) { $code .= ',((double)stardata->'.$x.')'; } $code .= ');' } } } print "MADE AUTO CODE \n\n************************************************************\n\n$code\n\n************************************************************\n"; # return $code; # } return $code; } # Which is used in flexi-grid via this: # $population->set( C_auto_logging => { # 'MY_STELLAR_DATA' => # [ # 'model.time', # 'star[0].mass', # 'model.probability', # 'model.dt' # ] # }); Which is used in flexi-grid via this: $population->set( C_auto_logging => { 'MY_STELLAR_DATA' => [ 'model.time', 'star[0].mass', 'model.probability', 'model.dt' ] }); # binary_c_log_code # sub binary_c_log_code # { # my ($code) = @_; # return " # #pragma push_macro(\"MAX\") # #pragma push_macro(\"MIN\") # #undef MAX # #undef MIN # #include \"binary_c.h\" sub binary_c_log_code { my ($code) = @_; return " #pragma push_macro(\"MAX\") #pragma push_macro(\"MIN\") #undef MAX #undef MIN #include \"binary_c.h\" # void custom_output_function(SV * x); # SV * custom_output_function_pointer(void); void custom_output_function(SV * x); SV * custom_output_function_pointer(void); # SV * custom_output_function_pointer() # { # /* # * use PTR2UV to convert the function pointer # * &custom_output_function to an unsigned int, # * which is then converted to a Perl SV # */ # return (SV*)newSVuv(PTR2UV(&custom_output_function)); # } SV * custom_output_function_pointer() { /* * use PTR2UV to convert the function pointer * &custom_output_function to an unsigned int, * which is then converted to a Perl SV */ return (SV*)newSVuv(PTR2UV(&custom_output_function)); } # void custom_output_function(SV * x) # { # struct stardata_t * stardata = (struct stardata_t *)x; # $code; # } # #undef MAX # #undef MIN # #pragma pop_macro(\"MIN\") # #pragma pop_macro(\"MAX\") # "; # } void custom_output_function(SV * x) { struct stardata_t * stardata = (struct stardata_t *)x; $code; } #undef MAX #undef MIN #pragma pop_macro(\"MIN\") #pragma pop_macro(\"MAX\") "; } # And then to use it via # $population->set( # C_logging_code => ' # PRINTF("MY_STELLAR_DATA %g %g %g %g\n", # stardata->model.time, # stardata->star[0].mass, # stardata->model.probability, # stardata->model.dt); # ' # ); And then to use it via $population->set( C_logging_code => ' PRINTF("MY_STELLAR_DATA %g %g %g %g\n", stardata->model.time, stardata->star[0].mass, stardata->model.probability, stardata->model.dt); ' );
binaryc_python_utils/logging_functions.py +0 −11 Original line number Diff line number Diff line import textwrap # Functions for the automatic logging of stuff # https://stackoverflow.com/questions/41954269/create-c-function-pointers-structure-in-python # https://stackabuse.com/enhancing-python-with-custom-c-extensions/ Read # https://stackoverflow.com/questions/49941617/runtime-generation-and-compilation-of-cython-functions # https://realpython.com/cpython-source-code-guide/ # https://docs.python.org/3.6/c-api/index.html # https://stackoverflow.com/questions/6626167/build-a-pyobject-from-a-c-function # https://docs.python.org/3.6/extending/newtypes_tutorial.html?highlight=pointer # https://realpython.com/cpython-source-code-guide/ # https://diseraluca.github.io/blog/2019/03/21/wetting-feet-with-python-c-api # https://docs.python.org/3/c-api/function.html # See example_perl.pm autologging def autogen_C_logging_code(logging_dict): Loading