meankondo/src/meantools.c
Ian Jauslin 3f0510629e Update to v1.5.
The update to version 1.5 is rather substantial, and introduces some minor
  backward-incompatibilities:
    * The header "#!symbols" has been replaced by "#!virtual_fields"
    * Multiplying polynomials using the '*' symbol is no longer supported (or,
      rather, the symbolic capabilities of meankondo were enhanced, and the
      syntax has been changed).
    * 'meantools exp' has been removed (its functionality is now handled by
      other means)
    * 'meantoolds derive' has been replaced by 'meantools differentiate'

  * The symbolic capabilities were enhanced: polynomials can now be
    multiplied, added, exponentiated, and their logarithms can be taken
    directly in the configuration file.

  * The flow equation can now be processed after being computed using the
    various "#!postprocess_*" entries.

  * Deprecated kondo_preprocess.

  * Compute the mean using an LU decomposition if possible.

  * More detailed checks for syntax errors in configuration file.

  * Check that different '#!group' entries are indeed uncorrelated.

  * New flags in meankondo: '-p' and '-A'.

  * New tool: meantools expand.

  * Improve conversion to LaTeX using meantools-convert

  * Assign terms randomly to different threads.

  * Created vim files to implement syntax highlighting for configuration
    files.

  * Multiple bug fixes
2022-06-14 09:46:36 +02:00

114 lines
2.8 KiB
C

/*
Copyright 2015-2022 Ian Jauslin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/*
meantools
Utility to perform various operations on flow equations
*/
#include <stdio.h>
#include <stdlib.h>
// pre-compiler definitions
#include "definitions.cpp"
// grouped representation of polynomials
#include "grouped_polynomial.h"
// command line parser
#include "cli_parser.h"
// parse input file
#include "parse_file.h"
// arrays
#include "array.h"
// string functions
#include "istring.h"
// tools
#include "meantools_deriv.h"
#include "meantools_eval.h"
#include "meantools_expand.h"
#define DERIV_COMMAND 1
#define EVAL_COMMAND 2
#define EXPAND_COMMAND 3
// read cli arguments
int read_args_meantools(int argc,const char* argv[], Str_Array* str_args, Meantools_Options* opts);
// print usage message
int print_usage_meantools();
int main (int argc, const char* argv[]){
// string arguments
Str_Array str_args;
// options
Meantools_Options opts;
// read command-line arguments
read_args_meantools(argc,argv,&str_args, &opts);
switch(opts.command){
case DERIV_COMMAND: tool_deriv(str_args,opts);
break;
case EVAL_COMMAND: tool_eval(str_args,opts);
break;
case EXPAND_COMMAND: tool_expand(str_args,opts);
break;
}
//free memory
free_Str_Array(str_args);
return(0);
}
// parse command-line arguments
int read_args_meantools(int argc,const char* argv[], Str_Array* str_args, Meantools_Options* opts){
// if there are no arguments
if(argc==1){
print_usage_meantools();
exit(-1);
}
if(str_cmp((char*)argv[1],"differentiate")==1){
(*opts).command=DERIV_COMMAND;
tool_deriv_read_args(argc, argv, str_args, opts);
}
else if(str_cmp((char*)argv[1],"eval")==1){
(*opts).command=EVAL_COMMAND;
tool_eval_read_args(argc, argv, str_args, opts);
}
else if(str_cmp((char*)argv[1],"expand")==1){
(*opts).command=EXPAND_COMMAND;
tool_expand_read_args(argc, argv, str_args, opts);
}
else{
print_usage_meantools();
exit(-1);
}
return(0);
}
// print usage message
int print_usage_meantools(){
printf("\nusage:\n meantools differentiate [-d derivatives] [-V variables] [-C] [config_file]\n meantools eval [-R values] [-P precision] [-E max_exponent] [config_file]\n meantools expand [-N namespace] [config_file]\n\n");
return(0);
}