Skip to content
Snippets Groups Projects
Commit 32de636e authored by David Hendriks's avatar David Hendriks
Browse files

update

parent 822d640b
No related branches found
No related tags found
No related merge requests found
# 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 = '';
# 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;
# }
# 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\"
# 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\")
# ";
# }
# 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);
# '
# );
......@@ -5,58 +5,14 @@ import textwrap
# 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
# 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 = '';
# 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;
# }
# 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'
# ]
# });
# See example_perl.pm autologging
def autogen_C_logging_code(logging_dict):
"""
Function that autogenerates PRINTF statements for binaryc
......@@ -114,53 +70,7 @@ autogen_C_logging_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\"
# 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\")
# ";
# }
# 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);
# '
# );
# see example_perl.pm binary_c_log_code
def binary_c_log_code(code):
"""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment