Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
TODO.org 5.36 KiB

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 {

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; }

Make function in python that puts code into c function

Make function in python that generates c-function from a list of arguments

Resolve current issue malloc

➜ 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

Make sure this works with the last major release of binaryc

Finish testing a simpler case (see other repo)

Make master master work

Sync master with david_branch

make tag of old master branch for future reference

finish today

General:

Get a more reliable way of loading the default values (running a ./tbse echo or something?)

make routine that reads out all the lines, splits them into pieces and reads out the correct key

Put header and other source files in a dedicated directory

Use sphinx or read the docs for auto generation of documentation

Have the compiled files put into a build directory

add pythonpath thing to readme

make script that will set up binaryc automatically so that this can become an out of the box thing

Test the importing of this code from different places

Population ideas

Queuing system and some multiprocessing to run many systems

Consider rewriting the work that perl does