diff --git a/TODO2.org b/TODO2.org new file mode 100644 index 0000000000000000000000000000000000000000..7c718ba74a02b89b70edea88fa540cc7d3cf8feb --- /dev/null +++ b/TODO2.org @@ -0,0 +1,167 @@ +* Todo list for the binary_c-python +** Logging functionality: +*** Idea +Idea is to be able to give a string via python that will be used in the through the libbinary_c.so so that log_every_timestep.c +The code below is the piece in log_every_timestep that uses it. + + if(stardata->preferences->custom_output_function != NULL) + { + Dprint("calling custom output function %p\n", + stardata->preferences->custom_output_function); + stardata->preferences->custom_output_function(stardata); + } + +So the function should recieve 'stardata' as input. + +We can do that with providing a logging string alltogether, or generate a logging function + +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) = @_; + 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); + +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\") +"; +} +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' => + [ + 'model.time', + 'star[0].mass', + 'model.probability', + 'model.dt' + ] + }); +**** code to handle that input +Which is handled in perl via (see binary_grid2.pm +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 $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; +} +*** 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] +*** DONE Resolve current issue malloc + CLOSED: [2019-11-08 Fri 11:12] +➜ binary_c-python git:(master) ✗ python python_API_test.py +Traceback (most recent call last): + File "python_API_test.py", line 3, in <module> + import binary_c +ImportError: /home/david/projects/binary_c_root/binary_c-python/libbinary_c_api.so: undefined symbol: MALLOC + +I get this error when I am using the master version of binary_c with either branches of the python wrapper.. + +That went very deep haha. alot of memory allocation stuff + +*** DONE Make sure this works with the last major release of binaryc + CLOSED: [2019-11-08 Fri 15:00] +*** DONE Finish testing a simpler case (see other repo) + CLOSED: [2019-11-08 Fri 09:37] +*** DONE Make master master work + CLOSED: [2019-11-08 Fri 15:00] +*** DONE Sync master with david_branch + CLOSED: [2019-11-08 Fri 15:00] +*** DONE make tag of old master branch for future reference + CLOSED: [2019-11-08 Fri 15:00] +*** DONE Implement the autogeneration of the library + CLOSED: [2019-11-08 Fri 15:48] +*** DONE Load all the things with the c-types + CLOSED: [2019-11-08 Fri 18:49] +*** DONE Implement new function for run_binary_with_custom_logging + CLOSED: [2019-11-08 Fri 21:19] +*** DONE Make new c function run_binary_with_custom_logging + CLOSED: [2019-11-08 Fri 21:19] +*** TODO Put in some new tests in the python test api +*** TODO Make sure the sharedlibs get written to the correct directory +** 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] +*** DONE make routine that reads out all the lines, splits them into pieces and reads out the correct key + CLOSED: [2019-10-29 Tue 17:43] +*** TODO Put header and other source files in a dedicated directory +*** TODO Use sphinx or read the docs for auto generation of documentation +*** TODO Have the compiled files put into a build directory +*** TODO add pythonpath thing to readme +*** TODO make script that will set up binaryc automatically so that this can become an out of the box thing +*** TODO Test the importing of this code from different places +** Population ideas +*** TODO Queuing system and some multiprocessing to run many systems +*** TODO Consider rewriting the work that perl does