Copy disabled (too large)
Download .txt
Showing preview only (20,637K chars total). Download the full file to get everything.
Repository: heal-research/operon
Branch: main
Commit: 0c0f116ec5ac
Files: 301
Total size: 19.6 MB
Directory structure:
gitextract_jvogax4q/
├── .clang-format
├── .clang-tidy
├── .codespellrc
├── .envrc
├── .github/
│ └── workflows/
│ ├── build-linux.yml
│ ├── build-macos.yml
│ ├── build-windows.yml
│ ├── ci.yml
│ └── test-linux.yml
├── .gitignore
├── .readthedocs.yml
├── BUILDING.md
├── CMakeLists.txt
├── CMakePresets.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── HACKING.md
├── LICENSE
├── README.md
├── cli/
│ ├── CMakeLists.txt
│ └── source/
│ ├── operator_factory.cpp
│ ├── operator_factory.hpp
│ ├── operon_gp.cpp
│ ├── operon_nsgp.cpp
│ ├── operon_parse_model.cpp
│ ├── pareto_front.cpp
│ ├── pareto_front.hpp
│ ├── reporter.hpp
│ ├── util.cpp
│ └── util.hpp
├── cmake/
│ ├── coverage.cmake
│ ├── dev-mode.cmake
│ ├── docs.cmake
│ ├── get-git-revision.cmake
│ ├── get-git-revision.cmake.in
│ ├── install-config.cmake
│ ├── install-rules.cmake
│ ├── lint-targets.cmake
│ ├── lint.cmake
│ ├── open-cpp-coverage.cmake.example
│ ├── prelude.cmake
│ ├── project-is-top-level.cmake
│ ├── spell-targets.cmake
│ ├── spell.cmake
│ ├── variables.cmake
│ └── windows-set-path.cmake
├── data/
│ ├── AirfoilSelfNoise.csv
│ ├── AirfoilSelfNoise.json
│ ├── Breiman-I.csv
│ ├── Breiman-I.json
│ ├── Chemical-I.csv
│ ├── Chemical-I.json
│ ├── Chemical-II.csv
│ ├── Chemical-II.json
│ ├── Concrete.csv
│ ├── Concrete.json
│ ├── Flow_stress.csv
│ ├── Flow_stress.json
│ ├── FrictionDyn-OneHot.csv
│ ├── FrictionDyn-OneHot.json
│ ├── FrictionStat-OneHot.csv
│ ├── FrictionStat-OneHot.json
│ ├── Friedman-I.csv
│ ├── Friedman-I.json
│ ├── Friedman-II.csv
│ ├── Friedman-II.json
│ ├── GP-Challenge.csv
│ ├── GP-Challenge.json
│ ├── NasaBattery-1_10min.csv
│ ├── NasaBattery-1_10min.json
│ ├── NasaBattery-2_20min.csv
│ ├── NasaBattery-2_20min.json
│ ├── Nikuradse_1.csv
│ ├── Nikuradse_1.json
│ ├── Nikuradse_2.csv
│ ├── Nikuradse_2.json
│ ├── Pagie-1.csv
│ ├── Pagie-1.json
│ ├── Poly-10.csv
│ ├── Poly-10.json
│ ├── Sextic.csv
│ ├── Sextic.json
│ ├── Vladislavleva-1.csv
│ ├── Vladislavleva-1.json
│ ├── Vladislavleva-2.csv
│ ├── Vladislavleva-2.json
│ ├── Vladislavleva-3.csv
│ ├── Vladislavleva-3.json
│ ├── Vladislavleva-4.csv
│ ├── Vladislavleva-4.json
│ ├── Vladislavleva-5.csv
│ ├── Vladislavleva-5.json
│ ├── Vladislavleva-6.csv
│ ├── Vladislavleva-6.json
│ ├── Vladislavleva-7.csv
│ ├── Vladislavleva-7.json
│ ├── Vladislavleva-8.csv
│ └── Vladislavleva-8.json
├── docs/
│ ├── Doxyfile.in
│ ├── conf.py.in
│ └── pages/
│ └── about.dox
├── example/
│ ├── CMakeLists.txt
│ ├── custom_primitives.cpp
│ └── empty_example.cpp
├── flake.nix
├── include/
│ └── operon/
│ ├── algorithms/
│ │ ├── config.hpp
│ │ ├── ga_base.hpp
│ │ ├── gp.hpp
│ │ ├── nsga2.hpp
│ │ └── solution_archive.hpp
│ ├── analyzers/
│ │ ├── analyzer_base.hpp
│ │ └── diversity.hpp
│ ├── ceres/
│ │ ├── integer_sequence_algorithm.h
│ │ ├── jet.h
│ │ ├── jet_fwd.h
│ │ ├── jet_traits.h
│ │ ├── port.h
│ │ └── tiny_solver.h
│ ├── collections/
│ │ ├── bitset.hpp
│ │ └── projection.hpp
│ ├── core/
│ │ ├── aligned_allocator.hpp
│ │ ├── buildinfo.hpp.in
│ │ ├── comparison.hpp
│ │ ├── concepts.hpp
│ │ ├── constants.hpp
│ │ ├── contracts.hpp
│ │ ├── dataset.hpp
│ │ ├── dispatch.hpp
│ │ ├── distance.hpp
│ │ ├── individual.hpp
│ │ ├── node.hpp
│ │ ├── operator.hpp
│ │ ├── problem.hpp
│ │ ├── pset.hpp
│ │ ├── range.hpp
│ │ ├── subtree.hpp
│ │ ├── symbol_library.hpp
│ │ ├── tree.hpp
│ │ ├── types.hpp
│ │ ├── variable.hpp
│ │ └── version.hpp
│ ├── error_metrics/
│ │ ├── correlation_coefficient.hpp
│ │ ├── error_metrics.hpp
│ │ ├── mean_absolute_error.hpp
│ │ ├── mean_squared_error.hpp
│ │ ├── normalized_mean_squared_error.hpp
│ │ ├── r2_score.hpp
│ │ ├── root_mean_squared_error.hpp
│ │ └── sum_of_squared_errors.hpp
│ ├── formatter/
│ │ └── formatter.hpp
│ ├── hash/
│ │ ├── hash.hpp
│ │ ├── metrohash64.hpp
│ │ └── zobrist.hpp
│ ├── interpreter/
│ │ ├── backend/
│ │ │ ├── arma/
│ │ │ │ ├── derivatives.hpp
│ │ │ │ └── functions.hpp
│ │ │ ├── arma.hpp
│ │ │ ├── blaze/
│ │ │ │ ├── derivatives.hpp
│ │ │ │ └── functions.hpp
│ │ │ ├── blaze.hpp
│ │ │ ├── eigen/
│ │ │ │ ├── derivatives.hpp
│ │ │ │ └── functions.hpp
│ │ │ ├── eigen.hpp
│ │ │ ├── eve/
│ │ │ │ ├── derivatives.hpp
│ │ │ │ └── functions.hpp
│ │ │ ├── eve.hpp
│ │ │ ├── fast_approx/
│ │ │ │ ├── derivatives.hpp
│ │ │ │ ├── functions.hpp
│ │ │ │ └── impl/
│ │ │ │ ├── aq.hpp
│ │ │ │ ├── exp.hpp
│ │ │ │ ├── inv.hpp
│ │ │ │ ├── log.hpp
│ │ │ │ ├── pow.hpp
│ │ │ │ ├── sqrt.hpp
│ │ │ │ ├── tanh.hpp
│ │ │ │ └── trig.hpp
│ │ │ ├── fast_v1.hpp
│ │ │ ├── fast_v2.hpp
│ │ │ ├── fast_v3.hpp
│ │ │ ├── fastor/
│ │ │ │ ├── derivatives.hpp
│ │ │ │ └── functions.hpp
│ │ │ ├── fastor.hpp
│ │ │ ├── plain/
│ │ │ │ ├── derivatives.hpp
│ │ │ │ └── functions.hpp
│ │ │ ├── plain.hpp
│ │ │ ├── vdt/
│ │ │ │ ├── derivatives.hpp
│ │ │ │ └── functions.hpp
│ │ │ └── vdt.hpp
│ │ ├── derivatives.hpp
│ │ ├── dual.hpp
│ │ ├── functions.hpp
│ │ └── interpreter.hpp
│ ├── mdspan/
│ │ └── mdspan.hpp
│ ├── operators/
│ │ ├── creator.hpp
│ │ ├── crossover.hpp
│ │ ├── evaluator.hpp
│ │ ├── generator.hpp
│ │ ├── initializer.hpp
│ │ ├── local_search.hpp
│ │ ├── mutation.hpp
│ │ ├── non_dominated_sorter.hpp
│ │ ├── reinserter.hpp
│ │ └── selector.hpp
│ ├── optimizer/
│ │ ├── dynamic_cost_function.hpp
│ │ ├── likelihood/
│ │ │ ├── gaussian_likelihood.hpp
│ │ │ ├── likelihood_base.hpp
│ │ │ └── poisson_likelihood.hpp
│ │ ├── lm_cost_function.hpp
│ │ ├── optimizer.hpp
│ │ ├── solvers/
│ │ │ └── sgd.hpp
│ │ └── tiny_cost_function.hpp
│ ├── parser/
│ │ └── infix.hpp
│ └── random/
│ └── random.hpp
├── operon.nix
├── ports/
│ ├── aria-csv/
│ │ ├── portfile.cmake
│ │ └── vcpkg.json
│ ├── fluky/
│ │ ├── portfile.cmake
│ │ └── vcpkg.json
│ ├── infix-parser/
│ │ ├── portfile.cmake
│ │ └── vcpkg.json
│ ├── lbfgs/
│ │ ├── portfile.cmake
│ │ └── vcpkg.json
│ └── vstat/
│ ├── portfile.cmake
│ └── vcpkg.json
├── rtd/
│ ├── build.rst
│ ├── conf.py
│ ├── example.rst
│ ├── features.rst
│ ├── index.rst
│ └── requirements.txt
├── source/
│ ├── algorithms/
│ │ ├── gp.cpp
│ │ ├── nsga2.cpp
│ │ └── solution_archive.cpp
│ ├── core/
│ │ ├── dataset.cpp
│ │ ├── distance.cpp
│ │ ├── node.cpp
│ │ ├── pset.cpp
│ │ ├── tree.cpp
│ │ └── version.cpp
│ ├── formatter/
│ │ ├── dot.cpp
│ │ ├── infix.cpp
│ │ ├── postfix.cpp
│ │ └── tree.cpp
│ ├── hash/
│ │ ├── hash.cpp
│ │ ├── metrohash64.cpp
│ │ └── zobrist.cpp
│ ├── interpreter/
│ │ └── interpreter.cpp
│ ├── operators/
│ │ ├── creator/
│ │ │ ├── balanced.cpp
│ │ │ ├── creator.cpp
│ │ │ ├── koza.cpp
│ │ │ └── ptc2.cpp
│ │ ├── crossover.cpp
│ │ ├── evaluator.cpp
│ │ ├── evaluator_error_metrics.cpp
│ │ ├── generator/
│ │ │ ├── basic.cpp
│ │ │ ├── brood.cpp
│ │ │ ├── os.cpp
│ │ │ └── poly.cpp
│ │ ├── local_search.cpp
│ │ ├── mutation.cpp
│ │ ├── non_dominated_sorter/
│ │ │ ├── best_order_sort.cpp
│ │ │ ├── deductive_sort.cpp
│ │ │ ├── dominance_degree_sort.cpp
│ │ │ ├── efficient_sort.cpp
│ │ │ ├── hierarchical_sort.cpp
│ │ │ ├── merge_sort.cpp
│ │ │ ├── rank_intersect.cpp
│ │ │ └── rank_ordinal.cpp
│ │ └── selector/
│ │ ├── proportional.cpp
│ │ └── tournament.cpp
│ └── parser/
│ └── infix.cpp
├── test/
│ ├── CMakeLists.txt
│ └── source/
│ ├── implementation/
│ │ ├── autodiff.cpp
│ │ ├── crossover.cpp
│ │ ├── details.cpp
│ │ ├── dispatch_table.cpp
│ │ ├── error_metrics.cpp
│ │ ├── evaluation.cpp
│ │ ├── evaluator.cpp
│ │ ├── hashing.cpp
│ │ ├── infix_parser.cpp
│ │ ├── initialization.cpp
│ │ ├── mutation.cpp
│ │ ├── nondominatedsort.cpp
│ │ ├── optimizer.cpp
│ │ ├── random.cpp
│ │ ├── selection.cpp
│ │ └── zobrist.cpp
│ ├── operon_test.cpp
│ ├── operon_test.hpp
│ ├── performance/
│ │ ├── autodiff.cpp
│ │ ├── creator.cpp
│ │ ├── distance.cpp
│ │ ├── evaluation.cpp
│ │ ├── infix_parser.cpp
│ │ └── nondominatedsort.cpp
│ └── thirdparty/
│ ├── elki_stats.hpp
│ └── nanobench.h
├── tools/
│ ├── bench_ndsort.py
│ ├── benchmark_cache.py
│ └── compare_operon.py
└── vcpkg.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
---
Language: Cpp
# BasedOnStyle: WebKit
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: false
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: true
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: All
BreakBeforeBraces: WebKit
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 0
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: false
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: false
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: false
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: Inner
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 4
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Left
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 8
UseTab: Never
...
================================================
FILE: .clang-tidy
================================================
---
# Enable ALL the things! Except not really
# misc-non-private-member-variables-in-classes: the options don't do anything
Checks: "*,\
-google-readability-todo,\
-readability-identifier-length,\
-altera-unroll-loops,\
-fuchsia-*,\
fuchsia-multiple-inheritance,\
-llvm-header-guard,\
-llvm-include-order,\
-llvmlibc-*,\
-cppcoreguidelines-pro-bounds-pointer-arithmetic,\
-cppcoreguidelines-macro-usage,\
-cppcoreguidelines-owning-memory,\
-altera-struct-pack-align,\
-altera-id-dependent-backward-branch,\
-bugprone-easily-swappable-parameters,\
-boost-use-ranges,\
-modernize-use-ranges,\
-misc-non-private-member-variables-in-classes"
WarningsAsErrors: ''
CheckOptions:
- key: 'bugprone-argument-comment.StrictMode'
value: 'true'
# Prefer using enum classes with 2 values for parameters instead of bools
- key: 'bugprone-argument-comment.CommentBoolLiterals'
value: 'true'
- key: 'bugprone-misplaced-widening-cast.CheckImplicitCasts'
value: 'true'
- key: 'bugprone-sizeof-expression.WarnOnSizeOfIntegerExpression'
value: 'true'
- key: 'bugprone-suspicious-string-compare.WarnOnLogicalNotComparison'
value: 'true'
- key: 'readability-simplify-boolean-expr.ChainedConditionalReturn'
value: 'true'
- key: 'readability-simplify-boolean-expr.ChainedConditionalAssignment'
value: 'true'
- key: 'readability-uniqueptr-delete-release.PreferResetCall'
value: 'true'
- key: 'cppcoreguidelines-init-variables.MathHeader'
value: '<cmath>'
- key: 'cppcoreguidelines-narrowing-conversions.PedanticMode'
value: 'true'
- key: 'readability-else-after-return.WarnOnUnfixable'
value: 'true'
- key: 'readability-else-after-return.WarnOnConditionVariables'
value: 'true'
- key: 'readability-inconsistent-declaration-parameter-name.Strict'
value: 'true'
- key: 'readability-qualified-auto.AddConstToQualified'
value: 'true'
- key: 'readability-redundant-access-specifiers.CheckFirstDeclaration'
value: 'true'
# These seem to be the most common identifier styles
- key: 'readability-identifier-naming.AbstractClassCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.ClassCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.ClassConstantCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.ClassMemberCase'
value: 'camelBack'
- key: 'readability-identifier-naming.ClassMethodCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.ConstantCase'
value: 'camelBack'
- key: 'readability-identifier-naming.ConstantMemberCase'
value: 'camelBack'
- key: 'readability-identifier-naming.ConstantParameterCase'
value: 'camelBack'
- key: 'readability-identifier-naming.ConstantPointerParameterCase'
value: 'camelBack'
- key: 'readability-identifier-naming.ConstexprFunctionCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.ConstexprMethodCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.ConstexprVariableCase'
value: 'aNy_CasE'
- key: 'readability-identifier-naming.EnumCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.EnumConstantCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.FunctionCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.GlobalConstantCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.GlobalConstantPointerCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.GlobalFunctionCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.GlobalPointerCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.GlobalVariableCase'
value: 'camelBack'
- key: 'readability-identifier-naming.InlineNamespaceCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.LocalConstantCase'
value: 'camelBack'
- key: 'readability-identifier-naming.LocalConstantPointerCase'
value: 'camelBack'
- key: 'readability-identifier-naming.LocalPointerCase'
value: 'camelBack'
- key: 'readability-identifier-naming.LocalVariableCase'
value: 'camelBack'
- key: 'readability-identifier-naming.MacroDefinitionCase'
value: 'UPPER_CASE'
- key: 'readability-identifier-naming.MemberCase'
value: 'camelBack'
- key: 'readability-identifier-naming.MethodCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.NamespaceCase'
value: 'aNy_CasE'
- key: 'readability-identifier-naming.ParameterCase'
value: 'camelBack'
- key: 'readability-identifier-naming.ParameterPackCase'
value: 'camelBack'
- key: 'readability-identifier-naming.PointerParameterCase'
value: 'camelBack'
- key: 'readability-identifier-naming.PrivateMemberCase'
value: 'camelBack'
- key: 'readability-identifier-naming.PrivateMemberSuffix'
value: '_'
- key: 'readability-identifier-naming.PrivateMethodCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.ProtectedMemberCase'
value: 'camelBack'
- key: 'readability-identifier-naming.ProtectedMemberSuffix'
value: '_'
- key: 'readability-identifier-naming.ProtectedMethodCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.PublicMemberCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.PublicMethodCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.ScopedEnumConstantCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.StaticConstantCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.StaticVariableCase'
value: 'camelBack'
- key: 'readability-identifier-naming.StructCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.TemplateParameterCase'
value: 'camelBack'
- key: 'readability-identifier-naming.TemplateTemplateParameterCase'
value: 'camelBack'
- key: 'readability-identifier-naming.TypeAliasCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.TypedefCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.TypeTemplateParameterCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.UnionCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.ValueTemplateParameterCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.VariableCase'
value: 'camelBack'
- key: 'readability-identifier-naming.VirtualMethodCase'
value: 'CamelCase'
...
================================================
FILE: .codespellrc
================================================
[codespell]
builtin = clear,rare,en-GB_to_en-US,names,informal,code
check-filenames =
check-hidden =
skip = */.git,*/build
quiet-level = 2
================================================
FILE: .envrc
================================================
use flake . --builders ''
================================================
FILE: .github/workflows/build-linux.yml
================================================
name: build-linux
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: Release
jobs:
build:
# The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
# You can convert this to a matrix build if you need cross-platform coverage.
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
runs-on: ubuntu-latest
if: github.ref_name == 'main'
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v27
- name: Build
working-directory: ${{github.workspace}}
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: nix build
================================================
FILE: .github/workflows/build-macos.yml
================================================
name: build-macos
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: Release
jobs:
build:
# The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
# You can convert this to a matrix build if you need cross-platform coverage.
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
runs-on: macos-14
if: github.ref_name == 'main'
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v27
- name: Build
working-directory: ${{github.workspace}}
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: nix build
================================================
FILE: .github/workflows/build-windows.yml
================================================
name: build-windows
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: Release
jobs:
build:
# The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
# You can convert this to a matrix build if you need cross-platform coverage.
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: lukka/run-vcpkg@v10
with:
vcpkgGitCommitId: '43e35945783d078d1216927b85447b2eba34a7cc'
- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: cmake --preset build-windows-vcpkg -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_CLI_PROGRAMS=ON -DBUILD_TESTING=OFF
- name: Build
# Build your program with the given configuration
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -t operon_operon
================================================
FILE: .github/workflows/ci.yml
================================================
name: Continuous Integration
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with: { python-version: "3.8" }
- name: Install codespell
run: pip3 install codespell
- name: Lint
run: cmake -D FORMAT_COMMAND=clang-format-11 -P cmake/lint.cmake
- name: Spell check
if: always()
run: cmake -P cmake/spell.cmake
coverage:
needs: [lint]
runs-on: ubuntu-latest
# To enable coverage, go to https://codecov.io/, acquire a token, put it
# into your secrets (Settings > Secrets > New repository secret), delete
# the last line from the conditional below and edit the "<name>"
# placeholder to your GitHub name.
# If you do not wish to use codecov, then simply delete this job from the
# workflow.
if: github.repository_owner == '<name>'
&& false
steps:
- uses: actions/checkout@v2
- name: Install LCov
run: sudo apt-get update -q
&& sudo apt-get install lcov -q -y
- name: Configure
run: cmake --preset=ci-coverage
- name: Build
run: cmake --build build/coverage -j 2
- name: Test
working-directory: build/coverage
run: ctest --output-on-failure -j 2
- name: Process coverage info
run: cmake --build build/coverage -t coverage
- name: Submit to codecov.io
uses: codecov/codecov-action@v1
with:
file: build/coverage/coverage.info
sanitize:
needs: [lint]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Configure
env: { CXX: clang++-11 }
run: cmake --preset=ci-sanitize
- name: Build
run: cmake --build build/sanitize -j 2
- name: Test
working-directory: build/sanitize
env:
ASAN_OPTIONS: "strict_string_checks=1:\
detect_stack_use_after_return=1:\
check_initialization_order=1:\
strict_init_order=1:\
detect_leaks=1"
UBSAN_OPTIONS: print_stacktrace=1
run: ctest --output-on-failure -j 2
test:
needs: [lint]
strategy:
matrix:
os: [macos, ubuntu, windows]
type: [shared, static]
include:
- { type: shared, shared: YES }
- { type: static, shared: NO }
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v2
- name: Install static analyzers
if: matrix.os == 'ubuntu'
run: sudo apt-get install clang-tidy cppcheck -y -q
- name: Configure
run: cmake --preset=ci-${{ matrix.os }}
-D BUILD_SHARED_LIBS=${{ matrix.shared }}
- name: Build
run: cmake --build build --config Release -j 2
- name: Install
run: cmake --install build --config Release --prefix prefix
- name: Test
working-directory: build
run: ctest --output-on-failure -C Release -j 2
docs:
# Deploy docs only when builds succeed
needs: [sanitize, test]
runs-on: ubuntu-latest
# To enable, first you have to create an orphaned gh-pages branch:
#
# git switch --orphan gh-pages
# git commit --allow-empty -m "Initial commit"
# git push -u origin gh-pages
#
# Edit the <name> placeholder below to your GitHub name, so this action
# runs only in your repository and no one else's fork. After these, delete
# this comment and the last line in the conditional below.
# If you do not wish to use GitHub Pages for deploying documentation, then
# simply delete this job similarly to the coverage one.
if: github.ref == 'refs/heads/cpp20'
&& github.event_name == 'push'
&& github.repository_owner == '<name>'
&& false
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with: { python-version: "3.8" }
- name: Install m.css dependencies
run: pip3 install jinja2 Pygments
- name: Install Doxygen
run: sudo apt-get update -q
&& sudo apt-get install doxygen -q -y
- name: Build docs
run: cmake -B build -D "CMAKE_PROJECT_INCLUDE=$PWD/cmake/docs.cmake"
&& cmake --build build --target docs
- name: Deploy docs
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: build/docs/html
================================================
FILE: .github/workflows/test-linux.yml
================================================
name: tests
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v27
- name: Configure
run: nix develop -c cmake --preset build-linux -B build -DUSE_SINGLE_PRECISION=ON -Doperon_DEVELOPER_MODE=ON
- name: Build test binary
run: nix develop -c cmake --build build --target operon_test -j4
- name: Run tests
run: nix develop -c ctest --test-dir build --output-on-failure -j4
================================================
FILE: .gitignore
================================================
.DS_Store
.idea/
.vs/
.vscode/
.cache/
build*/
cmake/open-cpp-coverage.cmake
cmake-build-*/
prefix/
CMakeLists.txt.user
CMakeUserPresets.json
project-include-after.cmake
.direnv
================================================
FILE: .readthedocs.yml
================================================
# .readthedocs.yml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Set the version of Python and other tools you might need
build:
os: ubuntu-22.04
tools:
python: "3.11"
# Build documentation in the docs/ directory with Sphinx
sphinx:
configuration: rtd/conf.py
# Build documentation with MkDocs
#mkdocs:
# configuration: mkdocs.yml
# Optionally build your docs in additional formats such as PDF and ePub
formats: all
# Optionally set the version of Python and requirements required to build your docs
python:
install:
- requirements: rtd/requirements.txt
================================================
FILE: BUILDING.md
================================================
# Building with CMake
## Build
This project doesn't require any special command-line flags to build to keep
things simple.
### Using nix
The recommended way to build operon is to use nix package manager.
```sh
nix develop --extra-experimental-features nix-command --extra-experimental-features flakes
```
It downloads the required packages in the correct version (as specified in flake.nix) and starts a 'nix develop' shell.
Here are the steps for building in release mode with a single-configuration
generator, like the Unix Makefiles one:
```sh
cmake -S . -B build -D CMAKE_BUILD_TYPE=Release
cmake --build build
```
Here are the steps for building in release mode with a multi-configuration
generator, like the Visual Studio ones:
```sh
cmake -S . -B build
cmake --build build --config Release
```
### Using vcpkg
Alternatively you can use vcpkg.
You require cmake version >= 3.20 because we are using vcpkg ports.
You can install a recent cmake version via vckpg:
```sh
./vcpkg install vcpkg-cmake
```
After installation of this cmake version you can use it with the following options:
```sh
.<vcpkg-dir>/downloads/tools/cmake-3.21.1-linux/cmake-3.21.1-linux-x86_64/bin/cmake \
--preset build-ubuntu-vcpkg -S . -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake
```
Additional build flags such as ```-DBUILD_CLI_PROGRAMS=ON -DUSE_SINGLE_PRECISION=ON -DUSE_OPENLIBM=ON``` may be added to the command.
## Install
This project doesn't require any special command-line flags to install to keep
things simple. As a prerequisite, the project has to be built with the above
commands already.
The below commands require at least CMake 3.15 to run, because that is the
version in which [Install a Project][1] was added.
Here is the command for installing the release mode artifacts with a
single-configuration generator, like the Unix Makefiles one:
```sh
cmake --install build
```
Here is the command for installing the release mode artifacts with a
multi-configuration generator, like the Visual Studio ones:
```sh
cmake --install build --config Release
```
[1]: https://cmake.org/cmake/help/latest/manual/cmake.1.html#install-a-project
================================================
FILE: CMakeLists.txt
================================================
# SPDX-License-Identifier: MIT
# SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research
cmake_minimum_required(VERSION 3.20)
include(cmake/prelude.cmake)
project(
operon
VERSION 0.3.1
DESCRIPTION "Fast and scalable genetic programming library for symbolic regression."
HOMEPAGE_URL "https://operongp.readthedocs.io/en/latest/"
LANGUAGES CXX
)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
docs_early_return()
include(cmake/project-is-top-level.cmake)
include(cmake/variables.cmake)
# ---- Attempt to get revision information from git ----
find_package(Git) # retrieve revision number for version info
if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
include(cmake/get-git-revision.cmake)
EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD OUTPUT_VARIABLE SHORT_SHA OUTPUT_STRIP_TRAILING_WHITESPACE)
SET(REVISION ${SHORT_SHA} CACHE STRING "git short sha" FORCE)
# only use the plugin to tie the configure state to the sha to force rebuilds
# of files that depend on version.h
get_git_head_revision(REFSPEC COMMITHASH.cmake)
else()
message(WARNING "Git not found, cannot set version info")
SET(REVISION "unknown")
endif()
# ---- Declare library ----
add_library(
operon_operon
source/algorithms/gp.cpp
source/algorithms/nsga2.cpp
source/algorithms/solution_archive.cpp
source/core/dataset.cpp
source/core/distance.cpp
source/core/node.cpp
source/core/pset.cpp
source/core/tree.cpp
source/core/version.cpp
source/formatter/dot.cpp
source/formatter/infix.cpp
source/formatter/postfix.cpp
source/formatter/tree.cpp
source/hash/hash.cpp
source/hash/metrohash64.cpp
source/hash/zobrist.cpp
source/interpreter/interpreter.cpp
source/operators/creator/creator.cpp
source/operators/creator/balanced.cpp
source/operators/creator/koza.cpp
source/operators/creator/ptc2.cpp
source/operators/crossover.cpp
source/operators/evaluator_error_metrics.cpp
source/operators/evaluator.cpp
source/operators/generator/basic.cpp
source/operators/generator/brood.cpp
source/operators/generator/os.cpp
source/operators/generator/poly.cpp
source/operators/local_search.cpp
source/operators/mutation.cpp
source/operators/non_dominated_sorter/best_order_sort.cpp
source/operators/non_dominated_sorter/deductive_sort.cpp
source/operators/non_dominated_sorter/dominance_degree_sort.cpp
source/operators/non_dominated_sorter/efficient_sort.cpp
source/operators/non_dominated_sorter/hierarchical_sort.cpp
source/operators/non_dominated_sorter/merge_sort.cpp
source/operators/non_dominated_sorter/rank_intersect.cpp
source/operators/non_dominated_sorter/rank_ordinal.cpp
source/operators/selector/proportional.cpp
source/operators/selector/tournament.cpp
source/parser/infix.cpp
)
add_library(operon::operon ALIAS operon_operon)
# ---- Required dependencies ----
find_package(AriaCsvParser REQUIRED)
find_package(cpp-sort REQUIRED)
find_package(Eigen3 REQUIRED)
find_package(eve REQUIRED)
find_package(FastFloat REQUIRED)
find_package(fluky REQUIRED)
find_package(fmt REQUIRED)
find_package(gtl REQUIRED)
find_package(lbfgs REQUIRED)
find_package(libassert REQUIRED)
find_package(mdspan REQUIRED)
find_package(Microsoft.GSL CONFIG REQUIRED)
find_package(infix-parser REQUIRED)
find_package(Taskflow REQUIRED)
find_package(Threads REQUIRED)
find_package(tl-expected REQUIRED)
find_package(unordered_dense REQUIRED)
find_package(vstat REQUIRED)
find_package(xxHash)
if(xxHash_FOUND)
target_link_libraries(operon_operon PRIVATE xxHash::xxhash)
else()
find_package(PkgConfig REQUIRED)
pkg_check_modules(xxhash IMPORTED_TARGET xxhash)
if (NOT xxhash_FOUND)
pkg_check_modules(xxhash IMPORTED_TARGET libxxhash)
endif()
if(xxhash_FOUND)
target_link_libraries(operon_operon PRIVATE PkgConfig::xxhash)
else()
message(FATAL_ERROR "xxHash dependency could not be found.")
endif()
endif()
# ---- Optional dependencies
set(HAVE_CERES FALSE)
if (USE_CERES)
find_package(Ceres) # use the Ceres optimizer for coefficients tuning
if (Ceres_FOUND)
set(HAVE_CERES TRUE)
endif()
else()
set(Ceres_VERSION "n/a")
endif()
if (USE_JEMALLOC)
find_package(PkgConfig)
if(PkgConfig_FOUND)
pkg_check_modules(jemalloc IMPORTED_TARGET jemalloc)
if (jemalloc_FOUND)
target_link_libraries(operon_operon PUBLIC PkgConfig::jemalloc)
endif()
endif()
endif()
if(NOT MATH_BACKEND)
set(MATH_BACKEND "Eigen")
endif()
message(STATUS "MATH: ${MATH_BACKEND}")
if (MATH_BACKEND STREQUAL "Arma")
find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)
find_package(Armadillo REQUIRED)
target_link_libraries(operon_operon PUBLIC BLAS::BLAS LAPACK::LAPACK ${ADMADILLO_LIBRARIES})
target_compile_definitions(operon_operon PUBLIC OPERON_MATH_ARMA)
elseif (MATH_BACKEND STREQUAL "Blaze")
find_package(blaze REQUIRED)
find_package(xsimd REQUIRED)
target_link_libraries(operon_operon INTERFACE xsimd)
target_compile_definitions(operon_operon PUBLIC OPERON_MATH_BLAZE BLAZE_USE_SHARED_MEMORY_PARALLELIZATION=0 BLAZE_USE_XSIMD=1 EIGEN_DONT_PARALLELIZE)
elseif (MATH_BACKEND STREQUAL "Fastor")
find_package(Fastor REQUIRED)
find_package(sleef REQUIRED)
target_link_libraries(operon_operon PUBLIC Fastor::Fastor sleef::sleef)
target_compile_definitions(operon_operon PUBLIC OPERON_MATH_FASTOR FASTOR_USE_SLEEF_U35)
elseif (MATH_BACKEND STREQUAL "Eve")
target_compile_definitions(operon_operon PUBLIC OPERON_MATH_EVE)
elseif (MATH_BACKEND STREQUAL "Vdt")
find_package(vdt REQUIRED)
target_link_libraries(operon_operon PUBLIC vdt::vdt)
target_compile_definitions(operon_operon PUBLIC OPERON_MATH_VDT)
elseif (MATH_BACKEND STREQUAL "Eigen")
message(STATUS "Using Eigen backend")
target_compile_definitions(operon_operon PUBLIC OPERON_MATH_EIGEN EIGEN_DONT_PARALLELIZE)
elseif(MATH_BACKEND STREQUAL "Stl")
target_compile_definitions(operon_operon PUBLIC OPERON_MATH_STL)
elseif (MATH_BACKEND STREQUAL "Fast_v1")
target_compile_definitions(operon_operon PUBLIC OPERON_MATH_FAST_V1)
elseif (MATH_BACKEND STREQUAL "Fast_v2")
target_compile_definitions(operon_operon PUBLIC OPERON_MATH_FAST_V2)
elseif (MATH_BACKEND STREQUAL "Fast_v3")
target_compile_definitions(operon_operon PUBLIC OPERON_MATH_FAST_V3)
endif()
# print summary of enabled/disabled features
feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:" QUIET_ON_EMPTY)
feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:" QUIET_ON_EMPTY)
include(GenerateExportHeader)
generate_export_header(
operon_operon
BASE_NAME operon
EXPORT_FILE_NAME export/operon/operon_export.hpp
CUSTOM_CONTENT_FROM_VARIABLE pragma_suppress_c4251
)
# ---- Timestamp the current build ----
string(TIMESTAMP OPERON_BUILD_TIMESTAMP "%Y-%m-%dT%H:%M:%SZ")
# ---- Add build information ----
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/operon/core/buildinfo.hpp.in
${CMAKE_BINARY_DIR}/buildinfo.hpp)
if(NOT BUILD_SHARED_LIBS)
target_compile_definitions(operon_operon PUBLIC OPERON_STATIC_DEFINE)
endif()
set_target_properties(
operon_operon PROPERTIES
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN YES
VERSION "${PROJECT_VERSION}"
SOVERSION "${PROJECT_VERSION_MAJOR}"
EXPORT_NAME operon
OUTPUT_NAME operon
)
target_include_directories(
operon_operon ${operon_warning_guard}
PUBLIC
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
)
target_include_directories(
operon_operon SYSTEM
PUBLIC
"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/export>"
)
target_include_directories(
operon_operon PRIVATE
"${PROJECT_BINARY_DIR}"
)
if(Ceres_FOUND AND USE_CERES)
endif()
target_link_libraries(operon_operon INTERFACE
eve::eve # required by vstat
)
target_link_libraries(operon_operon PUBLIC
Eigen3::Eigen
Threads::Threads
fluky::fluky
fmt::fmt
lbfgs::lbfgs
libassert::assert
infix-parser::infix-parser # required by infix parser
std::mdspan
vstat::vstat
)
target_link_libraries(operon_operon PRIVATE
AriaCsvParser::AriaCsvParser
Taskflow::Taskflow
cpp-sort::cpp-sort
unordered_dense::unordered_dense
gtl::gtl
tl::expected
)
if (USE_CERES AND Ceres_FOUND)
target_link_libraries(operon_operon PUBLIC Ceres::ceres)
endif()
target_compile_features(operon_operon PUBLIC cxx_std_20)
if(MSVC)
target_compile_options(operon_operon PRIVATE "/std:c++latest")
else()
if (UNIX AND NOT APPLE)
target_link_options(operon_operon PRIVATE "-Wl,--no-undefined")
endif()
target_compile_options(operon_operon PRIVATE "-fno-math-errno")
endif()
target_compile_definitions(operon_operon PUBLIC
"$<$<BOOL:${USE_SINGLE_PRECISION}>:USE_SINGLE_PRECISION>"
"$<$<BOOL:${HAVE_CERES}>:HAVE_CERES>"
)
# ---- Install rules ----
if(NOT CMAKE_SKIP_INSTALL_RULES)
include(cmake/install-rules.cmake)
endif()
# ---- Command-line programs ----
if(PROJECT_IS_TOP_LEVEL)
option(BUILD_CLI_PROGRAMS "Build command-line programs." TRUE)
if (BUILD_CLI_PROGRAMS)
add_subdirectory(cli)
endif()
endif()
# ---- Examples ----
if(PROJECT_IS_TOP_LEVEL)
option(BUILD_EXAMPLES "Build examples tree." "${operon_DEVELOPER_MODE}")
if(BUILD_EXAMPLES)
add_subdirectory(example)
endif()
endif()
# ---- Developer mode ----
if(NOT operon_DEVELOPER_MODE)
return()
elseif(NOT PROJECT_IS_TOP_LEVEL)
message(
AUTHOR_WARNING
"Developer mode is intended for developers of operon"
)
endif()
include(cmake/dev-mode.cmake)
================================================
FILE: CMakePresets.json
================================================
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"configurePresets": [
{
"name": "cmake-pedantic",
"hidden": true,
"warnings": {
"dev": true,
"deprecated": true,
"uninitialized": true,
"unusedCli": true,
"systemVars": false
},
"errors": {
"dev": true,
"deprecated": true
}
},
{
"name": "dev-mode",
"hidden": true,
"inherits": "cmake-pedantic",
"cacheVariables": {
"operon_DEVELOPER_MODE": "ON"
}
},
{
"name": "cppcheck",
"hidden": true,
"cacheVariables": {
"CMAKE_CXX_CPPCHECK": "cppcheck;--inline-suppr"
}
},
{
"name": "clang-tidy",
"hidden": true,
"cacheVariables": {
"CMAKE_CXX_CLANG_TIDY": "clang-tidy;--header-filter=${sourceDir}/* -test/source/thirdparty/*"
}
},
{
"name": "cpp-std",
"description": "This preset makes sure the project actually builds with at least the specified standard",
"hidden": true,
"cacheVariables": {
"CMAKE_CXX_EXTENSIONS": "OFF",
"CMAKE_CXX_STANDARD": "20",
"CMAKE_CXX_STANDARD_REQUIRED": "ON"
}
},
{
"name": "cpp-build",
"hidden": true,
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXX_WARNINGS} $env{CXX_OPT}",
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "build-windows",
"hidden": false,
"cacheVariables": {
"CMAKE_CXX_FLAGS": "/W4 /permissive- /utf-8 /volatile:iso /EHsc /Zc:__cplusplus /Zc:throwingNew"
}
},
{
"name": "build-linux",
"generator": "Unix Makefiles",
"hidden": false,
"inherits": ["cpp-std", "cpp-build"],
"environment": {
"CXX_WARNINGS": "-Wall -Wextra -Werror -pedantic",
"CXX_OPT": "-fsized-deallocation -fno-math-errno -march=x86-64-v3"
}
},
{
"name": "build-osx",
"generator": "Unix Makefiles",
"hidden": false,
"inherits": ["cpp-std", "cpp-build"],
"environment": {
"CXX_WARNINGS": "-Wall -Wextra -pedantic",
"CXX_OPT": "-fsized-deallocation -fno-math-errno"
}
}
]
}
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Code of Conduct
* You will be judged by your contributions first, and your sense of humor
second.
* Nobody owes you anything.
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
<!--
Short overview, rules, general guidelines, notes about pull requests and
style should go here.
-->
## Code of Conduct
Please see the [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) document.
## Getting started
Helpful notes for developers can be found in the [`HACKING.md`](HACKING.md)
document.
In addition to he above, if you use the presets file as instructed, then you
should NOT check it into source control, just as the CMake documentation
suggests.
================================================
FILE: HACKING.md
================================================
# Hacking
Here is some wisdom to help you build and test this project as a developer and
potential contributor.
If you plan to contribute, please read the [CONTRIBUTING](CONTRIBUTING.md)
guide.
## Developer mode
Build system targets that are only useful for developers of this project are
hidden if the `operon_DEVELOPER_MODE` option is disabled. Enabling this
option makes tests and other developer targets and options available. Not
enabling this option means that you are a consumer of this project and thus you
have no need for these targets and options.
Developer mode is always set to on in CI workflows.
### Presets
This project makes use of [presets][1] to simplify the process of configuring
the project. As a developer, you are recommended to always have the [latest
CMake version][2] installed to make use of the latest Quality-of-Life
additions.
You have a few options to pass `operon_DEVELOPER_MODE` to the configure
command, but this project prefers to use presets.
As a developer, you should create a `CMakeUserPresets.json` file at the root of
the project:
```json
{
"version": 1,
"cmakeMinimumRequired": {
"major": 3,
"minor": 14,
"patch": 0
},
"configurePresets": [
{
"name": "dev",
"binaryDir": "${sourceDir}/build/dev",
"inherits": ["dev-mode", "ci-<os>"]
}
]
}
```
You should replace `<os>` in your newly created presets file with the name of
the operating system you have, which may be `win64` or `unix`. You can see what
these correspond to in the [`CMakePresets.json`](CMakePresets.json) file.
`CMakeUserPresets.json` is also the perfect place in which you can put all
sorts of things that you would otherwise want to pass to the configure command
in the terminal.
### Configure, build and test
If you followed the above instructions, then you can configure, build and test
the project respectively with the following commands from the project root on
Windows:
```sh
cmake --preset=dev
cmake --build build/dev --config Release
cd build/dev && ctest -C Release
```
And here is the same on a Unix based system (Linux, macOS):
```sh
cmake --preset=dev
cmake --build build/dev
cd build/dev && ctest
```
[1]: https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html
[2]: https://cmake.org/download/
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2019-2022 Heal Research
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
<picture>
<source media="(prefers-color-scheme: dark)" srcset="./rtd/_static/logo_mini_dark.png">
<source media="(prefers-color-scheme: light)" srcset="./rtd/_static/logo_mini_light.png">
<img src="./rtd/_static/logo_mini.png" height="80px" />
</picture>
<br/>
# Modern C++ framework for Symbolic Regression
[](https://github.com/heal-research/operon/blob/master/LICENSE)
[](https://github.com/heal-research/operon/actions/workflows/build-linux.yml)
[](https://github.com/heal-research/operon/actions/workflows/test-linux.yml)
[](https://github.com/heal-research/operon/actions/workflows/build-macos.yml)
[](https://github.com/heal-research/operon/actions/workflows/build-windows.yml)
[](https://operongp.readthedocs.io/en/latest/?badge=latest)
[](https://matrix.to/#/#operon:matrix.org)
*Operon* is a modern C++ framework for [symbolic regression](https://en.wikipedia.org/wiki/Symbolic_regression) that uses [genetic programming](https://en.wikipedia.org/wiki/Genetic_programming) to explore a hypothesis space of possible mathematical expressions in order to find the best-fitting model for a given [regression target](https://en.wikipedia.org/wiki/Regression_analysis).
Its main purpose is to help develop accurate and interpretable white-box models in the area of [system identification](https://en.wikipedia.org/wiki/System_identification). More in-depth documentation available at https://operongp.readthedocs.io/.
## How does it work?
Broadly speaking, genetic programming (GP) is said to evolve a population of "computer programs" ― [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree)-like structures encoding behavior for a given problem domain ― following the principles of [natural selection](https://en.wikipedia.org/wiki/Natural_selection). It repeatedly combines random program parts keeping only the best results ― the "fittest". Here, the biological concept of [fitness](https://en.wikipedia.org/wiki/Survival_of_the_fittest) is defined as a measure of a program's ability to solve a certain task.
In symbolic regression, the programs represent mathematical expressions typically encoded as [expression trees](https://en.wikipedia.org/wiki/Binary_expression_tree). Fitness is usually defined as [goodness of fit](https://en.wikipedia.org/wiki/Goodness_of_fit) between the dependent variable and the prediction of a tree-encoded model. Iterative selection of best-scoring models followed by random recombination leads naturally to a self-improving process that is able to uncover patterns in the data:
<p align="center">
<img src="./rtd/_static/evo.gif" />
</p>
## Build instructions
The project requires CMake and a compiler supporting C++20. The recommended way to build Operon is via either [nix](https://github.com/NixOS/nix) or [vcpkg](https://github.com/microsoft/vcpkg).
Check out [https://github.com/heal-research/operon/blob/master/BUILDING.md](BUILDING.md) for detailed build instructions and how to enable/disable certain features.
### Nix
First, you have to [install nix](https://nixos.org/download.html) and [enable flakes](https://nixos.wiki/wiki/Flakes).
For a portable install, see [nix-portable](https://github.com/DavHau/nix-portable).
To create a development shell:
```
nix develop github:heal-research/operon --no-write-lock-file
```
To build Operon (a symlink to the nix store called `result` will be created).
```
nix build github:heal-research/operon --no-write-lock-file
```
### Vcpkg
Select the build generator appropriate for your system and point CMake to the `vcpkg.cmake` toolchain file
```
cmake -S . -B build -G "Visual Studio 16 2019" -A x64 \
-DCMAKE_TOOLCHAIN_FILE=..\vcpkg\scripts\buildsystems\vcpkg.cmake \
-DVCPKG_OVERLAY_PORTS=.\ports
```
The file `CMakePresets.json` contains some presets that you may find useful. For using `clang-cl` instead of `cl`, pass `-TClangCL` to the above ([official documentation](https://docs.microsoft.com/en-us/cpp/build/clang-support-cmake?view=msvc-170)).
## Python wrapper
Python bindings for the Operon library are available as a separate project: [PyOperon](https://github.com/heal-research/pyoperon), which also includes a [scikit-learn](https://scikit-learn.org/stable/index.html) compatible regressor.
## Bibtex info
If you find _Operon_ useful you can cite our work as:
```
@inproceedings{10.1145/3377929.3398099,
author = {Burlacu, Bogdan and Kronberger, Gabriel and Kommenda, Michael},
title = {Operon C++: An Efficient Genetic Programming Framework for Symbolic Regression},
year = {2020},
isbn = {9781450371278},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3377929.3398099},
doi = {10.1145/3377929.3398099},
booktitle = {Proceedings of the 2020 Genetic and Evolutionary Computation Conference Companion},
pages = {1562–1570},
numpages = {9},
keywords = {symbolic regression, genetic programming, C++},
location = {Canc\'{u}n, Mexico},
series = {GECCO '20}
}
```
_Operon_ was also featured in a recent survey of symbolic regression methods, where it showed good results:
```
@article{DBLP:journals/corr/abs-2107-14351,
author = {William G. La Cava and
Patryk Orzechowski and
Bogdan Burlacu and
Fabr{\'{\i}}cio Olivetti de Fran{\c{c}}a and
Marco Virgolin and
Ying Jin and
Michael Kommenda and
Jason H. Moore},
title = {Contemporary Symbolic Regression Methods and their Relative Performance},
journal = {CoRR},
volume = {abs/2107.14351},
year = {2021},
url = {https://arxiv.org/abs/2107.14351},
eprinttype = {arXiv},
eprint = {2107.14351},
timestamp = {Tue, 03 Aug 2021 14:53:34 +0200},
biburl = {https://dblp.org/rec/journals/corr/abs-2107-14351.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
```
================================================
FILE: cli/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.20)
project(operonCli LANGUAGES CXX)
include(../cmake/project-is-top-level.cmake)
include(../cmake/windows-set-path.cmake)
if (PROJECT_IS_TOP_LEVEL)
find_package(operon REQUIRED)
endif()
find_package(cxxopts REQUIRED)
find_package(scn REQUIRED)
function(add_operon_cli NAME)
add_executable(${NAME}
source/${NAME}.cpp
source/operator_factory.cpp
source/pareto_front.cpp
source/util.cpp
)
target_link_libraries(${NAME} PRIVATE operon::operon cxxopts::cxxopts scn::scn)
target_compile_features(${NAME} PRIVATE cxx_std_20)
set_target_properties(${NAME} PROPERTIES
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN YES
)
if(MSVC)
target_compile_options(${NAME} PRIVATE "/std:c++latest")
else()
if (UNIX AND NOT APPLE)
target_link_options(${NAME} PRIVATE "-Wl,--no-undefined")
endif()
endif()
install(TARGETS ${NAME}
RUNTIME
COMPONENT operonCli_Runtime
DESTINATION "${CMAKE_INSTALL_BINDIR}"
)
endfunction()
add_operon_cli(operon_gp)
add_operon_cli(operon_nsgp)
add_operon_cli(operon_parse_model)
================================================
FILE: cli/source/operator_factory.cpp
================================================
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research
#include "operator_factory.hpp"
#include <stdexcept> // for runtime_error
#include <fmt/format.h> // for format
#include <scn/scan.h>
#include "operon/operators/creator.hpp" // for CreatorBase, BalancedTreeC...
#include "operon/operators/evaluator.hpp" // for Evaluator, EvaluatorBase
#include "operon/operators/generator.hpp" // for OffspringGeneratorBase
#include "operon/operators/reinserter.hpp" // for OffspringGeneratorBase
#include "operon/operators/selector.hpp"
#include "operon/operators/local_search.hpp"
#include "operon/optimizer/optimizer.hpp"
#include <cxxopts.hpp>
namespace Operon { class PrimitiveSet; }
namespace Operon { class Problem; }
namespace Operon { struct CrossoverBase; }
namespace Operon { struct MutatorBase; }
namespace Operon { struct Variable; }
namespace Operon {
namespace detail {
auto GetErrorString(std::string const& name, std::string const& arg) {
return fmt::format("unable to parse {} argument '{}'", name, arg);
}
} // namespace detail
auto ParseReinserter(std::string const& str, ComparisonCallback&& comp) -> std::unique_ptr<ReinserterBase>
{
std::unique_ptr<ReinserterBase> reinserter;
if (str == "keep-best") {
reinserter = std::make_unique<KeepBestReinserter>(std::move(comp));
} else if (str == "replace-worst") {
reinserter = std::make_unique<ReplaceWorstReinserter>(std::move(comp));
} else {
throw std::invalid_argument(detail::GetErrorString("reinserter", str));
}
return reinserter;
}
auto ParseSelector(std::string const& str, ComparisonCallback&& comp) -> std::unique_ptr<Operon::SelectorBase>
{
auto tok = Split(str, ':');
auto name = tok[0];
std::unique_ptr<Operon::SelectorBase> selector;
constexpr size_t defaultTournamentSize{5};
if (name == "tournament") {
selector = std::make_unique<Operon::TournamentSelector>(std::move(comp));
size_t tournamentSize{defaultTournamentSize};
if (tok.size() > 1) {
auto result = scn::scan<std::size_t>(tok[1], "{}");
ENSURE(result);
tournamentSize = result->value();
}
dynamic_cast<Operon::TournamentSelector*>(selector.get())->SetTournamentSize(tournamentSize);
} else if (name == "proportional") {
selector = std::make_unique<Operon::ProportionalSelector>(std::move(comp));
dynamic_cast<Operon::ProportionalSelector*>(selector.get())->SetObjIndex(0);
} else if (name == "rank") {
selector = std::make_unique<Operon::RankTournamentSelector>(std::move(comp));
size_t tournamentSize{defaultTournamentSize};
if (tok.size() > 1) {
auto result = scn::scan<std::size_t>(tok[1], "{}");
ENSURE(result);
tournamentSize = result->value();
}
dynamic_cast<Operon::RankTournamentSelector*>(selector.get())->SetTournamentSize(tournamentSize);
} else if (name == "random") {
selector = std::make_unique<Operon::RandomSelector>();
} else {
throw std::invalid_argument(detail::GetErrorString("selector", str));
}
return selector;
}
auto ParseCreator(std::string const& str, PrimitiveSet const& pset, std::vector<Operon::Hash> const& inputs, size_t maxLength) -> std::unique_ptr<CreatorBase>
{
std::unique_ptr<CreatorBase> creator;
auto tok = Split(str, ':');
auto name = tok[0];
double bias{0}; // irregularity bias (used by btc and ptc20)
if(tok.size() > 1) {
auto res = scn::scan<double>(tok[1], "{}");
ENSURE(res);
bias = res->value();
}
if (str == "btc") {
creator = std::make_unique<BalancedTreeCreator>(&pset, inputs, bias, maxLength);
} else if (str == "ptc2") {
creator = std::make_unique<ProbabilisticTreeCreator>(&pset, inputs, bias, maxLength);
} else if (str == "grow") {
creator = std::make_unique<GrowTreeCreator>(&pset, inputs, maxLength);
} else {
throw std::invalid_argument(detail::GetErrorString("creator", str));
}
return creator;
}
auto ParseEvaluator(std::string const& str, Problem& problem, ScalarDispatch& dtable, bool scale) -> std::unique_ptr<EvaluatorBase>
{
using T = ScalarDispatch;
std::unique_ptr<EvaluatorBase> evaluator;
if (str == "r2") {
evaluator = std::make_unique<Operon::Evaluator<T>>(&problem, &dtable, Operon::R2{}, scale);
} else if (str == "c2") {
evaluator = std::make_unique<Operon::Evaluator<T>>(&problem, &dtable, Operon::C2{}, scale);
} else if (str == "nmse") {
evaluator = std::make_unique<Operon::Evaluator<T>>(&problem, &dtable, Operon::NMSE{}, scale);
} else if (str == "mse") {
evaluator = std::make_unique<Operon::Evaluator<T>>(&problem, &dtable, Operon::MSE{}, scale);
} else if (str == "rmse") {
evaluator = std::make_unique<Operon::Evaluator<T>>(&problem, &dtable, Operon::RMSE{}, scale);
} else if (str == "mae") {
evaluator = std::make_unique<Operon::Evaluator<T>>(&problem, &dtable, Operon::MAE{}, scale);
} else if (str == "mdl_gauss") {
evaluator = std::make_unique<Operon::MinimumDescriptionLengthEvaluator<T, GaussianLikelihood<Operon::Scalar>>>(&problem, &dtable);
} else if (str == "mdl_poisson") {
evaluator = std::make_unique<Operon::MinimumDescriptionLengthEvaluator<T, PoissonLikelihood<Operon::Scalar>>>(&problem, &dtable);
} else if (str == "fbf_gauss") {
evaluator = std::make_unique<Operon::FractionalBayesFactorEvaluator<T, GaussianLikelihood<Operon::Scalar>>>(&problem, &dtable);
} else if (str == "fbf_poisson") {
throw std::runtime_error("fbf_poisson is not supported: the fractional Bayes factor is derived under Gaussian assumptions");
} else if (str == "gauss") {
evaluator = std::make_unique<Operon::GaussianLikelihoodEvaluator<T>>(&problem, &dtable);
} else {
throw std::runtime_error(fmt::format("unable to parse evaluator metric '{}'\n", str));
}
return evaluator;
}
auto ParseGenerator(std::string const& str, EvaluatorBase& eval, CrossoverBase& cx, MutatorBase& mut, SelectorBase& femSel, SelectorBase& maleSel, CoefficientOptimizer const* coeffOptimizer = nullptr) -> std::unique_ptr<OffspringGeneratorBase>
{
std::unique_ptr<OffspringGeneratorBase> generator;
auto tok = Split(str, ':');
auto name = tok[0];
if (name == "basic") {
generator = std::make_unique<BasicOffspringGenerator>(&eval, &cx, &mut, &femSel, &maleSel, coeffOptimizer);
} else if (name == "os") {
size_t maxSelectionPressure{100};
double comparisonFactor{0};
if (tok.size() > 1) {
maxSelectionPressure = scn::scan<size_t>(tok[1], "{}")->value();
}
if (tok.size() > 2) {
comparisonFactor = scn::scan<double>(tok[2], "{}")->value();
}
generator = std::make_unique<OffspringSelectionGenerator>(&eval, &cx, &mut, &femSel, &maleSel, coeffOptimizer);
dynamic_cast<OffspringSelectionGenerator*>(generator.get())->MaxSelectionPressure(maxSelectionPressure);
dynamic_cast<OffspringSelectionGenerator*>(generator.get())->ComparisonFactor(comparisonFactor);
} else if (name == "brood") {
generator = std::make_unique<BroodOffspringGenerator>(&eval, &cx, &mut, &femSel, &maleSel, coeffOptimizer);
size_t broodSize{BroodOffspringGenerator::DefaultBroodSize};
if (tok.size() > 1) { broodSize = scn::scan<size_t>(tok[1], "{}")->value(); }
dynamic_cast<BroodOffspringGenerator*>(generator.get())->BroodSize(broodSize);
} else if (name == "poly") {
generator = std::make_unique<PolygenicOffspringGenerator>(&eval, &cx, &mut, &femSel, &maleSel, coeffOptimizer);
size_t polygenicSize{PolygenicOffspringGenerator::DefaultBroodSize};
if (tok.size() > 1) { polygenicSize = scn::scan<size_t>(tok[1], "{}")->value(); }
dynamic_cast<PolygenicOffspringGenerator*>(generator.get())->PolygenicSize(polygenicSize);
} else {
throw std::invalid_argument(detail::GetErrorString("generator", str));
}
return generator;
}
auto ParseOptimizer(std::string const& /*str*/, Problem const& /*problem*/, ScalarDispatch const& /*dtable*/) -> std::unique_ptr<OptimizerBase> {
throw std::runtime_error("not implemented");
}
} // namespace Operon
================================================
FILE: cli/source/operator_factory.hpp
================================================
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research
#ifndef OPERON_CLI_OPERATOR_FACTORY_HPP
#define OPERON_CLI_OPERATOR_FACTORY_HPP
#include <cstddef> // for size_t
#include <memory> // for unique_ptr, make_unique
#include <string> // for operator==, string
#include <utility> // for addressof
#include <vector> // for vector
#include "operon/core/dispatch.hpp" // for DispatchTable
#include "operon/core/types.hpp" // for Span
#include "operon/core/individual.hpp" // for Comparison
#include "operon/interpreter/interpreter.hpp" // for Interpreter
#include "operon/optimizer/optimizer.hpp"
#include "util.hpp" // for Split
namespace Operon { struct EvaluatorBase; }
namespace Operon { class KeepBestReinserter; }
namespace Operon { class OffspringGeneratorBase; }
namespace Operon { class PrimitiveSet; }
namespace Operon { class Problem; }
namespace Operon { class ReinserterBase; }
namespace Operon { class ReplaceWorstReinserter; }
namespace Operon { class SelectorBase; }
namespace Operon { struct CreatorBase; }
namespace Operon { struct CrossoverBase; }
namespace Operon { struct ErrorMetric; }
namespace Operon { class CoefficientOptimizer; }
namespace Operon { struct MutatorBase; }
namespace Operon { struct Variable; }
namespace Operon {
auto ParseReinserter(std::string const& str, ComparisonCallback&& comp) -> std::unique_ptr<ReinserterBase>;
auto ParseSelector(std::string const& str, ComparisonCallback&& comp) -> std::unique_ptr<SelectorBase>;
auto ParseCreator(std::string const& str, PrimitiveSet const& pset, std::vector<Operon::Hash> const& inputs, size_t maxLength) -> std::unique_ptr<CreatorBase>;
auto ParseEvaluator(std::string const& str, Problem& problem, ScalarDispatch& dtable, bool scale = true) -> std::unique_ptr<EvaluatorBase>;
auto ParseErrorMetric(std::string const& str) -> std::tuple<std::unique_ptr<Operon::ErrorMetric>, bool>;
auto ParseGenerator(std::string const& str, EvaluatorBase& eval, CrossoverBase& cx, MutatorBase& mut, SelectorBase& femSel, SelectorBase& maleSel, CoefficientOptimizer const* cOpt) -> std::unique_ptr<OffspringGeneratorBase>;
auto ParseOptimizer(std::string const& str, Problem const& problem, ScalarDispatch const& dtable) -> std::unique_ptr<OptimizerBase>;
} // namespace Operon
#endif
================================================
FILE: cli/source/operon_gp.cpp
================================================
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research
#include "reporter.hpp"
#include <chrono>
#include <cmath>
#include <cstdlib>
#include <fmt/core.h>
#include <memory>
#include <taskflow/algorithm/reduce.hpp>
#include <taskflow/taskflow.hpp>
#include <thread>
#include "operon/algorithms/gp.hpp"
#include "operon/hash/zobrist.hpp"
#include "operon/core/problem.hpp"
#include "operon/core/version.hpp"
#include "operon/formatter/formatter.hpp"
#include "operon/interpreter/interpreter.hpp"
#include "operon/operators/creator.hpp"
#include "operon/operators/crossover.hpp"
#include "operon/operators/evaluator.hpp"
#include "operon/operators/generator.hpp"
#include "operon/operators/initializer.hpp"
#include "operon/operators/mutation.hpp"
#include "operon/operators/reinserter.hpp"
#include "operon/operators/selector.hpp"
#include "operon/optimizer/optimizer.hpp"
#include "operator_factory.hpp"
#include "util.hpp"
auto main(int argc, char** argv) -> int
{
auto opts = Operon::InitOptions("operon_gp", "Genetic programming symbolic regression");
auto result = Operon::ParseOptions(std::move(opts), argc, argv);
// parse and set default values
Operon::GeneticAlgorithmConfig config {};
config.Generations = result["generations"].as<size_t>();
config.PopulationSize = result["population-size"].as<size_t>();
config.PoolSize = result["pool-size"].as<size_t>();
config.Evaluations = result["evaluations"].as<size_t>();
config.Iterations = result["iterations"].as<size_t>();
config.CrossoverProbability = result["crossover-probability"].as<Operon::Scalar>();
config.MutationProbability = result["mutation-probability"].as<Operon::Scalar>();
config.TimeLimit = result["timelimit"].as<size_t>();
config.Seed = std::random_device {}();
// parse remaining configuration
Operon::Range trainingRange;
Operon::Range testRange;
std::unique_ptr<Operon::Dataset> dataset;
std::string targetName;
bool showPrimitiveSet = false;
auto threads = std::thread::hardware_concurrency();
auto primitiveSetConfig = Operon::PrimitiveSet::Arithmetic;
auto maxLength = result["maxlength"].as<size_t>();
auto maxDepth = result["maxdepth"].as<size_t>();
auto crossoverInternalProbability = result["crossover-internal-probability"].as<Operon::Scalar>();
auto symbolic = result["symbolic"].as<bool>();
try {
for (const auto& kv : result.arguments()) {
const auto& key = kv.key();
const auto& value = kv.value();
if (key == "dataset") {
dataset = std::make_unique<Operon::Dataset>(value, true);
ENSURE(!dataset->IsView());
}
if (key == "seed") {
config.Seed = kv.as<size_t>();
}
if (key == "train") {
trainingRange = Operon::ParseRange(value);
}
if (key == "test") {
testRange = Operon::ParseRange(value);
}
if (key == "target") {
targetName = value;
}
if (key == "maxlength") {
maxLength = kv.as<size_t>();
}
if (key == "maxdepth") {
maxDepth = kv.as<size_t>();
}
if (key == "enable-symbols") {
auto mask = Operon::ParsePrimitiveSetConfig(value);
primitiveSetConfig |= mask;
}
if (key == "disable-symbols") {
auto mask = ~Operon::ParsePrimitiveSetConfig(value);
primitiveSetConfig &= mask;
}
if (key == "threads") {
threads = static_cast<decltype(threads)>(kv.as<size_t>());
}
if (key == "show-primitives") {
showPrimitiveSet = true;
}
}
if (showPrimitiveSet) {
Operon::PrintPrimitives(primitiveSetConfig);
return EXIT_SUCCESS;
}
// set the target
Operon::Variable target;
auto res = dataset->GetVariable(targetName);
if (!res) {
fmt::print(stderr, "error: target variable {} does not exist in the dataset.", targetName);
return EXIT_FAILURE;
}
target = *res;
auto const rows { dataset->Rows<std::size_t>() };
if (result.count("train") == 0) {
trainingRange = Operon::Range { 0, 2 * rows / 3 }; // by default use 66% of the data as training
}
if (result.count("test") == 0) {
// if no test range is specified, we try to infer a reasonable range based on the trainingRange
if (trainingRange.Start() > 0) {
testRange = Operon::Range { 0, trainingRange.Start() };
} else if (trainingRange.End() < rows) {
testRange = Operon::Range { trainingRange.End(), rows };
} else {
testRange = Operon::Range { 0, 1 };
}
}
// validate training range
if (trainingRange.Start() >= rows || trainingRange.End() > rows) {
fmt::print(stderr, "error: the training range {}:{} exceeds the available data range ({} rows)\n", trainingRange.Start(), trainingRange.End(), dataset->Rows());
return EXIT_FAILURE;
}
if (trainingRange.Start() > trainingRange.End()) {
fmt::print(stderr, "error: invalid training range {}:{}\n", trainingRange.Start(), trainingRange.End());
return EXIT_FAILURE;
}
std::vector<Operon::Hash> inputs;
if (result.count("inputs") == 0) {
inputs = dataset->VariableHashes();
std::erase(inputs, target.Hash);
} else {
auto str = result["inputs"].as<std::string>();
auto tokens = Operon::Split(str, ',');
for (auto const& tok : tokens) {
if (auto res = dataset->GetVariable(tok); res.has_value()) {
inputs.push_back(res->Hash);
} else {
fmt::print(stderr, "error: variable {} does not exist in the dataset.", tok);
return EXIT_FAILURE;
}
}
}
Operon::Problem problem(std::move(dataset));
problem.SetTrainingRange(trainingRange);
problem.SetTestRange(testRange);
problem.SetTarget(target.Hash);
problem.SetInputs(inputs);
problem.ConfigurePrimitiveSet(primitiveSetConfig);
std::unique_ptr<Operon::CreatorBase> creator;
creator = ParseCreator(result["creator"].as<std::string>(), problem.GetPrimitiveSet(), problem.GetInputs(), maxLength);
auto [amin, amax] = problem.GetPrimitiveSet().FunctionArityLimits();
Operon::UniformTreeInitializer treeInitializer(creator.get());
auto const initialMinDepth = result["creator-mindepth"].as<std::size_t>();
auto const initialMaxDepth = result["creator-maxdepth"].as<std::size_t>();
treeInitializer.ParameterizeDistribution(amin + 1, maxLength);
treeInitializer.SetMinDepth(initialMinDepth);
treeInitializer.SetMaxDepth(initialMaxDepth); // NOLINT
//
std::unique_ptr<Operon::CoefficientInitializerBase> coeffInitializer;
std::unique_ptr<Operon::MutatorBase> onePoint;
if (symbolic) {
using Dist = std::uniform_int_distribution<int>;
coeffInitializer = std::make_unique<Operon::CoefficientInitializer<Dist>>();
int constexpr range { 5 };
dynamic_cast<Operon::CoefficientInitializer<Dist>*>(coeffInitializer.get())->ParameterizeDistribution(-range, +range);
onePoint = std::make_unique<Operon::OnePointMutation<Dist>>();
dynamic_cast<Operon::OnePointMutation<Dist>*>(onePoint.get())->ParameterizeDistribution(-range, +range);
} else {
using Dist = std::normal_distribution<Operon::Scalar>;
coeffInitializer = std::make_unique<Operon::CoefficientInitializer<Dist>>();
dynamic_cast<Operon::NormalCoefficientInitializer*>(coeffInitializer.get())->ParameterizeDistribution(Operon::Scalar { 0 }, Operon::Scalar { 1 });
onePoint = std::make_unique<Operon::OnePointMutation<Dist>>();
dynamic_cast<Operon::OnePointMutation<Dist>*>(onePoint.get())->ParameterizeDistribution(Operon::Scalar { 0 }, Operon::Scalar { 1 });
}
Operon::SubtreeCrossover crossover { crossoverInternalProbability, maxDepth, maxLength };
Operon::MultiMutation mutator {};
Operon::ChangeVariableMutation changeVar { problem.GetInputs() };
Operon::ChangeFunctionMutation changeFunc { problem.GetPrimitiveSet() };
Operon::ReplaceSubtreeMutation replaceSubtree { creator.get(), coeffInitializer.get(), maxDepth, maxLength };
Operon::InsertSubtreeMutation insertSubtree { creator.get(), coeffInitializer.get(), maxDepth, maxLength };
Operon::RemoveSubtreeMutation removeSubtree { problem.GetPrimitiveSet() };
Operon::DiscretePointMutation discretePoint;
for (auto v : Operon::Math::Constants) {
discretePoint.Add(static_cast<Operon::Scalar>(v), 1);
}
mutator.Add(onePoint.get(), 1.0);
mutator.Add(&changeVar, 1.0);
mutator.Add(&changeFunc, 1.0);
mutator.Add(&replaceSubtree, 1.0);
mutator.Add(&insertSubtree, 1.0);
mutator.Add(&removeSubtree, 1.0);
mutator.Add(&discretePoint, 1.0);
Operon::ScalarDispatch dtable;
auto scale = result["linear-scaling"].as<bool>();
auto evaluator = Operon::ParseEvaluator(result["objective"].as<std::string>(), problem, dtable, scale);
evaluator->SetBudget(config.Evaluations);
auto optimizer = std::make_unique<Operon::LevenbergMarquardtOptimizer<decltype(dtable), Operon::OptimizerType::Eigen>>(&dtable, &problem);
optimizer->SetIterations(config.Iterations);
Operon::CoefficientOptimizer cOpt { optimizer.get() };
EXPECT(problem.TrainingRange().Size() > 0);
auto comp = [](auto const& lhs, auto const& rhs) { return lhs[0] < rhs[0]; };
auto femaleSelector = Operon::ParseSelector(result["female-selector"].as<std::string>(), comp);
auto maleSelector = Operon::ParseSelector(result["male-selector"].as<std::string>(), comp);
auto generator = Operon::ParseGenerator(result["offspring-generator"].as<std::string>(), *evaluator, crossover, mutator, *femaleSelector, *maleSelector, &cOpt);
auto reinserter = Operon::ParseReinserter(result["reinserter"].as<std::string>(), comp);
std::unique_ptr<Operon::Zobrist> cache;
if (result["transposition-cache"].as<bool>()) {
Operon::RandomGenerator cacheRng(config.Seed);
cache = std::make_unique<Operon::Zobrist>(cacheRng, static_cast<int>(maxLength));
config.Cache = cache.get();
}
Operon::RandomGenerator random(config.Seed);
if (result["shuffle"].as<bool>()) {
problem.GetDataset()->Shuffle(random);
}
if (result["standardize"].as<bool>()) {
problem.StandardizeData(problem.TrainingRange());
}
tf::Executor executor(threads);
Operon::GeneticProgrammingAlgorithm gp { config, &problem, &treeInitializer, coeffInitializer.get(), generator.get(), reinserter.get() };
auto const* ptr = dynamic_cast<Operon::Evaluator<decltype(dtable)> const*>(evaluator.get());
Operon::Reporter<Operon::Evaluator<decltype(dtable)>> reporter(ptr);
gp.Run(executor, random, [&]() { reporter(executor, gp); });
auto best = reporter.GetBest();
fmt::print("{}\n", Operon::InfixFormatter::Format(best.Genotype, *problem.GetDataset(), 6));
} catch (std::exception& e) {
fmt::print(stderr, "error: {}\n", e.what());
return EXIT_FAILURE;
}
return 0;
}
================================================
FILE: cli/source/operon_nsgp.cpp
================================================
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research
#include <chrono>
#include <cmath>
#include <cstdlib>
#include <fmt/core.h>
#include <fmt/ranges.h>
#include <memory>
#include <taskflow/algorithm/reduce.hpp>
#include <taskflow/taskflow.hpp>
#include <thread>
#include "operon/algorithms/nsga2.hpp"
#include "operon/hash/zobrist.hpp"
#include "operon/core/problem.hpp"
#include "operon/core/version.hpp"
#include "operon/formatter/formatter.hpp"
#include "operon/hash/hash.hpp"
#include "operon/interpreter/interpreter.hpp"
#include "operon/operators/creator.hpp"
#include "operon/operators/crossover.hpp"
#include "operon/operators/evaluator.hpp"
#include "operon/operators/generator.hpp"
#include "operon/operators/initializer.hpp"
#include "operon/operators/mutation.hpp"
#include "operon/operators/non_dominated_sorter.hpp"
#include "operon/operators/reinserter.hpp"
#include "operon/operators/selector.hpp"
#include "operon/optimizer/likelihood/gaussian_likelihood.hpp"
#include "operon/optimizer/optimizer.hpp"
#include "operon/optimizer/solvers/sgd.hpp"
#include "operator_factory.hpp"
#include "pareto_front.hpp"
#include "reporter.hpp"
#include "util.hpp"
auto main(int argc, char** argv) -> int
{
auto opts = Operon::InitOptions("operon_gp", "Genetic programming symbolic regression");
auto result = Operon::ParseOptions(std::move(opts), argc, argv);
// parse and set default values
Operon::GeneticAlgorithmConfig config {};
config.Generations = result["generations"].as<size_t>();
config.PopulationSize = result["population-size"].as<size_t>();
config.PoolSize = result["pool-size"].as<size_t>();
config.Epsilon = result["epsilon"].as<Operon::Scalar>();
config.Evaluations = result["evaluations"].as<size_t>();
config.Iterations = result["iterations"].as<size_t>();
config.CrossoverProbability = result["crossover-probability"].as<Operon::Scalar>();
config.MutationProbability = result["mutation-probability"].as<Operon::Scalar>();
config.LocalSearchProbability = result["local-search-probability"].as<Operon::Scalar>();
config.LamarckianProbability = result["lamarckian-probability"].as<Operon::Scalar>();
config.TimeLimit = result["timelimit"].as<size_t>();
config.Seed = std::random_device {}();
// parse remaining config options
Operon::Range trainingRange;
Operon::Range testRange;
std::unique_ptr<Operon::Dataset> dataset;
std::string targetName;
bool showPrimitiveSet = false;
auto threads = std::thread::hardware_concurrency();
auto primitiveSetConfig = Operon::PrimitiveSet::Arithmetic;
auto maxLength = result["maxlength"].as<size_t>();
auto maxDepth = result["maxdepth"].as<size_t>();
auto crossoverInternalProbability = result["crossover-internal-probability"].as<Operon::Scalar>();
auto symbolic = result["symbolic"].as<bool>();
try {
for (const auto& kv : result.arguments()) {
const auto& key = kv.key();
const auto& value = kv.value();
if (key == "dataset") {
dataset = std::make_unique<Operon::Dataset>(value, true);
ENSURE(!dataset->IsView());
}
if (key == "seed") {
config.Seed = kv.as<size_t>();
}
if (key == "train") {
trainingRange = Operon::ParseRange(value);
}
if (key == "test") {
testRange = Operon::ParseRange(value);
}
if (key == "target") {
targetName = value;
}
if (key == "maxlength") {
maxLength = kv.as<size_t>();
}
if (key == "maxdepth") {
maxDepth = kv.as<size_t>();
}
if (key == "enable-symbols") {
auto mask = Operon::ParsePrimitiveSetConfig(value);
primitiveSetConfig |= mask;
}
if (key == "disable-symbols") {
auto mask = ~Operon::ParsePrimitiveSetConfig(value);
primitiveSetConfig &= mask;
}
if (key == "threads") {
threads = static_cast<decltype(threads)>(kv.as<size_t>());
}
if (key == "show-primitives") {
showPrimitiveSet = true;
}
}
if (showPrimitiveSet) {
Operon::PrintPrimitives(primitiveSetConfig);
return EXIT_SUCCESS;
}
// set the target
Operon::Variable target;
auto res = dataset->GetVariable(targetName);
if (!res) {
fmt::print(stderr, "error: target variable {} does not exist in the dataset.", targetName);
return EXIT_FAILURE;
}
target = *res;
auto const rows { dataset->Rows<std::size_t>() };
if (result.count("train") == 0) {
trainingRange = Operon::Range { 0, 2 * rows / 3 }; // by default use 66% of the data as training
}
if (result.count("test") == 0) {
// if no test range is specified, we try to infer a reasonable range based on the trainingRange
if (trainingRange.Start() > 0) {
testRange = Operon::Range { 0, trainingRange.Start() };
} else if (trainingRange.End() < rows) {
testRange = Operon::Range { trainingRange.End(), dataset->Rows<std::size_t>() };
} else {
testRange = Operon::Range { 0, 1 };
}
}
// validate training range
if (trainingRange.Start() >= rows || trainingRange.End() > rows) {
fmt::print(stderr, "error: the training range {}:{} exceeds the available data range ({} rows)\n", trainingRange.Start(), trainingRange.End(), dataset->Rows());
return EXIT_FAILURE;
}
if (trainingRange.Start() > trainingRange.End()) {
fmt::print(stderr, "error: invalid training range {}:{}\n", trainingRange.Start(), trainingRange.End());
return EXIT_FAILURE;
}
std::vector<Operon::Hash> inputs;
if (result.count("inputs") == 0) {
inputs = dataset->VariableHashes();
std::erase(inputs, target.Hash);
} else {
auto str = result["inputs"].as<std::string>();
auto tokens = Operon::Split(str, ',');
for (auto const& tok : tokens) {
if (auto res = dataset->GetVariable(tok); res.has_value()) {
inputs.push_back(res->Hash);
} else {
fmt::print(stderr, "error: variable {} does not exist in the dataset.", tok);
return EXIT_FAILURE;
}
}
}
Operon::Problem problem(std::move(dataset));
problem.SetTrainingRange(trainingRange);
problem.SetTestRange(testRange);
problem.SetTarget(target.Hash);
problem.SetInputs(inputs);
problem.ConfigurePrimitiveSet(primitiveSetConfig);
std::unique_ptr<Operon::CreatorBase> creator;
creator = ParseCreator(result["creator"].as<std::string>(), problem.GetPrimitiveSet(), problem.GetInputs(), maxLength);
auto [amin, amax] = problem.GetPrimitiveSet().FunctionArityLimits();
Operon::UniformTreeInitializer treeInitializer(creator.get());
auto const initialMinDepth = result["creator-mindepth"].as<std::size_t>();
auto const initialMaxDepth = result["creator-maxdepth"].as<std::size_t>();
auto const initialMaxLength = result["creator-maxlength"].as<std::size_t>();
treeInitializer.ParameterizeDistribution(amin + 1, initialMaxLength);
treeInitializer.SetMinDepth(initialMinDepth);
treeInitializer.SetMaxDepth(initialMaxDepth); // NOLINT
std::unique_ptr<Operon::CoefficientInitializerBase> coeffInitializer;
std::unique_ptr<Operon::MutatorBase> onePoint;
if (symbolic) {
using Dist = std::uniform_int_distribution<int>;
coeffInitializer = std::make_unique<Operon::CoefficientInitializer<Dist>>();
int constexpr range { 5 };
dynamic_cast<Operon::CoefficientInitializer<Dist>*>(coeffInitializer.get())->ParameterizeDistribution(-range, +range);
onePoint = std::make_unique<Operon::OnePointMutation<Dist>>();
dynamic_cast<Operon::OnePointMutation<Dist>*>(onePoint.get())->ParameterizeDistribution(-range, +range);
} else {
using Dist = std::normal_distribution<Operon::Scalar>;
coeffInitializer = std::make_unique<Operon::CoefficientInitializer<Dist>>();
dynamic_cast<Operon::NormalCoefficientInitializer*>(coeffInitializer.get())->ParameterizeDistribution(Operon::Scalar { 0 }, Operon::Scalar { 1 });
onePoint = std::make_unique<Operon::OnePointMutation<Dist>>();
dynamic_cast<Operon::OnePointMutation<Dist>*>(onePoint.get())->ParameterizeDistribution(Operon::Scalar { 0 }, Operon::Scalar { 1 });
}
Operon::SubtreeCrossover crossover { crossoverInternalProbability, maxDepth, maxLength };
Operon::MultiMutation mutator {};
Operon::ChangeVariableMutation changeVar { problem.GetInputs() };
Operon::ChangeFunctionMutation changeFunc { problem.GetPrimitiveSet() };
Operon::ReplaceSubtreeMutation replaceSubtree { creator.get(), coeffInitializer.get(), maxDepth, maxLength };
Operon::InsertSubtreeMutation insertSubtree { creator.get(), coeffInitializer.get(), maxDepth, maxLength };
Operon::RemoveSubtreeMutation removeSubtree { problem.GetPrimitiveSet() };
Operon::DiscretePointMutation discretePoint;
for (auto v : Operon::Math::Constants) {
discretePoint.Add(static_cast<Operon::Scalar>(v), 1);
}
mutator.Add(onePoint.get(), 1.0);
mutator.Add(&changeVar, 1.0);
mutator.Add(&changeFunc, 1.0);
mutator.Add(&replaceSubtree, 1.0);
mutator.Add(&insertSubtree, 1.0);
mutator.Add(&removeSubtree, 1.0);
mutator.Add(&discretePoint, 1.0);
Operon::ScalarDispatch dtable;
// DynamicPrimitives::Saxpy<Operon::Scalar, Operon::Backend::BatchSize<Operon::Scalar>> f{};
// dtable.RegisterCallable(12345UL, f, f);
auto scale = result["linear-scaling"].as<bool>();
auto errorEvaluator = Operon::ParseEvaluator(result["objective"].as<std::string>(), problem, dtable, scale);
errorEvaluator->SetBudget(config.Evaluations);
auto optimizer = std::make_unique<Operon::LevenbergMarquardtOptimizer<decltype(dtable), Operon::OptimizerType::Eigen>>(&dtable, &problem);
optimizer->SetIterations(config.Iterations);
Operon::LengthEvaluator lengthEvaluator(&problem, maxLength);
// Operon::EntropyEvaluator entropyEvaluator(&problem);
Operon::MultiEvaluator evaluator(&problem);
evaluator.SetBudget(config.Evaluations);
evaluator.Add(errorEvaluator.get());
evaluator.Add(&lengthEvaluator);
// evaluator.Add(&entropyEvaluator);
EXPECT(problem.TrainingRange().Size() > 0);
Operon::CrowdedComparison comp;
auto femaleSelector = Operon::ParseSelector(result["female-selector"].as<std::string>(), comp);
auto maleSelector = Operon::ParseSelector(result["male-selector"].as<std::string>(), comp);
Operon::CoefficientOptimizer cOpt { optimizer.get() };
auto generator = Operon::ParseGenerator(result["offspring-generator"].as<std::string>(), evaluator, crossover, mutator, *femaleSelector, *maleSelector, &cOpt);
auto reinserter = Operon::ParseReinserter(result["reinserter"].as<std::string>(), comp);
std::unique_ptr<Operon::Zobrist> cache;
if (result["transposition-cache"].as<bool>()) {
Operon::RandomGenerator cacheRng(config.Seed);
cache = std::make_unique<Operon::Zobrist>(cacheRng, static_cast<int>(maxLength));
config.Cache = cache.get();
}
Operon::RandomGenerator random(config.Seed);
if (result["shuffle"].as<bool>()) {
problem.GetDataset()->Shuffle(random);
}
if (result["standardize"].as<bool>()) {
problem.StandardizeData(problem.TrainingRange());
}
tf::Executor executor(threads);
Operon::RankIntersectSorter sorter;
// Operon::RankOrdinalSorter sorter;
// Operon::MergeSorter sorter;
// Operon::BestOrderSorter sorter;
// Operon::EfficientBinarySorter sorter;
Operon::NSGA2 gp { config, &problem, &treeInitializer, coeffInitializer.get(), generator.get(), reinserter.get(), &sorter };
auto const* ptr = dynamic_cast<Operon::Evaluator<decltype(dtable)> const*>(errorEvaluator.get());
Operon::Reporter<Operon::Evaluator<decltype(dtable)>> reporter(ptr);
gp.Run(executor, random, [&]() { reporter(executor, gp); });
auto best = reporter.GetBest();
fmt::print("{}\n", Operon::InfixFormatter::Format(best.Genotype, *problem.GetDataset(), std::numeric_limits<Operon::Scalar>::digits));
if (result.contains("pareto-front")) {
Operon::WriteParetoFront(result["pareto-front"].as<std::string>(), gp.Individuals(), dtable, problem, scale);
}
} catch (std::exception& e) {
fmt::print(stderr, "error: {}\n", e.what());
return EXIT_FAILURE;
}
return 0;
}
================================================
FILE: cli/source/operon_parse_model.cpp
================================================
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research
#include <algorithm>
#include <memory>
#include <string>
#include "operon/core/dataset.hpp"
#include "operon/core/types.hpp"
#include "operon/core/dispatch.hpp"
#include "operon/core/problem.hpp"
#include "operon/formatter/formatter.hpp"
#include "operon/optimizer/likelihood/gaussian_likelihood.hpp"
#include "operon/optimizer/optimizer.hpp"
#include "operon/parser/infix.hpp"
#include "operon/interpreter/interpreter.hpp"
#include "operon/operators/evaluator.hpp"
#include "util.hpp"
#include "reporter.hpp"
#include <cxxopts.hpp>
#include <fmt/core.h>
#include <scn/scan.h>
#include <tl/expected.hpp>
namespace {
enum class ParseError : std::uint8_t {
Success = 0,
MissingDataset = 1,
MissingInfix = 2,
NoOptions = 3,
UnknownError = 4
};
auto ParseOptions(int argc, char** argv) noexcept -> tl::expected<cxxopts::ParseResult, ParseError> {
cxxopts::Options opts("operon_parse_model", "Parse and evaluate a model in infix form");
opts.add_options()
("dataset", "Dataset file name (csv) (required)", cxxopts::value<std::string>())
("target", "Name of the target variable (if none provided, model output will be printed)", cxxopts::value<std::string>())
("range", "Data range [A:B)", cxxopts::value<std::string>())
("scale", "Linear scaling slope:intercept", cxxopts::value<std::string>())
("optimizer", "Optimizer for model coefficients (lm, lbfgs, sgd)", cxxopts::value<std::string>()->default_value("lm"))
("likelihood", "Optimizer loss function (gaussian, poisson)", cxxopts::value<std::string>()->default_value("gaussian"))
("iterations", "Optimizer iterations", cxxopts::value<int>()->default_value("50"))
("debug", "Show some debugging information", cxxopts::value<bool>()->default_value("false"))
("format", "Format string (see https://fmt.dev/latest/syntax.html)", cxxopts::value<std::string>()->default_value(":>#8.4g"))
("help", "Print help");
opts.allow_unrecognised_options();
cxxopts::ParseResult result;
try {
result = opts.parse(argc, argv);
} catch (cxxopts::exceptions::parsing const& ex) {
fmt::print(stderr, "error: {}. rerun with --help to see available options.\n", ex.what());
return tl::make_unexpected(ParseError::UnknownError);
};
if (result.arguments().empty() || result.count("help") > 0) {
fmt::print("{}\n", opts.help());
return tl::make_unexpected(ParseError::NoOptions);
}
if (result.count("dataset") == 0) {
fmt::print(stderr, "error: no dataset was specified.\n");
return tl::make_unexpected(ParseError::MissingDataset);
}
if (result.unmatched().empty()) {
fmt::print(stderr, "error: no infix string was provided.\n");
return tl::make_unexpected(ParseError::MissingInfix);
}
return result;
}
auto ParseOptimizer(Operon::ScalarDispatch const* dtable, Operon::Problem const* problem, std::string const& optimizer, std::string const& likelihood) {
std::unique_ptr<Operon::OptimizerBase> opt;
if (optimizer == "lm") {
opt = std::make_unique<Operon::LevenbergMarquardtOptimizer<Operon::ScalarDispatch>>(dtable, problem);
} else if (optimizer == "lbfgs") {
if (likelihood == "gaussian") {
opt = std::make_unique<Operon::LBFGSOptimizer<Operon::ScalarDispatch, Operon::GaussianLoss<Operon::Scalar>>>(dtable, problem);
} else if (likelihood == "poisson") {
opt = std::make_unique<Operon::LBFGSOptimizer<Operon::ScalarDispatch, Operon::PoissonLoss<Operon::Scalar>>>(dtable, problem);
}
} else if (optimizer == "sgd") {
if (likelihood == "gaussian") {
opt = std::make_unique<Operon::SGDOptimizer<Operon::ScalarDispatch, Operon::GaussianLoss<Operon::Scalar>>>(dtable, problem);
} else if (likelihood == "poisson") {
opt = std::make_unique<Operon::SGDOptimizer<Operon::ScalarDispatch, Operon::PoissonLoss<Operon::Scalar>>>(dtable, problem);
}
}
return opt;
}
} // namespace
auto main(int argc, char** argv) -> int
{
auto out = ParseOptions(argc, argv);
if (!out.has_value()) { return EXIT_FAILURE; }
auto const& result = out.value();
Operon::Dataset ds(result["dataset"].as<std::string>(), /*hasHeader=*/true);
auto infix = result.unmatched().front();
auto model = Operon::InfixParser::Parse(infix, ds);
Operon::ScalarDispatch dtable;
Operon::Range range{0, ds.Rows<std::size_t>()};
if (result["range"].count() > 0) {
auto res = scn::scan<std::size_t, std::size_t>(result["range"].as<std::string>(), "{}:{}");
ENSURE(res);
auto [a, b] = res->values();
range = Operon::Range{a, b};
}
int constexpr defaultPrecision{6};
if (result["debug"].as<bool>()) {
fmt::print("\nInput string:\n{}\n", infix);
fmt::print("Parsed tree:\n{}\n", Operon::InfixFormatter::Format(model, ds, defaultPrecision));
fmt::print("Data range: {}:{}\n", range.Start(), range.End());
fmt::print("Scale: {}\n", result["scale"].count() > 0 ? result["scale"].as<std::string>() : std::string("auto"));
}
using Interpreter = Operon::Interpreter<Operon::Scalar, Operon::ScalarDispatch>;
auto est = Interpreter::Evaluate(model, ds, range);
std::string format = result["format"].as<std::string>();
if (result["target"].count() > 0) {
auto tgt = ds.GetValues(result["target"].as<std::string>()).subspan(range.Start(), range.Size());
Operon::Scalar a{0};
Operon::Scalar b{0};
if (result["scale"].count() > 0) {
auto res = scn::scan<Operon::Scalar, Operon::Scalar>(result["scale"].as<std::string>(), "{}:{}");
ENSURE(res);
a = std::get<0>(res->values());
b = std::get<1>(res->values());
} else {
auto [a_, b_] = Operon::FitLeastSquares(est, tgt);
a = static_cast<Operon::Scalar>(a_);
b = static_cast<Operon::Scalar>(b_);
}
std::ranges::transform(est, est.begin(), [&](auto v) { return (v * a) + b; });
auto r2 = -Operon::R2{}(Operon::Span<Operon::Scalar>{est}, tgt);
auto rs = -Operon::C2{}(Operon::Span<Operon::Scalar>{est}, tgt);
auto mae = Operon::MAE{}(Operon::Span<Operon::Scalar>{est}, tgt);
auto mse = Operon::MSE{}(Operon::Span<Operon::Scalar>{est}, tgt);
auto rmse = Operon::RMSE{}(Operon::Span<Operon::Scalar>{est}, tgt);
auto nmse = Operon::NMSE{}(Operon::Span<Operon::Scalar>{est}, tgt);
Operon::Problem problem{&ds};
problem.SetTrainingRange(range);
problem.SetTestRange(range);
Operon::RandomGenerator rng{0};
Operon::Individual ind;
ind.Genotype = model;
Operon::Interpreter<Operon::Scalar, Operon::ScalarDispatch> interpreter{&dtable, &ds, &ind.Genotype};
Operon::MinimumDescriptionLengthEvaluator<Operon::ScalarDispatch, Operon::GaussianLikelihood<Operon::Scalar>> mdlEval{&problem, &dtable};
auto mdl = mdlEval(rng, ind).front();
auto opt = ParseOptimizer(&dtable, &problem, result["optimizer"].as<std::string>(), result["likelihood"].as<std::string>());
opt->SetIterations(result["iterations"].as<int>());
auto summary = opt->Optimize(rng, model);
std::vector<std::tuple<std::string, double, std::string>> stats{
{"slope", a, format},
{"intercept", b, format},
{"r2", r2, format},
{"rs", rs, format},
{"mae", mae, format},
{"mse", mse, format},
{"rmse", rmse, format},
{"nmse", nmse, format},
{"mdl", mdl, format}
};
Operon::Reporter<void>::PrintStats(stats, /*printHeader=*/true);
if (opt->Iterations() > 0) {
fmt::print("optimization summary:\n");
fmt::print("status: {}\n", summary.Success);
fmt::print("initial cost: {}\n", summary.InitialCost);
fmt::print("final cost: {}\n", summary.FinalCost);
}
} else {
std::string out{};
for (auto v : est) {
fmt::format_to(std::back_inserter(out), fmt::runtime(fmt::format("{{{}}}\n", format)), v);
}
fmt::print("{}", out);
}
return EXIT_SUCCESS;
}
================================================
FILE: cli/source/pareto_front.cpp
================================================
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research
#include "pareto_front.hpp"
#include <algorithm>
#include <cmath>
#include <limits>
#include <Eigen/Core>
#include <fmt/core.h>
#include <fmt/os.h>
#include "operon/core/node.hpp"
#include "operon/core/types.hpp"
#include "operon/formatter/formatter.hpp"
#include "operon/interpreter/interpreter.hpp"
#include "operon/operators/evaluator.hpp"
#include "operon/optimizer/likelihood/gaussian_likelihood.hpp"
namespace Operon {
auto WriteParetoFront(std::string const& path,
Operon::Span<Individual const> population,
ScalarDispatch const& dtable,
Problem const& problem,
bool linearScaling) -> void
{
auto const* ds = problem.GetDataset();
auto const trainRange = problem.TrainingRange();
auto const testRange = problem.TestRange();
auto const targetTrain = problem.TargetValues(trainRange);
auto const targetTest = problem.TargetValues(testRange);
// collect rank-0 individuals sorted by first objective
std::vector<Individual const*> front;
for (auto const& ind : population) {
if (ind.Rank == 0) { front.push_back(&ind); }
}
std::ranges::sort(front, [](auto const* a, auto const* b) { return (*a)[0] < (*b)[0]; });
auto jsonNum = [](double v) -> std::string {
if (!std::isfinite(v)) { return "null"; }
return fmt::format("{:.17g}", v);
};
auto out = fmt::output_file(path);
out.print("[\n");
for (auto i = 0UL; i < front.size(); ++i) {
auto const* ind = front[i];
Interpreter<Scalar, ScalarDispatch> interp{&dtable, ds, &ind->Genotype};
auto estimTrain = interp.Evaluate(ind->Genotype.GetCoefficients(), trainRange);
auto estimTest = interp.Evaluate(ind->Genotype.GetCoefficients(), testRange);
if (linearScaling) {
auto [a, b] = FitLeastSquares(
Span<Scalar const>{estimTrain},
Span<Scalar const>{targetTrain});
auto const as = static_cast<Scalar>(a);
auto const bs = static_cast<Scalar>(b);
for (auto& v : estimTrain) { v = (v * as) + bs; }
for (auto& v : estimTest) { v = (v * as) + bs; }
}
auto const r2Train = -R2{}(estimTrain, targetTrain);
auto const r2Test = -R2{}(estimTest, targetTest);
auto const mseTrain = MSE{}(estimTrain, targetTrain);
auto const mseTest = MSE{}(estimTest, targetTest);
auto const nmseTrain = NMSE{}(estimTrain, targetTrain);
auto const nmseTest = NMSE{}(estimTest, targetTest);
auto const maeTrain = MAE{}(estimTrain, targetTrain);
auto const maeTest = MAE{}(estimTest, targetTest);
// weighted node count and structural complexity
static auto const MulHash = Node{NodeType::Mul}.HashValue;
static auto const ParamHash = Node{NodeType::Constant}.HashValue;
Set<Hash> uniqueSymbols;
auto k = 0.0;
for (auto const& node : ind->Genotype.Nodes()) {
auto const isWeighted = node.IsVariable() && node.Value != Scalar{1};
k += isWeighted ? 3.0 : 1.0;
uniqueSymbols.insert(node.HashValue);
if (isWeighted) {
uniqueSymbols.insert(MulHash);
uniqueSymbols.insert(ParamHash);
}
}
auto const q = static_cast<double>(uniqueSymbols.size());
auto const fCompl = q > 0.0 ? k * std::log(q) : 0.0;
// MLE sigma estimate from training residuals
auto const n = static_cast<double>(trainRange.Size());
auto const sigmaHat = static_cast<Scalar>(std::sqrt(mseTrain));
Scalar sigmaArr[] = {sigmaHat};
Span<Scalar const> sigmaSpan{sigmaArr, 1};
// FBF (no Jacobian required)
auto const p = static_cast<double>(ind->Genotype.GetCoefficients().size());
auto const b = 1.0 / std::sqrt(n);
auto const fbfParams = (p / 2.0) * (0.5 * std::log(n) + std::log(Math::Tau) + 1.0 - std::log(3.0));
auto const nll = static_cast<double>(GaussianLikelihood<Scalar>::ComputeLikelihood(
{estimTrain.data(), estimTrain.size()},
targetTrain,
sigmaSpan));
auto const fbfLikelihood = (1.0 - b) * nll;
auto fbf = fCompl + fbfParams + fbfLikelihood;
if (!std::isfinite(fbf)) { fbf = std::numeric_limits<double>::quiet_NaN(); }
// MDL (requires Jacobian for Fisher diagonal)
// Fisher = J^T J / σ² (Gaussian)
auto const coeffs = ind->Genotype.GetCoefficients();
auto const jac = interp.JacRev(coeffs, trainRange);
auto const nrows = static_cast<Eigen::Index>(trainRange.Size());
auto const ncols = static_cast<Eigen::Index>(coeffs.size());
Eigen::Map<Eigen::Matrix<Scalar, -1, -1> const> jacMap(jac.data(), nrows, ncols);
auto const sigma2 = static_cast<Scalar>(mseTrain);
auto const fisherDiag = (jacMap.colwise().squaredNorm().transpose().array() / sigma2);
auto cComplexity = fCompl;
auto cParameters = 0.0;
constexpr auto eps = std::numeric_limits<Scalar>::epsilon();
auto pi = 0;
for (auto const& node : ind->Genotype.Nodes()) {
if (node.Optimize) {
auto const fi = static_cast<double>(fisherDiag(pi));
auto const di = std::sqrt(12.0 / fi);
auto const ci = std::abs(static_cast<double>(coeffs[pi]));
if (std::isfinite(ci) && std::isfinite(di) && ci / di >= 1.0) {
cParameters += 0.5 * std::log(fi) + std::log(ci);
}
++pi;
} else {
if (std::abs(node.Value) >= static_cast<double>(eps)) {
cComplexity += std::log(std::abs(node.Value));
}
}
}
cParameters -= (p / 2.0) * std::log(3.0);
auto const cLikelihood = nll;
auto mdl = cComplexity + cParameters + cLikelihood;
if (!std::isfinite(mdl)) { mdl = std::numeric_limits<double>::quiet_NaN(); }
auto expr = InfixFormatter::Format(ind->Genotype, *ds, std::numeric_limits<Scalar>::digits10);
std::string escaped;
escaped.reserve(expr.size());
for (char c : expr) {
if (c == '"') { escaped += "\\\""; }
else if (c == '\\') { escaped += "\\\\"; }
else { escaped += c; }
}
std::string objArr = "[";
for (auto j = 0UL; j < ind->Fitness.size(); ++j) {
if (j > 0) { objArr += ", "; }
objArr += jsonNum(ind->Fitness[j]);
}
objArr += "]";
if (i > 0) { out.print(",\n"); }
out.print(
" {{\"id\": {}, \"expression\": \"{}\", \"length\": {}, \"complexity\": {}, \"objectives\": {},\n"
" \"r2_train\": {}, \"r2_test\": {},\n"
" \"mse_train\": {}, \"mse_test\": {},\n"
" \"nmse_train\": {}, \"nmse_test\": {},\n"
" \"mae_train\": {}, \"mae_test\": {},\n"
" \"mdl\": {}, \"fbf\": {}}}",
i, escaped, ind->Genotype.AdjustedLength(), static_cast<size_t>(k), objArr,
jsonNum(r2Train), jsonNum(r2Test),
jsonNum(mseTrain), jsonNum(mseTest),
jsonNum(nmseTrain), jsonNum(nmseTest),
jsonNum(maeTrain), jsonNum(maeTest),
jsonNum(mdl), jsonNum(fbf));
}
out.print("\n]\n");
}
} // namespace Operon
================================================
FILE: cli/source/pareto_front.hpp
================================================
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research
#ifndef OPERON_CLI_PARETO_FRONT_HPP
#define OPERON_CLI_PARETO_FRONT_HPP
#include "operon/core/dispatch.hpp"
#include "operon/core/individual.hpp"
#include "operon/core/problem.hpp"
#include "operon/core/types.hpp"
#include <string>
namespace Operon {
// Write the rank-0 individuals from `population` to a JSON file at `path`.
// Each entry contains the infix expression, tree length, weighted complexity (k),
// raw objective values, R²/MSE/NMSE/MAE on train+test, MDL, and FBF.
// If `linearScaling` is true, a least-squares (a, b) fit is applied to each
// individual's train predictions before computing all metrics.
auto WriteParetoFront(std::string const& path,
Operon::Span<Individual const> population,
ScalarDispatch const& dtable,
Problem const& problem,
bool linearScaling) -> void;
} // namespace Operon
#endif
================================================
FILE: cli/source/reporter.hpp
================================================
#ifndef OPERON_CLI_REPORTER_HPP
#define OPERON_CLI_REPORTER_HPP
#include <fmt/format.h>
#include <operon/algorithms/ga_base.hpp>
#include <string>
#include <taskflow/taskflow.hpp>
namespace Operon {
template<typename Evaluator>
class Reporter {
gsl::not_null<Evaluator const*> evaluator_;
mutable Operon::Individual best_;
public:
explicit Reporter(gsl::not_null<Evaluator const*> evaluator)
: evaluator_(evaluator) {}
static auto PrintStats(std::vector<std::tuple<std::string, double, std::string>> const& stats, bool printHeader) -> void {
std::vector<size_t> widths;
auto out = fmt::memory_buffer();
for (auto const& [name, value, format] : stats) {
fmt::format_to(std::back_inserter(out), fmt::runtime(fmt::format("{{{}}}", format)), value);
auto width = std::max(name.size(), fmt::to_string(out).size());
widths.push_back(width);
out.clear();
}
if (printHeader) {
for (auto i = 0UL; i < stats.size(); ++i) {
fmt::print("{} ", fmt::format("{:>{}}", std::get<0>(stats[i]), widths[i]));
}
fmt::print("\n");
}
for (auto i = 0UL; i < stats.size(); ++i) {
fmt::format_to(std::back_inserter(out), fmt::runtime(fmt::format("{{{}}}", std::get<2>(stats[i]))), std::get<1>(stats[i]));
fmt::print("{} ", fmt::format("{:>{}}", fmt::to_string(out), widths[i]));
out.clear();
}
fmt::print("\n");
}
auto GetBest() const -> Operon::Individual const& { return best_; }
auto operator()(tf::Executor& executor, Operon::GeneticAlgorithmBase const& gp) const -> void {
auto const config = gp.GetConfig();
auto const pop = gp.Parents();
auto const off = gp.Offspring();
constexpr auto idx{0};
auto getBest = [&](Operon::Span<Operon::Individual const> pop) -> Operon::Individual {
const auto minElem = std::min_element(pop.begin(), pop.end(), [&](auto const& lhs, auto const& rhs) { return lhs[idx] < rhs[idx]; });
return *minElem;
};
best_ = getBest(pop);
ENSURE(best_.Size() > 0);
tf::Taskflow tf;
tf.name("report results");
auto const* problem = gp.GetProblem();
auto trainingRange = problem->TrainingRange();
auto testRange = problem->TestRange();
auto targetTrain = problem->TargetValues(trainingRange);
auto targetTest = problem->TargetValues(testRange);
Operon::Vector<Operon::Scalar> estimatedTrain;
Operon::Vector<Operon::Scalar> estimatedTest;
auto const* dataset = problem->GetDataset();
auto dtable = evaluator_->GetDispatchTable();
using Interpreter = typename Evaluator::TInterpreter;
auto evaluate = tf.emplace([&](tf::Subflow& sf) {
sf.emplace([&]() {
Interpreter interpreter{dtable, dataset, &best_.Genotype};
estimatedTrain = interpreter.Evaluate(best_.Genotype.GetCoefficients(), trainingRange);
ENSURE(trainingRange.Size() > 0 && estimatedTrain.size() == trainingRange.Size());
}).name("eval train");
sf.emplace([&]() {
Interpreter interpreter{dtable, dataset, &best_.Genotype};
estimatedTest = interpreter.Evaluate(best_.Genotype.GetCoefficients(), testRange);
ENSURE(testRange.Size() > 0 && estimatedTest.size() == testRange.Size());
}).name("eval test");
});
// scale values
Operon::Scalar a{1.0};
Operon::Scalar b{0.0};
auto linearScaling = tf.emplace([&]() {
auto [a_, b_] = Operon::FitLeastSquares(estimatedTrain, targetTrain);
a = static_cast<Operon::Scalar>(a_);
b = static_cast<Operon::Scalar>(b_);
// add scaling terms to the tree
auto& nodes = best_.Genotype.Nodes();
auto const sz = nodes.size();
if (std::abs(a - Operon::Scalar{1}) > std::numeric_limits<Operon::Scalar>::epsilon()) {
nodes.emplace_back(Operon::Node::Constant(a));
nodes.emplace_back(Operon::NodeType::Mul);
}
if (std::abs(b) > std::numeric_limits<Operon::Scalar>::epsilon()) {
nodes.emplace_back(Operon::Node::Constant(b));
nodes.emplace_back(Operon::NodeType::Add);
}
if (nodes.size() > sz) {
best_.Genotype.UpdateNodes();
}
}).name("linear scaling");
double r2Train{};
double r2Test{};
double nmseTrain{};
double nmseTest{};
double maeTrain{};
double maeTest{};
auto scale = tf.emplace([&](tf::Subflow& sf) {
sf.emplace([&]() {
ENSURE(estimatedTrain.size() == trainingRange.Size());
Eigen::Map<Eigen::Array<Operon::Scalar, -1, 1>> estimated(estimatedTrain.data(), std::ssize(estimatedTrain));
estimated = estimated * a + b;
}).name("scale train");
sf.emplace([&]() {
ENSURE(estimatedTest.size() == testRange.Size());
Eigen::Map<Eigen::Array<Operon::Scalar, -1, 1>> estimated(estimatedTest.data(), std::ssize(estimatedTest));
estimated = estimated * a + b;
}).name("scale test");
});
auto calcStats = tf.emplace([&]() {
ENSURE(!best_.Genotype.Empty());
// negate the R2 because this is an internal fitness measure (minimization) which we here repurpose
r2Train = -Operon::R2{}(estimatedTrain, targetTrain);
r2Test = -Operon::R2{}(estimatedTest, targetTest);
nmseTrain = Operon::NMSE{}(estimatedTrain, targetTrain);
nmseTest = Operon::NMSE{}(estimatedTest, targetTest);
maeTrain = Operon::MAE{}(estimatedTrain, targetTrain);
maeTest = Operon::MAE{}(estimatedTest, targetTest);
}).name("calc stats");
double avgLength = 0;
double avgQuality = 0;
double totalMemory = 0;
auto getSize = [](Operon::Individual const& ind) { return sizeof(ind) + sizeof(ind.Genotype) + sizeof(Operon::Node) * ind.Genotype.Nodes().capacity(); };
auto calculateLength = tf.transform_reduce(pop.begin(), pop.end(), avgLength, std::plus{}, [](auto const& ind) { return ind.Genotype.Length(); }).name("calc length");
auto calculateQuality = tf.transform_reduce(pop.begin(), pop.end(), avgQuality, std::plus{}, [idx=idx](auto const& ind) { return ind[idx]; }).name("calc quality");
auto calculatePopMemory = tf.transform_reduce(pop.begin(), pop.end(), totalMemory, std::plus{}, [&](auto const& ind) { return getSize(ind); }).name("calc parent mem");
auto calculateOffMemory = tf.transform_reduce(off.begin(), off.end(), totalMemory, std::plus{}, [&](auto const& ind) { return getSize(ind); }).name("calc child mem");
// define task graph
evaluate.precede(linearScaling);
linearScaling.precede(scale);
calcStats.succeed(scale);
calcStats.precede(calculateLength, calculateQuality, calculatePopMemory, calculateOffMemory);
// taskflow.dump(std::cout);
executor.corun(tf);
// executor.wait_for_all();
avgLength /= static_cast<double>(pop.size());
avgQuality /= static_cast<double>(pop.size());
using T = std::tuple<std::string, double, std::string>;
auto const* format = ":>#8.3g"; // see https://fmt.dev/latest/syntax.html
auto [resEval, jacEval, callCount, cfTime ] = evaluator_->Stats();
std::array stats {
T{ "iteration", gp.Generation(), ":>" },
T{ "r2_tr", r2Train, format },
T{ "r2_te", r2Test, format },
T{ "mae_tr", maeTrain, format },
T{ "mae_te", maeTest, format },
T{ "nmse_tr", nmseTrain, format },
T{ "nmse_te", nmseTest, format },
T{ "best_fit", best_[idx], format },
T{ "avg_fit", avgQuality, format },
T{ "best_len", best_.Genotype.Length(), format },
T{ "avg_len", avgLength, format },
T{ "eval_cnt", callCount, ":>" },
T{ "res_eval", resEval, ":>" },
T{ "jac_eval", jacEval, ":>" },
T{ "opt_time", cfTime, ":>" },
T{ "seed", config.Seed, ":>10" },
T{ "elapsed", gp.Elapsed(), ":>"},
};
PrintStats({ stats.begin(), stats.end() }, gp.Generation() == 0);
}
};
} // namespace Operon
#endif
================================================
FILE: cli/source/util.cpp
================================================
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research
#include <array>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <fmt/core.h>
#include <fmt/format.h>
#include <limits>
#include <memory>
#include <scn/scan.h>
#include <sstream>
#include <stdexcept>
#include <taskflow/taskflow.hpp>
#include <taskflow/algorithm/reduce.hpp>
#include "util.hpp"
#include "operon/core/node.hpp"
#include "operon/core/pset.hpp"
#include "operon/core/version.hpp"
#include "operon/core/types.hpp"
using Operon::NodeType;
namespace Operon {
static const Operon::Map<std::string, NodeType> Primitives {
{ "add", NodeType::Add },
{ "mul", NodeType::Mul },
{ "sub", NodeType::Sub },
{ "div", NodeType::Div },
{ "fmin", NodeType::Fmin },
{ "fmax", NodeType::Fmax },
{ "aq", NodeType::Aq },
{ "pow", NodeType::Pow },
{ "powabs", NodeType::Powabs },
{ "abs", NodeType::Abs },
{ "acos", NodeType::Acos },
{ "asin", NodeType::Asin },
{ "atan", NodeType::Atan },
{ "cbrt", NodeType::Cbrt },
{ "ceil", NodeType::Ceil },
{ "cos", NodeType::Cos },
{ "cosh", NodeType::Cosh },
{ "exp", NodeType::Exp },
{ "floor", NodeType::Floor },
{ "log", NodeType::Log },
{ "logabs", NodeType::Logabs },
{ "log1p", NodeType::Log1p },
{ "sin", NodeType::Sin },
{ "sinh", NodeType::Sinh },
{ "sqrt", NodeType::Sqrt },
{ "sqrtabs", NodeType::Sqrtabs },
{ "tan", NodeType::Tan },
{ "tanh", NodeType::Tanh },
{ "square", NodeType::Square },
{ "dyn", NodeType::Dynamic },
{ "constant", NodeType::Constant },
{ "variable", NodeType::Variable }
};
auto Split(const std::string& s, char delimiter) -> std::vector<std::string>
{
std::vector<std::string> tokens;
std::string token;
std::istringstream tokenStream(s);
while (std::getline(tokenStream, token, delimiter)) {
tokens.push_back(token);
}
return tokens;
}
// splits a string into substrings separated by delimiter
// formats a duration as dd:hh:mm:ss.ms
auto FormatDuration(std::chrono::duration<double> d) -> std::string
{
auto h = std::chrono::duration_cast<std::chrono::hours>(d);
auto m = std::chrono::duration_cast<std::chrono::minutes>(d - h);
auto s = std::chrono::duration_cast<std::chrono::seconds>(d - h - m);
auto l = std::chrono::duration_cast<std::chrono::milliseconds>(d - h - m - s);
return fmt::format("{:#02d}:{:#02d}:{:#02d}.{:#03d}", h.count(), m.count(), s.count(), l.count());
}
auto FormatBytes(size_t bytes) -> std::string
{
constexpr std::array<char, 6> sizes{" KMGT"};
constexpr size_t base{1024};
auto p = static_cast<size_t>(std::floor(std::log2(bytes) / std::log2(base)));
return fmt::format("{:.2f} {}b", static_cast<double>(bytes) / std::pow(base, p), sizes.at(p));
}
auto ParseRange(std::string const& str) -> std::pair<size_t, size_t>
{
auto result = scn::scan<size_t, size_t>(str, "{}:{}");
if (!result) {
throw std::runtime_error(fmt::format("could not parse range '{}'", str));
}
auto [a, b] = result->values();
return std::make_pair(a, b);
}
auto ParsePrimitiveSetConfig(const std::string& options) -> PrimitiveSetConfig
{
PrimitiveSetConfig config{};
for (auto& s : Split(options, ',')) {
if (auto it = Primitives.find(s); it != Primitives.end()) {
config |= it->second;
} else {
throw std::runtime_error(fmt::format("Unrecognized symbol {}\n", s));
}
}
return config;
}
auto PrintPrimitives(PrimitiveSetConfig config) -> void
{
PrimitiveSet tmpSet;
tmpSet.SetConfig(config);
fmt::print("Built-in primitives:\n");
fmt::print("{:<8}\t{:<50}\t{:>7}\t\t{:>9}\n", "Symbol", "Description", "Enabled", "Frequency");
for (size_t i = 0; i < Operon::NodeTypes::Count; ++i) {
auto type = static_cast<NodeType>(i);
auto hash = Node(type).HashValue;
auto enabled = tmpSet.Contains(hash) && tmpSet.IsEnabled(hash);
auto freq = enabled ? tmpSet.Frequency(hash) : 0U;
Node node(type);
fmt::print("{:<8}\t{:<50}\t{:>7}\t\t{:>9}\n", node.Name(), node.Desc(), enabled, freq != 0U ? std::to_string(freq) : "-");
}
}
auto InitOptions(std::string const& name, std::string const& desc, int width) -> cxxopts::Options
{
cxxopts::Options opts(name, desc);
opts.set_width(width);
std::string const symbols = "add, sub, mul, div, exp, log, square, sqrt, cbrt, sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, abs, aq, ceil, floor, fmin, fmax, log1p, logabs, sqrtabs, pow, powabs";
opts.add_options()
("dataset", "Dataset file name (csv) (required)", cxxopts::value<std::string>())
("shuffle", "Shuffle the input data", cxxopts::value<bool>()->default_value("false"))
("standardize", "Standardize the training partition (zero mean, unit variance)", cxxopts::value<bool>()->default_value("false"))
("train", "Training range specified as start:end (required)", cxxopts::value<std::string>())
("test", "Test range specified as start:end", cxxopts::value<std::string>())
("target", "Name of the target variable (required)", cxxopts::value<std::string>())
("inputs", "Comma-separated list of input variables", cxxopts::value<std::string>())
("epsilon", "Tolerance for fitness comparison (needed e.g. for eps-dominance)", cxxopts::value<Operon::Scalar>()->default_value("1e-6"))
("objective", "The error metric used for calculating fitness", cxxopts::value<std::string>()->default_value("r2"))
("linear-scaling", "Apply linear scaling on model predictions", cxxopts::value<bool>()->default_value("true"))
("population-size", "Population size", cxxopts::value<size_t>()->default_value("1000"))
("pool-size", "Recombination pool size (how many generated offspring per generation)", cxxopts::value<size_t>()->default_value("1000"))
("seed", "Random number seed", cxxopts::value<Operon::RandomGenerator::result_type>()->default_value("0"))
("generations", "Number of generations", cxxopts::value<size_t>()->default_value("1000"))
("evaluations", "Evaluation budget", cxxopts::value<size_t>()->default_value("1000000"))
("iterations", "Local optimization iterations", cxxopts::value<size_t>()->default_value("0"))
("selection-pressure", "Selection pressure", cxxopts::value<size_t>()->default_value("100"))
("maxlength", "Maximum length", cxxopts::value<size_t>()->default_value("50"))
("maxdepth", "Maximum depth", cxxopts::value<size_t>()->default_value("10"))
("crossover-probability", "The probability to apply crossover", cxxopts::value<Operon::Scalar>()->default_value("1.0"))
("crossover-internal-probability", "Crossover bias towards swapping function nodes", cxxopts::value<Operon::Scalar>()->default_value("0.9"))
("mutation-probability", "The probability to apply mutation", cxxopts::value<Operon::Scalar>()->default_value("0.25"))
("creator", "Tree creator operator to initialize the population with.", cxxopts::value<std::string>()->default_value("btc"))
("creator-mindepth", "Minimum tree depth (applies to the grow tree creator)", cxxopts::value<std::size_t>()->default_value("1"))
("creator-maxdepth", "Minimum tree depth (applies to all tree creators)", cxxopts::value<std::size_t>()->default_value("100"))
("creator-maxlength", "Maximum tree length (applies to all tree creators)", cxxopts::value<std::size_t>()->default_value("50"))
("female-selector", "Female selection operator, with optional parameters separated by : (eg, --selector tournament:5)", cxxopts::value<std::string>()->default_value("tournament"))
("male-selector", "Male selection operator, with optional parameters separated by : (eg, --selector tournament:5)", cxxopts::value<std::string>()->default_value("tournament"))
("offspring-generator", "OffspringGenerator operator, with optional parameters separated by : (eg --offspring-generator brood:10:10)", cxxopts::value<std::string>()->default_value("basic"))
("reinserter", "Reinsertion operator merging offspring in the recombination pool back into the population", cxxopts::value<std::string>()->default_value("keep-best"))
("enable-symbols", "Comma-separated list of enabled symbols ("+symbols+")", cxxopts::value<std::string>())
("local-search-probability", "Probability for local search", cxxopts::value<Operon::Scalar>()->default_value("1.0"))
("lamarckian-probability", "Probability that the local search improvements are saved back into the chromosome", cxxopts::value<Operon::Scalar>()->default_value("1.0"))
("disable-symbols", "Comma-separated list of disabled symbols ("+symbols+")", cxxopts::value<std::string>())
("symbolic", "Operate in symbolic mode - no coefficient tuning or coefficient mutation", cxxopts::value<bool>()->default_value("false"))
("show-primitives", "Display the primitive set used by the algorithm")
("threads", "Number of threads to use for parallelism", cxxopts::value<size_t>()->default_value("0"))
("timelimit", "Time limit after which the algorithm will terminate", cxxopts::value<size_t>()->default_value(std::to_string(std::numeric_limits<size_t>::max())))
("transposition-cache", "Cache fitness values keyed by Zobrist hash of tree structure; most effective with coefficient optimization enabled", cxxopts::value<bool>()->default_value("false"))
("pareto-front", "Write rank-0 Pareto front to this JSON file after the run (only effective with Pareto-based algorithms, e.g. operon_nsgp)", cxxopts::value<std::string>())
("debug", "Debug mode (more information displayed)")
("help", "Print help")
("version", "Print version and program information");
return opts;
}
auto ParseOptions(cxxopts::Options&& opts, int argc, char** argv) -> cxxopts::ParseResult {
cxxopts::ParseResult result;
try {
result = opts.parse(argc, argv);
} catch (cxxopts::exceptions::parsing const& ex) {
fmt::print(stderr, "error: {}. rerun with --help to see available options.\n", ex.what());
std::exit(EXIT_FAILURE);
}
if (result.arguments().empty() || result.contains("help")) {
fmt::print("{}\n", opts.help());
std::exit(EXIT_SUCCESS);
}
if (result.contains("version")) {
fmt::print("{}\n", Operon::Version());
std::exit(EXIT_SUCCESS);
}
if (!result.contains("target")) {
fmt::print(stderr, "error: no target variable was specified.\n");
std::exit(EXIT_FAILURE);
}
if (!result.contains("dataset")) {
fmt::print(stderr, "error: no dataset was specified.\n");
std::exit(EXIT_FAILURE);
}
return result;
}
} // namespace Operon
================================================
FILE: cli/source/util.hpp
================================================
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research
#ifndef OPERON_CLI_UTIL_HPP
#define OPERON_CLI_UTIL_HPP
#include "operon/core/node.hpp"
#include <chrono>
#include <cstddef>
#include <cxxopts.hpp>
#include <fmt/core.h>
#include <string>
#include <utility>
#include <vector>
namespace Operon {
constexpr int optionsWidth = 200;
auto ParseRange(std::string const& str) -> std::pair<size_t, size_t>;
auto Split(const std::string& s, char delimiter) -> std::vector<std::string>;
auto FormatBytes(size_t bytes) -> std::string;
auto FormatDuration(std::chrono::duration<double> d) -> std::string;
auto ParsePrimitiveSetConfig(const std::string& options) -> PrimitiveSetConfig;
auto PrintPrimitives(PrimitiveSetConfig config) -> void;
auto InitOptions(std::string const& name, std::string const& desc, int width = optionsWidth) -> cxxopts::Options;
auto ParseOptions(cxxopts::Options&& opts, int argc, char** argv) -> cxxopts::ParseResult;
} // namespace Operon
#endif
================================================
FILE: cmake/coverage.cmake
================================================
# ---- Variables ----
# We use variables separate from what CTest uses, because those have
# customization issues
set(
COVERAGE_TRACE_COMMAND
lcov -c -q
-o "${PROJECT_BINARY_DIR}/coverage.info"
-d "${PROJECT_BINARY_DIR}"
--include "${PROJECT_SOURCE_DIR}/*"
CACHE STRING
"; separated command to generate a trace for the 'coverage' target"
)
set(
COVERAGE_HTML_COMMAND
genhtml --legend -f -q
"${PROJECT_BINARY_DIR}/coverage.info"
-p "${PROJECT_SOURCE_DIR}"
-o "${PROJECT_BINARY_DIR}/coverage_html"
CACHE STRING
"; separated command to generate an HTML report for the 'coverage' target"
)
# ---- Coverage target ----
add_custom_target(
coverage
COMMAND ${COVERAGE_TRACE_COMMAND}
COMMAND ${COVERAGE_HTML_COMMAND}
COMMENT "Generating coverage report"
VERBATIM
)
================================================
FILE: cmake/dev-mode.cmake
================================================
include(CTest)
if(BUILD_TESTING)
add_subdirectory(test)
endif()
option(BUILD_MCSS_DOCS "Build documentation using Doxygen and m.css" OFF)
if(BUILD_MCSS_DOCS)
include(cmake/docs.cmake)
endif()
option(ENABLE_COVERAGE "Enable coverage support separate from CTest's" OFF)
if(ENABLE_COVERAGE)
include(cmake/coverage.cmake)
endif()
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
include(cmake/open-cpp-coverage.cmake OPTIONAL)
endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
if(CMAKE_EXPORT_COMPILE_COMMANDS)
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
endif()
include(cmake/lint-targets.cmake)
include(cmake/spell-targets.cmake)
================================================
FILE: cmake/docs.cmake
================================================
# ---- Redefine docs_early_return ----
# This function must be a macro, so the return() takes effect in the calling
# scope. This prevents other targets from being available and potentially
# requiring dependencies. This cuts down on the time it takes to generate
# documentation in CI.
macro(docs_early_return)
return()
endmacro()
# ---- Dependencies ----
include(FetchContent)
FetchContent_Declare(
mcss URL
https://github.com/friendlyanon/m.css/releases/download/release-1/mcss.zip
URL_MD5 00cd2757ebafb9bcba7f5d399b3bec7f
SOURCE_DIR "${PROJECT_BINARY_DIR}/mcss"
UPDATE_DISCONNECTED YES
)
FetchContent_MakeAvailable(mcss)
find_package(Python3 3.9 REQUIRED)
# ---- Declare documentation target ----
set(
DOXYGEN_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/docs"
CACHE PATH "Path for the generated Doxygen documentation"
)
set(working_dir "${PROJECT_BINARY_DIR}/docs")
foreach(file IN ITEMS Doxyfile conf.py)
configure_file("docs/${file}.in" "${working_dir}/${file}" @ONLY)
endforeach()
set(mcss_script "${mcss_SOURCE_DIR}/documentation/doxygen.py")
set(config "${working_dir}/conf.py")
add_custom_target(
docs
COMMAND "${CMAKE_COMMAND}" -E remove_directory
"${DOXYGEN_OUTPUT_DIRECTORY}/html"
"${DOXYGEN_OUTPUT_DIRECTORY}/xml"
COMMAND "${Python3_EXECUTABLE}" "${mcss_script}" "${config}"
COMMENT "Building documentation using Doxygen and m.css"
WORKING_DIRECTORY "${working_dir}"
VERBATIM
)
================================================
FILE: cmake/get-git-revision.cmake
================================================
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
# get_git_head_revision(<refspecvar> <hashvar> [ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR])
#
# Returns the refspec and sha hash of the current head revision
#
# git_describe(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
# git_describe_working_tree(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the working tree (--dirty option),
# and adjusting the output so that it tests false if an error occurs.
#
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
# git_local_changes(<var>)
#
# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes.
# Uses the return code of "git diff-index --quiet HEAD --".
# Does not regard untracked files.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2020 Ryan Pavlik <ryan.pavlik@gmail.com> <abiryan@ryand.net>
# http://academic.cleardefinition.com
#
# Copyright 2009-2013, Iowa State University.
# Copyright 2013-2020, Ryan Pavlik
# Copyright 2013-2020, Contributors
# SPDX-License-Identifier: BSL-1.0
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)
# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
# Function _git_find_closest_git_dir finds the next closest .git directory
# that is part of any directory in the path defined by _start_dir.
# The result is returned in the parent scope variable whose name is passed
# as variable _git_dir_var. If no .git directory can be found, the
# function returns an empty string via _git_dir_var.
#
# Example: Given a path C:/bla/foo/bar and assuming C:/bla/.git exists and
# neither foo nor bar contain a file/directory .git. This wil return
# C:/bla/.git
#
function(_git_find_closest_git_dir _start_dir _git_dir_var)
set(cur_dir "${_start_dir}")
set(git_dir "${_start_dir}/.git")
while(NOT EXISTS "${git_dir}")
# .git dir not found, search parent directories
set(git_previous_parent "${cur_dir}")
get_filename_component(cur_dir ${cur_dir} DIRECTORY)
if(cur_dir STREQUAL git_previous_parent)
# We have reached the root directory, we are not in git
set(${_git_dir_var}
""
PARENT_SCOPE)
return()
endif()
set(git_dir "${cur_dir}/.git")
endwhile()
set(${_git_dir_var}
"${git_dir}"
PARENT_SCOPE)
endfunction()
function(get_git_head_revision _refspecvar _hashvar)
_git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR)
if("${ARGN}" STREQUAL "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR")
set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR TRUE)
else()
set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR FALSE)
endif()
if(NOT "${GIT_DIR}" STREQUAL "")
file(RELATIVE_PATH _relative_to_source_dir "${CMAKE_SOURCE_DIR}"
"${GIT_DIR}")
if("${_relative_to_source_dir}" MATCHES "[.][.]" AND NOT ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
# We've gone above the CMake root dir.
set(GIT_DIR "")
endif()
endif()
if("${GIT_DIR}" STREQUAL "")
set(${_refspecvar}
"GITDIR-NOTFOUND"
PARENT_SCOPE)
set(${_hashvar}
"GITDIR-NOTFOUND"
PARENT_SCOPE)
return()
endif()
# Check if the current source dir is a git submodule or a worktree.
# In both cases .git is a file instead of a directory.
#
if(NOT IS_DIRECTORY ${GIT_DIR})
# The following git command will return a non empty string that
# points to the super project working tree if the current
# source dir is inside a git submodule.
# Otherwise the command will return an empty string.
#
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-parse
--show-superproject-working-tree
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT "${out}" STREQUAL "")
# If out is empty, GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a submodule
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE
${submodule})
string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE)
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE}
ABSOLUTE)
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
else()
# GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a worktree
file(READ ${GIT_DIR} worktree_ref)
# The .git directory contains a path to the worktree information directory
# inside the parent git repo of the worktree.
#
string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir
${worktree_ref})
string(STRIP ${git_worktree_dir} git_worktree_dir)
_git_find_closest_git_dir("${git_worktree_dir}" GIT_DIR)
set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD")
endif()
else()
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()
if(NOT EXISTS "${HEAD_SOURCE_FILE}")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${HEAD_SOURCE_FILE}" "${HEAD_FILE}" COPYONLY)
configure_file("${_gitdescmoddir}/get-git-revision.cmake.in"
"${GIT_DATA}/grabRef.cmake" @ONLY)
include("${GIT_DATA}/grabRef.cmake")
set(${_refspecvar}
"${HEAD_REF}"
PARENT_SCOPE)
set(${_hashvar}
"${HEAD_HASH}"
PARENT_SCOPE)
endfunction()
function(git_describe _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var}
"HEAD-HASH-NOTFOUND"
PARENT_SCOPE)
return()
endif()
# TODO sanitize
#if((${ARGN}" MATCHES "&&") OR
# (ARGN MATCHES "||") OR
# (ARGN MATCHES "\\;"))
# message("Please report the following error to the project!")
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
#endif()
#message(STATUS "Arguments to execute_process: ${ARGN}")
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --tags --always ${hash} ${ARGN}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_describe_working_tree _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --dirty ${ARGN}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_get_exact_tag _var)
git_describe(out --exact-match ${ARGN})
set(${_var}
"${out}"
PARENT_SCOPE)
endfunction()
function(git_local_changes _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var}
"GIT-NOTFOUND"
PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var}
"HEAD-HASH-NOTFOUND"
PARENT_SCOPE)
return()
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE out
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(res EQUAL 0)
set(${_var}
"CLEAN"
PARENT_SCOPE)
else()
set(${_var}
"DIRTY"
PARENT_SCOPE)
endif()
endfunction()
================================================
FILE: cmake/get-git-revision.cmake.in
================================================
#
# Internal file for GetGitRevisionDescription.cmake
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright 2009-2012, Iowa State University
# Copyright 2011-2015, Contributors
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
# SPDX-License-Identifier: BSL-1.0
set(HEAD_HASH)
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
if(HEAD_CONTENTS MATCHES "ref")
# named branch
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
else()
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
set(HEAD_HASH "${CMAKE_MATCH_1}")
endif()
endif()
else()
# detached HEAD
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
endif()
if(NOT HEAD_HASH)
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
string(STRIP "${HEAD_HASH}" HEAD_HASH)
endif()
================================================
FILE: cmake/install-config.cmake
================================================
include(CMakeFindDependencyMacro)
# PUBLIC dependencies
find_dependency(Eigen3 CONFIG REQUIRED)
find_dependency(Threads REQUIRED)
find_dependency(fluky CONFIG REQUIRED)
find_dependency(fmt CONFIG REQUIRED)
find_dependency(lbfgs CONFIG REQUIRED)
find_dependency(libassert CONFIG REQUIRED)
find_dependency(infix-parser CONFIG REQUIRED)
find_dependency(mdspan CONFIG REQUIRED)
find_dependency(vstat CONFIG REQUIRED)
# INTERFACE dependencies
find_dependency(eve CONFIG REQUIRED)
# PRIVATE dependencies (needed for static library)
find_dependency(AriaCsvParser CONFIG REQUIRED)
find_dependency(Taskflow CONFIG REQUIRED)
find_dependency(cpp-sort CONFIG REQUIRED)
find_dependency(unordered_dense CONFIG REQUIRED)
find_dependency(tl-expected CONFIG REQUIRED)
include("${CMAKE_CURRENT_LIST_DIR}/operonTargets.cmake")
check_required_components(operon)
================================================
FILE: cmake/install-rules.cmake
================================================
if(PROJECT_IS_TOP_LEVEL)
set(CMAKE_INSTALL_INCLUDEDIR include/operon CACHE PATH "")
endif()
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)
# find_package(<package>) call for consumers to find this project
set(package operon)
install(
DIRECTORY
include/
"${PROJECT_BINARY_DIR}/export/"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT operon_Development
)
install(
TARGETS operon_operon
EXPORT operonTargets
RUNTIME #
COMPONENT operon_Runtime
LIBRARY #
COMPONENT operon_Runtime
NAMELINK_COMPONENT operon_Development
ARCHIVE #
COMPONENT operon_Development
INCLUDES #
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
write_basic_package_version_file(
"${package}ConfigVersion.cmake"
COMPATIBILITY SameMajorVersion
)
# Allow package maintainers to freely override the path for the configs
set(
operon_INSTALL_CMAKEDIR "${CMAKE_INSTALL_DATADIR}/${package}"
CACHE PATH "CMake package config location relative to the install prefix"
)
mark_as_advanced(operon_INSTALL_CMAKEDIR)
install(
FILES cmake/install-config.cmake
DESTINATION "${operon_INSTALL_CMAKEDIR}"
RENAME "${package}Config.cmake"
COMPONENT operon_Development
)
install(
FILES "${PROJECT_BINARY_DIR}/${package}ConfigVersion.cmake"
DESTINATION "${operon_INSTALL_CMAKEDIR}"
COMPONENT operon_Development
)
install(
EXPORT operonTargets
NAMESPACE operon::
DESTINATION "${operon_INSTALL_CMAKEDIR}"
COMPONENT operon_Development
)
if(PROJECT_IS_TOP_LEVEL)
include(CPack)
endif()
================================================
FILE: cmake/lint-targets.cmake
================================================
set(
FORMAT_PATTERNS
source/*.cpp source/*.hpp
include/*.hpp
test/*.cpp test/*.hpp
example/*.cpp example/*.hpp
CACHE STRING
"; separated patterns relative to the project source dir to format"
)
set(FORMAT_COMMAND clang-format CACHE STRING "Formatter to use")
add_custom_target(
format-check
COMMAND "${CMAKE_COMMAND}"
-D "FORMAT_COMMAND=${FORMAT_COMMAND}"
-D "PATTERNS=${FORMAT_PATTERNS}"
-P "${PROJECT_SOURCE_DIR}/cmake/lint.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Linting the code"
VERBATIM
)
add_custom_target(
format-fix
COMMAND "${CMAKE_COMMAND}"
-D "FORMAT_COMMAND=${FORMAT_COMMAND}"
-D "PATTERNS=${FORMAT_PATTERNS}"
-D FIX=YES
-P "${PROJECT_SOURCE_DIR}/cmake/lint.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Fixing the code"
VERBATIM
)
================================================
FILE: cmake/lint.cmake
================================================
cmake_minimum_required(VERSION 3.14)
macro(default name)
if(NOT DEFINED "${name}")
set("${name}" "${ARGN}")
endif()
endmacro()
default(FORMAT_COMMAND clang-format)
default(
PATTERNS
source/*.cpp source/*.hpp
include/*.hpp
test/*.cpp test/*.hpp
example/*.cpp example/*.hpp
)
default(FIX NO)
set(flag --output-replacements-xml)
set(args OUTPUT_VARIABLE output)
if(FIX)
set(flag -i)
set(args "")
endif()
file(GLOB_RECURSE files ${PATTERNS})
set(badly_formatted "")
set(output "")
string(LENGTH "${CMAKE_SOURCE_DIR}/" path_prefix_length)
foreach(file IN LISTS files)
execute_process(
COMMAND "${FORMAT_COMMAND}" --style=file "${flag}" "${file}"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE result
${args}
)
if(NOT result EQUAL "0")
message(FATAL_ERROR "'${file}': formatter returned with ${result}")
endif()
if(NOT FIX AND output MATCHES "\n<replacement offset")
string(SUBSTRING "${file}" "${path_prefix_length}" -1 relative_file)
list(APPEND badly_formatted "${relative_file}")
endif()
set(output "")
endforeach()
if(NOT badly_formatted STREQUAL "")
list(JOIN badly_formatted "\n" bad_list)
message("The following files are badly formatted:\n\n${bad_list}\n")
message(FATAL_ERROR "Run again with FIX=YES to fix these files.")
endif()
================================================
FILE: cmake/open-cpp-coverage.cmake.example
================================================
# Example file to run OpenCppCoverage on Windows
include(ProcessorCount)
ProcessorCount(N)
file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/opencppcoverage")
# Convert delimiters to Windows ones
string(REPLACE "/" "\\" binary_dir "${PROJECT_BINARY_DIR}")
string(REPLACE "/" "\\" source_dir "${PROJECT_SOURCE_DIR}")
string(REPLACE "/" "\\" ctest "${CMAKE_CTEST_COMMAND}")
add_custom_target(
win-cov
COMMAND OpenCppCoverage -q
# We want coverage from the child processes of CTest
--cover_children
# Subdirectory where the tests reside in the binary directory
--modules "${binary_dir}\\test"
# This command is for the developer, so export as html instead of cobertura
--export_type "html:${binary_dir}\\opencppcoverage"
# Source (not header) file locations
--sources "${source_dir}\\source"
--sources "${source_dir}\\test\\source"
# Working directory for CTest, which should be the binary directory
--working_dir "${binary_dir}"
# OpenCppCoverage should be run only with the Debug configuration tests
-- "${ctest}" -C Debug --output-on-failure -j "${N}"
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}"
VERBATIM
)
================================================
FILE: cmake/prelude.cmake
================================================
# ---- In-source guard ----
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
message(
FATAL_ERROR
"In-source builds are not supported. "
"Please read the BUILDING document before trying to build this project. "
"You may need to delete 'CMakeCache.txt' and 'CMakeFiles/' first."
)
endif()
# ---- Dummy function for docs generation ----
# This function is empty here, so it can be overridden in docs.cmake and in CI
# only the docs target is made available
macro(docs_early_return)
endmacro()
================================================
FILE: cmake/project-is-top-level.cmake
================================================
# This variable is set by project() in CMake 3.21+
string(
COMPARE EQUAL
"${CMAKE_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}"
PROJECT_IS_TOP_LEVEL
)
================================================
FILE: cmake/spell-targets.cmake
================================================
set(SPELL_COMMAND codespell CACHE STRING "Spell checker to use")
add_custom_target(
spell-check
COMMAND "${CMAKE_COMMAND}"
-D "SPELL_COMMAND=${SPELL_COMMAND}"
-P "${PROJECT_SOURCE_DIR}/cmake/spell.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Checking spelling"
VERBATIM
)
add_custom_target(
spell-fix
COMMAND "${CMAKE_COMMAND}"
-D "SPELL_COMMAND=${SPELL_COMMAND}"
-D FIX=YES
-P "${PROJECT_SOURCE_DIR}/cmake/spell.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Fixing spelling errors"
VERBATIM
)
================================================
FILE: cmake/spell.cmake
================================================
cmake_minimum_required(VERSION 3.14)
macro(default name)
if(NOT DEFINED "${name}")
set("${name}" "${ARGN}")
endif()
endmacro()
default(SPELL_COMMAND codespell)
default(FIX NO)
set(flag "")
if(FIX)
set(flag -w)
endif()
execute_process(
COMMAND "${SPELL_COMMAND}" ${flag}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE result
)
if(result EQUAL "65")
message(FATAL_ERROR "Run again with FIX=YES to fix these errors.")
elseif(result EQUAL "64")
message(FATAL_ERROR "Spell checker printed the usage info. Bad arguments?")
elseif(NOT result EQUAL "0")
message(FATAL_ERROR "Spell checker returned with ${result}")
endif()
================================================
FILE: cmake/variables.cmake
================================================
# ---- Developer mode ----
# Developer mode enables targets and code paths in the CMake scripts that are
# only relevant for the developer(s) of operon
# Targets necessary to build the project must be provided unconditionally, so
# consumers can trivially build and package the project
if(PROJECT_IS_TOP_LEVEL)
option(operon_DEVELOPER_MODE "Enable developer mode" OFF)
option(BUILD_SHARED_LIBS "Build shared libs." OFF)
# compile and link-time options
set(JEMALLOC_DESCRIPTION "Link against jemalloc, a general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support [default=OFF].")
set(USE_SINGLE_PRECISION_DESCRIPTION "Perform model evaluation using floats (single precision) instead of doubles. Great for reducing runtime, might not be appropriate for all purposes [default=OFF].")
set(USE_CERES_DESCRIPTION "Use the non-linear least squares optimizer from Ceres solver to tune model coefficients (if OFF, Eigen::LevenbergMarquardt will be used instead).")
set(MATH_BACKEND_DESCRIPTION "Math library for tree evaluation (defaults to Eigen)")
# option descriptions
option(USE_JEMALLOC ${JEMALLOC_DESCRIPTION} OFF)
option(USE_SINGLE_PRECISION ${USE_SINGLE_PRECISION_DESCRIPTION} ON)
option(USE_CERES ${USE_CERES_DESCRIPTION} OFF)
option(MATH_BACKEND ${MATH_BACKEND_DESCRIPTION} "Eigen")
# provide a summary of configured options
include(FeatureSummary)
add_feature_info(USE_JEMALLOC USE_JEMALLOC ${JEMALLOC_DESCRIPTION})
add_feature_info(USE_SINGLE_PRECISION USE_SINGLE_PRECISION ${USE_SINGLE_PRECISION_DESCRIPTION})
add_feature_info(USE_CERES USE_CERES ${USE_CERES_DESCRIPTION})
add_feature_info(MATH_BACKEND MATH_BACKEND_DESCRIPTION ${MATH_BACKEND_DESCRIPTION})
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
if(CMAKE_EXPORT_COMPILE_COMMANDS)
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
endif()
endif()
# ---- Suppress C4251 on Windows ----
# Please see include/operon/operon.hpp for more details
set(pragma_suppress_c4251 "#define OPERON_SUPPRESS_C4251")
if(MSVC)
string(APPEND pragma_suppress_c4251 [[ _Pragma("warning(suppress:4251)")]])
endif()
# ---- Warning guard ----
# target_include_directories with the SYSTEM modifier will request the compiler
# to omit warnings from the provided paths, if the compiler supports that
# This is to provide a user experience similar to find_package when
# add_subdirectory or FetchContent is used to consume this project
set(operon_warning_guard "")
if(NOT PROJECT_IS_TOP_LEVEL)
option(
operon_INCLUDES_WITH_SYSTEM
"Use SYSTEM modifier for operon's includes, disabling warnings"
ON
)
mark_as_advanced(operon_INCLUDES_WITH_SYSTEM)
if(operon_INCLUDES_WITH_SYSTEM)
set(operon_warning_guard SYSTEM)
endif()
endif()
================================================
FILE: cmake/windows-set-path.cmake
================================================
# This function will add shared libraries to the PATH when running the test, so
# they can be found. Windows does not support RPATH or similar. See:
# https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order
# Usage: windows_set_path(<test> <target>...)
function(windows_set_path TEST)
if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
return()
endif()
set(path "")
set(glue "")
foreach(target IN LISTS ARGN)
get_target_property(type "${target}" TYPE)
if(type STREQUAL "SHARED_LIBRARY")
set(path "${path}${glue}$<TARGET_FILE_DIR:${target}>")
set(glue "\;") # backslash is important
endif()
endforeach()
if(NOT path STREQUAL "")
set_property(TEST "${TEST}" PROPERTY ENVIRONMENT "PATH=${path}")
endif()
endfunction()
================================================
FILE: data/AirfoilSelfNoise.csv
================================================
X1,X2,X3,X4,X5,Y
800,0,0.3048,71.3,0.00266337,126.201
1000,0,0.3048,71.3,0.00266337,125.201
1250,0,0.3048,71.3,0.00266337,125.951
1600,0,0.3048,71.3,0.00266337,127.591
2000,0,0.3048,71.3,0.00266337,127.461
2500,0,0.3048,71.3,0.00266337,125.571
3150,0,0.3048,71.3,0.00266337,125.201
4000,0,0.3048,71.3,0.00266337,123.061
5000,0,0.3048,71.3,0.00266337,121.301
6300,0,0.3048,71.3,0.00266337,119.541
8000,0,0.3048,71.3,0.00266337,117.151
10000,0,0.3048,71.3,0.00266337,115.391
12500,0,0.3048,71.3,0.00266337,112.241
16000,0,0.3048,71.3,0.00266337,108.721
500,0,0.3048,55.5,0.00283081,126.416
630,0,0.3048,55.5,0.00283081,127.696
800,0,0.3048,55.5,0.00283081,128.086
1000,0,0.3048,55.5,0.00283081,126.966
1250,0,0.3048,55.5,0.00283081,126.086
1600,0,0.3048,55.5,0.00283081,126.986
2000,0,0.3048,55.5,0.00283081,126.616
2500,0,0.3048,55.5,0.00283081,124.106
3150,0,0.3048,55.5,0.00283081,123.236
4000,0,0.3048,55.5,0.00283081,121.106
5000,0,0.3048,55.5,0.00283081,119.606
6300,0,0.3048,55.5,0.00283081,117.976
8000,0,0.3048,55.5,0.00283081,116.476
10000,0,0.3048,55.5,0.00283081,113.076
12500,0,0.3048,55.5,0.00283081,111.076
200,0,0.3048,39.6,0.00310138,118.129
250,0,0.3048,39.6,0.00310138,119.319
315,0,0.3048,39.6,0.00310138,122.779
400,0,0.3048,39.6,0.00310138,124.809
500,0,0.3048,39.6,0.00310138,126.959
630,0,0.3048,39.6,0.00310138,128.629
800,0,0.3048,39.6,0.00310138,129.099
1000,0,0.3048,39.6,0.00310138,127.899
1250,0,0.3048,39.6,0.00310138,125.499
1600,0,0.3048,39.6,0.00310138,124.049
2000,0,0.3048,39.6,0.00310138,123.689
2500,0,0.3048,39.6,0.00310138,121.399
3150,0,0.3048,39.6,0.00310138,120.319
4000,0,0.3048,39.6,0.00310138,119.229
5000,0,0.3048,39.6,0.00310138,117.789
6300,0,0.3048,39.6,0.00310138,116.229
8000,0,0.3048,39.6,0.00310138,114.779
10000,0,0.3048,39.6,0.00310138,112.139
12500,0,0.3048,39.6,0.00310138,109.619
200,0,0.3048,31.7,0.00331266,117.195
250,0,0.3048,31.7,0.00331266,118.595
315,0,0.3048,31.7,0.00331266,122.765
400,0,0.3048,31.7,0.00331266,125.045
500,0,0.3048,31.7,0.00331266,127.315
630,0,0.3048,31.7,0.00331266,129.095
800,0,0.3048,31.7,0.00331266,129.235
1000,0,0.3048,31.7,0.00331266,127.365
1250,0,0.3048,31.7,0.00331266,124.355
1600,0,0.3048,31.7,0.00331266,122.365
2000,0,0.3048,31.7,0.00331266,122.375
2500,0,0.3048,31.7,0.00331266,120.755
3150,0,0.3048,31.7,0.00331266,119.135
4000,0,0.3048,31.7,0.00331266,118.145
5000,0,0.3048,31.7,0.00331266,115.645
6300,0,0.3048,31.7,0.00331266,113.775
8000,0,0.3048,31.7,0.00331266,110.515
10000,0,0.3048,31.7,0.00331266,108.265
800,1.5,0.3048,71.3,0.00336729,127.122
1000,1.5,0.3048,71.3,0.00336729,125.992
1250,1.5,0.3048,71.3,0.00336729,125.872
1600,1.5,0.3048,71.3,0.00336729,126.632
2000,1.5,0.3048,71.3,0.00336729,126.642
2500,1.5,0.3048,71.3,0.00336729,124.512
3150,1.5,0.3048,71.3,0.00336729,123.392
4000,1.5,0.3048,71.3,0.00336729,121.762
5000,1.5,0.3048,71.3,0.00336729,119.632
6300,1.5,0.3048,71.3,0.00336729,118.122
8000,1.5,0.3048,71.3,0.00336729,115.372
10000,1.5,0.3048,71.3,0.00336729,113.492
12500,1.5,0.3048,71.3,0.00336729,109.222
16000,1.5,0.3048,71.3,0.00336729,106.582
315,1.5,0.3048,39.6,0.00392107,121.851
400,1.5,0.3048,39.6,0.00392107,124.001
500,1.5,0.3048,39.6,0.00392107,126.661
630,1.5,0.3048,39.6,0.00392107,128.311
800,1.5,0.3048,39.6,0.00392107,128.831
1000,1.5,0.3048,39.6,0.00392107,127.581
1250,1.5,0.3048,39.6,0.00392107,125.211
1600,1.5,0.3048,39.6,0.00392107,122.211
2000,1.5,0.3048,39.6,0.00392107,122.101
2500,1.5,0.3048,39.6,0.00392107,120.981
3150,1.5,0.3048,39.6,0.00392107,119.111
4000,1.5,0.3048,39.6,0.00392107,117.741
5000,1.5,0.3048,39.6,0.00392107,116.241
6300,1.5,0.3048,39.6,0.00392107,114.751
8000,1.5,0.3048,39.6,0.00392107,112.251
10000,1.5,0.3048,39.6,0.00392107,108.991
12500,1.5,0.3048,39.6,0.00392107,106.111
400,3,0.3048,71.3,0.00425727,127.564
500,3,0.3048,71.3,0.00425727,128.454
630,3,0.3048,71.3,0.00425727,129.354
800,3,0.3048,71.3,0.00425727,129.494
1000,3,0.3048,71.3,0.00425727,129.004
1250,3,0.3048,71.3,0.00425727,127.634
1600,3,0.3048,71.3,0.00425727,126.514
2000,3,0.3048,71.3,0.00425727,125.524
2500,3,0.3048,71.3,0.00425727,124.024
3150,3,0.3048,71.3,0.00425727,121.514
4000,3,0.3048,71.3,0.00425727,120.264
5000,3,0.3048,71.3,0.00425727,118.134
6300,3,0.3048,71.3,0.00425727,116.134
8000,3,0.3048,71.3,0.00425727,114.634
10000,3,0.3048,71.3,0.00425727,110.224
400,3,0.3048,55.5,0.00452492,126.159
500,3,0.3048,55.5,0.00452492,128.179
630,3,0.3048,55.5,0.00452492,129.569
800,3,0.3048,55.5,0.00452492,129.949
1000,3,0.3048,55.5,0.00452492,129.329
1250,3,0.3048,55.5,0.00452492,127.329
1600,3,0.3048,55.5,0.00452492,124.439
2000,3,0.3048,55.5,0.00452492,123.069
2500,3,0.3048,55.5,0.00452492,122.439
3150,3,0.3048,55.5,0.00452492,120.189
4000,3,0.3048,55.5,0.00452492,118.689
5000,3,0.3048,55.5,0.00452492,117.309
6300,3,0.3048,55.5,0.00452492,115.679
8000,3,0.3048,55.5,0.00452492,113.799
10000,3,0.3048,55.5,0.00452492,112.169
315,3,0.3048,39.6,0.00495741,123.312
400,3,0.3048,39.6,0.00495741,125.472
500,3,0.3048,39.6,0.00495741,127.632
630,3,0.3048,39.6,0.00495741,129.292
800,3,0.3048,39.6,0.00495741,129.552
1000,3,0.3048,39.6,0.00495741,128.312
1250,3,0.3048,39.6,0.00495741,125.802
1600,3,0.3048,39.6,0.00495741,122.782
2000,3,0.3048,39.6,0.00495741,120.532
2500,3,0.3048,39.6,0.00495741,120.162
3150,3,0.3048,39.6,0.00495741,118.922
4000,3,0.3048,39.6,0.00495741,116.792
5000,3,0.3048,39.6,0.00495741,115.792
6300,3,0.3048,39.6,0.00495741,114.042
8000,3,0.3048,39.6,0.00495741,110.652
315,3,0.3048,31.7,0.00529514,123.118
400,3,0.3048,31.7,0.00529514,125.398
500,3,0.3048,31.7,0.00529514,127.548
630,3,0.3048,31.7,0.00529514,128.698
800,3,0.3048,31.7,0.00529514,128.708
1000,3,0.3048,31.7,0.00529514,126.838
1250,3,0.3048,31.7,0.00529514,124.838
1600,3,0.3048,31.7,0.00529514,122.088
2000,3,0.3048,31.7,0.00529514,120.088
2500,3,0.3048,31.7,0.00529514,119.598
3150,3,0.3048,31.7,0.00529514,118.108
4000,3,0.3048,31.7,0.00529514,115.608
5000,3,0.3048,31.7,0.00529514,113.858
6300,3,0.3048,31.7,0.00529514,109.718
250,4,0.3048,71.3,0.00497773,126.395
315,4,0.3048,71.3,0.00497773,128.175
400,4,0.3048,71.3,0.00497773,129.575
500,4,0.3048,71.3,0.00497773,130.715
630,4,0.3048,71.3,0.00497773,131.615
800,4,0.3048,71.3,0.00497773,131.755
1000,4,0.3048,71.3,0.00497773,131.015
1250,4,0.3048,71.3,0.00497773,129.395
1600,4,0.3048,71.3,0.00497773,126.645
2000,4,0.3048,71.3,0.00497773,124.395
2500,4,0.3048,71.3,0.00497773,123.775
3150,4,0.3048,71.3,0.00497773,121.775
4000,4,0.3048,71.3,0.00497773,119.535
5000,4,0.3048,71.3,0.00497773,117.785
6300,4,0.3048,71.3,0.00497773,116.165
8000,4,0.3048,71.3,0.00497773,113.665
10000,4,0.3048,71.3,0.00497773,110.905
12500,4,0.3048,71.3,0.00497773,107.405
250,4,0.3048,39.6,0.00579636,123.543
315,4,0.3048,39.6,0.00579636,126.843
400,4,0.3048,39.6,0.00579636,128.633
500,4,0.3048,39.6,0.00579636,130.173
630,4,0.3048,39.6,0.00579636,131.073
800,4,0.3048,39.6,0.00579636,130.723
1000,4,0.3048,39.6,0.00579636,128.723
1250,4,0.3048,39.6,0.00579636,126.343
1600,4,0.3048,39.6,0.00579636,123.213
2000,4,0.3048,39.6,0.00579636,120.963
2500,4,0.3048,39.6,0.00579636,120.233
3150,4,0.3048,39.6,0.00579636,118.743
4000,4,0.3048,39.6,0.00579636,115.863
5000,4,0.3048,39.6,0.00579636,113.733
1250,0,0.2286,71.3,0.00214345,128.144
1600,0,0.2286,71.3,0.00214345,129.134
2000,0,0.2286,71.3,0.00214345,128.244
2500,0,0.2286,71.3,0.00214345,128.354
3150,0,0.2286,71.3,0.00214345,127.834
4000,0,0.2286,71.3,0.00214345,125.824
5000,0,0.2286,71.3,0.00214345,124.304
6300,0,0.2286,71.3,0.00214345,122.044
8000,0,0.2286,71.3,0.00214345,118.024
10000,0,0.2286,71.3,0.00214345,118.134
12500,0,0.2286,71.3,0.00214345,117.624
16000,0,0.2286,71.3,0.00214345,114.984
20000,0,0.2286,71.3,0.00214345,114.474
315,0,0.2286,55.5,0.00229336,119.540
400,0,0.2286,55.5,0.00229336,121.660
500,0,0.2286,55.5,0.00229336,123.780
630,0,0.2286,55.5,0.00229336,126.160
800,0,0.2286,55.5,0.00229336,127.530
1000,0,0.2286,55.5,0.00229336,128.290
1250,0,0.2286,55.5,0.00229336,127.910
1600,0,0.2286,55.5,0.00229336,126.790
2000,0,0.2286,55.5,0.00229336,126.540
2500,0,0.2286,55.5,0.00229336,126.540
3150,0,0.2286,55.5,0.00229336,125.160
4000,0,0.2286,55.5,0.00229336,123.410
5000,0,0.2286,55.5,0.00229336,122.410
6300,0,0.2286,55.5,0.00229336,118.410
315,0,0.2286,39.6,0.00253511,121.055
400,0,0.2286,39.6,0.00253511,123.565
500,0,0.2286,39.6,0.00253511,126.195
630,0,0.2286,39.6,0.00253511,128.705
800,0,0.2286,39.6,0.00253511,130.205
1000,0,0.2286,39.6,0.00253511,130.435
1250,0,0.2286,39.6,0.00253511,129.395
1600,0,0.2286,39.6,0.00253511,127.095
2000,0,0.2286,39.6,0.00253511,125.305
2500,0,0.2286,39.6,0.00253511,125.025
3150,0,0.2286,39.6,0.00253511,124.625
4000,0,0.2286,39.6,0.00253511,123.465
5000,0,0.2286,39.6,0.00253511,122.175
6300,0,0.2286,39.6,0.00253511,117.465
315,0,0.2286,31.7,0.0027238,120.595
400,0,0.2286,31.7,0.0027238,123.635
500,0,0.2286,31.7,0.0027238,126.675
630,0,0.2286,31.7,0.0027238,129.465
800,0,0.2286,31.7,0.0027238,130.725
1000,0,0.2286,31.7,0.0027238,130.595
1250,0,0.2286,31.7,0.0027238,128.805
1600,0,0.2286,31.7,0.0027238,125.625
2000,0,0.2286,31.7,0.0027238,123.455
2500,0,0.2286,31.7,0.0027238,123.445
3150,0,0.2286,31.7,0.0027238,123.445
4000,0,0.2286,31.7,0.0027238,122.035
5000,0,0.2286,31.7,0.0027238,120.505
6300,0,0.2286,31.7,0.0027238,116.815
400,2,0.2286,71.3,0.00293031,125.116
500,2,0.2286,71.3,0.00293031,126.486
630,2,0.2286,71.3,0.00293031,127.356
800,2,0.2286,71.3,0.00293031,128.216
1000,2,0.2286,71.3,0.00293031,128.956
1250,2,0.2286,71.3,0.00293031,128.816
1600,2,0.2286,71.3,0.00293031,127.796
2000,2,0.2286,71.3,0.00293031,126.896
2500,2,0.2286,71.3,0.00293031,127.006
3150,2,0.2286,71.3,0.00293031,126.116
4000,2,0.2286,71.3,0.00293031,124.086
5000,2,0.2286,71.3,0.00293031,122.816
6300,2,0.2286,71.3,0.00293031,120.786
8000,2,0.2286,71.3,0.00293031,115.996
10000,2,0.2286,71.3,0.00293031,113.086
400,2,0.2286,55.5,0.00313525,122.292
500,2,0.2286,55.5,0.00313525,124.692
630,2,0.2286,55.5,0.00313525,126.842
800,2,0.2286,55.5,0.00313525,128.492
1000,2,0.2286,55.5,0.00313525,129.002
1250,2,0.2286,55.5,0.00313525,128.762
1600,2,0.2286,55.5,0.00313525,126.752
2000,2,0.2286,55.5,0.00313525,124.612
2500,2,0.2286,55.5,0.00313525,123.862
3150,2,0.2286,55.5,0.00313525,123.742
4000,2,0.2286,55.5,0.00313525,122.232
5000,2,0.2286,55.5,0.00313525,120.472
6300,2,0.2286,55.5,0.00313525,118.712
315,2,0.2286,39.6,0.00346574,120.137
400,2,0.2286,39.6,0.00346574,122.147
500,2,0.2286,39.6,0.00346574,125.157
630,2,0.2286,39.6,0.00346574,127.417
800,2,0.2286,39.6,0.00346574,129.037
1000,2,0.2286,39.6,0.00346574,129.147
1250,2,0.2286,39.6,0.00346574,128.257
1600,2,0.2286,39.6,0.00346574,125.837
2000,2,0.2286,39.6,0.00346574,122.797
2500,2,0.2286,39.6,0.00346574,121.397
3150,2,0.2286,39.6,0.00346574,121.627
4000,2,0.2286,39.6,0.00346574,120.227
5000,2,0.2286,39.6,0.00346574,118.827
6300,2,0.2286,39.6,0.00346574,116.417
315,2,0.2286,31.7,0.00372371,120.147
400,2,0.2286,31.7,0.00372371,123.417
500,2,0.2286,31.7,0.00372371,126.677
630,2,0.2286,31.7,0.00372371,129.057
800,2,0.2286,31.7,0.00372371,130.307
1000,2,0.2286,31.7,0.00372371,130.307
1250,2,0.2286,31.7,0.00372371,128.677
1600,2,0.2286,31.7,0.00372371,125.797
2000,2,0.2286,31.7,0.00372371,123.037
2500,2,0.2286,31.7,0.00372371,121.407
3150,2,0.2286,31.7,0.00372371,121.527
4000,2,0.2286,31.7,0.00372371,120.527
5000,2,0.2286,31.7,0.00372371,118.267
6300,2,0.2286,31.7,0.00372371,115.137
500,4,0.2286,71.3,0.00400603,126.758
630,4,0.2286,71.3,0.00400603,129.038
800,4,0.2286,71.3,0.00400603,130.688
1000,4,0.2286,71.3,0.00400603,131.708
1250,4,0.2286,71.3,0.00400603,131.718
1600,4,0.2286,71.3,0.00400603,129.468
2000,4,0.2286,71.3,0.00400603,126.218
2500,4,0.2286,71.3,0.00400603,124.338
3150,4,0.2286,71.3,0.00400603,124.108
4000,4,0.2286,71.3,0.00400603,121.728
5000,4,0.2286,71.3,0.00400603,121.118
6300,4,0.2286,71.3,0.00400603,118.618
8000,4,0.2286,71.3,0.00400603,112.848
10000,4,0.2286,71.3,0.00400603,113.108
12500,4,0.2286,71.3,0.00400603,114.258
16000,4,0.2286,71.3,0.00400603,112.768
20000,4,0.2286,71.3,0.00400603,109.638
400,4,0.2286,55.5,0.0042862,123.274
500,4,0.2286,55.5,0.0042862,127.314
630,4,0.2286,55.5,0.0042862,129.964
800,4,0.2286,55.5,0.0042862,131.864
1000,4,0.2286,55.5,0.0042862,132.134
1250,4,0.2286,55.5,0.0042862,131.264
1600,4,0.2286,55.5,0.0042862,128.264
2000,4,0.2286,55.5,0.0042862,124.254
2500,4,0.2286,55.5,0.0042862,122.384
3150,4,0.2286,55.5,0.0042862,122.394
4000,4,0.2286,55.5,0.0042862,120.654
5000,4,0.2286,55.5,0.0042862,120.034
6300,4,0.2286,55.5,0.0042862,117.154
8000,4,0.2286,55.5,0.0042862,112.524
315,4,0.2286,39.6,0.00473801,122.229
400,4,0.2286,39.6,0.00473801,123.879
500,4,0.2286,39.6,0.00473801,127.039
630,4,0.2286,39.6,0.00473801,129.579
800,4,0.2286,39.6,0.00473801,130.469
1000,4,0.2286,39.6,0.00473801,129.969
1250,4,0.2286,39.6,0.00473801,128.339
1600,4,0.2286,39.6,0.00473801,125.319
2000,4,0.2286,39.6,0.00473801,121.659
2500,4,0.2286,39.6,0.00473801,119.649
3150,4,0.2286,39.6,0.00473801,120.419
4000,4,0.2286,39.6,0.00473801,119.159
5000,4,0.2286,39.6,0.00473801,117.649
6300,4,0.2286,39.6,0.00473801,114.249
8000,4,0.2286,39.6,0.00473801,113.129
250,4,0.2286,31.7,0.00509068,120.189
315,4,0.2286,31.7,0.00509068,123.609
400,4,0.2286,31.7,0.00509068,126.149
500,4,0.2286,31.7,0.00509068,128.939
630,4,0.2286,31.7,0.00509068,130.349
800,4,0.2286,31.7,0.00509068,130.869
1000,4,0.2286,31.7,0.00509068,129.869
1250,4,0.2286,31.7,0.00509068,128.119
1600,4,0.2286,31.7,0.00509068,125.229
2000,4,0.2286,31.7,0.00509068,122.089
2500,4,0.2286,31.7,0.00509068,120.209
3150,4,0.2286,31.7,0.00509068,120.229
4000,4,0.2286,31.7,0.00509068,118.859
5000,4,0.2286,31.7,0.00509068,115.969
6300,4,0.2286,31.7,0.00509068,112.699
400,5.3,0.2286,71.3,0.0051942,127.700
500,5.3,0.2286,71.3,0.0051942,129.880
630,5.3,0.2286,71.3,0.0051942,131.800
800,5.3,0.2286,71.3,0.0051942,133.480
1000,5.3,0.2286,71.3,0.0051942,134.000
1250,5.3,0.2286,71.3,0.0051942,133.380
1600,5.3,0.2286,71.3,0.0051942,130.460
2000,5.3,0.2286,71.3,0.0051942,125.890
2500,5.3,0.2286,71.3,0.0051942,123.740
3150,5.3,0.2286,71.3,0.0051942,123.120
4000,5.3,0.2286,71.3,0.0051942,120.330
5000,5.3,0.2286,71.3,0.0051942,118.050
6300,5.3,0.2286,71.3,0.0051942,116.920
8000,5.3,0.2286,71.3,0.0051942,114.900
10000,5.3,0.2286,71.3,0.0051942,111.350
250,5.3,0.2286,39.6,0.00614329,127.011
315,5.3,0.2286,39.6,0.00614329,129.691
400,5.3,0.2286,39.6,0.00614329,131.221
500,5.3,0.2286,39.6,0.00614329,132.251
630,5.3,0.2286,39.6,0.00614329,132.011
800,5.3,0.2286,39.6,0.00614329,129.491
1000,5.3,0.2286,39.6,0.00614329,125.581
1250,5.3,0.2286,39.6,0.00614329,125.721
1600,5.3,0.2286,39.6,0.00614329,123.081
2000,5.3,0.2286,39.6,0.00614329,117.911
2500,5.3,0.2286,39.6,0.00614329,116.151
3150,5.3,0.2286,39.6,0.00614329,118.441
4000,5.3,0.2286,39.6,0.00614329,115.801
5000,5.3,0.2286,39.6,0.00614329,115.311
6300,5.3,0.2286,39.6,0.00614329,112.541
200,7.3,0.2286,71.3,0.0104404,138.758
250,7.3,0.2286,71.3,0.0104404,139.918
315,7.3,0.2286,71.3,0.0104404,139.808
400,7.3,0.2286,71.3,0.0104404,139.438
500,7.3,0.2286,71.3,0.0104404,136.798
630,7.3,0.2286,71.3,0.0104404,133.768
800,7.3,0.2286,71.3,0.0104404,130.748
1000,7.3,0.2286,71.3,0.0104404,126.838
1250,7.3,0.2286,71.3,0.0104404,127.358
1600,7.3,0.2286,71.3,0.0104404,125.728
2000,7.3,0.2286,71.3,0.0104404,122.708
2500,7.3,0.2286,71.3,0.0104404,122.088
3150,7.3,0.2286,71.3,0.0104404,120.458
4000,7.3,0.2286,71.3,0.0104404,119.208
5000,7.3,0.2286,71.3,0.0104404,115.298
6300,7.3,0.2286,71.3,0.0104404,115.818
200,7.3,0.2286,55.5,0.0111706,135.234
250,7.3,0.2286,55.5,0.0111706,136.384
315,7.3,0.2286,55.5,0.0111706,136.284
400,7.3,0.2286,55.5,0.0111706,135.924
500,7.3,0.2286,55.5,0.0111706,133.174
630,7.3,0.2286,55.5,0.0111706,130.934
800,7.3,0.2286,55.5,0.0111706,128.444
1000,7.3,0.2286,55.5,0.0111706,125.194
1250,7.3,0.2286,55.5,0.0111706,125.724
1600,7.3,0.2286,55.5,0.0111706,123.354
2000,7.3,0.2286,55.5,0.0111706,120.354
2500,7.3,0.2286,55.5,0.0111706,118.994
3150,7.3,0.2286,55.5,0.0111706,117.134
4000,7.3,0.2286,55.5,0.0111706,117.284
5000,7.3,0.2286,55.5,0.0111706,113.144
6300,7.3,0.2286,55.5,0.0111706,111.534
200,7.3,0.2286,39.6,0.0123481,130.989
250,7.3,0.2286,39.6,0.0123481,131.889
315,7.3,0.2286,39.6,0.0123481,132.149
400,7.3,0.2286,39.6,0.0123481,132.039
500,7.3,0.2286,39.6,0.0123481,130.299
630,7.3,0.2286,39.6,0.0123481,128.929
800,7.3,0.2286,39.6,0.0123481,126.299
1000,7.3,0.2286,39.6,0.0123481,122.539
1250,7.3,0.2286,39.6,0.0123481,123.189
1600,7.3,0.2286,39.6,0.0123481,121.059
2000,7.3,0.2286,39.6,0.0123481,117.809
2500,7.3,0.2286,39.6,0.0123481,116.559
3150,7.3,0.2286,39.6,0.0123481,114.309
4000,7.3,0.2286,39.6,0.0123481,114.079
5000,7.3,0.2286,39.6,0.0123481,111.959
6300,7.3,0.2286,39.6,0.0123481,110.839
200,7.3,0.2286,31.7,0.0132672,128.679
250,7.3,0.2286,31.7,0.0132672,130.089
315,7.3,0.2286,31.7,0.0132672,130.239
400,7.3,0.2286,31.7,0.0132672,130.269
500,7.3,0.2286,31.7,0.0132672,128.169
630,7.3,0.2286,31.7,0.0132672,126.189
800,7.3,0.2286,31.7,0.0132672,123.209
1000,7.3,0.2286,31.7,0.0132672,119.099
1250,7.3,0.2286,31.7,0.0132672,120.509
1600,7.3,0.2286,31.7,0.0132672,119.039
2000,7.3,0.2286,31.7,0.0132672,115.309
2500,7.3,0.2286,31.7,0.0132672,114.709
3150,7.3,0.2286,31.7,0.0132672,113.229
4000,7.3,0.2286,31.7,0.0132672,112.639
5000,7.3,0.2286,31.7,0.0132672,111.029
6300,7.3,0.2286,31.7,0.0132672,110.689
800,0,0.1524,71.3,0.0015988,125.817
1000,0,0.1524,71.3,0.0015988,127.307
1250,0,0.1524,71.3,0.0015988,128.927
1600,0,0.1524,71.3,0.0015988,129.667
2000,0,0.1524,71.3,0.0015988,128.647
2500,0,0.1524,71.3,0.0015988,128.127
3150,0,0.1524,71.3,0.0015988,129.377
4000,0,0.1524,71.3,0.0015988,128.857
5000,0,0.1524,71.3,0.0015988,126.457
6300,0,0.1524,71.3,0.0015988,125.427
8000,0,0.1524,71.3,0.0015988,122.527
10000,0,0.1524,71.3,0.0015988,120.247
12500,0,0.1524,71.3,0.0015988,117.087
16000,0,0.1524,71.3,0.0015988,113.297
500,0,0.1524,55.5,0.00172668,120.573
630,0,0.1524,55.5,0.00172668,123.583
800,0,0.1524,55.5,0.00172668,126.713
1000,0,0.1524,55.5,0.00172668,128.583
1250,0,0.1524,55.5,0.00172668,129.953
1600,0,0.1524,55.5,0.00172668,130.183
2000,0,0.1524,55.5,0.00172668,129.673
2500,0,0.1524,55.5,0.00172668,127.763
3150,0,0.1524,55.5,0.00172668,127.753
4000,0,0.1524,55.5,0.00172668,127.233
5000,0,0.1524,55.5,0.00172668,125.203
6300,0,0.1524,55.5,0.00172668,123.303
8000,0,0.1524,55.5,0.00172668,121.903
10000,0,0.1524,55.5,0.00172668,119.253
12500,0,0.1524,55.5,0.00172668,117.093
16000,0,0.1524,55.5,0.00172668,112.803
500,0,0.1524,39.6,0.00193287,119.513
630,0,0.1524,39.6,0.00193287,124.403
800,0,0.1524,39.6,0.00193287,127.903
1000,0,0.1524,39.6,0.00193287,130.033
1250,0,0.1524,39.6,0.00193287,131.023
1600,0,0.1524,39.6,0.00193287,131.013
2000,0,0.1524,39.6,0.00193287,129.633
2500,0,0.1524,39.6,0.00193287,126.863
3150,0,0.1524,39.6,0.00193287,125.603
4000,0,0.1524,39.6,0.00193287,125.343
5000,0,0.1524,39.6,0.00193287,123.453
6300,0,0.1524,39.6,0.00193287,121.313
8000,0,0.1524,39.6,0.00193287,120.553
10000,0,0.1524,39.6,0.00193287,115.413
500,0,0.1524,31.7,0.00209405,121.617
630,0,0.1524,31.7,0.00209405,125.997
800,0,0.1524,31.7,0.00209405,129.117
1000,0,0.1524,31.7,0.00209405,130.987
1250,0,0.1524,31.7,0.00209405,131.467
1600,0,0.1524,31.7,0.00209405,130.817
2000,0,0.1524,31.7,0.00209405,128.907
2500,0,0.1524,31.7,0.00209405,125.867
3150,0,0.1524,31.7,0.00209405,124.207
4000,0,0.1524,31.7,0.00209405,123.807
5000,0,0.1524,31.7,0.00209405,122.397
6300,0,0.1524,31.7,0.00209405,119.737
8000,0,0.1524,31.7,0.00209405,117.957
630,2.7,0.1524,71.3,0.00243851,127.404
800,2.7,0.1524,71.3,0.00243851,127.394
1000,2.7,0.1524,71.3,0.00243851,128.774
1250,2.7,0.1524,71.3,0.00243851,130.144
1600,2.7,0.1524,71.3,0.00243851,130.644
2000,2.7,0.1524,71.3,0.00243851,130.114
2500,2.7,0.1524,71.3,0.00243851,128.334
3150,2.7,0.1524,71.3,0.00243851,127.054
4000,2.7,0.1524,71.3,0.00243851,126.534
5000,2.7,0.1524,71.3,0.00243851,124.364
6300,2.7,0.1524,71.3,0.00243851,121.944
8000,2.7,0.1524,71.3,0.00243851,120.534
10000,2.7,0.1524,71.3,0.00243851,116.724
12500,2.7,0.1524,71.3,0.00243851,113.034
16000,2.7,0.1524,71.3,0.00243851,110.364
500,2.7,0.1524,39.6,0.00294804,121.009
630,2.7,0.1524,39.6,0.00294804,125.809
800,2.7,0.1524,39.6,0.00294804,128.829
1000,2.7,0.1524,39.6,0.00294804,130.589
1250,2.7,0.1524,39.6,0.00294804,130.829
1600,2.7,0.1524,39.6,0.00294804,130.049
2000,2.7,0.1524,39.6,0.00294804,128.139
2500,2.7,0.1524,39.6,0.00294804,125.589
3150,2.7,0.1524,39.6,0.00294804,122.919
4000,2.7,0.1524,39.6,0.00294804,121.889
5000,2.7,0.1524,39.6,0.00294804,121.499
6300,2.7,0.1524,39.6,0.00294804,119.209
8000,2.7,0.1524,39.6,0.00294804,116.659
10000,2.7,0.1524,39.6,0.00294804,112.589
12500,2.7,0.1524,39.6,0.00294804,108.649
400,5.4,0.1524,71.3,0.00401199,124.121
500,5.4,0.1524,71.3,0.00401199,126.291
630,5.4,0.1524,71.3,0.00401199,128.971
800,5.4,0.1524,71.3,0.00401199,131.281
1000,5.4,0.1524,71.3,0.00401199,133.201
1250,5.4,0.1524,71.3,0.00401199,134.111
1600,5.4,0.1524,71.3,0.00401199,133.241
2000,5.4,0.1524,71.3,0.00401199,131.111
2500,5.4,0.1524,71.3,0.00401199,127.591
3150,5.4,0.1524,71.3,0.00401199,123.311
4000,5.4,0.1524,71.3,0.00401199,121.431
5000,5.4,0.1524,71.3,0.00401199,120.061
6300,5.4,0.1524,71.3,0.00401199,116.411
400,5.4,0.1524,55.5,0.00433288,126.807
500,5.4,0.1524,55.5,0.00433288,129.367
630,5.4,0.1524,55.5,0.00433288,131.807
800,5.4,0.1524,55.5,0.00433288,133.097
1000,5.4,0.1524,55.5,0.00433288,132.127
1250,5.4,0.1524,55.5,0.00433288,130.777
1600,5.4,0.1524,55.5,0.00433288,130.567
2000,5.4,0.1524,55.5,0.00433288,128.707
2500,5.4,0.1524,55.5,0.00433288,124.077
3150,5.4,0.1524,55.5,0.00433288,121.587
4000,5.4,0.1524,55.5,0.00433288,119.737
5000,5.4,0.1524,55.5,0.00433288,118.757
6300,5.4,0.1524,55.5,0.00433288,117.287
8000,5.4,0.1524,55.5,0.00433288,114.927
315,5.4,0.1524,39.6,0.00485029,125.347
400,5.4,0.1524,39.6,0.00485029,127.637
500,5.4,0.1524,39.6,0.00485029,129.937
630,5.4,0.1524,39.6,0.00485029,132.357
800,5.4,0.1524,39.6,0.00485029,132.757
1000,5.4,0.1524,39.6,0.00485029,130.507
1250,5.4,0.1524,39.6,0.00485029,127.117
1600,5.4,0.1524,39.6,0.00485029,126.267
2000,5.4,0.1524,39.6,0.00485029,124.647
2500,5.4,0.1524,39.6,0.00485029,120.497
3150,5.4,0.1524,39.6,0.00485029,119.137
4000,5.4,0.1524,39.6,0.00485029,117.137
5000,5.4,0.1524,39.6,0.00485029,117.037
6300,5.4,0.1524,39.6,0.00485029,116.677
315,5.4,0.1524,31.7,0.00525474,125.741
400,5.4,0.1524,31.7,0.00525474,127.781
500,5.4,0.1524,31.7,0.00525474,129.681
630,5.4,0.1524,31.7,0.00525474,131.471
800,5.4,0.1524,31.7,0.00525474,131.491
1000,5.4,0.1524,31.7,0.00525474,128.241
1250,5.4,0.1524,31.7,0.00525474,123.991
1600,5.4,0.1524,31.7,0.00525474,123.761
2000,5.4,0.1524,31.7,0.00525474,122.771
2500,5.4,0.1524,31.7,0.00525474,119.151
3150,5.4,0.1524,31.7,0.00525474,118.291
4000,5.4,0.1524,31.7,0.00525474,116.181
5000,5.4,0.1524,31.7,0.00525474,115.691
6300,5.4,0.1524,31.7,0.00525474,115.591
315,7.2,0.1524,71.3,0.00752039,128.713
400,7.2,0.1524,71.3,0.00752039,130.123
500,7.2,0.1524,71.3,0.00752039,132.043
630,7.2,0.1524,71.3,0.00752039,134.853
800,7.2,0.1524,71.3,0.00752039,136.023
1000,7.2,0.1524,71.3,0.00752039,134.273
1250,7.2,0.1524,71.3,0.00752039,132.513
1600,7.2,0.1524,71.3,0.00752039,130.893
2000,7.2,0.1524,71.3,0.00752039,128.643
2500,7.2,0.1524,71.3,0.00752039,124.353
3150,7.2,0.1524,71.3,0.00752039,116.783
4000,7.2,0.1524,71.3,0.00752039,119.343
5000,7.2,0.1524,71.3,0.00752039,118.343
6300,7.2,0.1524,71.3,0.00752039,116.603
8000,7.2,0.1524,71.3,0.00752039,113.333
10000,7.2,0.1524,71.3,0.00752039,110.313
250,7.2,0.1524,39.6,0.00909175,127.488
315,7.2,0.1524,39.6,0.00909175,130.558
400,7.2,0.1524,39.6,0.00909175,132.118
500,7.2,0.1524,39.6,0.00909175,132.658
630,7.2,0.1524,39.6,0.00909175,133.198
800,7.2,0.1524,39.6,0.00909175,132.358
1000,7.2,0.1524,39.6,0.00909175,128.338
1250,7.2,0.1524,39.6,0.00909175,122.428
1600,7.2,0.1524,39.6,0.00909175,120.058
2000,7.2,0.1524,39.6,0.00909175,120.228
2500,7.2,0.1524,39.6,0.00909175,117.478
3150,7.2,0.1524,39.6,0.00909175,111.818
4000,7.2,0.1524,39.6,0.00909175,114.258
5000,7.2,0.1524,39.6,0.00909175,113.288
6300,7.2,0.1524,39.6,0.00909175,112.688
8000,7.2,0.1524,39.6,0.00909175,111.588
10000,7.2,0.1524,39.6,0.00909175,110.868
200,9.9,0.1524,71.3,0.0193001,134.319
250,9.9,0.1524,71.3,0.0193001,135.329
315,9.9,0.1524,71.3,0.0193001,135.459
400,9.9,0.1524,71.3,0.0193001,135.079
500,9.9,0.1524,71.3,0.0193001,131.279
630,9.9,0.1524,71.3,0.0193001,129.889
800,9.9,0.1524,71.3,0.0193001,128.879
1000,9.9,0.1524,71.3,0.0193001,126.349
1250,9.9,0.1524,71.3,0.0193001,122.679
1600,9.9,0.1524,71.3,0.0193001,121.789
2000,9.9,0.1524,71.3,0.0193001,120.779
2500,9.9,0.1524,71.3,0.0193001,119.639
3150,9.9,0.1524,71.3,0.0193001,116.849
4000,9.9,0.1524,71.3,0.0193001,115.079
5000,9.9,0.1524,71.3,0.0193001,114.569
6300,9.9,0.1524,71.3,0.0193001,112.039
200,9.9,0.1524,55.5,0.0208438,131.955
250,9.9,0.1524,55.5,0.0208438,133.235
315,9.9,0.1524,55.5,0.0208438,132.355
400,9.9,0.1524,55.5,0.0208438,131.605
500,9.9,0.1524,55.5,0.0208438,127.815
630,9.9,0.1524,55.5,0.0208438,127.315
800,9.9,0.1524,55.5,0.0208438,126.565
1000,9.9,0.1524,55.5,0.0208438,124.665
1250,9.9,0.1524,55.5,0.0208438,121.635
1600,9.9,0.1524,55.5,0.0208438,119.875
2000,9.9,0.1524,55.5,0.0208438,119.505
2500,9.9,0.1524,55.5,0.0208438,118.365
3150,9.9,0.1524,55.5,0.0208438,115.085
4000,9.9,0.1524,55.5,0.0208438,112.945
5000,9.9,0.1524,55.5,0.0208438,112.065
6300,9.9,0.1524,55.5,0.0208438,110.555
200,9.9,0.1524,39.6,0.0233328,127.315
250,9.9,0.1524,39.6,0.0233328,128.335
315,9.9,0.1524,39.6,0.0233328,128.595
400,9.9,0.1524,39.6,0.0233328,128.345
500,9.9,0.1524,39.6,0.0233328,126.835
630,9.9,0.1524,39.6,0.0233328,126.465
800,9.9,0.1524,39.6,0.0233328,126.345
1000,9.9,0.1524,39.6,0.0233328,123.835
1250,9.9,0.1524,39.6,0.0233328,120.555
1600,9.9,0.1524,39.6,0.0233328,118.545
2000,9.9,0.1524,39.6,0.0233328,117.925
2500,9.9,0.1524,39.6,0.0233328,116.295
3150,9.9,0.1524,39.6,0.0233328,113.525
4000,9.9,0.1524,39.6,0.0233328,112.265
5000,9.9,0.1524,39.6,0.0233328,111.135
6300,9.9,0.1524,39.6,0.0233328,109.885
200,9.9,0.1524,31.7,0.0252785,127.299
250,9.9,0.1524,31.7,0.0252785,128.559
315,9.9,0.1524,31.7,0.0252785,128.809
400,9.9,0.1524,31.7,0.0252785,128.939
500,9.9,0.1524,31.7,0.0252785,127.179
630,9.9,0.1524,31.7,0.0252785,126.049
800,9.9,0.1524,31.7,0.0252785,125.539
1000,9.9,0.1524,31.7,0.0252785,122.149
1250,9.9,0.1524,31.7,0.0252785,118.619
1600,9.9,0.1524,31.7,0.0252785,117.119
2000,9.9,0.1524,31.7,0.0252785,116.859
2500,9.9,0.1524,31.7,0.0252785,114.729
3150,9.9,0.1524,31.7,0.0252785,112.209
4000,9.9,0.1524,31.7,0.0252785,111.459
5000,9.9,0.1524,31.7,0.0252785,109.949
6300,9.9,0.1524,31.7,0.0252785,108.689
200,12.6,0.1524,71.3,0.0483159,128.354
250,12.6,0.1524,71.3,0.0483159,129.744
315,12.6,0.1524,71.3,0.0483159,128.484
400,12.6,0.1524,71.3,0.0483159,127.094
500,12.6,0.1524,71.3,0.0483159,121.664
630,12.6,0.1524,71.3,0.0483159,123.304
800,12.6,0.1524,71.3,0.0483159,123.054
1000,12.6,0.1524,71.3,0.0483159,122.044
1250,12.6,0.1524,71.3,0.0483159,120.154
1600,12.6,0.1524,71.3,0.0483159,120.534
2000,12.6,0.1524,71.3,0.0483159,117.504
2500,12.6,0.1524,71.3,0.0483159,115.234
3150,12.6,0.1524,71.3,0.0483159,113.334
4000,12.6,0.1524,71.3,0.0483159,108.034
5000,12.6,0.1524,71.3,0.0483159,108.034
6300,12.6,0.1524,71.3,0.0483159,107.284
200,12.6,0.1524,39.6,0.0584113,114.750
250,12.6,0.1524,39.6,0.0584113,115.890
315,12.6,0.1524,39.6,0.0584113,116.020
400,12.6,0.1524,39.6,0.0584113,115.910
500,12.6,0.1524,39.6,0.0584113,114.900
630,12.6,0.1524,39.6,0.0584113,116.550
800,12.6,0.1524,39.6,0.0584113,116.560
1000,12.6,0.1524,39.6,0.0584113,114.670
1250,12.6,0.1524,39.6,0.0584113,112.160
1600,12.6,0.1524,39.6,0.0584113,110.780
2000,12.6,0.1524,39.6,0.0584113,109.520
2500,12.6,0.1524,39.6,0.0584113,106.880
3150,12.6,0.1524,39.6,0.0584113,106.260
4000,12.6,0.1524,39.6,0.0584113,104.500
5000,12.6,0.1524,39.6,0.0584113,104.130
6300,12.6,0.1524,39.6,0.0584113,103.380
800,0,0.0508,71.3,0.000740478,130.960
1000,0,0.0508,71.3,0.000740478,129.450
1250,0,0.0508,71.3,0.000740478,128.560
1600,0,0.0508,71.3,0.000740478,129.680
2000,0,0.0508,71.3,0.000740478,131.060
2500,0,0.0508,71.3,0.000740478,131.310
3150,0,0.0508,71.3,0.000740478,135.070
4000,0,0.0508,71.3,0.000740478,134.430
5000,0,0.0508,71.3,0.000740478,134.430
6300,0,0.0508,71.3,0.000740478,133.040
8000,0,0.0508,71.3,0.000740478,130.890
10000,0,0.0508,71.3,0.000740478,128.740
12500,0,0.0508,71.3,0.000740478,125.220
800,0,0.0508,55.5,0.00076193,124.336
1000,0,0.0508,55.5,0.00076193,125.586
1250,0,0.0508,55.5,0.00076193,127.076
1600,0,0.0508,55.5,0.00076193,128.576
2000,0,0.0508,55.5,0.00076193,131.456
2500,0,0.0508,55.5,0.00076193,133.956
3150,0,0.0508,55.5,0.00076193,134.826
4000,0,0.0508,55.5,0.00076193,134.946
5000,0,0.0508,55.5,0.00076193,134.556
6300,0,0.0508,55.5,0.00076193,132.796
8000,0,0.0508,55.5,0.00076193,130.156
10000,0,0.0508,55.5,0.00076193,127.636
12500,0,0.0508,55.5,0.00076193,125.376
800,0,0.0508,39.6,0.000791822,126.508
1000,0,0.0508,39.6,0.000791822,127.638
1250,0,0.0508,39.6,0.000791822,129.148
1600,0,0.0508,39.6,0.000791822,130.908
2000,0,0.0508,39.6,0.000791822,132.918
2500,0,0.0508,39.6,0.000791822,134.938
3150,0,0.0508,39.6,0.000791822,135.938
4000,0,0.0508,39.6,0.000791822,135.308
5000,0,0.0508,39.6,0.000791822,134.308
6300,0,0.0508,39.6,0.000791822,131.918
8000,0,0.0508,39.6,0.000791822,128.518
10000,0,0.0508,39.6,0.000791822,125.998
12500,0,0.0508,39.6,0.000791822,123.988
800,0,0.0508,31.7,0.000812164,122.790
1000,0,0.0508,31.7,0.000812164,126.780
1250,0,0.0508,31.7,0.000812164,129.270
1600,0,0.0508,31.7,0.000812164,131.010
2000,0,0.0508,31.7,0.000812164,133.010
2500,0,0.0508,31.7,0.000812164,134.870
3150,0,0.0508,31.7,0.000812164,135.490
4000,0,0.0508,31.7,0.000812164,134.110
5000,0,0.0508,31.7,0.000812164,133.230
6300,0,0.0508,31.7,0.000812164,130.340
8000,0,0.0508,31.7,0.000812164,126.590
10000,0,0.0508,31.7,0.000812164,122.450
12500,0,0.0508,31.7,0.000812164,119.070
1600,4.2,0.0508,71.3,0.00142788,124.318
2000,4.2,0.0508,71.3,0.00142788,129.848
2500,4.2,0.0508,71.3,0.00142788,131.978
3150,4.2,0.0508,71.3,0.00142788,133.728
4000,4.2,0.0508,71.3,0.00142788,133.598
5000,4.2,0.0508,71.3,0.00142788,132.828
6300,4.2,0.0508,71.3,0.00142788,129.308
8000,4.2,0.0508,71.3,0.00142788,125.268
10000,4.2,0.0508,71.3,0.00142788,121.238
12500,4.2,0.0508,71.3,0.00142788,117.328
1000,4.2,0.0508,39.6,0.00152689,125.647
1250,4.2,0.0508,39.6,0.00152689,128.427
1600,4.2,0.0508,39.6,0.00152689,130.197
2000,4.2,0.0508,39.6,0.00152689,132.587
2500,4.2,0.0508,39.6,0.00152689,133.847
3150,4.2,0.0508,39.6,0.00152689,133.587
4000,4.2,0.0508,39.6,0.00152689,131.807
5000,4.2,0.0508,39.6,0.00152689,129.777
6300,4.2,0.0508,39.6,0.00152689,125.717
8000,4.2,0.0508,39.6,0.00152689,120.397
10000,4.2,0.0508,39.6,0.00152689,116.967
800,8.4,0.0508,71.3,0.00529514,127.556
1000,8.4,0.0508,71.3,0.00529514,129.946
1250,8.4,0.0508,71.3,0.00529514,132.086
1600,8.4,0.0508,71.3,0.00529514,133.846
2000,8.4,0.0508,71.3,0.00529514,134.476
2500,8.4,0.0508,71.3,0.00529514,134.226
3150,8.4,0.0508,71.3,0.00529514,131.966
4000,8.4,0.0508,71.3,0.00529514,126.926
5000,8.4,0.0508,71.3,0.00529514,121.146
400,8.4,0.0508,55.5,0.00544854,121.582
500,8.4,0.0508,55.5,0.00544854,123.742
630,8.4,0.0508,55.5,0.00544854,126.152
800,8.4,0.0508,55.5,0.00544854,128.562
1000,8.4,0.0508,55.5,0.00544854,130.722
1250,8.4,0.0508,55.5,0.00544854,132.252
1600,8.4,0.0508,55.5,0.00544854,133.032
2000,8.4,0.0508,55.5,0.00544854,133.042
2500,8.4,0.0508,55.5,0.00544854,131.542
3150,8.4,0.0508,55.5,0.00544854,128.402
4000,8.4,0.0508,55.5,0.00544854,122.612
5000,8.4,0.0508,55.5,0.00544854,115.812
400,8.4,0.0508,39.6,0.00566229,120.015
500,8.4,0.0508,39.6,0.00566229,122.905
630,8.4,0.0508,39.6,0.00566229,126.045
800,8.4,0.0508,39.6,0.00566229,128.435
1000,8.4,0.0508,39.6,0.00566229,130.195
1250,8.4,0.0508,39.6,0.00566229,131.205
1600,8.4,0.0508,39.6,0.00566229,130.965
2000,8.4,0.0508,39.6,0.00566229,129.965
2500,8.4,0.0508,39.6,0.00566229,127.465
3150,8.4,0.0508,39.6,0.00566229,123.965
4000,8.4,0.0508,39.6,0.00566229,118.955
400,8.4,0.0508,31.7,0.00580776,120.076
500,8.4,0.0508,31.7,0.00580776,122.966
630,8.4,0.0508,31.7,0.00580776,125.856
800,8.4,0.0508,31.7,0.00580776,128.246
1000,8.4,0.0508,31.7,0.00580776,129.516
1250,8.4,0.0508,31.7,0.00580776,130.156
1600,8.4,0.0508,31.7,0.00580776,129.296
2000,8.4,0.0508,31.7,0.00580776,127.686
2500,8.4,0.0508,31.7,0.00580776,125.576
3150,8.4,0.0508,31.7,0.00580776,122.086
4000,8.4,0.0508,31.7,0.00580776,118.106
200,11.2,0.0508,71.3,0.014072,125.941
250,11.2,0.0508,71.3,0.014072,127.101
315,11.2,0.0508,71.3,0.014072,128.381
400,11.2,0.0508,71.3,0.014072,129.281
500,11.2,0.0508,71.3,0.014072,130.311
630,11.2,0.0508,71.3,0.014072,133.611
800,11.2,0.0508,71.3,0.014072,136.031
1000,11.2,0.0508,71.3,0.014072,136.941
1250,11.2,0.0508,71.3,0.014072,136.191
1600,11.2,0.0508,71.3,0.014072,135.191
2000,11.2,0.0508,71.3,0.014072,133.311
2500,11.2,0.0508,71.3,0.014072,130.541
3150,11.2,0.0508,71.3,0.014072,127.141
4000,11.2,0.0508,71.3,0.014072,122.471
200,11.2,0.0508,39.6,0.0150478,125.010
250,11.2,0.0508,39.6,0.0150478,126.430
315,11.2,0.0508,39.6,0.0150478,128.990
400,11.2,0.0508,39.6,0.0150478,130.670
500,11.2,0.0508,39.6,0.0150478,131.960
630,11.2,0.0508,39.6,0.0150478,133.130
800,11.2,0.0508,39.6,0.0150478,133.790
1000,11.2,0.0508,39.6,0.0150478,132.430
1250,11.2,0.0508,39.6,0.0150478,130.050
1600,11.2,0.0508,39.6,0.0150478,126.540
2000,11.2,0.0508,39.6,0.0150478,124.420
2500,11.2,0.0508,39.6,0.0150478,122.170
3150,11.2,0.0508,39.6,0.0150478,119.670
4000,11.2,0.0508,39.6,0.0150478,115.520
200,15.4,0.0508,71.3,0.0264269,123.595
250,15.4,0.0508,71.3,0.0264269,124.835
315,15.4,0.0508,71.3,0.0264269,126.195
400,15.4,0.0508,71.3,0.0264269,126.805
500,15.4,0.0508,71.3,0.0264269,127.285
630,15.4,0.0508,71.3,0.0264269,129.645
800,15.4,0.0508,71.3,0.0264269,131.515
1000,15.4,0.0508,71.3,0.0264269,131.865
1250,15.4,0.0508,71.3,0.0264269,130.845
1600,15.4,0.0508,71.3,0.0264269,130.065
2000,15.4,0.0508,71.3,0.0264269,129.285
2500,15.4,0.0508,71.3,0.0264269,127.625
3150,15.4,0.0508,71.3,0.0264269,125.715
4000,15.4,0.0508,71.3,0.0264269,122.675
5000,15.4,0.0508,71.3,0.0264269,119.135
6300,15.4,0.0508,71.3,0.0264269,115.215
8000,15.4,0.0508,71.3,0.0264269,112.675
200,15.4,0.0508,55.5,0.0271925,122.940
250,15.4,0.0508,55.5,0.0271925,124.170
315,15.4,0.0508,55.5,0.0271925,125.390
400,15.4,0.0508,55.5,0.0271925,126.500
500,15.4,0.0508,55.5,0.0271925,127.220
630,15.4,0.0508,55.5,0.0271925,129.330
800,15.4,0.0508,55.5,0.0271925,130.430
1000,15.4,0.0508,55.5,0.0271925,130.400
1250,15.4,0.0508,55.5,0.0271925,130.000
1600,15.4,0.0508,55.5,0.0271925,128.200
2000,15.4,0.0508,55.5,0.0271925,127.040
2500,15.4,0.0508,55.5,0.0271925,125.630
3150,15.4,0.0508,55.5,0.0271925,123.460
4000,15.4,0.0508,55.5,0.0271925,120.920
5000,15.4,0.0508,55.5,0.0271925,117.110
6300,15.4,0.0508,55.5,0.0271925,112.930
200,15.4,0.0508,39.6,0.0282593,121.783
250,15.4,0.0508,39.6,0.0282593,122.893
315,15.4,0.0508,39.6,0.0282593,124.493
400,15.4,0.0508,39.6,0.0282593,125.353
500,15.4,0.0508,39.6,0.0282593,125.963
630,15.4,0.0508,39.6,0.0282593,127.443
800,15.4,0.0508,39.6,0.0282593,128.423
1000,15.4,0.0508,39.6,0.0282593,127.893
1250,15.4,0.0508,39.6,0.0282593,126.743
1600,15.4,0.0508,39.6,0.0282593,124.843
2000,15.4,0.0508,39.6,0.0282593,123.443
2500,15.4,0.0508,39.6,0.0282593,122.413
3150,15.4,0.0508,39.6,0.0282593,120.513
4000,15.4,0.0508,39.6,0.0282593,118.113
5000,15.4,0.0508,39.6,0.0282593,114.453
6300,15.4,0.0508,39.6,0.0282593,109.663
200,15.4,0.0508,31.7,0.0289853,119.975
250,15.4,0.0508,31.7,0.0289853,121.225
315,15.4,0.0508,31.7,0.0289853,122.845
400,15.4,0.0508,31.7,0.0289853,123.705
500,15.4,0.0508,31.7,0.0289853,123.695
630,15.4,0.0508,31.7,0.0289853,124.685
800,15.4,0.0508,31.7,0.0289853,125.555
1000,15.4,0.0508,31.7,0.0289853,124.525
1250,15.4,0.0508,31.7,0.0289853,123.255
1600,15.4,0.0508,31.7,0.0289853,121.485
2000,15.4,0.0508,31.7,0.0289853,120.835
2500,15.4,0.0508,31.7,0.0289853,119.945
3150,15.4,0.0508,31.7,0.0289853,118.045
4000,15.4,0.0508,31.7,0.0289853,115.635
5000,15.4,0.0508,31.7,0.0289853,112.355
6300,15.4,0.0508,31.7,0.0289853,108.185
200,19.7,0.0508,71.3,0.0341183,118.005
250,19.7,0.0508,71.3,0.0341183,119.115
315,19.7,0.0508,71.3,0.0341183,121.235
400,19.7,0.0508,71.3,0.0341183,123.865
500,19.7,0.0508,71.3,0.0341183,126.995
630,19.7,0.0508,71.3,0.0341183,128.365
800,19.7,0.0508,71.3,0.0341183,124.555
1000,19.7,0.0508,71.3,0.0341183,121.885
1250,19.7,0.0508,71.3,0.0341183,121.485
1600,19.7,0.0508,71.3,0.0341183,120.575
2000,19.7,0.0508,71.3,0.0341183,120.055
2500,19.7,0.0508,71.3,0.0341183,118.385
3150,19.7,0.0508,71.3,0.0341183,116.225
4000,19.7,0.0508,71.3,0.0341183,113.045
200,19.7,0.0508,39.6,0.036484,125.974
250,19.7,0.0508,39.6,0.036484,127.224
315,19.7,0.0508,39.6,0.036484,129.864
400,19.7,0.0508,39.6,0.036484,130.614
500,19.7,0.0508,39.6,0.036484,128.444
630,19.7,0.0508,39.6,0.036484,120.324
800,19.7,0.0508,39.6,0.036484,119.174
1000,19.7,0.0508,39.6,0.036484,118.904
1250,19.7,0.0508,39.6,0.036484,118.634
1600,19.7,0.0508,39.6,0.036484,117.604
2000,19.7,0.0508,39.6,0.036484,117.724
2500,19.7,0.0508,39.6,0.036484,116.184
3150,19.7,0.0508,39.6,0.036484,113.004
4000,19.7,0.0508,39.6,0.036484,108.684
2500,0,0.0254,71.3,0.000400682,133.707
3150,0,0.0254,71.3,0.000400682,137.007
4000,0,0.0254,71.3,0.000400682,138.557
5000,0,0.0254,71.3,0.000400682,136.837
6300,0,0.0254,71.3,0.000400682,134.987
8000,0,0.0254,71.3,0.000400682,129.867
10000,0,0.0254,71.3,0.000400682,130.787
12500,0,0.0254,71.3,0.000400682,133.207
16000,0,0.0254,71.3,0.000400682,130.477
20000,0,0.0254,71.3,0.000400682,123.217
2000,0,0.0254,55.5,0.00041229,127.623
2500,0,0.0254,55.5,0.00041229,130.073
3150,0,0.0254,55.5,0.00041229,130.503
4000,0,0.0254,55.5,0.00041229,133.223
5000,0,0.0254,55.5,0.00041229,135.803
6300,0,0.0254,55.5,0.00041229,136.103
8000,0,0.0254,55.5,0.00041229,136.163
10000,0,0.0254,55.5,0.00041229,134.563
12500,0,0.0254,55.5,0.00041229,131.453
16000,0,0.0254,55.5,0.00041229,125.683
20000,0,0.0254,55.5,0.00041229,121.933
1600,0,0.0254,39.6,0.000428464,124.156
2000,0,0.0254,39.6,0.000428464,130.026
2500,0,0.0254,39.6,0.000428464,131.836
3150,0,0.0254,39.6,0.000428464,133.276
4000,0,0.0254,39.6,0.000428464,135.346
5000,0,0.0254,39.6,0.000428464,136.536
6300,0,0.0254,39.6,0.000428464,136.826
8000,0,0.0254,39.6,0.000428464,135.866
10000,0,0.0254,39.6,0.000428464,133.376
12500,0,0.0254,39.6,0.000428464,129.116
16000,0,0.0254,39.6,0.000428464,124.986
1000,0,0.0254,31.7,0.000439472,125.127
1250,0,0.0254,31.7,0.000439472,127.947
1600,0,0.0254,31.7,0.000439472,129.267
2000,0,0.0254,31.7,0.000439472,130.697
2500,0,0.0254,31.7,0.000439472,132.897
3150,0,0.0254,31.7,0.000439472,135.227
4000,0,0.0254,31.7,0.000439472,137.047
5000,0,0.0254,31.7,0.000439472,138.607
6300,0,0.0254,31.7,0.000439472,138.537
8000,0,0.0254,31.7,0.000439472,137.207
10000,0,0.0254,31.7,0.000439472,134.227
12500,0,0.0254,31.7,0.000439472,128.977
16000,0,0.0254,31.7,0.000439472,125.627
2000,4.8,0.0254,71.3,0.000848633,128.398
2500,4.8,0.0254,71.3,0.000848633,130.828
3150,4.8,0.0254,71.3,0.000848633,133.378
4000,4.8,0.0254,71.3,0.000848633,134.928
5000,4.8,0.0254,71.3,0.000848633,135.468
6300,4.8,0.0254,71.3,0.000848633,134.498
8000,4.8,0.0254,71.3,0.000848633,131.518
10000,4.8,0.0254,71.3,0.000848633,127.398
12500,4.8,0.0254,71.3,0.000848633,127.688
16000,4.8,0.0254,71.3,0.000848633,124.208
20000,4.8,0.0254,71.3,0.000848633,119.708
1600,4.8,0.0254,55.5,0.000873218,121.474
2000,4.8,0.0254,55.5,0.000873218,125.054
2500,4.8,0.0254,55.5,0.000873218,129.144
3150,4.8,0.0254,55.5,0.000873218,132.354
4000,4.8,0.0254,55.5,0.000873218,133.924
5000,4.8,0.0254,55.5,0.000873218,135.484
6300,4.8,0.0254,55.5,0.000873218,135.164
8000,4.8,0.0254,55.5,0.000873218,132.184
10000,4.8,0.0254,55.5,0.000873218,126.944
12500,4.8,0.0254,55.5,0.000873218,125.094
16000,4.8,0.0254,55.5,0.000873218,124.394
20000,4.8,0.0254,55.5,0.000873218,121.284
500,4.8,0.0254,39.6,0.000907475,116.366
630,4.8,0.0254,39.6,0.000907475,118.696
800,4.8,0.0254,39.6,0.000907475,120.766
1000,4.8,0.0254,39.6,0.000907475,122.956
1250,4.8,0.0254,39.6,0.000907475,125.026
1600,4.8,0.0254,39.6,0.000907475,125.966
2000,4.8,0.0254,39.6,0.000907475,128.916
2500,4.8,0.0254,39.6,0.000907475,131.236
3150,4.8,0.0254,39.6,0.000907475,133.436
4000,4.8,0.0254,39.6,0.000907475,134.996
5000,4.8,0.0254,39.6,0.000907475,135.426
6300,4.8,0.0254,39.6,0.000907475,134.336
8000,4.8,0.0254,39.6,0.000907475,131.346
10000,4.8,0.0254,39.6,0.000907475,126.066
500,4.8,0.0254,31.7,0.000930789,116.128
630,4.8,0.0254,31.7,0.000930789,120.078
800,4.8,0.0254,31.7,0.000930789,122.648
1000,4.8,0.0254,31.7,0.000930789,125.348
1250,4.8,0.0254,31.7,0.000930789,127.408
1600,4.8,0.0254,31.7,0.000930789,128.718
2000,4.8,0.0254,31.7,0.000930789,130.148
2500,4.8,0.0254,31.7,0.000930789,132.588
3150,4.8,0.0254,31.7,0.000930789,134.268
4000,4.8,0.0254,31.7,0.000930789,135.328
5000,4.8,0.0254,31.7,0.000930789,135.248
6300,4.8,0.0254,31.7,0.000930789,132.898
8000,4.8,0.0254,31.7,0.000930789,127.008
630,9.5,0.0254,71.3,0.00420654,125.726
800,9.5,0.0254,71.3,0.00420654,127.206
1000,9.5,0.0254,71.3,0.00420654,129.556
1250,9.5,0.0254,71.3,0.00420654,131.656
1600,9.5,0.0254,71.3,0.00420654,133.756
2000,9.5,0.0254,71.3,0.00420654,134.976
2500,9.5,0.0254,71.3,0.00420654,135.956
3150,9.5,0.0254,71.3,0.00420654,136.166
4000,9.5,0.0254,71.3,0.00420654,134.236
5000,9.5,0.0254,71.3,0.00420654,131.186
6300,9.5,0.0254,71.3,0.00420654,127.246
400,9.5,0.0254,55.5,0.0043284,120.952
500,9.5,0.0254,55.5,0.0043284,123.082
630,9.5,0.0254,55.5,0.0043284,125.452
800,9.5,0.0254,55.5,0.0043284,128.082
1000,9.5,0.0254,55.5,0.0043284,130.332
1250,9.5,0.0254,55.5,0.0043284,132.202
1600,9.5,0.0254,55.5,0.0043284,133.062
2000,9.5,0.0254,55.5,0.0043284,134.052
2500,9.5,0.0254,55.5,0.0043284,134.152
3150,9.5,0.0254,55.5,0.0043284,133.252
4000,9.5,0.0254,55.5,0.0043284,131.582
5000,9.5,0.0254,55.5,0.0043284,128.412
6300,9.5,0.0254,55.5,0.0043284,124.222
200,9.5,0.0254,39.6,0.00449821,116.074
250,9.5,0.0254,39.6,0.00449821,116.924
315,9.5,0.0254,39.6,0.00449821,119.294
400,9.5,0.0254,39.6,0.00449821,121.154
500,9.5,0.0254,39.6,0.00449821,123.894
630,9.5,0.0254,39.6,0.00449821,126.514
800,9.5,0.0254,39.6,0.00449821,129.014
1000,9.5,0.0254,39.6,0.00449821,130.374
1250,9.5,0.0254,39.6,0.00449821,130.964
1600,9.5,0.0254,39.6,0.00449821,131.184
2000,9.5,0.0254,39.6,0.00449821,131.274
2500,9.5,0.0254,39.6,0.00449821,131.234
3150,9.5,0.0254,39.6,0.00449821,129.934
4000,9.5,0.0254,39.6,0.00449821,127.864
5000,9.5,0.0254,39.6,0.00449821,125.044
6300,9.5,0.0254,39.6,0.00449821,120.324
200,9.5,0.0254,31.7,0.00461377,119.146
250,9.5,0.0254,31.7,0.00461377,120.136
315,9.5,0.0254,31.7,0.00461377,122.766
400,9.5,0.0254,31.7,0.00461377,124.756
500,9.5,0.0254,31.7,0.00461377,126.886
630,9.5,0.0254,31.7,0.00461377,129.006
800,9.5,0.0254,31.7,0.00461377,130.746
1000,9.5,0.0254,31.7,0.00461377,131.346
1250,9.5,0.0254,31.7,0.00461377,131.446
1600,9.5,0.0254,31.7,0.00461377,131.036
2000,9.5,0.0254,31.7,0.00461377,130.496
2500,9.5,0.0254,31.7,0.00461377,130.086
3150,9.5,0.0254,31.7,0.00461377,128.536
4000,9.5,0.0254,31.7,0.00461377,126.736
5000,9.5,0.0254,31.7,0.00461377,124.426
6300,9.5,0.0254,31.7,0.00461377,120.726
250,12.7,0.0254,71.3,0.0121808,119.698
315,12.7,0.0254,71.3,0.0121808,122.938
400,12.7,0.0254,71.3,0.0121808,125.048
500,12.7,0.0254,71.3,0.0121808,126.898
630,12.7,0.0254,71.3,0.0121808,128.878
800,12.7,0.0254,71.3,0.0121808,130.348
1000,12.7,0.0254,71.3,0.0121808,131.698
1250,12.7,0.0254,71.3,0.0121808,133.048
1600,12.7,0.0254,71.3,0.0121808,134.528
2000,12.7,0.0254,71.3,0.0121808,134.228
2500,12.7,0.0254,71.3,0.0121808,134.058
3150,12.7,0.0254,71.3,0.0121808,133.758
4000,12.7,0.0254,71.3,0.0121808,131.808
5000,12.7,0.0254,71.3,0.0121808,128.978
6300,12.7,0.0254,71.3,0.0121808,125.398
8000,12.7,0.0254,71.3,0.0121808,120.538
10000,12.7,0.0254,71.3,0.0121808,114.418
250,12.7,0.0254,39.6,0.0130253,121.547
315,12.7,0.0254,39.6,0.0130253,123.537
400,12.7,0.0254,39.6,0.0130253,125.527
500,12.7,0.0254,39.6,0.0130253,127.127
630,12.7,0.0254,39.6,0.0130253,128.867
800,12.7,0.0254,39.6,0.0130253,130.217
1000,12.7,0.0254,39.6,0.0130253,130.947
1250,12.7,0.0254,39.6,0.0130253,130.777
1600,12.7,0.0254,39.6,0.0130253,129.977
2000,12.7,0.0254,39.6,0.0130253,129.567
2500,12.7,0.0254,39.6,0.0130253,129.027
3150,12.7,0.0254,39.6,0.0130253,127.847
4000,12.7,0.0254,39.6,0.0130253,126.537
5000,12.7,0.0254,39.6,0.0130253,125.107
6300,12.7,0.0254,39.6,0.0130253,123.177
8000,12.7,0.0254,39.6,0.0130253,120.607
10000,12.7,0.0254,39.6,0.0130253,116.017
200,17.4,0.0254,71.3,0.016104,112.506
250,17.4,0.0254,71.3,0.016104,113.796
315,17.4,0.0254,71.3,0.016104,115.846
400,17.4,0.0254,71.3,0.016104,117.396
500,17.4,0.0254,71.3,0.016104,119.806
630,17.4,0.0254,71.3,0.016104,122.606
800,17.4,0.0254,71.3,0.016104,124.276
1000,17.4,0.0254,71.3,0.016104,125.816
1250,17.4,0.0254,71.3,0.016104,126.356
1600,17.4,0.0254,71.3,0.016104,126.406
2000,17.4,0.0254,71.3,0.016104,126.826
2500,17.4,0.0254,71.3,0.016104,126.746
3150,17.4,0.0254,71.3,0.016104,126.536
4000,17.4,0.0254,71.3,0.016104,125.586
5000,17.4,0.0254,71.3,0.016104,123.126
6300,17.4,0.0254,71.3,0.016104,119.916
8000,17.4,0.0254,71.3,0.016104,115.466
200,17.4,0.0254,55.5,0.0165706,109.951
250,17.4,0.0254,55.5,0.0165706,110.491
315,17.4,0.0254,55.5,0.0165706,111.911
400,17.4,0.0254,55.5,0.0165706,115.461
500,17.4,0.0254,55.5,0.0165706,119.621
630,17.4,0.0254,55.5,0.0165706,122.411
800,17.4,0.0254,55.5,0.0165706,123.091
1000,17.4,0.0254,55.5,0.0165706,126.001
1250,17.4,0.0254,55.5,0.0165706,129.301
1600,17.4,0.0254,55.5,0.0165706,126.471
2000,17.4,0.0254,55.5,0.0165706,125.261
2500,17.4,0.0254,55.5,0.0165706,124.931
3150,17.4,0.0254,55.5,0.0165706,124.101
4000,17.4,0.0254,55.5,0.0165706,121.771
5000,17.4,0.0254,55.5,0.0165706,118.941
6300,17.4,0.0254,55.5,0.0165706,114.861
200,17.4,0.0254,39.6,0.0172206,114.044
250,17.4,0.0254,39.6,0.0172206,114.714
315,17.4,0.0254,39.6,0.0172206,115.144
400,17.4,0.0254,39.6,0.0172206,115.444
500,17.4,0.0254,39.6,0.0172206,117.514
630,17.4,0.0254,39.6,0.0172206,124.514
800,17.4,0.0254,39.6,0.0172206,135.324
1000,17.4,0.0254,39.6,0.0172206,138.274
1250,17.4,0.0254,39.6,0.0172206,131.364
1600,17.4,0.0254,39.6,0.0172206,127.614
2000,17.4,0.0254,39.6,0.0172206,126.644
2500,17.4,0.0254,39.6,0.0172206,124.154
3150,17.4,0.0254,39.6,0.0172206,123.564
4000,17.4,0.0254,39.6,0.0172206,122.724
5000,17.4,0.0254,39.6,0.0172206,119.854
200,17.4,0.0254,31.7,0.0176631,116.146
250,17.4,0.0254,31.7,0.0176631,116.956
315,17.4,0.0254,31.7,0.0176631,118.416
400,17.4,0.0254,31.7,0.0176631,120.766
500,17.4,0.0254,31.7,0.0176631,127.676
630,17.4,0.0254,31.7,0.0176631,136.886
800,17.4,0.0254,31.7,0.0176631,139.226
1000,17.4,0.0254,31.7,0.0176631,131.796
1250,
gitextract_jvogax4q/ ├── .clang-format ├── .clang-tidy ├── .codespellrc ├── .envrc ├── .github/ │ └── workflows/ │ ├── build-linux.yml │ ├── build-macos.yml │ ├── build-windows.yml │ ├── ci.yml │ └── test-linux.yml ├── .gitignore ├── .readthedocs.yml ├── BUILDING.md ├── CMakeLists.txt ├── CMakePresets.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── HACKING.md ├── LICENSE ├── README.md ├── cli/ │ ├── CMakeLists.txt │ └── source/ │ ├── operator_factory.cpp │ ├── operator_factory.hpp │ ├── operon_gp.cpp │ ├── operon_nsgp.cpp │ ├── operon_parse_model.cpp │ ├── pareto_front.cpp │ ├── pareto_front.hpp │ ├── reporter.hpp │ ├── util.cpp │ └── util.hpp ├── cmake/ │ ├── coverage.cmake │ ├── dev-mode.cmake │ ├── docs.cmake │ ├── get-git-revision.cmake │ ├── get-git-revision.cmake.in │ ├── install-config.cmake │ ├── install-rules.cmake │ ├── lint-targets.cmake │ ├── lint.cmake │ ├── open-cpp-coverage.cmake.example │ ├── prelude.cmake │ ├── project-is-top-level.cmake │ ├── spell-targets.cmake │ ├── spell.cmake │ ├── variables.cmake │ └── windows-set-path.cmake ├── data/ │ ├── AirfoilSelfNoise.csv │ ├── AirfoilSelfNoise.json │ ├── Breiman-I.csv │ ├── Breiman-I.json │ ├── Chemical-I.csv │ ├── Chemical-I.json │ ├── Chemical-II.csv │ ├── Chemical-II.json │ ├── Concrete.csv │ ├── Concrete.json │ ├── Flow_stress.csv │ ├── Flow_stress.json │ ├── FrictionDyn-OneHot.csv │ ├── FrictionDyn-OneHot.json │ ├── FrictionStat-OneHot.csv │ ├── FrictionStat-OneHot.json │ ├── Friedman-I.csv │ ├── Friedman-I.json │ ├── Friedman-II.csv │ ├── Friedman-II.json │ ├── GP-Challenge.csv │ ├── GP-Challenge.json │ ├── NasaBattery-1_10min.csv │ ├── NasaBattery-1_10min.json │ ├── NasaBattery-2_20min.csv │ ├── NasaBattery-2_20min.json │ ├── Nikuradse_1.csv │ ├── Nikuradse_1.json │ ├── Nikuradse_2.csv │ ├── Nikuradse_2.json │ ├── Pagie-1.csv │ ├── Pagie-1.json │ ├── Poly-10.csv │ ├── Poly-10.json │ ├── Sextic.csv │ ├── Sextic.json │ ├── Vladislavleva-1.csv │ ├── Vladislavleva-1.json │ ├── Vladislavleva-2.csv │ ├── Vladislavleva-2.json │ ├── Vladislavleva-3.csv │ ├── Vladislavleva-3.json │ ├── Vladislavleva-4.csv │ ├── Vladislavleva-4.json │ ├── Vladislavleva-5.csv │ ├── Vladislavleva-5.json │ ├── Vladislavleva-6.csv │ ├── Vladislavleva-6.json │ ├── Vladislavleva-7.csv │ ├── Vladislavleva-7.json │ ├── Vladislavleva-8.csv │ └── Vladislavleva-8.json ├── docs/ │ ├── Doxyfile.in │ ├── conf.py.in │ └── pages/ │ └── about.dox ├── example/ │ ├── CMakeLists.txt │ ├── custom_primitives.cpp │ └── empty_example.cpp ├── flake.nix ├── include/ │ └── operon/ │ ├── algorithms/ │ │ ├── config.hpp │ │ ├── ga_base.hpp │ │ ├── gp.hpp │ │ ├── nsga2.hpp │ │ └── solution_archive.hpp │ ├── analyzers/ │ │ ├── analyzer_base.hpp │ │ └── diversity.hpp │ ├── ceres/ │ │ ├── integer_sequence_algorithm.h │ │ ├── jet.h │ │ ├── jet_fwd.h │ │ ├── jet_traits.h │ │ ├── port.h │ │ └── tiny_solver.h │ ├── collections/ │ │ ├── bitset.hpp │ │ └── projection.hpp │ ├── core/ │ │ ├── aligned_allocator.hpp │ │ ├── buildinfo.hpp.in │ │ ├── comparison.hpp │ │ ├── concepts.hpp │ │ ├── constants.hpp │ │ ├── contracts.hpp │ │ ├── dataset.hpp │ │ ├── dispatch.hpp │ │ ├── distance.hpp │ │ ├── individual.hpp │ │ ├── node.hpp │ │ ├── operator.hpp │ │ ├── problem.hpp │ │ ├── pset.hpp │ │ ├── range.hpp │ │ ├── subtree.hpp │ │ ├── symbol_library.hpp │ │ ├── tree.hpp │ │ ├── types.hpp │ │ ├── variable.hpp │ │ └── version.hpp │ ├── error_metrics/ │ │ ├── correlation_coefficient.hpp │ │ ├── error_metrics.hpp │ │ ├── mean_absolute_error.hpp │ │ ├── mean_squared_error.hpp │ │ ├── normalized_mean_squared_error.hpp │ │ ├── r2_score.hpp │ │ ├── root_mean_squared_error.hpp │ │ └── sum_of_squared_errors.hpp │ ├── formatter/ │ │ └── formatter.hpp │ ├── hash/ │ │ ├── hash.hpp │ │ ├── metrohash64.hpp │ │ └── zobrist.hpp │ ├── interpreter/ │ │ ├── backend/ │ │ │ ├── arma/ │ │ │ │ ├── derivatives.hpp │ │ │ │ └── functions.hpp │ │ │ ├── arma.hpp │ │ │ ├── blaze/ │ │ │ │ ├── derivatives.hpp │ │ │ │ └── functions.hpp │ │ │ ├── blaze.hpp │ │ │ ├── eigen/ │ │ │ │ ├── derivatives.hpp │ │ │ │ └── functions.hpp │ │ │ ├── eigen.hpp │ │ │ ├── eve/ │ │ │ │ ├── derivatives.hpp │ │ │ │ └── functions.hpp │ │ │ ├── eve.hpp │ │ │ ├── fast_approx/ │ │ │ │ ├── derivatives.hpp │ │ │ │ ├── functions.hpp │ │ │ │ └── impl/ │ │ │ │ ├── aq.hpp │ │ │ │ ├── exp.hpp │ │ │ │ ├── inv.hpp │ │ │ │ ├── log.hpp │ │ │ │ ├── pow.hpp │ │ │ │ ├── sqrt.hpp │ │ │ │ ├── tanh.hpp │ │ │ │ └── trig.hpp │ │ │ ├── fast_v1.hpp │ │ │ ├── fast_v2.hpp │ │ │ ├── fast_v3.hpp │ │ │ ├── fastor/ │ │ │ │ ├── derivatives.hpp │ │ │ │ └── functions.hpp │ │ │ ├── fastor.hpp │ │ │ ├── plain/ │ │ │ │ ├── derivatives.hpp │ │ │ │ └── functions.hpp │ │ │ ├── plain.hpp │ │ │ ├── vdt/ │ │ │ │ ├── derivatives.hpp │ │ │ │ └── functions.hpp │ │ │ └── vdt.hpp │ │ ├── derivatives.hpp │ │ ├── dual.hpp │ │ ├── functions.hpp │ │ └── interpreter.hpp │ ├── mdspan/ │ │ └── mdspan.hpp │ ├── operators/ │ │ ├── creator.hpp │ │ ├── crossover.hpp │ │ ├── evaluator.hpp │ │ ├── generator.hpp │ │ ├── initializer.hpp │ │ ├── local_search.hpp │ │ ├── mutation.hpp │ │ ├── non_dominated_sorter.hpp │ │ ├── reinserter.hpp │ │ └── selector.hpp │ ├── optimizer/ │ │ ├── dynamic_cost_function.hpp │ │ ├── likelihood/ │ │ │ ├── gaussian_likelihood.hpp │ │ │ ├── likelihood_base.hpp │ │ │ └── poisson_likelihood.hpp │ │ ├── lm_cost_function.hpp │ │ ├── optimizer.hpp │ │ ├── solvers/ │ │ │ └── sgd.hpp │ │ └── tiny_cost_function.hpp │ ├── parser/ │ │ └── infix.hpp │ └── random/ │ └── random.hpp ├── operon.nix ├── ports/ │ ├── aria-csv/ │ │ ├── portfile.cmake │ │ └── vcpkg.json │ ├── fluky/ │ │ ├── portfile.cmake │ │ └── vcpkg.json │ ├── infix-parser/ │ │ ├── portfile.cmake │ │ └── vcpkg.json │ ├── lbfgs/ │ │ ├── portfile.cmake │ │ └── vcpkg.json │ └── vstat/ │ ├── portfile.cmake │ └── vcpkg.json ├── rtd/ │ ├── build.rst │ ├── conf.py │ ├── example.rst │ ├── features.rst │ ├── index.rst │ └── requirements.txt ├── source/ │ ├── algorithms/ │ │ ├── gp.cpp │ │ ├── nsga2.cpp │ │ └── solution_archive.cpp │ ├── core/ │ │ ├── dataset.cpp │ │ ├── distance.cpp │ │ ├── node.cpp │ │ ├── pset.cpp │ │ ├── tree.cpp │ │ └── version.cpp │ ├── formatter/ │ │ ├── dot.cpp │ │ ├── infix.cpp │ │ ├── postfix.cpp │ │ └── tree.cpp │ ├── hash/ │ │ ├── hash.cpp │ │ ├── metrohash64.cpp │ │ └── zobrist.cpp │ ├── interpreter/ │ │ └── interpreter.cpp │ ├── operators/ │ │ ├── creator/ │ │ │ ├── balanced.cpp │ │ │ ├── creator.cpp │ │ │ ├── koza.cpp │ │ │ └── ptc2.cpp │ │ ├── crossover.cpp │ │ ├── evaluator.cpp │ │ ├── evaluator_error_metrics.cpp │ │ ├── generator/ │ │ │ ├── basic.cpp │ │ │ ├── brood.cpp │ │ │ ├── os.cpp │ │ │ └── poly.cpp │ │ ├── local_search.cpp │ │ ├── mutation.cpp │ │ ├── non_dominated_sorter/ │ │ │ ├── best_order_sort.cpp │ │ │ ├── deductive_sort.cpp │ │ │ ├── dominance_degree_sort.cpp │ │ │ ├── efficient_sort.cpp │ │ │ ├── hierarchical_sort.cpp │ │ │ ├── merge_sort.cpp │ │ │ ├── rank_intersect.cpp │ │ │ └── rank_ordinal.cpp │ │ └── selector/ │ │ ├── proportional.cpp │ │ └── tournament.cpp │ └── parser/ │ └── infix.cpp ├── test/ │ ├── CMakeLists.txt │ └── source/ │ ├── implementation/ │ │ ├── autodiff.cpp │ │ ├── crossover.cpp │ │ ├── details.cpp │ │ ├── dispatch_table.cpp │ │ ├── error_metrics.cpp │ │ ├── evaluation.cpp │ │ ├── evaluator.cpp │ │ ├── hashing.cpp │ │ ├── infix_parser.cpp │ │ ├── initialization.cpp │ │ ├── mutation.cpp │ │ ├── nondominatedsort.cpp │ │ ├── optimizer.cpp │ │ ├── random.cpp │ │ ├── selection.cpp │ │ └── zobrist.cpp │ ├── operon_test.cpp │ ├── operon_test.hpp │ ├── performance/ │ │ ├── autodiff.cpp │ │ ├── creator.cpp │ │ ├── distance.cpp │ │ ├── evaluation.cpp │ │ ├── infix_parser.cpp │ │ └── nondominatedsort.cpp │ └── thirdparty/ │ ├── elki_stats.hpp │ └── nanobench.h ├── tools/ │ ├── bench_ndsort.py │ ├── benchmark_cache.py │ └── compare_operon.py └── vcpkg.json
SYMBOL INDEX (1731 symbols across 174 files)
FILE: cli/source/operator_factory.cpp
type Operon (line 19) | namespace Operon { class PrimitiveSet; }
class PrimitiveSet (line 19) | class PrimitiveSet
class Problem (line 20) | class Problem
type CrossoverBase (line 21) | struct CrossoverBase
type MutatorBase (line 22) | struct MutatorBase
type Variable (line 23) | struct Variable
type detail (line 27) | namespace detail {
function GetErrorString (line 28) | auto GetErrorString(std::string const& name, std::string const& arg) {
function ParseReinserter (line 33) | auto ParseReinserter(std::string const& str, ComparisonCallback&& comp...
function ParseSelector (line 46) | auto ParseSelector(std::string const& str, ComparisonCallback&& comp) ...
function ParseCreator (line 82) | auto ParseCreator(std::string const& str, PrimitiveSet const& pset, st...
function ParseEvaluator (line 108) | auto ParseEvaluator(std::string const& str, Problem& problem, ScalarDi...
function ParseGenerator (line 141) | auto ParseGenerator(std::string const& str, EvaluatorBase& eval, Cross...
function ParseOptimizer (line 176) | auto ParseOptimizer(std::string const& /*str*/, Problem const& /*probl...
type Operon (line 20) | namespace Operon { class Problem; }
class PrimitiveSet (line 19) | class PrimitiveSet
class Problem (line 20) | class Problem
type CrossoverBase (line 21) | struct CrossoverBase
type MutatorBase (line 22) | struct MutatorBase
type Variable (line 23) | struct Variable
type detail (line 27) | namespace detail {
function GetErrorString (line 28) | auto GetErrorString(std::string const& name, std::string const& arg) {
function ParseReinserter (line 33) | auto ParseReinserter(std::string const& str, ComparisonCallback&& comp...
function ParseSelector (line 46) | auto ParseSelector(std::string const& str, ComparisonCallback&& comp) ...
function ParseCreator (line 82) | auto ParseCreator(std::string const& str, PrimitiveSet const& pset, st...
function ParseEvaluator (line 108) | auto ParseEvaluator(std::string const& str, Problem& problem, ScalarDi...
function ParseGenerator (line 141) | auto ParseGenerator(std::string const& str, EvaluatorBase& eval, Cross...
function ParseOptimizer (line 176) | auto ParseOptimizer(std::string const& /*str*/, Problem const& /*probl...
type Operon (line 21) | namespace Operon { struct CrossoverBase; }
class PrimitiveSet (line 19) | class PrimitiveSet
class Problem (line 20) | class Problem
type CrossoverBase (line 21) | struct CrossoverBase
type MutatorBase (line 22) | struct MutatorBase
type Variable (line 23) | struct Variable
type detail (line 27) | namespace detail {
function GetErrorString (line 28) | auto GetErrorString(std::string const& name, std::string const& arg) {
function ParseReinserter (line 33) | auto ParseReinserter(std::string const& str, ComparisonCallback&& comp...
function ParseSelector (line 46) | auto ParseSelector(std::string const& str, ComparisonCallback&& comp) ...
function ParseCreator (line 82) | auto ParseCreator(std::string const& str, PrimitiveSet const& pset, st...
function ParseEvaluator (line 108) | auto ParseEvaluator(std::string const& str, Problem& problem, ScalarDi...
function ParseGenerator (line 141) | auto ParseGenerator(std::string const& str, EvaluatorBase& eval, Cross...
function ParseOptimizer (line 176) | auto ParseOptimizer(std::string const& /*str*/, Problem const& /*probl...
type Operon (line 22) | namespace Operon { struct MutatorBase; }
class PrimitiveSet (line 19) | class PrimitiveSet
class Problem (line 20) | class Problem
type CrossoverBase (line 21) | struct CrossoverBase
type MutatorBase (line 22) | struct MutatorBase
type Variable (line 23) | struct Variable
type detail (line 27) | namespace detail {
function GetErrorString (line 28) | auto GetErrorString(std::string const& name, std::string const& arg) {
function ParseReinserter (line 33) | auto ParseReinserter(std::string const& str, ComparisonCallback&& comp...
function ParseSelector (line 46) | auto ParseSelector(std::string const& str, ComparisonCallback&& comp) ...
function ParseCreator (line 82) | auto ParseCreator(std::string const& str, PrimitiveSet const& pset, st...
function ParseEvaluator (line 108) | auto ParseEvaluator(std::string const& str, Problem& problem, ScalarDi...
function ParseGenerator (line 141) | auto ParseGenerator(std::string const& str, EvaluatorBase& eval, Cross...
function ParseOptimizer (line 176) | auto ParseOptimizer(std::string const& /*str*/, Problem const& /*probl...
type Operon (line 23) | namespace Operon { struct Variable; }
class PrimitiveSet (line 19) | class PrimitiveSet
class Problem (line 20) | class Problem
type CrossoverBase (line 21) | struct CrossoverBase
type MutatorBase (line 22) | struct MutatorBase
type Variable (line 23) | struct Variable
type detail (line 27) | namespace detail {
function GetErrorString (line 28) | auto GetErrorString(std::string const& name, std::string const& arg) {
function ParseReinserter (line 33) | auto ParseReinserter(std::string const& str, ComparisonCallback&& comp...
function ParseSelector (line 46) | auto ParseSelector(std::string const& str, ComparisonCallback&& comp) ...
function ParseCreator (line 82) | auto ParseCreator(std::string const& str, PrimitiveSet const& pset, st...
function ParseEvaluator (line 108) | auto ParseEvaluator(std::string const& str, Problem& problem, ScalarDi...
function ParseGenerator (line 141) | auto ParseGenerator(std::string const& str, EvaluatorBase& eval, Cross...
function ParseOptimizer (line 176) | auto ParseOptimizer(std::string const& /*str*/, Problem const& /*probl...
type Operon (line 25) | namespace Operon {
class PrimitiveSet (line 19) | class PrimitiveSet
class Problem (line 20) | class Problem
type CrossoverBase (line 21) | struct CrossoverBase
type MutatorBase (line 22) | struct MutatorBase
type Variable (line 23) | struct Variable
type detail (line 27) | namespace detail {
function GetErrorString (line 28) | auto GetErrorString(std::string const& name, std::string const& arg) {
function ParseReinserter (line 33) | auto ParseReinserter(std::string const& str, ComparisonCallback&& comp...
function ParseSelector (line 46) | auto ParseSelector(std::string const& str, ComparisonCallback&& comp) ...
function ParseCreator (line 82) | auto ParseCreator(std::string const& str, PrimitiveSet const& pset, st...
function ParseEvaluator (line 108) | auto ParseEvaluator(std::string const& str, Problem& problem, ScalarDi...
function ParseGenerator (line 141) | auto ParseGenerator(std::string const& str, EvaluatorBase& eval, Cross...
function ParseOptimizer (line 176) | auto ParseOptimizer(std::string const& /*str*/, Problem const& /*probl...
FILE: cli/source/operator_factory.hpp
type Operon (line 18) | namespace Operon { struct EvaluatorBase; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 19) | namespace Operon { class KeepBestReinserter; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 20) | namespace Operon { class OffspringGeneratorBase; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 21) | namespace Operon { class PrimitiveSet; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 22) | namespace Operon { class Problem; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 23) | namespace Operon { class ReinserterBase; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 24) | namespace Operon { class ReplaceWorstReinserter; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 25) | namespace Operon { class SelectorBase; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 26) | namespace Operon { struct CreatorBase; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 27) | namespace Operon { struct CrossoverBase; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 28) | namespace Operon { struct ErrorMetric; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 29) | namespace Operon { class CoefficientOptimizer; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 30) | namespace Operon { struct MutatorBase; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 31) | namespace Operon { struct Variable; }
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
type Operon (line 33) | namespace Operon {
type EvaluatorBase (line 18) | struct EvaluatorBase
class KeepBestReinserter (line 19) | class KeepBestReinserter
class OffspringGeneratorBase (line 20) | class OffspringGeneratorBase
class PrimitiveSet (line 21) | class PrimitiveSet
class Problem (line 22) | class Problem
class ReinserterBase (line 23) | class ReinserterBase
class ReplaceWorstReinserter (line 24) | class ReplaceWorstReinserter
class SelectorBase (line 25) | class SelectorBase
type CreatorBase (line 26) | struct CreatorBase
type CrossoverBase (line 27) | struct CrossoverBase
type ErrorMetric (line 28) | struct ErrorMetric
class CoefficientOptimizer (line 29) | class CoefficientOptimizer
type MutatorBase (line 30) | struct MutatorBase
type Variable (line 31) | struct Variable
FILE: cli/source/operon_gp.cpp
function main (line 33) | auto main(int argc, char** argv) -> int
FILE: cli/source/operon_nsgp.cpp
function main (line 39) | auto main(int argc, char** argv) -> int
FILE: cli/source/operon_parse_model.cpp
type ParseError (line 28) | enum class ParseError : std::uint8_t {
function ParseOptions (line 36) | auto ParseOptions(int argc, char** argv) noexcept -> tl::expected<cxxopt...
function ParseOptimizer (line 78) | auto ParseOptimizer(Operon::ScalarDispatch const* dtable, Operon::Proble...
function main (line 100) | auto main(int argc, char** argv) -> int
FILE: cli/source/pareto_front.cpp
type Operon (line 21) | namespace Operon {
function WriteParetoFront (line 23) | auto WriteParetoFront(std::string const& path,
FILE: cli/source/pareto_front.hpp
type Operon (line 13) | namespace Operon {
FILE: cli/source/reporter.hpp
type Operon (line 10) | namespace Operon {
class Reporter (line 15) | class Reporter {
method Reporter (line 20) | explicit Reporter(gsl::not_null<Evaluator const*> evaluator)
method PrintStats (line 23) | static auto PrintStats(std::vector<std::tuple<std::string, double, s...
method GetBest (line 46) | auto GetBest() const -> Operon::Individual const& { return best_; }
FILE: cli/source/util.cpp
type Operon (line 27) | namespace Operon {
function Split (line 64) | auto Split(const std::string& s, char delimiter) -> std::vector<std::s...
function FormatDuration (line 77) | auto FormatDuration(std::chrono::duration<double> d) -> std::string
function FormatBytes (line 86) | auto FormatBytes(size_t bytes) -> std::string
function ParseRange (line 94) | auto ParseRange(std::string const& str) -> std::pair<size_t, size_t>
function ParsePrimitiveSetConfig (line 104) | auto ParsePrimitiveSetConfig(const std::string& options) -> PrimitiveS...
function PrintPrimitives (line 117) | auto PrintPrimitives(PrimitiveSetConfig config) -> void
function InitOptions (line 133) | auto InitOptions(std::string const& name, std::string const& desc, int...
function ParseOptions (line 187) | auto ParseOptions(cxxopts::Options&& opts, int argc, char** argv) -> c...
FILE: cli/source/util.hpp
type Operon (line 16) | namespace Operon {
FILE: example/custom_primitives.cpp
function main (line 46) | auto main(int argc, char** argv) -> int
FILE: example/empty_example.cpp
function main (line 1) | auto main() -> int
FILE: include/operon/algorithms/config.hpp
type Operon (line 9) | namespace Operon {
class Zobrist (line 11) | class Zobrist
type GeneticAlgorithmConfig (line 13) | struct GeneticAlgorithmConfig {
FILE: include/operon/algorithms/ga_base.hpp
type Operon (line 12) | namespace Operon {
class Problem (line 14) | class Problem
class ReinserterBase (line 15) | class ReinserterBase
type CoefficientInitializerBase (line 16) | struct CoefficientInitializerBase
type TreeInitializerBase (line 17) | struct TreeInitializerBase
class GeneticAlgorithmBase (line 19) | class GeneticAlgorithmBase {
method GeneticAlgorithmBase (line 22) | GeneticAlgorithmBase(const GeneticAlgorithmBase&) = default;
method GeneticAlgorithmBase (line 23) | GeneticAlgorithmBase(GeneticAlgorithmBase&&) = delete;
method GeneticAlgorithmBase (line 27) | GeneticAlgorithmBase(GeneticAlgorithmConfig config, gsl::not_null<Pr...
method Parents (line 41) | [[nodiscard]] auto Parents() const -> Operon::Span<Individual const>...
method Parents (line 42) | auto Parents() -> Operon::Span<Individual> { return parents_; }
method Offspring (line 44) | [[nodiscard]] auto Offspring() const -> Operon::Span<Individual cons...
method Offspring (line 45) | auto Offspring() -> Operon::Span<Individual> { return offspring_; }
method Individuals (line 47) | [[nodiscard]] auto Individuals() -> Operon::Vector<Operon::Individua...
method Individuals (line 48) | [[nodiscard]] auto Individuals() const -> Operon::Vector<Operon::Ind...
method GetProblem (line 50) | [[nodiscard]] auto GetProblem() const -> const Problem* { return pro...
method GetConfig (line 51) | [[nodiscard]] auto GetConfig() const -> GeneticAlgorithmConfig { ret...
method GetTreeInitializer (line 53) | [[nodiscard]] auto GetTreeInitializer() const -> TreeInitializerBase...
method GetCoefficientInitializer (line 54) | [[nodiscard]] auto GetCoefficientInitializer() const -> CoefficientI...
method GetGenerator (line 55) | [[nodiscard]] auto GetGenerator() const -> OffspringGeneratorBase co...
method GetReinserter (line 56) | [[nodiscard]] auto GetReinserter() const -> ReinserterBase const* { ...
method Generation (line 58) | [[nodiscard]] auto Generation() const -> size_t { return generation_; }
method Generation (line 59) | auto Generation() -> size_t& { return generation_; }
method Elapsed (line 61) | [[nodiscard]] auto Elapsed() const -> double { return elapsed_; }
method Elapsed (line 62) | auto Elapsed() -> double& { return elapsed_; }
method IsFitted (line 64) | [[nodiscard]] auto IsFitted() const -> bool { return isFitted_; }
method IsFitted (line 65) | auto IsFitted() -> bool& { return isFitted_; }
method Reset (line 67) | auto Reset() -> void
method RestoreIndividuals (line 74) | auto RestoreIndividuals(std::vector<Individual> inds) -> void
FILE: include/operon/algorithms/gp.hpp
type tf (line 17) | namespace tf {
class Executor (line 18) | class Executor
type Operon (line 21) | namespace Operon {
class Problem (line 23) | class Problem
class ReinserterBase (line 24) | class ReinserterBase
type CoefficientInitializerBase (line 25) | struct CoefficientInitializerBase
type TreeInitializerBase (line 26) | struct TreeInitializerBase
function GeneticProgrammingAlgorithm (line 28) | class OPERON_EXPORT GeneticProgrammingAlgorithm : public GeneticAlgori...
FILE: include/operon/algorithms/nsga2.hpp
type tf (line 21) | namespace tf { class Executor; }
class Executor (line 21) | class Executor
type Operon (line 23) | namespace Operon {
class NondominatedSorterBase (line 25) | class NondominatedSorterBase
class Problem (line 26) | class Problem
class ReinserterBase (line 27) | class ReinserterBase
type CoefficientInitializerBase (line 28) | struct CoefficientInitializerBase
type TreeInitializerBase (line 29) | struct TreeInitializerBase
function GeneticAlgorithmBase (line 31) | class OPERON_EXPORT NSGA2 : public GeneticAlgorithmBase {
function Best (line 49) | [[nodiscard]] auto Best() const -> Operon::Span<Individual const> { re...
FILE: include/operon/algorithms/solution_archive.hpp
type Operon (line 10) | namespace Operon {
class SolutionArchive (line 11) | class SolutionArchive {
method Solutions (line 16) | [[nodiscard]] auto Solutions() const { return Operon::Span<Operon::I...
method Clear (line 17) | auto Clear() { archive_.clear(); }
FILE: include/operon/analyzers/analyzer_base.hpp
type Operon (line 9) | namespace Operon {
class PopulationAnalyzerBase (line 11) | class PopulationAnalyzerBase : public OperatorBase<double> {
FILE: include/operon/analyzers/diversity.hpp
type Operon (line 16) | namespace Operon {
function MakeHashes (line 18) | inline auto MakeHashes(Tree& tree, Operon::HashMode m) -> Operon::Vect...
class PopulationDiversityAnalyzer (line 28) | class PopulationDiversityAnalyzer final : PopulationAnalyzerBase<T> {
method Prepare (line 35) | void Prepare(Operon::Span<T> pop)
FILE: include/operon/ceres/integer_sequence_algorithm.h
function namespace (line 43) | namespace ceres {
FILE: include/operon/ceres/jet.h
function namespace (line 208) | namespace ceres {
function isless (line 472) | inline bool isless(double lhs,
function islessequal (line 476) | inline bool islessequal(double lhs,
function isgreaterequal (line 481) | inline bool isgreaterequal(double lhs, double rhs) noexcept(
function islessgreater (line 485) | inline bool islessgreater(double lhs, double rhs) noexcept(
function isunordered (line 489) | inline bool isunordered(double lhs,
function IsFinite (line 511) | inline bool IsFinite(double x) { return std::isfinite(x); }
function IsInfinite (line 513) | inline bool IsInfinite(double x) { return std::isinf(x); }
function IsNaN (line 515) | inline bool IsNaN(double x) { return std::isnan(x); }
function IsNormal (line 517) | inline bool IsNormal(double x) { return std::isnormal(x); }
function fdim (line 838) | decltype(auto) fdim(const Lhs& f, const Rhs& g) {
function BesselJ0 (line 876) | inline double BesselJ0(double x) {
function BesselJ1 (line 883) | inline double BesselJ1(double x) {
function BesselJn (line 890) | inline double BesselJn(int n, double x) {
function isfinite (line 947) | bool isfinite(const Jet<T, N>& f) {
function isinf (line 953) | bool isinf(const Jet<T, N>& f) {
function isnan (line 959) | bool isnan(const Jet<T, N>& f) {
function isnormal (line 966) | bool isnormal(const Jet<T, N>& f) {
function isless (line 977) | bool isless(const Lhs& f, const Rhs& g) {
function isgreater (line 989) | bool isgreater(const Lhs& f, const Rhs& g) {
function islessequal (line 1001) | bool islessequal(const Lhs& f, const Rhs& g) {
function islessgreater (line 1013) | bool islessgreater(const Lhs& f, const Rhs& g) {
function isgreaterequal (line 1025) | bool isgreaterequal(const Lhs& f, const Rhs& g) {
function isunordered (line 1035) | bool isunordered(const Lhs& f, const Rhs& g) {
function fpclassify (line 1043) | int fpclassify(const Jet<T, N>& f) {
function signbit (line 1049) | bool signbit(const Jet<T, N>& f) {
function IsFinite (line 1058) | inline bool IsFinite(const Jet<T, N>& f) {
function IsNaN (line 1066) | inline bool IsNaN(const Jet<T, N>& f) {
function IsNormal (line 1074) | inline bool IsNormal(const Jet<T, N>& f) {
function IsInfinite (line 1083) | inline bool IsInfinite(const Jet<T, N>& f) {
function namespace (line 1298) | namespace std {
function namespace (line 1364) | namespace Eigen {
FILE: include/operon/ceres/jet_fwd.h
function namespace (line 35) | namespace ceres {
FILE: include/operon/ceres/jet_traits.h
function namespace (line 42) | namespace ceres {
FILE: include/operon/ceres/tiny_solver.h
function namespace (line 59) | namespace ceres {
FILE: include/operon/collections/bitset.hpp
type Operon (line 9) | namespace Operon {
class Bitset (line 12) | class Bitset {
method WordOf (line 18) | [[nodiscard]] constexpr auto WordOf(std::size_t i) const -> std::siz...
method BitOf (line 19) | [[nodiscard]] constexpr auto BitOf(std::size_t i) const -> std::siz...
method Bitset (line 22) | constexpr Bitset() = default;
method Set (line 25) | constexpr void Set(std::size_t i) { words_[WordOf(i)] |= (uint64_...
method Clear (line 26) | constexpr void Clear(std::size_t i) { words_[WordOf(i)] &= ~(uint64_...
method Test (line 27) | [[nodiscard]] constexpr auto Test(std::size_t i) const -> bool {
method Any (line 68) | [[nodiscard]] constexpr auto Any() const -> bool {
method None (line 74) | [[nodiscard]] constexpr auto None() const -> bool { return !Any(); }
method Count (line 76) | [[nodiscard]] constexpr auto Count() const -> std::size_t {
method ForEach (line 86) | constexpr void ForEach(F&& f) const {
FILE: include/operon/collections/projection.hpp
type Operon (line 11) | namespace Operon {
type ProjectionIterator (line 15) | struct ProjectionIterator {
method ProjectionIterator (line 26) | explicit ProjectionIterator(InputIt it, Func const& f) : it_(it), pr...
method ProjectionIterator (line 27) | explicit ProjectionIterator(InputIt it, Func&& f) : it_(it), pr_(std...
type Projection (line 129) | struct Projection {
method Projection (line 132) | explicit Projection(Container const& c, Func const& f)
method begin (line 137) | auto begin() const -> InputIt { return beg_; }
method end (line 138) | auto end() const -> InputIt { return end_; }
method empty (line 139) | bool empty() const noexcept { return beg_ == end_; }
FILE: include/operon/core/aligned_allocator.hpp
class AlignedAllocator (line 12) | class AlignedAllocator {
type rebind (line 22) | struct rebind {
method AlignedAllocator (line 26) | constexpr AlignedAllocator() noexcept = default;
method AlignedAllocator (line 27) | constexpr AlignedAllocator(AlignedAllocator const& other) noexcept = d...
method AlignedAllocator (line 30) | explicit constexpr AlignedAllocator(AlignedAllocator<U, Alignment> con...
method allocate (line 43) | [[nodiscard]] auto allocate(std::size_t n) -> T* {
method allocate_at_least (line 51) | [[nodiscard]] auto allocate_at_least(std::size_t num_elements) -> std:...
method deallocate (line 57) | auto deallocate(T* p, [[maybe_unused]] std::size_t n) -> void {
FILE: include/operon/core/comparison.hpp
type Operon (line 14) | namespace Operon {
type Dominance (line 16) | enum class Dominance : int { Equal = 0,
type Equal (line 21) | struct Equal {
type Less (line 41) | struct Less {
type LessEqual (line 69) | struct LessEqual {
type ParetoDominance (line 78) | struct ParetoDominance {
FILE: include/operon/core/concepts.hpp
type Operon::Concepts (line 7) | namespace Operon::Concepts {
FILE: include/operon/core/constants.hpp
type Operon (line 10) | namespace Operon {
type HashMode (line 14) | enum HashMode {
type HashFunction (line 19) | enum HashFunction {
type Math (line 26) | struct Math {
FILE: include/operon/core/dataset.hpp
type Operon (line 18) | namespace Operon {
function Dataset (line 22) | class OPERON_EXPORT Dataset {
FILE: include/operon/core/dispatch.hpp
type Operon (line 18) | namespace Operon {
type Backend (line 20) | namespace Backend {
function Ptr (line 41) | auto Ptr(View<T, S> view, std::integral auto col) -> Backend::View<T...
function Fill (line 47) | auto Fill(Backend::View<T, S> view, int idx, T value) {
type Func (line 55) | struct Func {
type Diff (line 63) | struct Diff {
type Dispatch (line 70) | struct Dispatch {
method NaryOp (line 89) | static void NaryOp(Operon::Vector<Node> const& nodes, Backend::View<...
method BinaryOp (line 138) | static void BinaryOp(Operon::Vector<Node> const& nodes, Backend::Vie...
method UnaryOp (line 147) | static void UnaryOp(Operon::Vector<Node> const& nodes, Backend::View...
type Noop (line 152) | struct Noop {
method DiffOp (line 158) | static void DiffOp(Operon::Vector<Node> const& nodes, Backend::View<...
method MakeFunctionCall (line 163) | static constexpr auto MakeFunctionCall() -> Dispatch::Callable<T, S>
method MakeDiffCall (line 175) | static constexpr auto MakeDiffCall() -> Dispatch::CallableDiff<T, S>
type detail (line 186) | namespace detail {
function TypeIndexImpl (line 189) | static auto constexpr TypeIndexImpl() {
type DefaultIndex (line 204) | struct DefaultIndex {
type IntegerIndex (line 209) | struct IntegerIndex {
type DispatchTable (line 215) | struct DispatchTable {
method MakeFunction (line 263) | static constexpr auto MakeFunction() {
method MakeDerivative (line 269) | static constexpr auto MakeDerivative() {
method MakeTuple (line 274) | static constexpr auto MakeTuple()
method DispatchTable (line 298) | DispatchTable()
method DispatchTable (line 323) | explicit DispatchTable(Map const& map) : map_(map) { }
method DispatchTable (line 324) | explicit DispatchTable(Map&& map) : map_(std::move(map)) { }
method DispatchTable (line 325) | explicit DispatchTable(std::unordered_map<Operon::Hash, Tuple> const...
method DispatchTable (line 327) | DispatchTable(DispatchTable const& other) : map_(other.map_) { }
method DispatchTable (line 328) | DispatchTable(DispatchTable &&other) noexcept : map_(std::move(other...
method GetMap (line 330) | auto GetMap() -> Map& { return map_; }
method GetMap (line 331) | auto GetMap() const -> Map const& { return map_; }
method GetFunction (line 334) | auto GetFunction(Operon::Hash const h) -> Callable<T>&
method GetDerivative (line 340) | auto GetDerivative(Operon::Hash const h) -> CallableDiff<T>&
method GetFunction (line 346) | [[nodiscard]] auto GetFunction(Operon::Hash const h) const -> Callab...
method GetDerivative (line 355) | [[nodiscard]] auto GetDerivative(Operon::Hash const h) const -> Call...
method Get (line 364) | [[nodiscard]] auto Get(Operon::Hash const h) const -> std::tuple<Cal...
method RegisterFunction (line 377) | void RegisterFunction(Operon::Hash hash, Callable<T> f, CallableDiff...
method TryGetFunction (line 384) | [[nodiscard]] auto TryGetFunction(Operon::Hash const h) const noexce...
method TryGetDerivative (line 393) | [[nodiscard]] auto TryGetDerivative(Operon::Hash const h) const noex...
method Contains (line 401) | [[nodiscard]] auto Contains(Operon::Hash hash) const noexcept -> boo...
FILE: include/operon/core/distance.hpp
type Operon::Distance (line 10) | namespace Operon::Distance {
FILE: include/operon/core/individual.hpp
type Operon (line 13) | namespace Operon {
type LexicographicalComparison (line 15) | struct LexicographicalComparison
type Individual (line 17) | struct Individual {
method Size (line 26) | [[nodiscard]] inline auto Size() const noexcept -> size_t { return F...
method Individual (line 28) | Individual()
method Individual (line 32) | explicit Individual(size_t nObj)
type SingleObjectiveComparison (line 38) | struct SingleObjectiveComparison {
method SingleObjectiveComparison (line 39) | explicit SingleObjectiveComparison(size_t idx)
method SingleObjectiveComparison (line 43) | SingleObjectiveComparison()
method GetObjectiveIndex (line 53) | [[nodiscard]] auto GetObjectiveIndex() const -> size_t { return obj_; }
method SetObjectiveIndex (line 54) | void SetObjectiveIndex(size_t obj) { obj_ = obj; }
type LexicographicalComparison (line 60) | struct LexicographicalComparison {
type ParetoComparison (line 72) | struct ParetoComparison {
type CrowdedComparison (line 83) | struct CrowdedComparison {
FILE: include/operon/core/node.hpp
type Operon (line 14) | namespace Operon {
type NodeType (line 15) | enum class NodeType : uint8_t {
type NodeTypes (line 59) | struct NodeTypes {
method GetIndex (line 64) | static constexpr auto GetIndex(NodeType type) -> size_t
type Node (line 97) | struct Node {
method Node (line 110) | Node() = default;
method Node (line 112) | explicit Node(NodeType type) noexcept
method Node (line 117) | explicit Node(NodeType type, Operon::Hash hashValue) noexcept
method Constant (line 140) | static auto Constant(double value)
method IsLeaf (line 185) | [[nodiscard]] inline auto IsLeaf() const noexcept -> bool { return A...
method IsCommutative (line 186) | [[nodiscard]] inline auto IsCommutative() const noexcept -> bool { r...
method Is (line 189) | [[nodiscard]] inline auto Is() const -> bool { return ((Type == T) |...
method IsConstant (line 191) | [[nodiscard]] inline auto IsConstant() const -> bool { return Is<Nod...
method IsVariable (line 192) | [[nodiscard]] inline auto IsVariable() const -> bool { return Is<Nod...
method IsAddition (line 193) | [[nodiscard]] inline auto IsAddition() const -> bool { return Is<Nod...
method IsSubtraction (line 194) | [[nodiscard]] inline auto IsSubtraction() const -> bool { return Is<...
method IsMultiplication (line 195) | [[nodiscard]] inline auto IsMultiplication() const -> bool { return ...
method IsDivision (line 196) | [[nodiscard]] inline auto IsDivision() const -> bool { return Is<Nod...
method IsAq (line 197) | [[nodiscard]] inline auto IsAq() const -> bool { return Is<NodeType:...
method IsPow (line 198) | [[nodiscard]] inline auto IsPow() const -> bool { return Is<NodeType...
method IsPowabs (line 199) | [[nodiscard]] inline auto IsPowabs() const -> bool { return Is<NodeT...
method IsExp (line 200) | [[nodiscard]] inline auto IsExp() const -> bool { return Is<NodeType...
method IsLog (line 201) | [[nodiscard]] inline auto IsLog() const -> bool { return Is<NodeType...
method IsSin (line 202) | [[nodiscard]] inline auto IsSin() const -> bool { return Is<NodeType...
method IsCos (line 203) | [[nodiscard]] inline auto IsCos() const -> bool { return Is<NodeType...
method IsTan (line 204) | [[nodiscard]] inline auto IsTan() const -> bool { return Is<NodeType...
method IsTanh (line 205) | [[nodiscard]] inline auto IsTanh() const -> bool { return Is<NodeTyp...
method IsSquareRoot (line 206) | [[nodiscard]] inline auto IsSquareRoot() const -> bool { return Is<N...
method IsCubeRoot (line 207) | [[nodiscard]] inline auto IsCubeRoot() const -> bool { return Is<Nod...
method IsSquare (line 208) | [[nodiscard]] inline auto IsSquare() const -> bool { return Is<NodeT...
method IsDynamic (line 209) | [[nodiscard]] inline auto IsDynamic() const -> bool { return Is<Node...
FILE: include/operon/core/operator.hpp
type Operon (line 9) | namespace Operon {
type OperatorBase (line 11) | struct OperatorBase {
method OperatorBase (line 18) | OperatorBase() = default;
method OperatorBase (line 19) | OperatorBase(OperatorBase const& other) = default;
method OperatorBase (line 20) | OperatorBase(OperatorBase&& other) noexcept = default;
FILE: include/operon/core/problem.hpp
type Operon (line 16) | namespace Operon {
class Problem (line 18) | class Problem {
method GetVariable (line 19) | [[nodiscard]] auto GetVariable(auto t) const -> Operon::Variable {
method ValidateInputs (line 24) | auto ValidateInputs(auto const& inputs) const {
method Problem (line 43) | Problem(const Problem&) = delete;
method Problem (line 44) | Problem(Problem&&) = delete;
method Problem (line 48) | explicit Problem(std::unique_ptr<Dataset> dataset)
method Problem (line 54) | explicit Problem(gsl::not_null<Dataset*> dataset)
method SetTarget (line 67) | auto SetTarget(T t) {
method SetTrainingRange (line 71) | auto SetTrainingRange(Operon::Range range) { training_ = range; }
method SetTrainingRange (line 72) | auto SetTrainingRange(int begin, int end) { training_ = Operon::Rang...
method SetTestRange (line 74) | auto SetTestRange(Operon::Range range) { test_ = range; }
method SetTestRange (line 75) | auto SetTestRange(int begin, int end) { test_ = Operon::Range(begin,...
method SetValidationRange (line 77) | auto SetValidationRange(Operon::Range range) { validation_ = range; }
method SetValidationRange (line 78) | auto SetValidationRange(int begin, int end) { validation_ = Operon::...
method SetInputs (line 80) | auto SetInputs(auto const& inputs) {
method GetInputs (line 88) | [[nodiscard]] auto GetInputs() const -> std::vector<Operon::Hash> co...
method SetDefaultInputs (line 93) | auto SetDefaultInputs() -> void {
method TrainingRange (line 100) | [[nodiscard]] auto TrainingRange() const -> Range { return training_; }
method TestRange (line 101) | [[nodiscard]] auto TestRange() const -> Range { return test_; }
method ValidationRange (line 102) | [[nodiscard]] auto ValidationRange() const -> Range { return validat...
method TargetVariable (line 104) | [[nodiscard]] auto TargetVariable() const -> Variable const& { retur...
method InputVariables (line 105) | [[nodiscard]] auto InputVariables() const -> std::vector<Variable>
method GetPrimitiveSet (line 113) | [[nodiscard]] auto GetPrimitiveSet() const -> PrimitiveSet const& { ...
method GetPrimitiveSet (line 114) | auto GetPrimitiveSet() -> PrimitiveSet& { return pset_; }
method ConfigurePrimitiveSet (line 115) | auto ConfigurePrimitiveSet(Operon::PrimitiveSetConfig config) { pset...
method GetDataset (line 117) | [[nodiscard]] auto GetDataset() const -> Dataset const* { return dat...
method GetDataset (line 118) | auto GetDataset() -> Dataset* { return dataset_.get(); }
method TargetValues (line 120) | [[nodiscard]] auto TargetValues() const -> Operon::Span<Operon::Scal...
method TargetValues (line 121) | [[nodiscard]] auto TargetValues(Operon::Range range) const -> Operon...
method StandardizeData (line 125) | void StandardizeData(Range range)
method NormalizeData (line 132) | void NormalizeData(Range range)
FILE: include/operon/core/pset.hpp
type Operon (line 10) | namespace Operon {
class PrimitiveSet (line 12) | class PrimitiveSet {
method GetPrimitive (line 25) | auto GetPrimitive(Operon::Hash hash) -> Primitive& {
method PrimitiveSet (line 35) | PrimitiveSet() = default;
method PrimitiveSet (line 37) | explicit PrimitiveSet(PrimitiveSetConfig config)
method Primitives (line 42) | [[nodiscard]] auto Primitives() const -> decltype(pset_) const& { re...
method AddPrimitive (line 44) | auto AddPrimitive(Operon::Node node, size_t frequency, size_t minAri...
method AddFunction (line 52) | auto AddFunction(Operon::Hash hash, uint16_t arity, size_t frequency...
method RemovePrimitive (line 61) | void RemovePrimitive(Operon::Node node) { pset_.erase(node.HashValue...
method RemovePrimitive (line 63) | void RemovePrimitive(Operon::Hash hash) { pset_.erase(hash); }
method SetConfig (line 65) | void SetConfig(PrimitiveSetConfig config)
method EnabledPrimitives (line 78) | [[nodiscard]] auto EnabledPrimitives() const -> std::vector<Node> {
method Config (line 89) | [[nodiscard]] auto Config() const -> PrimitiveSetConfig
method Frequency (line 101) | [[nodiscard]] auto Frequency(Operon::Hash hash) const -> size_t
method SetFrequency (line 107) | void SetFrequency(Operon::Hash hash, size_t frequency)
method Contains (line 113) | [[nodiscard]] auto Contains(Operon::Hash hash) const -> bool { retur...
method IsEnabled (line 115) | [[nodiscard]] auto IsEnabled(Operon::Hash hash) const -> bool
method SetEnabled (line 121) | void SetEnabled(Operon::Hash hash, bool enabled)
method Enable (line 127) | void Enable(Operon::Hash hash)
method Disable (line 132) | void Disable(Operon::Hash hash)
method FunctionArityLimits (line 148) | [[nodiscard]] auto FunctionArityLimits() const -> std::pair<size_t, ...
method SetMinimumArity (line 162) | void SetMinimumArity(Operon::Hash hash, size_t minArity)
method MinimumArity (line 169) | [[nodiscard]] auto MinimumArity(Operon::Hash hash) const -> size_t
method SetMaximumArity (line 175) | void SetMaximumArity(Operon::Hash hash, size_t maxArity)
method MaximumArity (line 182) | [[nodiscard]] auto MaximumArity(Operon::Hash hash) const -> size_t
method MinMaxArity (line 188) | [[nodiscard]] auto MinMaxArity(Operon::Hash hash) const -> std::tupl...
method SetMinMaxArity (line 194) | void SetMinMaxArity(Operon::Hash hash, size_t minArity, size_t maxAr...
method SetFrequency (line 203) | void SetFrequency(Operon::Node node, size_t frequency) { SetFrequenc...
method Frequency (line 204) | [[nodiscard]] auto Frequency(Operon::Node node) const -> size_t { re...
method Contains (line 206) | [[nodiscard]] auto Contains(Operon::Node node) const -> bool { retur...
method IsEnabled (line 207) | [[nodiscard]] auto IsEnabled(Operon::Node node) const -> bool { retu...
method SetEnabled (line 209) | void SetEnabled(Operon::Node node, bool enabled) { SetEnabled(node.H...
method Enable (line 210) | void Enable(Operon::Node node) { SetEnabled(node, /*enabled=*/true); }
method Disable (line 211) | void Disable(Operon::Node node) { SetEnabled(node, /*enabled=*/false...
method SetMinimumArity (line 213) | void SetMinimumArity(Operon::Node node, size_t minArity)
method MinimumArity (line 217) | [[nodiscard]] auto MinimumArity(Operon::Node node) const -> size_t {...
method SetMaximumArity (line 219) | void SetMaximumArity(Operon::Node node, size_t maxArity)
method MaximumArity (line 223) | [[nodiscard]] auto MaximumArity(Operon::Node node) const -> size_t {...
method MinMaxArity (line 225) | [[nodiscard]] auto MinMaxArity(Operon::Node node) const -> std::tupl...
method SetMinMaxArity (line 229) | void SetMinMaxArity(Operon::Node node, size_t minArity, size_t maxAr...
FILE: include/operon/core/range.hpp
type Operon (line 10) | namespace Operon {
class Range (line 11) | class Range {
method Start (line 13) | [[nodiscard]] inline auto Start() const noexcept -> std::size_t { re...
method End (line 14) | [[nodiscard]] inline auto End() const noexcept -> std::size_t { retu...
method Size (line 15) | [[nodiscard]] inline auto Size() const noexcept -> std::size_t { ret...
method Bounds (line 16) | [[nodiscard]] auto Bounds() const noexcept -> std::pair<std::size_t,...
method Range (line 18) | Range() = default;
method Range (line 19) | Range(std::size_t start, std::size_t end)
method Range (line 24) | explicit Range(std::pair<std::size_t, std::size_t> range)
method CheckRange (line 37) | static auto CheckRange(std::size_t start, std::size_t end) -> std::p...
FILE: include/operon/core/subtree.hpp
type Operon (line 9) | namespace Operon {
type Subtree (line 14) | struct Subtree {
method Subtree (line 15) | Subtree(Operon::Span<T> nodes, std::size_t parent)
type Sentinel (line 19) | struct Sentinel {}
type Enumerator (line 22) | struct Enumerator {
method Enumerator (line 28) | Enumerator(Operon::Span<T> nodes, std::size_t parent)
method begin (line 44) | auto begin() const { return *this; }
method end (line 45) | auto end() const { return Sentinel{}; }
type SubtreeIterator (line 69) | struct SubtreeIterator {
method SubtreeIterator (line 75) | SubtreeIterator(Operon::Span<T> nodes, std::size_t parent)
method begin (line 81) | inline auto begin() const { return *this; }
method end (line 82) | inline auto end() const { return Sentinel{}; }
method Done (line 119) | [[nodiscard]] inline auto Done() const -> bool { return Index >= N...
method Indices (line 130) | [[nodiscard]] inline auto Indices() const { return IndexIterator{nod...
method EnumerateIndices (line 131) | [[nodiscard]] inline auto EnumerateIndices() const { return Enumerat...
method Nodes (line 133) | [[nodiscard]] inline auto Nodes() const { return NodeIterator{nodes_...
method EnumerateNodes (line 134) | [[nodiscard]] inline auto EnumerateNodes() const { return Enumerator...
FILE: include/operon/core/symbol_library.hpp
type Operon (line 27) | namespace Operon {
function MakeUnaryCallable (line 33) | auto MakeUnaryCallable(F primal) -> typename DTable::template Callable<T>
function MakeBinaryCallable (line 53) | auto MakeBinaryCallable(F primal) -> typename DTable::template Callabl...
function MakeUnaryDiff (line 76) | auto MakeUnaryDiff(DF deriv) -> typename DTable::template CallableDiff<T>
function MakeBinaryDiff (line 99) | auto MakeBinaryDiff(DFa derivA, DFb derivB) -> typename DTable::templa...
function MakeUnaryAutoDiff (line 126) | auto MakeUnaryAutoDiff(F primal) -> typename DTable::template Callable...
function MakeBinaryAutoDiff (line 148) | auto MakeBinaryAutoDiff(F primal) -> typename DTable::template Callabl...
function RegisterUnary (line 181) | void RegisterUnary(DTable& dt, Operon::Hash hash, F primal, DF deriv =...
function RegisterBinary (line 203) | void RegisterBinary(DTable& dt, Operon::Hash hash, F primal,
type FunctionInfo (line 223) | struct FunctionInfo {
function RegisterUnaryFunction (line 235) | void RegisterUnaryFunction(DTable& dt, PrimitiveSet& pset,
function RegisterBinaryFunction (line 248) | void RegisterBinaryFunction(DTable& dt, PrimitiveSet& pset,
FILE: include/operon/core/tree.hpp
type Operon (line 16) | namespace Operon {
function Tree (line 17) | class OPERON_EXPORT Tree { // NOLINT
FILE: include/operon/core/types.hpp
type Operon (line 17) | namespace Operon {
FILE: include/operon/core/variable.hpp
type Operon (line 9) | namespace Operon {
type Variable (line 10) | struct Variable {
FILE: include/operon/core/version.hpp
type Operon (line 12) | namespace Operon {
FILE: include/operon/error_metrics/correlation_coefficient.hpp
type Operon (line 12) | namespace Operon {
function CorrelationCoefficient (line 15) | inline auto CorrelationCoefficient(InputIt1 begin1, InputIt1 end1, Inp...
function CorrelationCoefficient (line 26) | inline auto CorrelationCoefficient(InputIt1 begin1, InputIt1 end1, Inp...
function CorrelationCoefficient (line 37) | inline auto CorrelationCoefficient(Operon::Span<T const> x, Operon::Sp...
function CorrelationCoefficient (line 46) | inline auto CorrelationCoefficient(Operon::Span<T const> x, Operon::Sp...
function SquaredCorrelation (line 55) | inline auto SquaredCorrelation(InputIt1 begin1, InputIt1 end1, InputIt...
function SquaredCorrelation (line 61) | inline auto SquaredCorrelation(InputIt1 begin1, InputIt1 end1, InputIt...
function SquaredCorrelation (line 67) | inline auto SquaredCorrelation(Operon::Span<T const> x, Operon::Span<T...
function SquaredCorrelation (line 73) | inline auto SquaredCorrelation(Operon::Span<T const> x, Operon::Span<T...
FILE: include/operon/error_metrics/mean_absolute_error.hpp
type Operon (line 12) | namespace Operon {
function MeanAbsoluteError (line 15) | inline auto MeanAbsoluteError(InputIt1 begin1, InputIt1 end1, InputIt2...
function MeanAbsoluteError (line 26) | inline auto MeanAbsoluteError(InputIt1 begin1, InputIt1 end1, InputIt2...
function MeanAbsoluteError (line 37) | inline auto MeanAbsoluteError(Operon::Span<T const> x, Operon::Span<T ...
function MeanAbsoluteError (line 46) | inline auto MeanAbsoluteError(Operon::Span<T const> x, Operon::Span<T ...
FILE: include/operon/error_metrics/mean_squared_error.hpp
type Operon (line 13) | namespace Operon {
function MeanSquaredError (line 16) | inline auto MeanSquaredError(InputIt1 begin1, InputIt1 end1, InputIt2 ...
function MeanSquaredError (line 28) | inline auto MeanSquaredError(InputIt1 begin1, InputIt1 end1, InputIt2 ...
function MeanSquaredError (line 40) | inline auto MeanSquaredError(Operon::Span<T const> x, Operon::Span<T c...
function MeanSquaredError (line 49) | inline auto MeanSquaredError(Operon::Span<T const> x, Operon::Span<T c...
FILE: include/operon/error_metrics/normalized_mean_squared_error.hpp
type Operon (line 13) | namespace Operon {
function NormalizedMeanSquaredError (line 16) | inline auto NormalizedMeanSquaredError(InputIt1 begin1, InputIt1 end1,...
function NormalizedMeanSquaredError (line 31) | inline auto NormalizedMeanSquaredError(InputIt1 begin1, InputIt1 end1,...
function NormalizedMeanSquaredError (line 46) | inline auto NormalizedMeanSquaredError(Operon::Span<T const> x, Operon...
function NormalizedMeanSquaredError (line 52) | inline auto NormalizedMeanSquaredError(Operon::Span<T const> x, Operon...
FILE: include/operon/error_metrics/r2_score.hpp
type Operon (line 12) | namespace Operon {
function R2Score (line 14) | inline auto R2Score(InputIt1 begin1, InputIt1 end1, InputIt2 begin2) n...
function R2Score (line 30) | inline auto R2Score(InputIt1 begin1, InputIt1 end1, InputIt2 begin2, I...
function R2Score (line 48) | inline auto R2Score(Operon::Span<T const> x, Operon::Span<T const> y) ...
function R2Score (line 55) | inline auto R2Score(Operon::Span<T const> x, Operon::Span<T const> y, ...
FILE: include/operon/error_metrics/root_mean_squared_error.hpp
type Operon (line 13) | namespace Operon {
function RootMeanSquaredError (line 16) | inline auto RootMeanSquaredError(InputIt1 begin1, InputIt1 end1, Input...
function RootMeanSquaredError (line 22) | inline auto RootMeanSquaredError(InputIt1 begin1, InputIt1 end1, Input...
function RootMeanSquaredError (line 28) | inline auto RootMeanSquaredError(Operon::Span<T const> x, Operon::Span...
function RootMeanSquaredError (line 34) | inline auto RootMeanSquaredError(Operon::Span<T const> x, Operon::Span...
FILE: include/operon/error_metrics/sum_of_squared_errors.hpp
type Operon (line 12) | namespace Operon {
function SumOfSquaredErrors (line 15) | inline auto SumOfSquaredErrors(InputIt1 begin1, InputIt1 end1, InputIt...
function SumOfSquaredErrors (line 27) | inline auto SumOfSquaredErrors(InputIt1 begin1, InputIt1 end1, InputIt...
function SumOfSquaredErrors (line 39) | inline auto SumOfSquaredErrors(Operon::Span<T const> x, Operon::Span<T...
function SumOfSquaredErrors (line 48) | inline auto SumOfSquaredErrors(Operon::Span<T const> x, Operon::Span<T...
FILE: include/operon/formatter/formatter.hpp
type Operon (line 11) | namespace Operon {
class Dataset (line 13) | class Dataset
function TreeFormatter (line 15) | class OPERON_EXPORT TreeFormatter {
function InfixFormatter (line 23) | class OPERON_EXPORT InfixFormatter {
function PostfixFormatter (line 31) | class OPERON_EXPORT PostfixFormatter {
function DotFormatter (line 39) | struct OPERON_EXPORT DotFormatter {
FILE: include/operon/hash/hash.hpp
type Operon (line 14) | namespace Operon {
function Hasher (line 15) | struct OPERON_EXPORT Hasher {
FILE: include/operon/hash/metrohash64.hpp
type Operon::HashUtil (line 9) | namespace Operon::HashUtil {
class MetroHash64 (line 11) | class MetroHash64
FILE: include/operon/hash/zobrist.hpp
type Operon (line 15) | namespace Operon {
function Zobrist (line 26) | class OPERON_EXPORT Zobrist {
FILE: include/operon/interpreter/backend/arma/derivatives.hpp
type Operon::Backend (line 10) | namespace Operon::Backend {
type detail (line 11) | namespace detail {
function IsNaN (line 13) | inline auto IsNaN(T value) { return std::isnan(value); }
type FComp (line 16) | struct FComp {
function Add (line 30) | auto Add(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Mul (line 35) | auto Mul(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sub (line 40) | auto Sub(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Div (line 46) | auto Div(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Aq (line 56) | auto Aq(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T co...
function Pow (line 65) | auto Pow(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Powabs (line 76) | auto Powabs(std::vector<Operon::Node> const& nodes, Backend::View<T co...
function Min (line 87) | auto Min(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Max (line 95) | auto Max(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Square (line 103) | auto Square(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Abs (line 108) | auto Abs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Ceil (line 113) | auto Ceil(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Floor (line 118) | auto Floor(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Exp (line 123) | auto Exp(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log (line 128) | auto Log(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log1p (line 133) | auto Log1p(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Logabs (line 138) | auto Logabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Sin (line 143) | auto Sin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Cos (line 148) | auto Cos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Tan (line 153) | auto Tan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sinh (line 158) | auto Sinh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Cosh (line 163) | auto Cosh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Tanh (line 168) | auto Tanh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Asin (line 173) | auto Asin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Acos (line 178) | auto Acos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Atan (line 183) | auto Atan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrt (line 188) | auto Sqrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrtabs (line 193) | auto Sqrtabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View...
function Cbrt (line 198) | auto Cbrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
FILE: include/operon/interpreter/backend/arma/functions.hpp
type Operon::Backend (line 11) | namespace Operon::Backend {
function Map (line 13) | auto Map(T* ptr) {
function Map (line 18) | auto Map(T const* ptr) {
function Col (line 24) | auto Col(Backend::View<T, S> view, std::integral auto col) {
function Col (line 29) | auto Col(Backend::View<T const, S> view, std::integral auto col) {
function Fill (line 35) | auto Fill(T* res, T weight, T value) {
function Add (line 41) | auto Add(T* res, T weight, auto const*... args) {
function Mul (line 46) | auto Mul(T* res, T weight, auto const*... args) {
function Sub (line 51) | auto Sub(T* res, T weight, auto* first, auto const*... rest) {
function Div (line 57) | auto Div(T* res, T weight, auto const* first, auto const*... rest) {
function Min (line 63) | auto Min(T* res, T weight, auto const* first, auto const*... args) {
function Max (line 71) | auto Max(T* res, T weight, auto* first, auto const*... args) {
function Aq (line 79) | auto Aq(T* res, T weight, T const* a, T const* b) {
function Pow (line 84) | auto Pow(T* res, T weight, T const* a, T const* b) {
function Powabs (line 89) | auto Powabs(T* res, T weight, T const* a, T const* b) {
function Cpy (line 95) | auto Cpy(T* res, T weight, T const* arg) {
function Neg (line 100) | auto Neg(T* res, T weight, T const* arg) {
function Inv (line 105) | auto Inv(T* res, T weight, T const* arg) {
function Abs (line 110) | auto Abs(T* res, T weight, T const* arg) {
function Ceil (line 115) | auto Ceil(T* res, T weight, T const* arg) {
function Floor (line 120) | auto Floor(T* res, T weight, T const* arg) {
function Square (line 125) | auto Square(T* res, T weight, T const* arg) {
function Exp (line 130) | auto Exp(T* res, T weight, T const* arg) {
function Log (line 135) | auto Log(T* res, T weight, T const* arg) {
function Log1p (line 140) | auto Log1p(T* res, T weight, T const* arg) {
function Logabs (line 145) | auto Logabs(T* res, T weight, T const* arg) {
function Sin (line 150) | auto Sin(T* res, T weight, T const* arg) {
function Cos (line 155) | auto Cos(T* res, T weight, T const* arg) {
function Tan (line 160) | auto Tan(T* res, T weight, T const* arg) {
function Asin (line 165) | auto Asin(T* res, T weight, T const* arg) {
function Acos (line 170) | auto Acos(T* res, T weight, T const* arg) {
function Atan (line 175) | auto Atan(T* res, T weight, T const* arg) {
function Sinh (line 180) | auto Sinh(T* res, T weight, T const* arg) {
function Cosh (line 185) | auto Cosh(T* res, T weight, T const* arg) {
function Tanh (line 190) | auto Tanh(T* res, T weight, T const* arg) {
function Sqrt (line 195) | auto Sqrt(T* res, T weight, T const* arg) {
function Sqrtabs (line 200) | auto Sqrtabs(T* res, T weight, T const* arg) {
function Cbrt (line 205) | auto Cbrt(T* res, T weight, T const* arg) {
FILE: include/operon/interpreter/backend/blaze/derivatives.hpp
type Operon::Backend (line 10) | namespace Operon::Backend {
type detail (line 11) | namespace detail {
function IsNaN (line 13) | inline auto IsNaN(T value) { return std::isnan(value); }
type FComp (line 16) | struct FComp {
function Add (line 30) | auto Add(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Mul (line 35) | auto Mul(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sub (line 40) | auto Sub(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Div (line 46) | auto Div(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Aq (line 56) | auto Aq(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T co...
function Pow (line 65) | auto Pow(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Powabs (line 76) | auto Powabs(std::vector<Operon::Node> const& nodes, Backend::View<T co...
function Min (line 87) | auto Min(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Max (line 94) | auto Max(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Square (line 101) | auto Square(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Abs (line 106) | auto Abs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Ceil (line 111) | auto Ceil(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Floor (line 116) | auto Floor(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Exp (line 121) | auto Exp(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log (line 129) | auto Log(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log1p (line 134) | auto Log1p(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Logabs (line 139) | auto Logabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Sin (line 144) | auto Sin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Cos (line 149) | auto Cos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Tan (line 154) | auto Tan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sinh (line 160) | auto Sinh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Cosh (line 165) | auto Cosh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Tanh (line 170) | auto Tanh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Asin (line 175) | auto Asin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Acos (line 180) | auto Acos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Atan (line 185) | auto Atan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrt (line 190) | auto Sqrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrtabs (line 195) | auto Sqrtabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View...
function Cbrt (line 200) | auto Cbrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
FILE: include/operon/interpreter/backend/blaze/functions.hpp
type Operon::Backend (line 10) | namespace Operon::Backend {
type detail (line 11) | namespace detail {
function Map (line 17) | inline auto Map(T* res) -> detail::CVector<T> {
function Map (line 22) | inline auto Map(T const* res) -> detail::CVector<std::remove_const_t<T...
function Col (line 28) | auto Col(Backend::View<T, S> view, std::integral auto col) {
function Col (line 33) | auto Col(Backend::View<T const, S> view, std::integral auto col) {
function Fill (line 39) | auto Fill(T* res, T value) {
function Fill (line 44) | auto Fill(T* res, int n, T value) {
function Add (line 50) | auto Add(T* res, T weight, auto const*... args) {
function Mul (line 55) | auto Mul(T* res, T weight, auto const*... args) {
function Sub (line 60) | auto Sub(T* res, T weight, auto* first, auto const*... rest) {
function Div (line 66) | auto Div(T* res, T weight, auto const* first, auto const*... rest) {
function Min (line 72) | auto Min(T* res, T weight, auto const* first, auto const*... args) {
function Max (line 80) | auto Max(T* res, T weight, auto* first, auto const*... args) {
function Aq (line 89) | auto Aq(T* res, T weight, T const* a, T const* b) {
function Pow (line 95) | auto Pow(T* res, T weight, T const* a, T const* b) {
function Powabs (line 100) | auto Powabs(T* res, T weight, T const* a, T const* b) {
function Cpy (line 106) | auto Cpy(T* res, T weight, T const* arg) {
function Neg (line 111) | auto Neg(T* res, T weight, T const* arg) {
function Inv (line 116) | auto Inv(T* res, T weight, T const* arg) {
function Abs (line 121) | auto Abs(T* res, T weight, T const* arg) {
function Ceil (line 126) | auto Ceil(T* res, T weight, T const* arg) {
function Floor (line 131) | auto Floor(T* res, T weight, T const* arg) {
function Square (line 136) | auto Square(T* res, T weight, T const* arg) {
function Exp (line 141) | auto Exp(T* res, T weight, T const* arg) {
function Log (line 146) | auto Log(T* res, T weight, T const* arg) {
function Log1p (line 151) | auto Log1p(T* res, T weight, T const* arg) {
function Logabs (line 156) | auto Logabs(T* res, T weight, T const* arg) {
function Sin (line 161) | auto Sin(T* res, T weight, T const* arg) {
function Cos (line 166) | auto Cos(T* res, T weight, T const* arg) {
function Tan (line 171) | auto Tan(T* res, T weight, T const* arg) {
function Asin (line 176) | auto Asin(T* res, T weight, T const* arg) {
function Acos (line 181) | auto Acos(T* res, T weight, T const* arg) {
function Atan (line 186) | auto Atan(T* res, T weight, T const* arg) {
function Sinh (line 191) | auto Sinh(T* res, T weight, T const* arg) {
function Cosh (line 196) | auto Cosh(T* res, T weight, T const* arg) {
function Tanh (line 201) | auto Tanh(T* res, T weight, T const* arg) {
function Sqrt (line 206) | auto Sqrt(T* res, T weight, T const* arg) {
function Sqrtabs (line 211) | auto Sqrtabs(T* res, T weight, T const* arg) {
function Cbrt (line 216) | auto Cbrt(T* res, T weight, T const* arg) {
FILE: include/operon/interpreter/backend/eigen/derivatives.hpp
type Operon::Backend (line 10) | namespace Operon::Backend {
type detail (line 11) | namespace detail {
function IsNaN (line 13) | inline auto IsNaN(T value) { return std::isnan(value); }
type FComp (line 16) | struct FComp {
function Add (line 32) | auto Add(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Mul (line 37) | auto Mul(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Sub (line 42) | auto Sub(Operon::Vector<Operon::Node> const& nodes, Backend::View<T co...
function Div (line 48) | auto Div(Operon::Vector<Operon::Node> const& nodes, Backend::View<T co...
function Aq (line 58) | auto Aq(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Pow (line 67) | auto Pow(Operon::Vector<Operon::Node> const& nodes, Backend::View<T co...
function Powabs (line 78) | auto Powabs(Operon::Vector<Operon::Node> const& nodes, Backend::View<T...
function Min (line 89) | auto Min(Operon::Vector<Operon::Node> const& nodes, Backend::View<T co...
function Max (line 95) | auto Max(Operon::Vector<Operon::Node> const& nodes, Backend::View<T co...
function Square (line 101) | auto Square(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::Vi...
function Abs (line 106) | auto Abs(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Ceil (line 111) | auto Ceil(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View...
function Floor (line 116) | auto Floor(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::Vie...
function Exp (line 121) | auto Exp(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Log (line 126) | auto Log(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Log1p (line 131) | auto Log1p(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::Vie...
function Logabs (line 136) | auto Logabs(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::Vi...
function Sin (line 141) | auto Sin(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Cos (line 146) | auto Cos(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Tan (line 151) | auto Tan(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Sinh (line 156) | auto Sinh(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View...
function Cosh (line 161) | auto Cosh(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View...
function Tanh (line 166) | auto Tanh(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View...
function Asin (line 171) | auto Asin(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View...
function Acos (line 176) | auto Acos(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View...
function Atan (line 181) | auto Atan(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View...
function Sqrt (line 186) | auto Sqrt(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View...
function Sqrtabs (line 191) | auto Sqrtabs(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::V...
function Cbrt (line 196) | auto Cbrt(Operon::Vector<Operon::Node> const& /*nodes*/, Backend::View...
FILE: include/operon/interpreter/backend/eigen/functions.hpp
type Operon::Backend (line 11) | namespace Operon::Backend {
function Col (line 16) | auto Col(Backend::View<T, S> view, std::integral auto col) {
function Col (line 21) | auto Col(Backend::View<T const, S> view, std::integral auto col) {
function Fill (line 27) | auto Fill(T* res, T value) {
function Fill (line 32) | auto Fill(T* res, int n, T value) {
function Add (line 38) | auto Add(T* res, T weight, auto const*... args) {
function Mul (line 43) | auto Mul(T* res, T weight, auto const*... args) {
function Sub (line 48) | auto Sub(T* res, T weight, auto* first, auto const*... rest) {
function Div (line 54) | auto Div(T* res, T weight, auto const* first, auto const*... rest) {
function Min (line 60) | auto Min(T* res, T weight, auto const* first, auto const*... args) {
function Max (line 66) | auto Max(T* res, T weight, auto* first, auto const*... args) {
function Aq (line 73) | auto Aq(T* res, T weight, T const* a, T const* b) {
function Pow (line 78) | auto Pow(T* res, T weight, T const* a, T const* b) {
function Powabs (line 83) | auto Powabs(T* res, T weight, T const* a, T const* b) {
function Cpy (line 89) | auto Cpy(T* res, T weight, T const* arg) {
function Neg (line 94) | auto Neg(T* res, T weight, T const* arg) {
function Inv (line 99) | auto Inv(T* res, T weight, T const* arg) {
function Abs (line 104) | auto Abs(T* res, T weight, T const* arg) {
function Ceil (line 109) | auto Ceil(T* res, T weight, T const* arg) {
function Floor (line 114) | auto Floor(T* res, T weight, T const* arg) {
function Square (line 119) | auto Square(T* res, T weight, T const* arg) {
function Exp (line 124) | auto Exp(T* res, T weight, T const* arg) {
function Log (line 129) | auto Log(T* res, T weight, T const* arg) {
function Log1p (line 134) | auto Log1p(T* res, T weight, T const* arg) {
function Logabs (line 139) | auto Logabs(T* res, T weight, T const* arg) {
function Sin (line 144) | auto Sin(T* res, T weight, T const* arg) {
function Cos (line 149) | auto Cos(T* res, T weight, T const* arg) {
function Tan (line 154) | auto Tan(T* res, T weight, T const* arg) {
function Asin (line 159) | auto Asin(T* res, T weight, T const* arg) {
function Acos (line 164) | auto Acos(T* res, T weight, T const* arg) {
function Atan (line 169) | auto Atan(T* res, T weight, T const* arg) {
function Sinh (line 174) | auto Sinh(T* res, T weight, T const* arg) {
function Cosh (line 179) | auto Cosh(T* res, T weight, T const* arg) {
function Tanh (line 184) | auto Tanh(T* res, T weight, T const* arg) {
function Sqrt (line 189) | auto Sqrt(T* res, T weight, T const* arg) {
function Sqrtabs (line 194) | auto Sqrtabs(T* res, T weight, T const* arg) {
function Cbrt (line 199) | auto Cbrt(T* res, T weight, T const* arg) {
FILE: include/operon/interpreter/backend/eve/derivatives.hpp
type Operon::Backend (line 9) | namespace Operon::Backend {
type detail (line 10) | namespace detail {
function IsNaN (line 12) | inline auto IsNaN(T value) { return eve::all(eve::is_nan(value)); }
type FComp (line 15) | struct FComp {
function Add (line 29) | auto Add(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Mul (line 34) | auto Mul(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sub (line 48) | auto Sub(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Div (line 54) | auto Div(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Aq (line 74) | auto Aq(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T co...
function Pow (line 100) | auto Pow(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Powabs (line 123) | auto Powabs(std::vector<Operon::Node> const& nodes, Backend::View<T co...
function Min (line 146) | auto Min(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Max (line 155) | auto Max(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Square (line 164) | auto Square(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Abs (line 176) | auto Abs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Ceil (line 188) | auto Ceil(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Floor (line 200) | auto Floor(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Exp (line 212) | auto Exp(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log (line 217) | auto Log(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log1p (line 229) | auto Log1p(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Logabs (line 241) | auto Logabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Sin (line 253) | auto Sin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Cos (line 265) | auto Cos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Tan (line 277) | auto Tan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sinh (line 289) | auto Sinh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Cosh (line 301) | auto Cosh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Tanh (line 313) | auto Tanh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Asin (line 325) | auto Asin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Acos (line 337) | auto Acos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Atan (line 349) | auto Atan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrt (line 361) | auto Sqrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Sqrtabs (line 373) | auto Sqrtabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View...
function Cbrt (line 386) | auto Cbrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
FILE: include/operon/interpreter/backend/eve/functions.hpp
type Operon::Backend (line 13) | namespace Operon::Backend {
function Fill (line 16) | auto Fill(T* res, T value) {
function Fill (line 21) | auto Fill(T* res, int n, T value) {
function Add (line 28) | auto Add(T* res, T weight, auto const*... args) {
function Mul (line 38) | auto Mul(T* res, T weight, auto const*... args) {
function Sub (line 48) | auto Sub(T* res, T weight, auto const*... args) {
function Div (line 58) | auto Div(T* res, T weight, auto const*... args) {
function Min (line 68) | auto Min(T* res, T weight, auto const*... args) {
function Max (line 74) | auto Max(T* res, T weight, auto const*... args) {
function Aq (line 81) | auto Aq(T* res, T weight, T const* a, T const* b) {
function Pow (line 89) | auto Pow(T* res, T weight, T const* a, T const* b) {
function Powabs (line 97) | auto Powabs(T* res, T weight, T const* a, T const* b) {
function Cpy (line 106) | auto Cpy(T* res, T w, T const* arg) {
function Neg (line 113) | auto Neg(T* res, T weight, T const* arg) {
function Inv (line 123) | auto Inv(T* res, T weight, T const* arg) {
function Abs (line 133) | auto Abs(T* res, T weight, T const* arg) {
function Ceil (line 143) | auto Ceil(T* res, T weight, T const* arg) {
function Floor (line 153) | auto Floor(T* res, T weight, T const* arg) {
function Square (line 163) | auto Square(T* res, T weight, T const* arg) {
function Exp (line 173) | auto Exp(T* res, T weight, T const* arg) {
function Log (line 183) | auto Log(T* res, T weight, T const* arg) {
function Log1p (line 193) | auto Log1p(T* res, T weight, T const* arg) {
function Logabs (line 203) | auto Logabs(T* res, T weight, T const* arg) {
function Sin (line 213) | auto Sin(T* res, T weight, T const* arg) {
function Cos (line 223) | auto Cos(T* res, T weight, T const* arg) {
function Tan (line 233) | auto Tan(T* res, T weight, T const* arg) {
function Asin (line 243) | auto Asin(T* res, T weight, T const* arg) {
function Acos (line 253) | auto Acos(T* res, T weight, T const* arg) {
function Atan (line 263) | auto Atan(T* res, T weight, T const* arg) {
function Sinh (line 273) | auto Sinh(T* res, T weight, T const* arg) {
function Cosh (line 283) | auto Cosh(T* res, T weight, T const* arg) {
function Tanh (line 293) | auto Tanh(T* res, T weight, T const* arg) {
function Sqrt (line 303) | auto Sqrt(T* res, T weight, T const* arg) {
function Sqrtabs (line 313) | auto Sqrtabs(T* res, T weight, T const* arg) {
function Cbrt (line 323) | auto Cbrt(T* res, T weight, T const* arg) {
FILE: include/operon/interpreter/backend/fast_approx/derivatives.hpp
type Operon::Backend (line 9) | namespace Operon::Backend {
type detail (line 10) | namespace detail {
function IsNaN (line 12) | inline auto IsNaN(T value) { return std::isnan(value); }
type FComp (line 15) | struct FComp {
function Sgn (line 28) | inline auto Sgn(T x) {
function Add (line 34) | auto Add(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Mul (line 39) | auto Mul(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sub (line 47) | auto Sub(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Div (line 53) | auto Div(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Aq (line 68) | auto Aq(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T co...
function Pow (line 87) | auto Pow(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Powabs (line 106) | auto Powabs(std::vector<Operon::Node> const& nodes, Backend::View<T co...
function Min (line 125) | auto Min(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Max (line 134) | auto Max(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Square (line 143) | auto Square(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Abs (line 150) | auto Abs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Ceil (line 157) | auto Ceil(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Floor (line 164) | auto Floor(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Exp (line 171) | auto Exp(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log (line 176) | auto Log(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log1p (line 183) | auto Log1p(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Logabs (line 190) | auto Logabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Sin (line 197) | auto Sin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Cos (line 204) | auto Cos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Tan (line 211) | auto Tan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sinh (line 218) | auto Sinh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Cosh (line 225) | auto Cosh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Tanh (line 232) | auto Tanh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Asin (line 239) | auto Asin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Acos (line 246) | auto Acos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Atan (line 253) | auto Atan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrt (line 260) | auto Sqrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrtabs (line 267) | auto Sqrtabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View...
function Cbrt (line 275) | auto Cbrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
FILE: include/operon/interpreter/backend/fast_approx/functions.hpp
type Operon::Backend (line 19) | namespace Operon::Backend {
type detail::fast_approx (line 20) | namespace detail::fast_approx {
function Inv (line 24) | inline auto constexpr Inv(Operon::Scalar x) -> Operon::Scalar {
function Log (line 28) | inline auto constexpr Log(Operon::Scalar x) -> Operon::Scalar {
function Log1p (line 32) | inline auto constexpr Log1p(Operon::Scalar x) -> Operon::Scalar {
function Logabs (line 36) | inline auto constexpr Logabs(Operon::Scalar x) -> Operon::Scalar {
function Exp (line 40) | inline auto constexpr Exp(Operon::Scalar x) -> Operon::Scalar {
function Sin (line 44) | inline auto constexpr Sin(Operon::Scalar x) -> Operon::Scalar {
function Cos (line 48) | inline auto constexpr Cos(Operon::Scalar x) -> Operon::Scalar {
function Tan (line 52) | inline auto constexpr Tan(Operon::Scalar x) -> Operon::Scalar {
function Sinh (line 56) | inline auto constexpr Sinh(Operon::Scalar x) -> Operon::Scalar {
function Cosh (line 61) | inline auto constexpr Cosh(Operon::Scalar x) -> Operon::Scalar {
function ISqrt (line 66) | inline auto constexpr ISqrt(Operon::Scalar x) -> Operon::Scalar {
function Sqrt (line 70) | inline auto constexpr Sqrt(Operon::Scalar x) -> Operon::Scalar {
function Sqrtabs (line 74) | inline auto constexpr Sqrtabs(Operon::Scalar x) -> Operon::Scalar {
function Div (line 78) | inline auto constexpr Div(Operon::Scalar x, Operon::Scalar y) -> Ope...
function Pow (line 82) | inline auto constexpr Pow(Operon::Scalar x, Operon::Scalar y) -> Ope...
function Powabs (line 86) | inline auto constexpr Powabs(Operon::Scalar x, Operon::Scalar y) -> ...
function Tanh (line 90) | inline auto constexpr Tanh(Operon::Scalar x) -> Operon::Scalar {
function Aq (line 94) | inline auto constexpr Aq(Operon::Scalar x, Operon::Scalar y) -> Oper...
function Fill (line 101) | auto Fill(T* res, T value) {
function Fill (line 106) | auto Fill(T* res, int n, T value) {
function Add (line 112) | auto Add(T* res, auto const*... args) {
function Mul (line 119) | auto Mul(T* res, auto const*... args) {
function Sub (line 126) | auto Sub(T* res, auto const* first, auto const*... rest) {
function Div (line 137) | auto Div(T* res, auto const* first, auto const*... rest) {
function Min (line 148) | auto Min(T* res, auto const*... args) {
function Max (line 155) | auto Max(T* res, auto const*... args) {
function Aq (line 163) | auto Aq(T* res, T const* a, T const* b) {
function Pow (line 168) | auto Pow(T* res, T const* a, T const* b) {
function Powabs (line 173) | auto Powabs(T* res, T const* a, T const* b) {
function Cpy (line 179) | auto Cpy(T* res, T const* arg) {
function Neg (line 184) | auto Neg(T* res, T const* arg) {
function Inv (line 189) | auto Inv(T* res, T const* arg) {
function Abs (line 194) | auto Abs(T* res, T const* arg) {
function Ceil (line 199) | auto Ceil(T* res, T const* arg) {
function Floor (line 204) | auto Floor(T* res, T const* arg) {
function Exp (line 209) | auto Exp(T* res, T const* arg) {
function Log (line 214) | auto Log(T* res, T const* arg) {
function Log1p (line 219) | auto Log1p(T* res, T const* arg) {
function Logabs (line 224) | auto Logabs(T* res, T const* arg) {
function Sin (line 229) | auto Sin(T* res, T const* arg) {
function Cos (line 234) | auto Cos(T* res, T const* arg) {
function Tan (line 239) | auto Tan(T* res, T const* arg) {
function Asin (line 244) | auto Asin(T* res, T const* arg) {
function Acos (line 249) | auto Acos(T* res, T const* arg) {
function Atan (line 254) | auto Atan(T* res, T const* arg) {
function Sinh (line 259) | auto Sinh(T* res, T const* arg) {
function Cosh (line 264) | auto Cosh(T* res, T const* arg) {
function Tanh (line 269) | auto Tanh(T* res, T const* arg) {
function Sqrt (line 274) | auto Sqrt(T* res, T const* arg) {
function Sqrtabs (line 279) | auto Sqrtabs(T* res, T const* arg) {
function Square (line 284) | auto Square(T* res, T const* arg) {
function Cbrt (line 289) | auto Cbrt(T* res, T const* arg) {
FILE: include/operon/interpreter/backend/fast_approx/impl/aq.hpp
type Operon::Backend::detail::fast_approx (line 8) | namespace Operon::Backend::detail::fast_approx {
function AqImpl (line 10) | inline auto constexpr AqImpl(Operon::Scalar x1, Operon::Scalar x2) {
FILE: include/operon/interpreter/backend/fast_approx/impl/exp.hpp
type Operon::Backend::detail::fast_approx (line 6) | namespace Operon::Backend::detail::fast_approx {
function ExpV1 (line 7) | inline auto constexpr ExpV1(Operon::Scalar x) -> Operon::Scalar {
function ExpV2 (line 19) | inline auto constexpr ExpV2(Operon::Scalar x) -> Operon::Scalar {
function ExpV3 (line 34) | inline auto constexpr ExpV3(Operon::Scalar x) -> Operon::Scalar {
function ExpImpl (line 53) | inline auto constexpr ExpImpl(Operon::Scalar x) -> Operon::Scalar {
FILE: include/operon/interpreter/backend/fast_approx/impl/inv.hpp
type Operon::Backend::detail::fast_approx (line 6) | namespace Operon::Backend::detail::fast_approx {
function InvImpl (line 8) | inline auto constexpr InvImpl(Operon::Scalar x) -> Operon::Scalar {
function DivImpl (line 39) | inline auto constexpr DivImpl(Operon::Scalar x, Operon::Scalar y) -> O...
FILE: include/operon/interpreter/backend/fast_approx/impl/log.hpp
type Operon::Backend::detail::fast_approx (line 6) | namespace Operon::Backend::detail::fast_approx {
function LogImpl (line 8) | inline auto constexpr LogImpl(Operon::Scalar x) -> Operon::Scalar {
function Log1pImpl (line 33) | inline auto constexpr Log1pImpl(Operon::Scalar x) -> Operon::Scalar {
function LogabsImpl (line 38) | inline auto constexpr LogabsImpl(Operon::Scalar x) -> Operon::Scalar {
FILE: include/operon/interpreter/backend/fast_approx/impl/pow.hpp
type Operon::Backend::detail::fast_approx (line 8) | namespace Operon::Backend::detail::fast_approx {
function PowV1 (line 9) | inline auto constexpr PowV1(Operon::Scalar x, Operon::Scalar y) -> Ope...
function PowV2 (line 26) | inline auto PowV2(Operon::Scalar x, Operon::Scalar y) {
function PowImpl (line 45) | inline auto PowImpl(Operon::Scalar x, Operon::Scalar y) -> Operon::Sca...
function PowabsImpl (line 52) | inline auto constexpr PowabsImpl(Operon::Scalar x, Operon::Scalar y) -...
FILE: include/operon/interpreter/backend/fast_approx/impl/sqrt.hpp
type Operon::Backend::detail::fast_approx (line 6) | namespace Operon::Backend::detail::fast_approx {
function ISqrtImpl (line 8) | inline auto constexpr ISqrtImpl(Operon::Scalar x) -> Operon::Scalar {
function SqrtImpl (line 30) | inline auto constexpr SqrtImpl(Operon::Scalar x) -> Operon::Scalar {
function SqrtabsImpl (line 48) | inline auto constexpr SqrtabsImpl(Operon::Scalar x) {
FILE: include/operon/interpreter/backend/fast_approx/impl/tanh.hpp
type Operon::Backend::detail::fast_approx (line 7) | namespace Operon::Backend::detail::fast_approx {
function TanhImpl (line 9) | inline auto constexpr TanhImpl(Operon::Scalar x) -> Operon::Scalar {
FILE: include/operon/interpreter/backend/fast_approx/impl/trig.hpp
type Operon::Backend::detail::fast_approx (line 8) | namespace Operon::Backend::detail::fast_approx {
function CosImpl (line 10) | inline auto constexpr CosImpl(Operon::Scalar x) -> Operon::Scalar {
function SinImpl (line 36) | inline auto constexpr SinImpl(Operon::Scalar x) -> Operon::Scalar {
function TanImpl (line 52) | inline auto constexpr TanImpl(Operon::Scalar x) -> Operon::Scalar {
FILE: include/operon/interpreter/backend/fastor/derivatives.hpp
type Operon::Backend (line 10) | namespace Operon::Backend {
type detail (line 11) | namespace detail {
function IsNaN (line 13) | inline auto IsNaN(T value) { return std::isnan(value); }
type FComp (line 19) | struct FComp {
function Sgn (line 32) | inline auto Sgn(T x) {
function Add (line 38) | auto Add(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Mul (line 43) | auto Mul(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sub (line 48) | auto Sub(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Div (line 54) | auto Div(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Aq (line 65) | auto Aq(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T co...
function Pow (line 74) | auto Pow(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Powabs (line 85) | auto Powabs(std::vector<Operon::Node> const& nodes, Backend::View<T co...
function Min (line 98) | auto Min(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Max (line 105) | auto Max(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Square (line 112) | auto Square(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Abs (line 117) | auto Abs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Ceil (line 123) | auto Ceil(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Floor (line 128) | auto Floor(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Exp (line 133) | auto Exp(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log (line 138) | auto Log(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log1p (line 143) | auto Log1p(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Logabs (line 148) | auto Logabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Sin (line 154) | auto Sin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Cos (line 159) | auto Cos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Tan (line 164) | auto Tan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sinh (line 169) | auto Sinh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Cosh (line 174) | auto Cosh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Tanh (line 179) | auto Tanh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Asin (line 184) | auto Asin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Acos (line 189) | auto Acos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Atan (line 194) | auto Atan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrt (line 199) | auto Sqrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrtabs (line 204) | auto Sqrtabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View...
function Cbrt (line 213) | auto Cbrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
FILE: include/operon/interpreter/backend/fastor/functions.hpp
type Operon::Backend (line 13) | namespace Operon::Backend {
function Map (line 15) | auto Map(T* ptr) { return Fastor::TensorMap<T, S>(ptr); }
function Map (line 18) | auto Map(T const* ptr) {
function Col (line 23) | auto Col(Backend::View<T, S> view, std::integral auto col) {
function Fill (line 29) | auto Fill(T* res, T value) {
function Fill (line 34) | auto Fill(T* res, int n, T value) {
function Add (line 40) | auto Add(T* res, T weight, auto const*... args) {
function Mul (line 45) | auto Mul(T* res, T weight, auto const*... args) {
function Sub (line 50) | auto Sub(T* res, T weight, auto const* first, auto const*... rest) {
function Div (line 56) | auto Div(T* res, T weight, auto const* first, auto const*... rest) {
function Min (line 62) | auto Min(T* res, T weight, auto const* first, auto const*... args) {
function Max (line 68) | auto Max(T* res, T weight, auto const* first, auto const*... args) {
function Aq (line 75) | auto Aq(T* res, T weight, T* a, T* b) {
function Pow (line 81) | auto Pow(T* res, T weight, T* a, T* b) {
function Powabs (line 86) | auto Powabs(T* res, T weight, T* a, T* b) {
function Cpy (line 92) | auto Cpy(T* res, T weight, T* arg) {
function Neg (line 97) | auto Neg(T* res, T weight, T* arg) {
function Inv (line 102) | auto Inv(T* res, T weight, T* arg) {
function Abs (line 107) | auto Abs(T* res, T weight, T* arg) {
function Square (line 112) | auto Square(T* res, T weight, T* arg) {
function Ceil (line 118) | auto Ceil(T* res, T weight, T* arg) {
function Floor (line 123) | auto Floor(T* res, T weight, T* arg) {
function Exp (line 128) | auto Exp(T* res, T weight, T* arg) {
function Log (line 133) | auto Log(T* res, T weight, T* arg) {
function Log1p (line 138) | auto Log1p(T* res, T weight, T* arg) {
function Logabs (line 143) | auto Logabs(T* res, T weight, T* arg) {
function Sin (line 148) | auto Sin(T* res, T weight, T* arg) {
function Cos (line 153) | auto Cos(T* res, T weight, T* arg) {
function Tan (line 158) | auto Tan(T* res, T weight, T* arg) {
function Asin (line 163) | auto Asin(T* res, T weight, T* arg) {
function Acos (line 168) | auto Acos(T* res, T weight, T* arg) {
function Atan (line 173) | auto Atan(T* res, T weight, T* arg) {
function Sinh (line 178) | auto Sinh(T* res, T weight, T* arg) {
function Cosh (line 183) | auto Cosh(T* res, T weight, T* arg) {
function Tanh (line 188) | auto Tanh(T* res, T weight, T* arg) {
function Sqrt (line 193) | auto Sqrt(T* res, T weight, T* arg) {
function Sqrtabs (line 198) | auto Sqrtabs(T* res, T weight, T* arg) {
function Cbrt (line 203) | auto Cbrt(T* res, T weight, T* arg) {
FILE: include/operon/interpreter/backend/plain/derivatives.hpp
type Operon::Backend (line 10) | namespace Operon::Backend {
type detail (line 11) | namespace detail {
function IsNaN (line 13) | inline auto IsNaN(T value) { return std::isnan(value); }
type FComp (line 16) | struct FComp {
function Sgn (line 29) | inline auto Sgn(T x) {
function Add (line 35) | auto Add(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Mul (line 40) | auto Mul(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sub (line 48) | auto Sub(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Div (line 54) | auto Div(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Aq (line 69) | auto Aq(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T co...
function Pow (line 88) | auto Pow(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Powabs (line 107) | auto Powabs(std::vector<Operon::Node> const& nodes, Backend::View<T co...
function Min (line 126) | auto Min(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Max (line 135) | auto Max(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Square (line 144) | auto Square(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Abs (line 151) | auto Abs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Ceil (line 158) | auto Ceil(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Floor (line 165) | auto Floor(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Exp (line 172) | auto Exp(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log (line 177) | auto Log(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log1p (line 184) | auto Log1p(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Logabs (line 191) | auto Logabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Sin (line 198) | auto Sin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Cos (line 205) | auto Cos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Tan (line 212) | auto Tan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sinh (line 219) | auto Sinh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Cosh (line 226) | auto Cosh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Tanh (line 233) | auto Tanh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Asin (line 240) | auto Asin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Acos (line 247) | auto Acos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Atan (line 254) | auto Atan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrt (line 261) | auto Sqrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrtabs (line 268) | auto Sqrtabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View...
function Cbrt (line 276) | auto Cbrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
FILE: include/operon/interpreter/backend/plain/functions.hpp
type Operon::Backend (line 10) | namespace Operon::Backend {
function Fill (line 13) | auto Fill(T* res, T value) {
function Fill (line 18) | auto Fill(T* res, int n, T value) {
function Add (line 24) | auto Add(T* res, T weight, auto const*... args) {
function Mul (line 31) | auto Mul(T* res, T weight, auto const*... args) {
function Sub (line 38) | auto Sub(T* res, T weight, auto const* first, auto const*... rest) {
function Div (line 49) | auto Div(T* res, T weight, auto const* first, auto const*... rest) {
function Min (line 60) | auto Min(T* res, T weight, auto const*... args) {
function Max (line 67) | auto Max(T* res, T weight, auto const*... args) {
function Aq (line 75) | auto Aq(T* res, T weight, T const* a, T const* b) {
function Pow (line 80) | auto Pow(T* res, T weight, T const* a, T const* b) {
function Powabs (line 85) | auto Powabs(T* res, T weight, T const* a, T const* b) {
function Cpy (line 91) | auto Cpy(T* res, T w, T const* arg) {
function Neg (line 97) | auto Neg(T* res, T weight, T const* arg) {
function Inv (line 102) | auto Inv(T* res, T weight, T const* arg) {
function Abs (line 107) | auto Abs(T* res, T weight, T const* arg) {
function Square (line 112) | auto Square(T* res, T weight, T const* arg) {
function Ceil (line 117) | auto Ceil(T* res, T weight, T const* arg) {
function Floor (line 122) | auto Floor(T* res, T weight, T const* arg) {
function Exp (line 127) | auto Exp(T* res, T weight, T const* arg) {
function Log (line 132) | auto Log(T* res, T weight, T const* arg) {
function Log1p (line 137) | auto Log1p(T* res, T weight, T const* arg) {
function Logabs (line 142) | auto Logabs(T* res, T weight, T const* arg) {
function Sin (line 147) | auto Sin(T* res, T weight, T const* arg) {
function Cos (line 152) | auto Cos(T* res, T weight, T const* arg) {
function Tan (line 157) | auto Tan(T* res, T weight, T const* arg) {
function Asin (line 162) | auto Asin(T* res, T weight, T const* arg) {
function Acos (line 167) | auto Acos(T* res, T weight, T const* arg) {
function Atan (line 172) | auto Atan(T* res, T weight, T const* arg) {
function Sinh (line 177) | auto Sinh(T* res, T weight, T const* arg) {
function Cosh (line 182) | auto Cosh(T* res, T weight, T const* arg) {
function Tanh (line 187) | auto Tanh(T* res, T weight, T const* arg) {
function Sqrt (line 192) | auto Sqrt(T* res, T weight, T const* arg) {
function Sqrtabs (line 197) | auto Sqrtabs(T* res, T weight, T const* arg) {
function Cbrt (line 202) | auto Cbrt(T* res, T weight, T const* arg) {
FILE: include/operon/interpreter/backend/vdt/derivatives.hpp
type Operon::Backend (line 6) | namespace Operon::Backend {
type detail (line 7) | namespace detail {
function IsNaN (line 9) | inline auto IsNaN(T value) { return std::isnan(value); }
type FComp (line 12) | struct FComp {
function Sgn (line 25) | inline auto Sgn(T x) {
function Add (line 31) | auto Add(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Mul (line 36) | auto Mul(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sub (line 44) | auto Sub(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Div (line 50) | auto Div(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Aq (line 65) | auto Aq(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T co...
function Pow (line 84) | auto Pow(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Powabs (line 103) | auto Powabs(std::vector<Operon::Node> const& nodes, Backend::View<T co...
function Min (line 122) | auto Min(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Max (line 131) | auto Max(std::vector<Operon::Node> const& nodes, Backend::View<T const...
function Square (line 140) | auto Square(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Abs (line 147) | auto Abs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Ceil (line 154) | auto Ceil(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Floor (line 161) | auto Floor(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Exp (line 168) | auto Exp(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log (line 173) | auto Log(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Log1p (line 180) | auto Log1p(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T...
function Logabs (line 187) | auto Logabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View<...
function Sin (line 194) | auto Sin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Cos (line 201) | auto Cos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Tan (line 208) | auto Tan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T c...
function Sinh (line 215) | auto Sinh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Cosh (line 222) | auto Cosh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Tanh (line 229) | auto Tanh(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Asin (line 236) | auto Asin(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Acos (line 243) | auto Acos(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Atan (line 250) | auto Atan(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrt (line 257) | auto Sqrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
function Sqrtabs (line 264) | auto Sqrtabs(std::vector<Operon::Node> const& /*nodes*/, Backend::View...
function Cbrt (line 272) | auto Cbrt(std::vector<Operon::Node> const& /*nodes*/, Backend::View<T ...
FILE: include/operon/interpreter/backend/vdt/functions.hpp
type Operon::Backend (line 12) | namespace Operon::Backend {
type detail::vdt (line 14) | namespace detail::vdt {
function Exp (line 16) | inline auto Exp(Operon::Scalar x) -> Operon::Scalar {
function Log (line 30) | inline auto Log(Operon::Scalar x) -> Operon::Scalar {
function Logabs (line 45) | inline auto Logabs(Operon::Scalar x) -> Operon::Scalar {
function Log1p (line 49) | inline auto Log1p(Operon::Scalar x) -> Operon::Scalar {
function Inv (line 53) | inline auto Inv(Operon::Scalar x) -> Operon::Scalar {
function ISqrt (line 59) | inline auto ISqrt(Operon::Scalar x) -> Operon::Scalar {
function Sqrt (line 73) | inline auto Sqrt(Operon::Scalar x) -> Operon::Scalar {
function Sqrtabs (line 83) | inline auto Sqrtabs(Operon::Scalar x) -> Operon::Scalar {
function Cbrt (line 87) | inline auto Cbrt(Operon::Scalar x) -> Operon::Scalar {
function Floor (line 91) | inline auto Floor(Operon::Scalar x) -> Operon::Scalar {
function Div (line 96) | inline auto Div(Operon::Scalar x, Operon::Scalar y) -> Operon::Scalar {
function Aq (line 101) | inline auto Aq(Operon::Scalar x, Operon::Scalar y) -> Operon::Scalar {
function Pow (line 106) | inline auto Pow(Operon::Scalar x, Operon::Scalar y) -> Operon::Scalar {
function Acos (line 122) | inline auto Acos(Operon::Scalar x) -> Operon::Scalar {
function Asin (line 128) | inline auto Asin(Operon::Scalar x) -> Operon::Scalar {
function Atan (line 134) | inline auto Atan(Operon::Scalar x) -> Operon::Scalar {
function Cos (line 140) | inline auto Cos(Operon::Scalar x) -> Operon::Scalar {
function Sin (line 148) | inline auto Sin(Operon::Scalar x) -> Operon::Scalar {
function Tan (line 156) | inline auto Tan(Operon::Scalar x) -> Operon::Scalar {
function Sinh (line 162) | inline auto Sinh(Operon::Scalar x) -> Operon::Scalar {
function Cosh (line 167) | inline auto Cosh(Operon::Scalar x) -> Operon::Scalar {
function Tanh (line 172) | inline auto Tanh(Operon::Scalar x) -> Operon::Scalar {
function Fill (line 185) | auto Fill(T* res, T value) {
function Fill (line 190) | auto Fill(T* res, int n, T value) {
function Add (line 196) | auto Add(T* res, T weight, auto const*... args) {
function Mul (line 203) | auto Mul(T* res, T weight, auto const*... args) {
function Sub (line 210) | auto Sub(T* res, T weight, auto const* first, auto const*... rest) {
function Div (line 221) | auto Div(T* res, T weight, auto const* first, auto const*... rest) {
function Min (line 232) | auto Min(T* res, T weight, auto const*... args) {
function Max (line 239) | auto Max(T* res, T weight, auto const*... args) {
function Aq (line 247) | auto Aq(T* res, T weight, T const* a, T const* b) {
function Pow (line 252) | auto Pow(T* res, T weight, T const* a, T const* b) {
function Powabs (line 257) | auto Powabs(T* res, T weight, T const* a, T const* b) {
function Cpy (line 263) | auto Cpy(T* res, T weight, T const* arg) {
function Neg (line 268) | auto Neg(T* res, T weight, T const* arg) {
function Inv (line 273) | auto Inv(T* res, T weight, T const* arg) {
function Abs (line 278) | auto Abs(T* res, T weight, T const* arg) {
function Square (line 283) | auto Square(T* res, T weight, T const* arg) {
function Ceil (line 288) | auto Ceil(T* res, T weight, T const* arg) {
function Floor (line 293) | auto Floor(T* res, T weight, T const* arg) {
function Exp (line 298) | auto Exp(T* res, T weight, T const* arg) {
function Log (line 303) | auto Log(T* res, T weight, T const* arg) {
function Log1p (line 308) | auto Log1p(T* res, T weight, T const* arg) {
function Logabs (line 313) | auto Logabs(T* res, T weight, T const* arg) {
function Sin (line 318) | auto Sin(T* res, T weight, T const* arg) {
function Cos (line 323) | auto Cos(T* res, T weight, T const* arg) {
function Tan (line 328) | auto Tan(T* res, T weight, T const* arg) {
function Asin (line 333) | auto Asin(T* res, T weight, T const* arg) {
function Acos (line 338) | auto Acos(T* res, T weight, T const* arg) {
function Atan (line 343) | auto Atan(T* res, T weight, T const* arg) {
function Sinh (line 348) | auto Sinh(T* res, T weight, T const* arg) {
function Cosh (line 353) | auto Cosh(T* res, T weight, T const* arg) {
function Tanh (line 358) | auto Tanh(T* res, T weight, T const* arg) {
function Sqrt (line 363) | auto Sqrt(T* res, T weight, T const* arg) {
function Sqrtabs (line 368) | auto Sqrtabs(T* res, T weight, T const* arg) {
function Cbrt (line 373) | auto Cbrt(T* res, T weight, T const* arg) {
FILE: include/operon/interpreter/derivatives.hpp
type Operon (line 10) | namespace Operon {
type Diff<T, Operon::NodeType::Add, S> (line 13) | struct Diff<T, Operon::NodeType::Add, S> {
type Diff<T, Operon::NodeType::Sub, S> (line 20) | struct Diff<T, Operon::NodeType::Sub, S> {
type Diff<T, Operon::NodeType::Mul, S> (line 27) | struct Diff<T, Operon::NodeType::Mul, S> {
type Diff<T, Operon::NodeType::Div, S> (line 34) | struct Diff<T, Operon::NodeType::Div, S> {
type Diff<T, Operon::NodeType::Fmin, S> (line 41) | struct Diff<T, Operon::NodeType::Fmin, S> {
type Diff<T, Operon::NodeType::Fmax, S> (line 48) | struct Diff<T, Operon::NodeType::Fmax, S> {
type Diff<T, Operon::NodeType::Aq, S> (line 56) | struct Diff<T, Operon::NodeType::Aq, S> {
type Diff<T, Operon::NodeType::Pow, S> (line 63) | struct Diff<T, Operon::NodeType::Pow, S> {
type Diff<T, Operon::NodeType::Powabs, S> (line 70) | struct Diff<T, Operon::NodeType::Powabs, S> {
type Diff<T, Operon::NodeType::Abs, S> (line 78) | struct Diff<T, Operon::NodeType::Abs, S> {
type Diff<T, Operon::NodeType::Acos, S> (line 85) | struct Diff<T, Operon::NodeType::Acos, S> {
type Diff<T, Operon::NodeType::Asin, S> (line 92) | struct Diff<T, Operon::NodeType::Asin, S> {
type Diff<T, Operon::NodeType::Atan, S> (line 99) | struct Diff<T, Operon::NodeType::Atan, S> {
type Diff<T, Operon::NodeType::Cbrt, S> (line 106) | struct Diff<T, Operon::NodeType::Cbrt, S> {
type Diff<T, Operon::NodeType::Ceil, S> (line 113) | struct Diff<T, Operon::NodeType::Ceil, S> {
type Diff<T, Operon::NodeType::Cos, S> (line 120) | struct Diff<T, Operon::NodeType::Cos, S> {
type Diff<T, Operon::NodeType::Cosh, S> (line 127) | struct Diff<T, Operon::NodeType::Cosh, S> {
type Diff<T, Operon::NodeType::Exp, S> (line 134) | struct Diff<T, Operon::NodeType::Exp, S> {
type Diff<T, Operon::NodeType::Floor, S> (line 141) | struct Diff<T, Operon::NodeType::Floor, S> {
type Diff<T, Operon::NodeType::Log, S> (line 148) | struct Diff<T, Operon::NodeType::Log, S> {
type Diff<T, Operon::NodeType::Logabs, S> (line 155) | struct Diff<T, Operon::NodeType::Logabs, S> {
type Diff<T, Operon::NodeType::Log1p, S> (line 162) | struct Diff<T, Operon::NodeType::Log1p, S> {
type Diff<T, Operon::NodeType::Sin, S> (line 169) | struct Diff<T, Operon::NodeType::Sin, S> {
type Diff<T, Operon::NodeType::Sinh, S> (line 176) | struct Diff<T, Operon::NodeType::Sinh, S> {
type Diff<T, Operon::NodeType::Sqrt, S> (line 183) | struct Diff<T, Operon::NodeType::Sqrt, S> {
type Diff<T, Operon::NodeType::Sqrtabs, S> (line 190) | struct Diff<T, Operon::NodeType::Sqrtabs, S> {
type Diff<T, Operon::NodeType::Square, S> (line 197) | struct Diff<T, Operon::NodeType::Square, S> {
type Diff<T, Operon::NodeType::Tan, S> (line 204) | struct Diff<T, Operon::NodeType::Tan, S> {
type Diff<T, Operon::NodeType::Tanh, S> (line 211) | struct Diff<T, Operon::NodeType::Tanh, S> {
FILE: include/operon/interpreter/dual.hpp
type Operon (line 15) | namespace Operon {
FILE: include/operon/interpreter/functions.hpp
type Operon (line 33) | namespace Operon {
function Ptr (line 35) | auto Ptr(Backend::View<T, S> view, std::integral auto i) {
type Func<T, Operon::NodeType::Add, C, S> (line 41) | struct Func<T, Operon::NodeType::Add, C, S> {
type Func<T, Operon::NodeType::Mul, C, S> (line 53) | struct Func<T, Operon::NodeType::Mul, C, S> {
type Func<T, Operon::NodeType::Sub, C, S> (line 65) | struct Func<T, Operon::NodeType::Sub, C, S> {
type Func<T, Operon::NodeType::Div, C, S> (line 85) | struct Func<T, Operon::NodeType::Div, C, S> {
type Func<T, Operon::NodeType::Fmin, C, S> (line 105) | struct Func<T, Operon::NodeType::Fmin, C, S> {
type Func<T, Operon::NodeType::Fmax, C, S> (line 125) | struct Func<T, Operon::NodeType::Fmax, C, S> {
type Func<T, Operon::NodeType::Aq, C, S> (line 146) | struct Func<T, Operon::NodeType::Aq, C, S> {
type Func<T, Operon::NodeType::Pow, C, S> (line 154) | struct Func<T, Operon::NodeType::Pow, C, S> {
type Func<T, Operon::NodeType::Powabs, C, S> (line 162) | struct Func<T, Operon::NodeType::Powabs, C, S> {
type Func<T, Operon::NodeType::Abs, C, S> (line 171) | struct Func<T, Operon::NodeType::Abs, C, S> {
type Func<T, Operon::NodeType::Square, C, S> (line 180) | struct Func<T, Operon::NodeType::Square, C, S> {
type Func<T, Operon::NodeType::Exp, C, S> (line 188) | struct Func<T, Operon::NodeType::Exp, C, S> {
type Func<T, Operon::NodeType::Log, C, S> (line 196) | struct Func<T, Operon::NodeType::Log, C, S> {
type Func<T, Operon::NodeType::Logabs, C, S> (line 204) | struct Func<T, Operon::NodeType::Logabs, C, S> {
type Func<T, Operon::NodeType::Log1p, C, S> (line 212) | struct Func<T, Operon::NodeType::Log1p, C, S> {
type Func<T, Operon::NodeType::Sqrt, C, S> (line 220) | struct Func<T, Operon::NodeType::Sqrt, C, S> {
type Func<T, Operon::NodeType::Sqrtabs, C, S> (line 228) | struct Func<T, Operon::NodeType::Sqrtabs, C, S> {
type Func<T, Operon::NodeType::Cbrt, C, S> (line 236) | struct Func<T, Operon::NodeType::Cbrt, C, S> {
type Func<T, Operon::NodeType::Ceil, C, S> (line 244) | struct Func<T, Operon::NodeType::Ceil, C, S> {
type Func<T, Operon::NodeType::Floor, C, S> (line 252) | struct Func<T, Operon::NodeType::Floor, C, S> {
type Func<T, Operon::NodeType::Sin, C, S> (line 260) | struct Func<T, Operon::NodeType::Sin, C, S> {
type Func<T, Operon::NodeType::Cos, C, S> (line 268) | struct Func<T, Operon::NodeType::Cos, C, S> {
type Func<T, Operon::NodeType::Tan, C, S> (line 276) | struct Func<T, Operon::NodeType::Tan, C, S> {
type Func<T, Operon::NodeType::Asin, C, S> (line 284) | struct Func<T, Operon::NodeType::Asin, C, S> {
type Func<T, Operon::NodeType::Acos, C, S> (line 292) | struct Func<T, Operon::NodeType::Acos, C, S> {
type Func<T, Operon::NodeType::Atan, C, S> (line 300) | struct Func<T, Operon::NodeType::Atan, C, S> {
type Func<T, Operon::NodeType::Sinh, C, S> (line 308) | struct Func<T, Operon::NodeType::Sinh, C, S> {
type Func<T, Operon::NodeType::Cosh, C, S> (line 316) | struct Func<T, Operon::NodeType::Cosh, C, S> {
type Func<T, Operon::NodeType::Tanh, C, S> (line 324) | struct Func<T, Operon::NodeType::Tanh, C, S> {
FILE: include/operon/interpreter/interpreter.hpp
type Operon (line 21) | namespace Operon {
type LikelihoodType (line 23) | enum class LikelihoodType : uint8_t { Gaussian, Poisson }
type InterpreterBase (line 26) | struct InterpreterBase {
method InterpreterBase (line 27) | InterpreterBase() = default;
method InterpreterBase (line 28) | InterpreterBase(const InterpreterBase&) = default;
method InterpreterBase (line 29) | InterpreterBase(InterpreterBase&&) = default;
type Interpreter (line 53) | struct Interpreter : public InterpreterBase<T> {
method Interpreter (line 57) | Interpreter(gsl::not_null<DTable const*> dtable, gsl::not_null<Opero...
method Primal (line 62) | auto Primal() const { return primal_; }
method Trace (line 63) | auto Trace() const { return trace_; }
method Evaluate (line 65) | auto Evaluate(Operon::Span<T const> coeff, Operon::Range range, Oper...
method Evaluate (line 83) | auto Evaluate(Operon::Span<T const> coeff, Operon::Range range) cons...
method JacRev (line 90) | auto JacRev(Operon::Span<T const> coeff, Operon::Range range, Operon...
method JacRev (line 108) | auto JacRev(Operon::Span<T const> coeff, Operon::Range range) const ...
method JacFwd (line 115) | auto JacFwd(Operon::Span<T const> coeff, Operon::Range range, Operon...
method JacFwd (line 132) | auto JacFwd(Operon::Span<T const> coeff, Operon::Range range) const ...
method GetTree (line 139) | [[nodiscard]] auto GetTree() const -> Operon::Tree const* { return t...
method GetDataset (line 140) | [[nodiscard]] auto GetDataset() const -> Operon::Dataset const* { re...
method GetDispatchTable (line 142) | auto GetDispatchTable() const { return dtable_.get(); }
method Evaluate (line 144) | static auto Evaluate(Operon::Tree const& tree, Operon::Dataset const...
method Evaluate (line 150) | static auto Evaluate(Operon::Tree const& tree, Operon::Dataset const...
method ForwardPass (line 172) | auto ForwardPass(Operon::Range range, int row, bool trace = false) c...
method ForwardTrace (line 209) | auto ForwardTrace(Operon::Range range, int row, Eigen::Ref<Eigen::Ar...
method ReverseTrace (line 244) | auto ReverseTrace(Operon::Range range, int row, Eigen::Ref<Eigen::Ar...
method InitContext (line 272) | auto InitContext(Operon::Span<T const> coeff, Operon::Range range) c...
FILE: include/operon/mdspan/mdspan.hpp
type restrict_accessor (line 56) | struct restrict_accessor {
method restrict_accessor (line 62) | constexpr restrict_accessor() noexcept = default;
class OtherElementType (line 65) | class OtherElementType
method restrict_accessor (line 68) | explicit restrict_accessor(restrict_accessor<OtherElementType>/*noname...
method access (line 69) | constexpr auto access(data_handle_type p, size_t i) const noexcept -> ...
method offset (line 72) | constexpr auto
function is_nonzero_power_of_two (line 116) | constexpr auto
function valid_byte_alignment (line 129) | constexpr auto
type aligned_pointer (line 140) | struct aligned_pointer {
function bless (line 163) | auto
type aligned_accessor (line 170) | struct aligned_accessor {
method aligned_accessor (line 176) | constexpr aligned_accessor() noexcept = default;
class OtherElementType (line 179) | class OtherElementType
method aligned_accessor (line 183) | constexpr explicit aligned_accessor(aligned_accessor<OtherElementType,...
method access (line 185) | constexpr auto access(data_handle_type p, size_t i) const noexcept -> ...
method offset (line 191) | constexpr typename offset_policy::data_handle_type
FILE: include/operon/operators/creator.hpp
type Operon (line 14) | namespace Operon {
class Tree (line 16) | class Tree
class PrimitiveSet (line 17) | class PrimitiveSet
type OPERON_EXPORT (line 20) | struct OPERON_EXPORT
function GetPrimitiveSet (line 27) | [[nodiscard]] auto GetPrimitiveSet() const -> PrimitiveSet const* { re...
function GetVariables (line 30) | [[nodiscard]] auto GetVariables() const -> Operon::Span<Operon::Hash c...
function SetVariables (line 31) | auto SetVariables(Operon::Span<Operon::Hash const> variables) { variab...
function BalancedTreeCreator (line 51) | class OPERON_EXPORT BalancedTreeCreator final : public CreatorBase {
function GrowTreeCreator (line 68) | class OPERON_EXPORT GrowTreeCreator final : public CreatorBase {
function ProbabilisticTreeCreator (line 77) | class OPERON_EXPORT ProbabilisticTreeCreator final : public CreatorBase {
FILE: include/operon/operators/crossover.hpp
type Operon (line 20) | namespace Operon {
type CrossoverBase (line 22) | struct CrossoverBase : public OperatorBase<Tree, const Tree&, const Tr...
function SubtreeCrossover (line 29) | class OPERON_EXPORT SubtreeCrossover : public CrossoverBase {
FILE: include/operon/operators/evaluator.hpp
type Operon (line 22) | namespace Operon {
type ErrorType (line 24) | enum class ErrorType : int { SSE, MSE, NMSE, RMSE, MAE, R2, C2 }
function ErrorMetric (line 26) | struct OPERON_EXPORT ErrorMetric {
function ErrorMetric (line 41) | struct OPERON_EXPORT SSE : public ErrorMetric {
function ErrorMetric (line 45) | struct OPERON_EXPORT MSE : public ErrorMetric {
function ErrorMetric (line 49) | struct OPERON_EXPORT NMSE : public ErrorMetric {
function ErrorMetric (line 53) | struct OPERON_EXPORT RMSE : public ErrorMetric {
function ErrorMetric (line 57) | struct OPERON_EXPORT MAE : public ErrorMetric {
function ErrorMetric (line 61) | struct OPERON_EXPORT R2 : public ErrorMetric {
function ErrorMetric (line 65) | struct OPERON_EXPORT C2 : public ErrorMetric {
type EvaluatorBase (line 75) | struct EvaluatorBase : public E1, E2
method EvaluatorBase (line 92) | explicit EvaluatorBase(gsl::not_null<Problem const*> problem)
method Evaluate (line 98) | static auto Evaluate(Derived const* self, Operon::RandomGenerator& r...
method Evaluate (line 104) | static auto Evaluate(Derived const* self, Operon::RandomGenerator& r...
method Prepare (line 109) | virtual void Prepare(Operon::Span<Individual const> /*pop*/) const
method ObjectiveCount (line 113) | virtual auto ObjectiveCount() const -> std::size_t { return 1UL; }
method TotalEvaluations (line 115) | auto TotalEvaluations() const -> size_t { return ResidualEvaluations...
method SetBudget (line 117) | void SetBudget(size_t value) { budget_ = value; }
method Budget (line 118) | auto Budget() const -> size_t { return budget_; }
method BudgetExhausted (line 121) | virtual auto BudgetExhausted() const -> bool { return TotalEvaluatio...
method Stats (line 123) | virtual auto Stats() const -> std::tuple<std::size_t, std::size_t, s...
method Population (line 132) | auto Population() const -> Operon::Span<Individual const> { return p...
method SetPopulation (line 133) | auto SetPopulation(Operon::Span<Operon::Individual const> pop) const...
method GetProblem (line 134) | auto GetProblem() const -> Problem const* { return problem_; }
method SetProblem (line 135) | auto SetProblem(gsl::not_null<Problem const*> problem) { problem_ = ...
method Reset (line 137) | void Reset() const
function UserDefinedEvaluator (line 151) | class OPERON_EXPORT UserDefinedEvaluator : public EvaluatorBase {
function EvaluatorBase (line 183) | class OPERON_EXPORT Evaluator : public EvaluatorBase {
method EvaluatorBase (line 92) | explicit EvaluatorBase(gsl::not_null<Problem const*> problem)
method Evaluate (line 98) | static auto Evaluate(Derived const* self, Operon::RandomGenerator& r...
method Evaluate (line 104) | static auto Evaluate(Derived const* self, Operon::RandomGenerator& r...
method Prepare (line 109) | virtual void Prepare(Operon::Span<Individual const> /*pop*/) const
method ObjectiveCount (line 113) | virtual auto ObjectiveCount() const -> std::size_t { return 1UL; }
method TotalEvaluations (line 115) | auto TotalEvaluations() const -> size_t { return ResidualEvaluations...
method SetBudget (line 117) | void SetBudget(size_t value) { budget_ = value; }
method Budget (line 118) | auto Budget() const -> size_t { return budget_; }
method BudgetExhausted (line 121) | virtual auto BudgetExhausted() const -> bool { return TotalEvaluatio...
method Stats (line 123) | virtual auto Stats() const -> std::tuple<std::size_t, std::size_t, s...
method Population (line 132) | auto Population() const -> Operon::Span<Individual const> { return p...
method SetPopulation (line 133) | auto SetPopulation(Operon::Span<Operon::Individual const> pop) const...
method GetProblem (line 134) | auto GetProblem() const -> Problem const* { return problem_; }
method SetProblem (line 135) | auto SetProblem(gsl::not_null<Problem const*> problem) { problem_ = ...
method Reset (line 137) | void Reset() const
function MultiEvaluator (line 210) | class OPERON_EXPORT MultiEvaluator : public EvaluatorBase {
function Prepare (line 222) | auto Prepare(Operon::Span<Operon::Individual const> pop) const -> void...
function ObjectiveCount (line 229) | auto ObjectiveCount() const -> std::size_t override
function Stats (line 254) | auto Stats() const -> std::tuple<std::size_t, std::size_t, std::size_t...
function BudgetExhausted (line 274) | auto BudgetExhausted() const -> bool final {
function Evaluators (line 279) | auto Evaluators() const { return evaluators_; }
function AggregateEvaluator (line 285) | class OPERON_EXPORT AggregateEvaluator final : public EvaluatorBase {
function UserDefinedEvaluator (line 316) | class OPERON_EXPORT LengthEvaluator : public UserDefinedEvaluator {
function UserDefinedEvaluator (line 326) | class OPERON_EXPORT ShapeEvaluator : public UserDefinedEvaluator {
function DiversityEvaluator (line 336) | class OPERON_EXPORT DiversityEvaluator : public EvaluatorBase {
class OPERON_EXPORT (line 360) | class OPERON_EXPORT
function Sigma (line 369) | auto Sigma() const { return std::span<Operon::Scalar const>{sigma_}; }
function SetSigma (line 370) | auto SetSigma(std::vector<Operon::Scalar> sigma) const -> void { sigma_ ...
class OPERON_EXPORT (line 480) | class OPERON_EXPORT
function Sigma (line 489) | auto Sigma() const { return std::span<Operon::Scalar const>{sigma_}; }
function SetSigma (line 490) | auto SetSigma(std::vector<Operon::Scalar> sigma) const -> void { sigma_ ...
class OPERON_EXPORT (line 579) | class OPERON_EXPORT
class OPERON_EXPORT (line 593) | class OPERON_EXPORT
class OPERON_EXPORT (line 608) | class OPERON_EXPORT
function Sigma (line 642) | auto Sigma() const { return std::span<Operon::Scalar const>{sigma_}; }
function SetSigma (line 643) | auto SetSigma(std::vector<Operon::Scalar> sigma) const -> void { sigma_ ...
FILE: include/operon/operators/generator.hpp
type Operon (line 16) | namespace Operon {
type RecombinationResult (line 18) | struct RecombinationResult {
class OffspringGeneratorBase (line 26) | class OffspringGeneratorBase : public OperatorBase<std::optional<Indiv...
method OffspringGeneratorBase (line 28) | OffspringGeneratorBase(EvaluatorBase const* eval, CrossoverBase cons...
method FemaleSelector (line 38) | [[nodiscard]] auto FemaleSelector() const -> SelectorBase const* { r...
method MaleSelector (line 39) | [[nodiscard]] auto MaleSelector() const -> SelectorBase const* { ret...
method Crossover (line 40) | [[nodiscard]] auto Crossover() const -> CrossoverBase const* { retur...
method Mutator (line 41) | [[nodiscard]] auto Mutator() const -> MutatorBase const* { return mu...
method Evaluator (line 42) | [[nodiscard]] auto Evaluator() const -> EvaluatorBase const* { retur...
method Optimizer (line 43) | [[nodiscard]] auto Optimizer() const -> CoefficientOptimizer const* ...
method Prepare (line 45) | virtual auto Prepare(Operon::Span<Individual const> pop) const -> void
method Terminate (line 52) | [[nodiscard]] virtual auto Terminate() const -> bool { return evalua...
method SetCache (line 54) | auto SetCache(Zobrist* cache) const { cache_ = cache; }
method Cache (line 55) | [[nodiscard]] auto Cache() const -> Zobrist* { return cache_; }
method Generate (line 57) | auto Generate(Operon::RandomGenerator& random, double pCrossover, do...
method Generate (line 108) | auto Generate(Operon::RandomGenerator& random, double pCrossover, do...
function BasicOffspringGenerator (line 124) | class OPERON_EXPORT BasicOffspringGenerator final : public OffspringGe...
function BroodOffspringGenerator (line 134) | class OPERON_EXPORT BroodOffspringGenerator : public OffspringGenerato...
function PolygenicOffspringGenerator (line 153) | class OPERON_EXPORT PolygenicOffspringGenerator : public OffspringGene...
function OffspringSelectionGenerator (line 172) | class OPERON_EXPORT OffspringSelectionGenerator : public OffspringGene...
FILE: include/operon/operators/initializer.hpp
type Operon (line 13) | namespace Operon {
type CoefficientInitializerBase (line 15) | struct CoefficientInitializerBase : public OperatorBase<void, Tree&> {
type TreeInitializerBase (line 18) | struct TreeInitializerBase : public OperatorBase<Tree> {
function CoefficientInitializerBase (line 22) | struct OPERON_EXPORT CoefficientInitializer : public CoefficientInitia...
function TreeInitializerBase (line 56) | struct OPERON_EXPORT TreeInitializer : public TreeInitializerBase {
FILE: include/operon/operators/local_search.hpp
type Operon (line 12) | namespace Operon {
class Tree (line 15) | class Tree
class OptimizerBase (line 16) | class OptimizerBase
type OptimizerSummary (line 17) | struct OptimizerSummary
class OPERON_EXPORT (line 19) | class OPERON_EXPORT
FILE: include/operon/operators/mutation.hpp
type Operon (line 22) | namespace Operon {
type CoefficientInitializerBase (line 24) | struct CoefficientInitializerBase
type CreatorBase (line 25) | struct CreatorBase
type MutatorBase (line 28) | struct MutatorBase : public OperatorBase<Tree, Tree> {
function OnePointMutation (line 32) | struct OPERON_EXPORT OnePointMutation : public MutatorBase {
function MultiPointMutation (line 55) | struct OPERON_EXPORT MultiPointMutation : public MutatorBase {
function DiscretePointMutation (line 76) | struct OPERON_EXPORT DiscretePointMutation : public MutatorBase {
function MultiMutation (line 89) | struct OPERON_EXPORT MultiMutation : public MutatorBase {
function ChangeVariableMutation (line 105) | struct OPERON_EXPORT ChangeVariableMutation : public MutatorBase {
function ChangeFunctionMutation (line 117) | struct OPERON_EXPORT ChangeFunctionMutation : public MutatorBase {
function RemoveSubtreeMutation (line 129) | struct OPERON_EXPORT RemoveSubtreeMutation final : public MutatorBase {
function InsertSubtreeMutation (line 138) | struct OPERON_EXPORT InsertSubtreeMutation final : public MutatorBase {
function ReplaceSubtreeMutation (line 156) | struct OPERON_EXPORT ReplaceSubtreeMutation : public MutatorBase {
function ShuffleSubtreesMutation (line 174) | struct OPERON_EXPORT ShuffleSubtreesMutation : public MutatorBase {
FILE: include/operon/operators/non_dominated_sorter.hpp
type Operon (line 14) | namespace Operon {
type EfficientSortStrategy (line 16) | enum EfficientSortStrategy : int { Binary, Sequential }
class NondominatedSorterBase (line 18) | class NondominatedSorterBase {
method Reset (line 33) | void Reset() { Stats = { 0, 0, 0, 0, 0, 0., 0. }; }
function NondominatedSorterBase (line 44) | struct OPERON_EXPORT DeductiveSorter : public NondominatedSorterBase {
method Reset (line 33) | void Reset() { Stats = { 0, 0, 0, 0, 0, 0., 0. }; }
function NondominatedSorterBase (line 48) | struct OPERON_EXPORT DominanceDegreeSorter : public NondominatedSorter...
method Reset (line 33) | void Reset() { Stats = { 0, 0, 0, 0, 0, 0., 0. }; }
function NondominatedSorterBase (line 52) | struct OPERON_EXPORT HierarchicalSorter : public NondominatedSorterBase {
method Reset (line 33) | void Reset() { Stats = { 0, 0, 0, 0, 0, 0., 0. }; }
function NondominatedSorterBase (line 56) | struct OPERON_EXPORT EfficientBinarySorter : public NondominatedSorter...
method Reset (line 33) | void Reset() { Stats = { 0, 0, 0, 0, 0, 0., 0. }; }
function EfficientSequentialSorter (line 60) | struct OPERON_EXPORT EfficientSequentialSorter : public NondominatedSo...
function NondominatedSorterBase (line 64) | struct OPERON_EXPORT MergeSorter : public NondominatedSorterBase {
method Reset (line 33) | void Reset() { Stats = { 0, 0, 0, 0, 0, 0., 0. }; }
function NondominatedSorterBase (line 68) | struct OPERON_EXPORT RankOrdinalSorter : public NondominatedSorterBase {
method Reset (line 33) | void Reset() { Stats = { 0, 0, 0, 0, 0, 0., 0. }; }
function NondominatedSorterBase (line 72) | struct OPERON_EXPORT RankIntersectSorter : public NondominatedSorterBa...
method Reset (line 33) | void Reset() { Stats = { 0, 0, 0, 0, 0, 0., 0. }; }
function NondominatedSorterBase (line 76) | struct OPERON_EXPORT BestOrderSorter : public NondominatedSorterBase {
method Reset (line 33) | void Reset() { Stats = { 0, 0, 0, 0, 0, 0., 0. }; }
FILE: include/operon/operators/reinserter.hpp
type Operon (line 11) | namespace Operon {
class ReinserterBase (line 12) | class ReinserterBase : public OperatorBase<void, Operon::Span<Individu...
method ReinserterBase (line 14) | explicit ReinserterBase(ComparisonCallback cb)
method Sort (line 19) | inline void Sort(Operon::Span<Individual> inds) const { std::stable_...
method Compare (line 21) | [[nodiscard]] inline auto Compare(Individual const& lhs, Individual ...
function KeepBestReinserter (line 30) | class OPERON_EXPORT KeepBestReinserter : public ReinserterBase {
function ReplaceWorstReinserter (line 56) | class OPERON_EXPORT ReplaceWorstReinserter : public ReinserterBase {
FILE: include/operon/operators/selector.hpp
type Operon (line 10) | namespace Operon {
class SelectorBase (line 13) | class SelectorBase : public OperatorBase<size_t> {
method SelectorBase (line 17) | SelectorBase()
method SelectorBase (line 22) | explicit SelectorBase(ComparisonCallback&& cb)
method SelectorBase (line 27) | explicit SelectorBase(ComparisonCallback cb)
method Prepare (line 32) | virtual void Prepare(Operon::Span<Individual const> pop) const
method Population (line 37) | auto Population() const -> Operon::Span<Individual const> { return p...
method Compare (line 39) | [[nodiscard]] inline auto Compare(Individual const& lhs, Individual ...
function TournamentSelector (line 50) | class OPERON_EXPORT TournamentSelector : public SelectorBase {
function RankTournamentSelector (line 71) | class OPERON_EXPORT RankTournamentSelector : public SelectorBase {
function ProportionalSelector (line 90) | class OPERON_EXPORT ProportionalSelector : public SelectorBase {
function RandomSelector (line 110) | class OPERON_EXPORT RandomSelector : public SelectorBase {
FILE: include/operon/optimizer/dynamic_cost_function.hpp
type Operon (line 18) | namespace Operon {
type DynamicCostFunction (line 20) | struct DynamicCostFunction final : public ceres::DynamicCostFunction {
method DynamicCostFunction (line 23) | explicit DynamicCostFunction(CostFunctor const& cf)
method Evaluate (line 35) | auto Evaluate(double const* const* parameters, double* residuals, do...
method AddParameterBlock (line 77) | void AddParameterBlock(int /*size*/) override
method SetNumResiduals (line 82) | void SetNumResiduals(int /*num_residuals*/) override
method Functor (line 87) | auto Functor() -> CostFunctor& { return cf_; }
method Functor (line 88) | [[nodiscard]] auto Functor() const -> CostFunctor const& { return cf...
FILE: include/operon/optimizer/likelihood/gaussian_likelihood.hpp
type Operon (line 16) | namespace Operon {
type detail (line 18) | namespace detail {
type SquaredResidual (line 19) | struct SquaredResidual {
type GaussianLikelihood (line 38) | struct GaussianLikelihood {
method ComputeLikelihood (line 45) | static auto ComputeLikelihood(Span<Scalar const> x, Span<Scalar cons...
method ComputeFisherMatrix (line 72) | static auto ComputeFisherMatrix(Span<Scalar const> pred, Span<Scalar...
type GaussianLoss (line 98) | struct GaussianLoss : public LikelihoodBase<T> {
method GaussianLoss (line 101) | GaussianLoss(gsl::not_null<Operon::RandomGenerator*> rng, gsl::not_n...
method ComputeLikelihood (line 141) | static auto ComputeLikelihood(Span<Scalar const> x, Span<Scalar cons...
method ComputeFisherMatrix (line 145) | static auto ComputeFisherMatrix(Span<Scalar const> pred, Span<Scalar...
method NumParameters (line 149) | auto NumParameters() const -> std::size_t { return np_; }
method NumObservations (line 150) | auto NumObservations() const -> std::size_t { return nr_; }
method FunctionEvaluations (line 151) | auto FunctionEvaluations() const -> std::size_t { return feval_; }
method JacobianEvaluations (line 152) | auto JacobianEvaluations() const -> std::size_t { return jeval_; }
method SelectRandomRange (line 155) | auto SelectRandomRange() const -> Operon::Range {
FILE: include/operon/optimizer/likelihood/likelihood_base.hpp
type Operon (line 15) | namespace Operon {
type Concepts (line 17) | namespace Concepts {
type LikelihoodBase (line 31) | struct LikelihoodBase {
method LikelihoodBase (line 40) | explicit LikelihoodBase(gsl::not_null<Operon::InterpreterBase<T> con...
method GetInterpreter (line 45) | [[nodiscard]] auto GetInterpreter() const -> InterpreterBase<Operon:...
type Concepts (line 60) | namespace Concepts {
FILE: include/operon/optimizer/likelihood/poisson_likelihood.hpp
type Operon (line 16) | namespace Operon {
type detail (line 18) | namespace detail {
type Poisson (line 19) | struct Poisson {
type PoissonLog (line 31) | struct PoissonLog {
type PoissonLikelihood (line 48) | struct PoissonLikelihood {
method ComputeLikelihood (line 55) | static auto ComputeLikelihood(Span<Scalar const> x, Span<Scalar cons...
method ComputeFisherMatrix (line 78) | static auto ComputeFisherMatrix(Span<Scalar const> pred, Span<Scalar...
type PoissonLoss (line 98) | struct PoissonLoss : public LikelihoodBase<T> {
method PoissonLoss (line 101) | PoissonLoss(gsl::not_null<Operon::RandomGenerator*> rng, gsl::not_nu...
method ComputeLikelihood (line 148) | static auto ComputeLikelihood(Span<Scalar const> x, Span<Scalar cons...
method ComputeFisherMatrix (line 152) | static auto ComputeFisherMatrix(Span<Scalar const> pred, Span<Scalar...
method NumParameters (line 156) | auto NumParameters() const -> std::size_t { return numParameters_; }
method NumObservations (line 157) | auto NumObservations() const -> std::size_t { return numResiduals_; }
method FunctionEvaluations (line 158) | auto FunctionEvaluations() const -> std::size_t { return feval_; }
method JacobianEvaluations (line 159) | auto JacobianEvaluations() const -> std::size_t { return jeval_; }
method SelectRandomRange (line 162) | auto SelectRandomRange() const -> Operon::Range {
FILE: include/operon/optimizer/lm_cost_function.hpp
type Operon (line 11) | namespace Operon {
type LMCostFunction (line 19) | struct LMCostFunction {
method LMCostFunction (line 28) | explicit LMCostFunction(gsl::not_null<InterpreterBase<T> const*> int...
method Evaluate (line 36) | inline auto Evaluate(Scalar const* parameters, Scalar* residuals, Sc...
method NumResiduals (line 66) | [[nodiscard]] auto NumResiduals() const -> int { return numResiduals...
method NumParameters (line 67) | [[nodiscard]] auto NumParameters() const -> int { return numParamete...
method df (line 81) | auto df(Eigen::Matrix<Scalar, -1, 1> const& input, Eigen::Matrix<Sca...
method values (line 88) | [[nodiscard]] auto values() const -> int { return NumResiduals(); }
method inputs (line 89) | [[nodiscard]] auto inputs() const -> int { return NumParameters(); }
method ResidualCalls (line 91) | [[nodiscard]] auto ResidualCalls() const -> std::size_t { return res...
method JacobianCalls (line 92) | [[nodiscard]] auto JacobianCalls() const -> std::size_t { return jac...
FILE: include/operon/optimizer/optimizer.hpp
type Operon (line 31) | namespace Operon {
type OptimizerType (line 33) | enum class OptimizerType : int { Tiny, Eigen, Ceres }
type OptimizerSummary (line 35) | struct OptimizerSummary {
class OptimizerBase (line 46) | class OptimizerBase {
method OptimizerBase (line 53) | explicit OptimizerBase(gsl::not_null<Problem const*> problem)
method OptimizerBase (line 58) | OptimizerBase(const OptimizerBase&) = default;
method OptimizerBase (line 59) | OptimizerBase(OptimizerBase&&) = delete;
method GetProblem (line 65) | [[nodiscard]] auto GetProblem() const -> Problem const* { return pro...
method BatchSize (line 66) | [[nodiscard]] auto BatchSize() const -> std::size_t { return batchSi...
method Iterations (line 67) | [[nodiscard]] auto Iterations() const -> std::size_t { return iterat...
method SetBatchSize (line 69) | auto SetBatchSize(std::size_t batchSize) const { batchSize_ = batchS...
method SetIterations (line 70) | auto SetIterations(std::size_t iterations) const { iterations_ = ite...
type detail (line 77) | namespace detail {
function CheckSuccess (line 78) | inline auto CheckSuccess(double initialCost, double finalCost) {
type LevenbergMarquardtOptimizer (line 85) | struct LevenbergMarquardtOptimizer : public OptimizerBase {
method LevenbergMarquardtOptimizer (line 86) | explicit LevenbergMarquardtOptimizer(gsl::not_null<DTable const*> dt...
method Optimize (line 91) | [[nodiscard]] auto Optimize(Operon::RandomGenerator& /*unused*/, Ope...
method GetDispatchTable (line 124) | auto GetDispatchTable() const -> DTable const* { return dtable_.get(...
method ComputeLikelihood (line 126) | [[nodiscard]] auto ComputeLikelihood(Operon::Span<Operon::Scalar con...
method ComputeFisherMatrix (line 131) | [[nodiscard]] auto ComputeFisherMatrix(Operon::Span<Operon::Scalar c...
type LevenbergMarquardtOptimizer<DTable, OptimizerType::Eigen> (line 140) | struct LevenbergMarquardtOptimizer<DTable, OptimizerType::Eigen> final...
method LevenbergMarquardtOptimizer (line 141) | explicit LevenbergMarquardtOptimizer(gsl::not_null<DTable const*> dt...
method Optimize (line 146) | [[nodiscard]] auto Optimize(Operon::RandomGenerator& /*unused*/, Ope...
method GetDispatchTable (line 187) | auto GetDispatchTable() const -> DTable const* { return dtable_.get(...
method ComputeLikelihood (line 189) | [[nodiscard]] auto ComputeLikelihood(Operon::Span<Operon::Scalar con...
method ComputeFisherMatrix (line 194) | [[nodiscard]] auto ComputeFisherMatrix(Operon::Span<Operon::Scalar c...
type LevenbergMarquardtOptimizer<DTable, OptimizerType::Ceres> (line 204) | struct LevenbergMarquardtOptimizer<DTable, OptimizerType::Ceres> final...
method LevenbergMarquardtOptimizer (line 205) | explicit LevenbergMarquardtOptimizer(gsl::not_null<DTable const*> dt...
method Optimize (line 210) | auto Optimize(Operon::RandomGenerator& /*unused*/, Operon::Tree cons...
method GetDispatchTable (line 251) | auto GetDispatchTable() const -> DTable const& { return dtable_.get(...
method ComputeLikelihood (line 253) | [[nodiscard]] auto ComputeLikelihood(Operon::Span<Operon::Scalar con...
method ComputeFisherMatrix (line 258) | [[nodiscard]] auto ComputeFisherMatrix(Operon::Span<Operon::Scalar c...
type LBFGSOptimizer (line 268) | struct LBFGSOptimizer final : public OptimizerBase {
method LBFGSOptimizer (line 269) | LBFGSOptimizer(gsl::not_null<DTable const*> dtable, gsl::not_null<Pr...
method Optimize (line 274) | [[nodiscard]] auto Optimize(Operon::RandomGenerator& rng, Operon::Tr...
method GetDispatchTable (line 321) | auto GetDispatchTable() const -> DTable const* { return dtable_.get(...
method ComputeLikelihood (line 323) | [[nodiscard]] auto ComputeLikelihood(Operon::Span<Operon::Scalar con...
method ComputeFisherMatrix (line 328) | [[nodiscard]] auto ComputeFisherMatrix(Operon::Span<Operon::Scalar c...
type SGDOptimizer (line 337) | struct SGDOptimizer final : public OptimizerBase {
method SGDOptimizer (line 338) | SGDOptimizer(gsl::not_null<DTable const*> dtable, gsl::not_null<Prob...
method SGDOptimizer (line 344) | SGDOptimizer(gsl::not_null<DTable const*> dtable, gsl::not_null<Prob...
method GetDispatchTable (line 350) | auto GetDispatchTable() const -> DTable const* { return dtable_.get(...
method Optimize (line 352) | [[nodiscard]] auto Optimize(Operon::RandomGenerator& rng, Operon::Tr...
method ComputeLikelihood (line 396) | [[nodiscard]] auto ComputeLikelihood(Operon::Span<Operon::Scalar con...
method ComputeFisherMatrix (line 401) | [[nodiscard]] auto ComputeFisherMatrix(Operon::Span<Operon::Scalar c...
method SetUpdateRule (line 405) | auto SetUpdateRule(std::unique_ptr<UpdateRule::LearningRateUpdateRul...
method UpdateRule (line 409) | auto UpdateRule() const { return update_.get(); }
FILE: include/operon/optimizer/solvers/sgd.hpp
type Operon (line 17) | namespace Operon {
type UpdateRule (line 19) | namespace UpdateRule {
type LearningRateUpdateRule (line 20) | struct LearningRateUpdateRule {
method LearningRateUpdateRule (line 38) | LearningRateUpdateRule(const LearningRateUpdateRule&) = delete;
method LearningRateUpdateRule (line 39) | LearningRateUpdateRule(LearningRateUpdateRule&&) = delete;
method LearningRateUpdateRule (line 43) | explicit LearningRateUpdateRule(std::string name)
method Name (line 48) | [[nodiscard]] auto Name() const -> std::string const& { return nam...
class Constant (line 57) | class Constant : public LearningRateUpdateRule {
method Constant (line 68) | explicit Constant(Eigen::Index /*dim*/= 0, T r = 0.1)
method Constant (line 74) | explicit Constant(T r = 0.1) : Constant(0, r)
method Update (line 78) | [[nodiscard]] auto Update(Eigen::Ref<U const> const& gradient) con...
method Update (line 85) | auto Update(Eigen::Ref<U const> const& gradient, Eigen::Ref<U> res...
method Print (line 91) | auto Print(std::ostream& os) const -> std::ostream& final
method SetDimension (line 98) | auto SetDimension(int /*unused*/) const -> void final { }
method Clone (line 100) | [[nodiscard]] auto Clone(int dim) const -> std::unique_ptr<Learnin...
class Momentum (line 106) | class Momentum : public LearningRateUpdateRule {
method Momentum (line 117) | explicit Momentum(Eigen::Index dim, T r = 0.01, T b = 0.9)
method Update (line 125) | auto Update(Eigen::Ref<U const> const& gradient) const -> U final
method Update (line 132) | auto Update(Eigen::Ref<U const> const& gradient, Eigen::Ref<U> res...
method Print (line 139) | auto Print(std::ostream& os) const -> std::ostream& final
method SetDimension (line 147) | auto SetDimension(int dim) const -> void final
method Clone (line 154) | auto Clone(int dim) const -> std::unique_ptr<LearningRateUpdateRul...
class RmsProp (line 162) | class RmsProp : public LearningRateUpdateRule {
method RmsProp (line 174) | explicit RmsProp(Eigen::Index dim, T r = 0.01, T b = 0.9, T e = 1e-6)
method Update (line 183) | auto Update(Eigen::Ref<U const> const& gradient) const -> U final
method Update (line 190) | auto Update(Eigen::Ref<U const> const& gradient, Eigen::Ref<U> res...
method Print (line 197) | auto Print(std::ostream& os) const -> std::ostream& final
method SetDimension (line 206) | auto SetDimension(int dim) const -> void final
method Clone (line 213) | auto Clone(int dim) const -> std::unique_ptr<LearningRateUpdateRul...
class AdaDelta (line 221) | class AdaDelta : public LearningRateUpdateRule {
method AdaDelta (line 234) | explicit AdaDelta(Eigen::Index dim, T b = 0.9, T e = 1e-6)
method Update (line 244) | auto Update(Eigen::Ref<U const> const& gradient) const -> U final
method Update (line 251) | auto Update(Eigen::Ref<U const> const& gradient, Eigen::Ref<U> res...
method Print (line 260) | auto Print(std::ostream& os) const -> std::ostream& final
method SetDimension (line 270) | auto SetDimension(int dim) const -> void final
method Clone (line 279) | auto Clone(int dim) const -> std::unique_ptr<LearningRateUpdateRul...
class AdaMax (line 287) | class AdaMax : public LearningRateUpdateRule {
method AdaMax (line 300) | explicit AdaMax(Eigen::Index dim, T r = 0.01, T b1 = 0.9, T b2 = 0...
method Update (line 310) | auto Update(Eigen::Ref<U const> const& gradient) const -> U final
method Update (line 317) | auto Update(Eigen::Ref<U const> const& gradient, Eigen::Ref<U> res...
method Print (line 325) | auto Print(std::ostream& os) const -> std::ostream& final
method SetDimension (line 335) | auto SetDimension(int dim) const -> void final
method Clone (line 343) | auto Clone(int dim) const -> std::unique_ptr<LearningRateUpdateRul...
class Adam (line 351) | class Adam : public LearningRateUpdateRule {
method Adam (line 368) | explicit Adam(Eigen::Index dim, T r = 0.01, T e = 1e-8, T b1 = 0.9...
method Update (line 380) | auto Update(Eigen::Ref<U const> const& gradient) const -> U final
method Update (line 387) | auto Update(Eigen::Ref<U const> const& gradient, Eigen::Ref<U> res...
method Print (line 405) | auto Print(std::ostream& os) const -> std::ostream& final
method SetDimension (line 417) | auto SetDimension(int dim) const -> void final
method Clone (line 425) | auto Clone(int dim) const -> std::unique_ptr<LearningRateUpdateRul...
class YamAdam (line 433) | class YamAdam : public LearningRateUpdateRule {
method YamAdam (line 445) | explicit YamAdam(Eigen::Index dim, T e = 1e-6)
method Update (line 457) | auto Update(Eigen::Ref<U const> const& gradient) const -> U final
method Update (line 464) | auto Update(Eigen::Ref<U const> const& gradient, Eigen::Ref<U> res...
method Print (line 476) | auto Print(std::ostream& os) const -> std::ostream& final
method SetDimension (line 488) | auto SetDimension(int dim) const -> void final
method Clone (line 500) | auto Clone(int dim) const -> std::unique_ptr<LearningRateUpdateRul...
class AmsGrad (line 508) | class AmsGrad : public LearningRateUpdateRule {
method AmsGrad (line 519) | explicit AmsGrad(Eigen::Index dim, T r = 0.01, T e = 1e-6, T b1 = ...
method Update (line 530) | auto Update(Eigen::Ref<U const> const& gradient) const -> U final
method Update (line 537) | auto Update(Eigen::Ref<U const> const& gradient, Eigen::Ref<U> res...
method Print (line 545) | auto Print(std::ostream& os) const -> std::ostream& final
method SetDimension (line 556) | auto SetDimension(int dim) const -> void final
method Clone (line 564) | auto Clone(int dim) const -> std::unique_ptr<LearningRateUpdateRul...
class Yogi (line 572) | class Yogi : public LearningRateUpdateRule {
method Yogi (line 586) | explicit Yogi(Eigen::Index dim, T r = 0.01, T e = 1e-8, T b1 = 0.9...
method Update (line 598) | auto Update(Eigen::Ref<U const> const& gradient) const -> U final
method Update (line 605) | auto Update(Eigen::Ref<U const> const& gradient, Eigen::Ref<U> res...
method Print (line 621) | auto Print(std::ostream& os) const -> std::ostream& final
method SetDimension (line 632) | auto SetDimension(int dim) const -> void final
method Clone (line 640) | auto Clone(int dim) const -> std::unique_ptr<LearningRateUpdateRul...
type SGDSolver (line 649) | struct SGDSolver {
method SGDSolver (line 653) | explicit SGDSolver(gsl::not_null<Functor const* >functor, gsl::not_n...
method Optimize (line 659) | auto Optimize(Eigen::Ref<Vector const> const x0, int epochs = 1000) ...
method Epochs (line 685) | auto Epochs() const { return epochs_; }
FILE: include/operon/optimizer/tiny_cost_function.hpp
type Operon (line 12) | namespace Operon {
type CostFunction (line 20) | struct CostFunction {
method CostFunction (line 29) | explicit CostFunction(gsl::not_null<Operon::InterpreterBase<T> const...
method Evaluate (line 37) | inline auto Evaluate(Scalar const* parameters, Scalar* residuals, Sc...
method NumResiduals (line 65) | [[nodiscard]] auto NumResiduals() const -> int { return numResiduals...
method NumParameters (line 66) | [[nodiscard]] auto NumParameters() const -> int { return numParamete...
method df (line 80) | auto df(Eigen::Matrix<Scalar, -1, 1> const& input, Eigen::Matrix<Sca...
method values (line 88) | [[nodiscard]] auto values() const -> int { return NumResiduals(); }
method inputs (line 89) | [[nodiscard]] auto inputs() const -> int { return NumParameters(); }
method ParameterCount (line 98) | inline auto ParameterCount(auto const& tree) const -> std::size_t {
FILE: include/operon/parser/infix.hpp
type Operon (line 13) | namespace Operon {
function InfixParser (line 15) | struct OPERON_EXPORT InfixParser {
FILE: include/operon/random/random.hpp
type Operon::Random (line 13) | namespace Operon::Random {
function Uniform (line 15) | auto Uniform(R& random, T a, T b) -> T
function Sample (line 23) | auto Sample(R& random, InputIterator start, InputIterator end) -> Inpu...
function Sample (line 32) | auto Sample(R& random, InputIterator start, InputIterator end,
function Sample (line 55) | auto Sample(R& random, InputIterator start, InputIterator end, OutputI...
FILE: source/algorithms/gp.cpp
type Operon (line 24) | namespace Operon {
FILE: source/algorithms/nsga2.cpp
type Operon (line 28) | namespace Operon {
FILE: source/algorithms/solution_archive.cpp
type Operon (line 15) | namespace Operon {
FILE: source/core/dataset.cpp
type Operon (line 14) | namespace Operon {
function VariablesFromNames (line 18) | auto VariablesFromNames(auto const& names) {
function DefaultVariables (line 30) | auto DefaultVariables(size_t count) {
function MatrixFromValues (line 38) | auto MatrixFromValues(auto const& values) {
FILE: source/core/distance.cpp
type Operon::Distance (line 9) | namespace Operon::Distance {
type detail (line 10) | namespace detail {
function Intersect (line 12) | auto Intersect(T const* lhs, T const* rhs) {
function CountIntersect (line 21) | inline auto CountIntersect(Operon::Span<T const> lhs, Operon::Span<T...
function CountIntersect (line 60) | inline auto CountIntersect(Container const& lhs, Container const& rh...
function Jaccard (line 67) | auto Jaccard(Operon::Vector<Operon::Hash> const& lhs, Operon::Vector<O...
function SorensenDice (line 74) | auto SorensenDice(Operon::Vector<Operon::Hash> const& lhs, Operon::Vec...
FILE: source/core/node.cpp
type Operon (line 17) | namespace Operon {
FILE: source/core/pset.cpp
type Operon (line 20) | namespace Operon {
FILE: source/core/tree.cpp
type Operon (line 19) | namespace Operon {
FILE: source/core/version.cpp
type Operon (line 13) | namespace Operon {
function Version (line 15) | auto Version() -> std::string {
FILE: source/formatter/dot.cpp
type Operon (line 9) | namespace Operon {
FILE: source/formatter/infix.cpp
type Operon (line 9) | namespace Operon {
FILE: source/formatter/postfix.cpp
type Operon (line 9) | namespace Operon {
FILE: source/formatter/tree.cpp
type Operon (line 9) | namespace Operon {
FILE: source/hash/hash.cpp
type Operon (line 13) | namespace Operon {
FILE: source/hash/metrohash64.cpp
function rotate_right (line 25) | inline static uint64_t rotate_right(uint64_t v, unsigned k) // NOLINT
function read_u64 (line 31) | inline static uint64_t read_u64(const void* const ptr) // NOLINT
function read_u32 (line 36) | inline static uint64_t read_u32(const void* const ptr) // NOLINT
function read_u16 (line 41) | inline static uint64_t read_u16(const void* const ptr) // NOLINT
function read_u8 (line 46) | inline static uint64_t read_u8(const void* const ptr) // NOLINT
type Operon::HashUtil (line 52) | namespace Operon::HashUtil {
FILE: source/hash/zobrist.cpp
type Operon (line 9) | namespace Operon {
type Zobrist::TranspositionTable (line 11) | struct Zobrist::TranspositionTable {
FILE: source/interpreter/interpreter.cpp
type Operon (line 8) | namespace Operon {
function EvaluateTrees (line 9) | auto EvaluateTrees(Operon::Vector<Operon::Tree> const& trees, Operon::...
function EvaluateTrees (line 27) | auto EvaluateTrees(Operon::Vector<Operon::Tree> const& trees, Operon::...
FILE: source/operators/creator/balanced.cpp
type Operon (line 18) | namespace Operon {
FILE: source/operators/creator/creator.cpp
type Operon (line 11) | namespace Operon {
FILE: source/operators/creator/koza.cpp
type Operon (line 18) | namespace Operon {
FILE: source/operators/creator/ptc2.cpp
type Operon (line 21) | namespace Operon {
FILE: source/operators/crossover.cpp
type Operon (line 12) | namespace Operon {
function NotIn (line 15) | auto NotIn(Limits t, size_t v) -> bool {
FILE: source/operators/evaluator.cpp
type Operon (line 20) | namespace Operon {
function FitLeastSquaresImpl (line 22) | auto FitLeastSquaresImpl(Operon::Span<T const> estimated, Operon::Span...
function FitLeastSquares (line 34) | auto FitLeastSquares(Operon::Span<float const> estimated, Operon::Span...
function FitLeastSquares (line 38) | auto FitLeastSquares(Operon::Span<double const> estimated, Operon::Spa...
FILE: source/operators/evaluator_error_metrics.cpp
type Operon (line 4) | namespace Operon {
FILE: source/operators/generator/basic.cpp
type Operon (line 6) | namespace Operon {
FILE: source/operators/generator/brood.cpp
type Operon (line 7) | namespace Operon {
FILE: source/operators/generator/os.cpp
type Operon (line 7) | namespace Operon {
FILE: source/operators/generator/poly.cpp
type Operon (line 7) | namespace Operon {
FILE: source/operators/local_search.cpp
type Operon (line 10) | namespace Operon {
FILE: source/operators/mutation.cpp
type Operon (line 16) | namespace Operon {
FILE: source/operators/non_dominated_sorter/best_order_sort.cpp
type Operon (line 11) | namespace Operon {
FILE: source/operators/non_dominated_sorter/deductive_sort.cpp
type Operon (line 16) | namespace Operon {
FILE: source/operators/non_dominated_sorter/dominance_degree_sort.cpp
type Operon (line 9) | namespace Operon {
function ComputeComparisonMatrix (line 13) | inline auto ComputeComparisonMatrix(Operon::Span<Operon::Individual co...
function ComparisonMatrixSum (line 31) | inline auto ComparisonMatrixSum(Operon::Span<Operon::Individual const>...
function ComputeDegreeMatrix (line 39) | inline auto ComputeDegreeMatrix(Operon::Span<Operon::Individual const>...
FILE: source/operators/non_dominated_sorter/efficient_sort.cpp
type Operon (line 10) | namespace Operon {
function EfficientSortImpl (line 13) | inline auto EfficientSortImpl(Operon::Span<Operon::Individual const> p...
FILE: source/operators/non_dominated_sorter/hierarchical_sort.cpp
type Operon (line 13) | namespace Operon {
FILE: source/operators/non_dominated_sorter/merge_sort.cpp
type Operon (line 18) | namespace Operon {
type detail (line 20) | namespace detail {
class BitsetManager (line 21) | class BitsetManager {
method GetRanking (line 39) | [[nodiscard]] auto GetRanking() const -> Operon::Vector<int> const...
method UpdateSolutionDominance (line 41) | auto UpdateSolutionDominance(size_t solutionId) -> bool
method ComputeSolutionRanking (line 70) | void ComputeSolutionRanking(size_t solutionId, size_t initSolId)
method UpdateIncrementalBitset (line 115) | void UpdateIncrementalBitset(size_t solutionId)
method InitializeSolutionBitset (line 127) | auto InitializeSolutionBitset(size_t solutionId) -> bool
method ClearIncrementalBitset (line 159) | void ClearIncrementalBitset()
method BitsetManager (line 166) | BitsetManager() = default;
method BitsetManager (line 169) | explicit BitsetManager(size_t nSolutions)
type Item (line 180) | struct Item {
FILE: source/operators/non_dominated_sorter/rank_intersect.cpp
type Operon (line 13) | namespace Operon {
type Item (line 23) | struct Item {
function MakeUnique (line 31) | auto MakeUnique(std::size_t n, std::optional<typename std::remove_exte...
function InitBitsets (line 40) | auto InitBitsets(Operon::Span<Operon::Individual const> pop)
function UpdateRanks (line 87) | auto UpdateRanks(auto i, auto const& item, auto& rank, auto& rankset)
function GetFronts (line 117) | auto GetFronts(Operon::Vector<int> const& rank)
FILE: source/operators/non_dominated_sorter/rank_ordinal.cpp
type Operon (line 13) | namespace Operon {
FILE: source/operators/selector/proportional.cpp
type Operon (line 18) | namespace Operon {
FILE: source/operators/selector/tournament.cpp
type Operon (line 15) | namespace Operon {
FILE: source/parser/infix.cpp
function MakeNodeTypeMap (line 23) | constexpr auto MakeNodeTypeMap()
function ToOperonNode (line 62) | auto ToOperonNode(infix_parser::node const& a) -> Operon::Node
type Operon (line 82) | namespace Operon {
FILE: test/source/implementation/autodiff.cpp
type Operon::Test (line 20) | namespace Operon::Test {
FILE: test/source/implementation/crossover.cpp
type Operon::Test (line 17) | namespace Operon::Test {
FILE: test/source/implementation/details.cpp
type Operon::Test (line 21) | namespace Operon::Test {
FILE: test/source/implementation/dispatch_table.cpp
type Operon::Test (line 15) | namespace Operon::Test {
FILE: test/source/implementation/error_metrics.cpp
type Operon::Test (line 9) | namespace Operon::Test {
FILE: test/source/implementation/evaluation.cpp
type Operon::Test (line 18) | namespace Operon::Test {
FILE: test/source/implementation/evaluator.cpp
type Operon::Test (line 18) | namespace Operon::Test {
type EvaluatorFixture (line 25) | struct EvaluatorFixture {
method EvaluatorFixture (line 38) | EvaluatorFixture()
method MakeIndividual (line 68) | static auto MakeIndividual(Operon::Tree const& t) -> Operon::Individ...
FILE: test/source/implementation/hashing.cpp
type Operon::Test (line 20) | namespace Operon::Test {
FILE: test/source/implementation/infix_parser.cpp
type Operon::Test (line 15) | namespace Operon::Test {
FILE: test/source/implementation/initialization.cpp
type Operon::Test (line 16) | namespace Operon::Test {
function GenerateTrees (line 18) | static auto GenerateTrees(Operon::RandomGenerator& random, Operon::Cre...
type TestCreator (line 190) | struct TestCreator final : public CreatorBase {
method TestCreator (line 191) | TestCreator(PrimitiveSet const* pset, size_t maxLen)
method SnapDown (line 196) | auto SnapDown(size_t n) const -> size_t { return AchievableLength(n); }
FILE: test/source/implementation/mutation.cpp
type Operon::Test (line 15) | namespace Operon::Test {
FILE: test/source/implementation/nondominatedsort.cpp
type Operon::Test (line 17) | namespace Operon::Test {
function InitializePop (line 20) | auto InitializePop(Operon::RandomGenerator& random, auto& dist, size_t...
FILE: test/source/implementation/optimizer.cpp
type Operon::Test (line 20) | namespace Operon::Test {
type OptimizerFixture (line 26) | struct OptimizerFixture {
method OptimizerFixture (line 38) | OptimizerFixture()
FILE: test/source/implementation/random.cpp
type Operon::Test (line 14) | namespace Operon::Test {
FILE: test/source/implementation/selection.cpp
type Operon::Test (line 13) | namespace Operon::Test {
FILE: test/source/implementation/zobrist.cpp
type Operon::Test (line 14) | namespace Operon::Test {
function MakeSetup (line 20) | auto MakeSetup() {
FILE: test/source/operon_test.hpp
type Operon::Test::Util (line 20) | namespace Operon::Test::Util {
function RandomDataset (line 21) | inline auto RandomDataset(Operon::RandomGenerator& rng, int rows, int ...
function EvaluateTree (line 30) | auto EvaluateTree(auto const& tree, auto const& dataset, auto const ra...
function Autodiff (line 217) | auto Autodiff(auto const& tree, auto const& dataset, auto const range) {
FILE: test/source/performance/autodiff.cpp
type Operon::Test (line 18) | namespace Operon::Test {
FILE: test/source/performance/creator.cpp
type Operon::Test (line 15) | namespace Operon::Test {
FILE: test/source/performance/distance.cpp
type Operon (line 15) | namespace Operon {
type Test (line 16) | namespace Test {
type ComputeDistanceMatrix (line 19) | struct ComputeDistanceMatrix {
method ComputeDistanceMatrix (line 20) | explicit ComputeDistanceMatrix(Callable&& f)
FILE: test/source/performance/evaluation.cpp
type Operon::Test (line 31) | namespace Operon::Test {
function TotalNodes (line 32) | auto TotalNodes(const Operon::Vector<Tree>& trees)
function Evaluate (line 41) | void Evaluate(tf::Executor& executor, DTable const& dt, Operon::Vector...
FILE: test/source/performance/infix_parser.cpp
type Operon::Test (line 15) | namespace Operon::Test {
FILE: test/source/performance/nondominatedsort.cpp
type Operon::Test (line 19) | namespace Operon::Test {
function InitializePop (line 24) | auto InitializePop(Operon::RandomGenerator& random, Dist& dist, size_t...
FILE: test/source/thirdparty/elki_stats.hpp
type Elki (line 18) | namespace Elki {
type MeanVarianceResult (line 19) | struct MeanVarianceResult {
type MeanVariance (line 25) | struct MeanVariance {
method put (line 30) | void put(double val) {
method put (line 44) | void put(double val, double weight) {
method put (line 61) | auto put(auto const& x) {
method put (line 65) | auto put(auto const& x, auto const& w) {
method Sum (line 72) | double Sum() const { return sum; }
method PopulationMean (line 74) | double PopulationMean() const { return sum / n; }
method SampleMean (line 75) | double SampleMean() const { return sum / (n-1); }
method PopulationVariance (line 77) | double PopulationVariance() const { return m2 / n; }
method SampleVariance (line 78) | double SampleVariance() const { return m2 / (n-1); }
method PopulationStats (line 80) | static inline auto PopulationStats(auto const& x) {
method PopulationStats (line 86) | static inline auto PopulationStats(auto const& x, auto const& w) {
method SampleStats (line 92) | static inline auto SampleStats(auto const& x) {
method SampleStats (line 98) | static inline auto SampleStats(auto const& x, auto const& w) {
method SSR (line 104) | static inline auto SSR(auto const& x, auto const& y) {
method SSR (line 115) | static inline auto SSR(auto const& x, auto const& y, auto const& z) {
method MSE (line 127) | static inline auto MSE(auto const& x, auto const& y) {
method MSE (line 138) | static inline auto MSE(auto const& x, auto const& y, auto const& z) {
method NMSE (line 150) | static inline auto NMSE(auto const& x, auto const& y) {
method NMSE (line 162) | static inline auto NMSE(auto const& x, auto const& y, auto const& z) {
method MAE (line 175) | static inline auto MAE(auto const& x, auto const& y) {
method MAE (line 185) | static inline auto MAE(auto const& x, auto const& y, auto const& z) {
method Corr (line 196) | static inline auto Corr(auto const& x, auto const& y) {
method Corr (line 214) | static inline auto Corr(auto const& x, auto const& y, auto const& z) {
method R2 (line 232) | static inline auto R2(auto const& x, auto const& y) {
method R2 (line 245) | static inline auto R2(auto const& x, auto const& y, auto const& z) {
FILE: test/source/thirdparty/nanobench.h
function namespace (line 129) | namespace ankerl {
function namespace (line 369) | namespace ankerl {
function namespace (line 1328) | namespace ankerl {
function namespace (line 1352) | namespace ankerl {
FILE: tools/bench_ndsort.py
function _parse_csv_lines (line 63) | def _parse_csv_lines(text: str) -> list[dict]:
function run_once (line 99) | def run_once(binary: Path, tag: str, section: str | None, timeout: int) ...
function _quantile (line 116) | def _quantile(data: list[float], q: float) -> float:
function _iqr (line 126) | def _iqr(data: list[float]) -> float:
function aggregate (line 129) | def aggregate(all_rows: list[dict]) -> dict:
function _fmt_ns (line 149) | def _fmt_ns(ns: float) -> str:
function print_tables (line 158) | def print_tables(agg: dict, runs: int) -> None:
function plot_results (line 200) | def plot_results(agg: dict) -> None:
function main (line 232) | def main() -> None:
FILE: tools/benchmark_cache.py
function fmt_duration (line 76) | def fmt_duration(seconds: float) -> str:
function parse_budget (line 86) | def parse_budget(s: str) -> float:
function repair_csv (line 98) | def repair_csv(path: Path) -> bool:
function load_problem (line 114) | def load_problem(name: str) -> dict:
function discover_problems (line 131) | def discover_problems() -> list[str]:
function run_one (line 139) | def run_one(
function run_estimate (line 194) | def run_estimate(
function main (line 249) | def main() -> None:
FILE: tools/compare_operon.py
function _strip_color (line 52) | def _strip_color(s: str) -> str:
class Dataset (line 58) | class Dataset:
method name (line 65) | def name(self) -> str:
class RunConfig (line 100) | class RunConfig:
method cli_args (line 112) | def cli_args(self, datadir: Path) -> list[str]:
method label (line 131) | def label(self) -> str:
method group_key (line 136) | def group_key(self) -> tuple:
class RunResult (line 142) | class RunResult:
function _parse_stats_line (line 150) | def _parse_stats_line(line: str) -> dict:
function run_binary (line 163) | def run_binary(binary: Path, config: RunConfig, datadir: Path, timeout: ...
function _ok (line 189) | def _ok(msg, no_color=False):
function _fail (line 193) | def _fail(msg, no_color=False):
function _warn (line 197) | def _warn(msg, no_color=False):
function test_determinism (line 203) | def test_determinism(ref_bin: Path, new_bin: Path, datadir: Path, args) ...
function test_statistics (line 291) | def test_statistics(ref_bin: Path, new_bin: Path, datadir: Path, args) -...
function main (line 446) | def main() -> None:
Copy disabled (too large)
Download .json
Condensed preview — 301 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (21,131K chars).
[
{
"path": ".clang-format",
"chars": 3478,
"preview": "---\nLanguage: Cpp\n# BasedOnStyle: WebKit\nAccessModifierOffset: -4\nAlignAfterOpenBracket: DontAlign\nAlignConsecut"
},
{
"path": ".clang-tidy",
"chars": 6415,
"preview": "---\n# Enable ALL the things! Except not really\n# misc-non-private-member-variables-in-classes: the options don't do anyt"
},
{
"path": ".codespellrc",
"chars": 139,
"preview": "[codespell]\nbuiltin = clear,rare,en-GB_to_en-US,names,informal,code\ncheck-filenames =\ncheck-hidden =\nskip = */.git,*/bui"
},
{
"path": ".envrc",
"chars": 26,
"preview": "use flake . --builders ''\n"
},
{
"path": ".github/workflows/build-linux.yml",
"chars": 1039,
"preview": "name: build-linux\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\nenv:\n # Customize the CMa"
},
{
"path": ".github/workflows/build-macos.yml",
"chars": 1035,
"preview": "name: build-macos\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\nenv:\n # Customize the CMa"
},
{
"path": ".github/workflows/build-windows.yml",
"chars": 1356,
"preview": "name: build-windows\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\nenv:\n # Customize the C"
},
{
"path": ".github/workflows/ci.yml",
"chars": 4416,
"preview": "name: Continuous Integration\n\non:\n push:\n branches:\n - main\n\n pull_request:\n branches:\n - main\n\njobs:\n li"
},
{
"path": ".github/workflows/test-linux.yml",
"chars": 571,
"preview": "name: tests\r\n\r\non:\r\n push:\r\n branches: [main]\r\n pull_request:\r\n branches: [main]\r\n\r\njobs:\r\n test:\r\n runs-on:"
},
{
"path": ".gitignore",
"chars": 178,
"preview": ".DS_Store\n.idea/\n.vs/\n.vscode/\n.cache/\nbuild*/\ncmake/open-cpp-coverage.cmake\ncmake-build-*/\nprefix/\nCMakeLists.txt.user\n"
},
{
"path": ".readthedocs.yml",
"chars": 666,
"preview": "# .readthedocs.yml\n# Read the Docs configuration file\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html fo"
},
{
"path": "BUILDING.md",
"chars": 2208,
"preview": "# Building with CMake\n\n## Build\n\nThis project doesn't require any special command-line flags to build to keep\nthings sim"
},
{
"path": "CMakeLists.txt",
"chars": 9790,
"preview": "# SPDX-License-Identifier: MIT\n# SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\ncmake_minimum_required(VERSI"
},
{
"path": "CMakePresets.json",
"chars": 2793,
"preview": "{\n \"version\": 6,\n \"cmakeMinimumRequired\": {\n \"major\": 3,\n \"minor\": 23,\n \"patch\": 0\n },\n "
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 131,
"preview": "# Code of Conduct\n\n* You will be judged by your contributions first, and your sense of humor\n second.\n* Nobody owes you"
},
{
"path": "CONTRIBUTING.md",
"chars": 485,
"preview": "# Contributing\n\n<!--\n Short overview, rules, general guidelines, notes about pull requests and\n style should go he"
},
{
"path": "HACKING.md",
"chars": 2291,
"preview": "# Hacking\n\nHere is some wisdom to help you build and test this project as a developer and\npotential contributor.\n\nIf you"
},
{
"path": "LICENSE",
"chars": 1075,
"preview": "MIT License\n\nCopyright (c) 2019-2022 Heal Research\n\nPermission is hereby granted, free of charge, to any person obtainin"
},
{
"path": "README.md",
"chars": 6620,
"preview": "<picture>\n <source media=\"(prefers-color-scheme: dark)\" srcset=\"./rtd/_static/logo_mini_dark.png\">\n <source media="
},
{
"path": "cli/CMakeLists.txt",
"chars": 1196,
"preview": "cmake_minimum_required(VERSION 3.20)\n\nproject(operonCli LANGUAGES CXX)\n\ninclude(../cmake/project-is-top-level.cmake)\ninc"
},
{
"path": "cli/source/operator_factory.cpp",
"chars": 8482,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#include \"operator_factory"
},
{
"path": "cli/source/operator_factory.hpp",
"chars": 2510,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_CLI_OPERATO"
},
{
"path": "cli/source/operon_gp.cpp",
"chars": 12040,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#include \"reporter.hpp\"\n#i"
},
{
"path": "cli/source/operon_nsgp.cpp",
"chars": 13506,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#include <chrono>\n#include"
},
{
"path": "cli/source/operon_parse_model.cpp",
"chars": 8696,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#include <algorithm>\n#incl"
},
{
"path": "cli/source/pareto_front.cpp",
"chars": 7753,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#include \"pareto_front.hpp"
},
{
"path": "cli/source/pareto_front.hpp",
"chars": 1009,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_CLI_PARETO_"
},
{
"path": "cli/source/reporter.hpp",
"chars": 8674,
"preview": "#ifndef OPERON_CLI_REPORTER_HPP\n#define OPERON_CLI_REPORTER_HPP\n\n#include <fmt/format.h>\n#include <operon/algorithms/ga_"
},
{
"path": "cli/source/util.cpp",
"chars": 11044,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#include <array>\n#include "
},
{
"path": "cli/source/util.hpp",
"chars": 1010,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_CLI_UTIL_HP"
},
{
"path": "cmake/coverage.cmake",
"chars": 837,
"preview": "# ---- Variables ----\n\n# We use variables separate from what CTest uses, because those have\n# customization issues\nset(\n"
},
{
"path": "cmake/dev-mode.cmake",
"chars": 698,
"preview": "include(CTest)\nif(BUILD_TESTING)\n add_subdirectory(test)\nendif()\n\noption(BUILD_MCSS_DOCS \"Build documentation using Dox"
},
{
"path": "cmake/docs.cmake",
"chars": 1462,
"preview": "# ---- Redefine docs_early_return ----\n\n# This function must be a macro, so the return() takes effect in the calling\n# s"
},
{
"path": "cmake/get-git-revision.cmake",
"chars": 9508,
"preview": "# - Returns a version string from Git\n#\n# These functions force a re-configure on each git commit so that you can\n# trus"
},
{
"path": "cmake/get-git-revision.cmake.in",
"chars": 1354,
"preview": "#\n# Internal file for GetGitRevisionDescription.cmake\n#\n# Requires CMake 2.6 or newer (uses the 'function' command)\n#\n# "
},
{
"path": "cmake/install-config.cmake",
"chars": 846,
"preview": "include(CMakeFindDependencyMacro)\n\n# PUBLIC dependencies\nfind_dependency(Eigen3 CONFIG REQUIRED)\nfind_dependency(Threads"
},
{
"path": "cmake/install-rules.cmake",
"chars": 1574,
"preview": "if(PROJECT_IS_TOP_LEVEL)\n set(CMAKE_INSTALL_INCLUDEDIR include/operon CACHE PATH \"\")\nendif()\n\ninclude(CMakePackageConfi"
},
{
"path": "cmake/lint-targets.cmake",
"chars": 874,
"preview": "set(\n FORMAT_PATTERNS\n source/*.cpp source/*.hpp\n include/*.hpp\n test/*.cpp test/*.hpp\n example/*.cpp exa"
},
{
"path": "cmake/lint.cmake",
"chars": 1337,
"preview": "cmake_minimum_required(VERSION 3.14)\n\nmacro(default name)\n if(NOT DEFINED \"${name}\")\n set(\"${name}\" \"${ARGN}\")\n end"
},
{
"path": "cmake/open-cpp-coverage.cmake.example",
"chars": 1170,
"preview": "# Example file to run OpenCppCoverage on Windows\n\ninclude(ProcessorCount)\nProcessorCount(N)\n\nfile(MAKE_DIRECTORY \"${PROJ"
},
{
"path": "cmake/prelude.cmake",
"chars": 520,
"preview": "# ---- In-source guard ----\n\nif(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)\n message(\n FATAL_ERROR\n \"In-sourc"
},
{
"path": "cmake/project-is-top-level.cmake",
"chars": 154,
"preview": "# This variable is set by project() in CMake 3.21+\nstring(\n COMPARE EQUAL\n \"${CMAKE_SOURCE_DIR}\" \"${PROJECT_SOURCE"
},
{
"path": "cmake/spell-targets.cmake",
"chars": 581,
"preview": "set(SPELL_COMMAND codespell CACHE STRING \"Spell checker to use\")\n\nadd_custom_target(\n spell-check\n COMMAND \"${CMAK"
},
{
"path": "cmake/spell.cmake",
"chars": 657,
"preview": "cmake_minimum_required(VERSION 3.14)\n\nmacro(default name)\n if(NOT DEFINED \"${name}\")\n set(\"${name}\" \"${ARGN}\")\n end"
},
{
"path": "cmake/variables.cmake",
"chars": 2993,
"preview": "# ---- Developer mode ----\n\n# Developer mode enables targets and code paths in the CMake scripts that are\n# only relevan"
},
{
"path": "cmake/windows-set-path.cmake",
"chars": 793,
"preview": "# This function will add shared libraries to the PATH when running the test, so\n# they can be found. Windows does not su"
},
{
"path": "data/AirfoilSelfNoise.csv",
"chars": 60002,
"preview": "X1,X2,X3,X4,X5,Y\r\n800,0,0.3048,71.3,0.00266337,126.201\r\n1000,0,0.3048,71.3,0.00266337,125.201\r\n1250,0,0.3048,71.3,0.0026"
},
{
"path": "data/AirfoilSelfNoise.json",
"chars": 408,
"preview": "{\n \"metadata\": {\n \"name\": \"Airfoil Self-Noise\",\n \"filename\": \"AirfoilSelfNoise.csv\",\n \"formula\":"
},
{
"path": "data/Breiman-I.csv",
"chars": 420824,
"preview": "X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,Y\r\n-1,1,-1,0,0,1,-1,0,-1,0,-1.64046046120892\r\n1,0,1,0,0,-1,-1,1,1,-1,2.01080532985597\r\n-1"
},
{
"path": "data/Breiman-I.json",
"chars": 392,
"preview": "{\n \"metadata\": {\n \"name\": \"Breiman-I\",\n \"filename\": \"Breiman-I.csv\",\n \"formula\": \"\",\n \"ki"
},
{
"path": "data/Chemical-I.csv",
"chars": 2176330,
"preview": "x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,target\n28.0784464518229,13.93"
},
{
"path": "data/Chemical-I.json",
"chars": 400,
"preview": "{\n \"metadata\": {\n \"name\": \"Chemical-I\",\n \"filename\": \"Chemical-I.csv\",\n \"formula\": \"\",\n \""
},
{
"path": "data/Chemical-II.csv",
"chars": 478655,
"preview": "x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x"
},
{
"path": "data/Chemical-II.json",
"chars": 399,
"preview": "{\n \"metadata\": {\n \"name\": \"Chemical-II\",\n \"filename\": \"Chemical-II.csv\",\n \"formula\": \"\",\n "
},
{
"path": "data/Concrete.csv",
"chars": 41375,
"preview": "X1,X2,X3,X4,X5,X6,X7,X8,Y\r\n540,0,0,162,2.5,1040,676,28,79.99\r\n540,0,0,162,2.5,1055,676,28,61.89\r\n332.5,142.5,0,228,0,932"
},
{
"path": "data/Concrete.json",
"chars": 410,
"preview": "{\n \"metadata\": {\n \"name\": \"Concrete Compressive Strength\",\n \"filename\": \"Concrete.csv\",\n \"formul"
},
{
"path": "data/Flow_stress.csv",
"chars": 153614,
"preview": "T,phi_1000,target\n200,0,0\n200,1,15.06770756\n200,2,32.92914271\n200,3,49.05083984\n200,4,59.39326183\n200,5,68.41416898\n200,"
},
{
"path": "data/Flow_stress.json",
"chars": 402,
"preview": "{\n \"metadata\": {\n \"name\": \"Flow-stress\",\n \"filename\": \"Flow_stress.csv\",\n \"formula\": \"\",\n "
},
{
"path": "data/FrictionDyn-OneHot.csv",
"chars": 108960,
"preview": "p_rel,v_rel,T_0,target,exp_a,exp_b,exp_c,exp_d,exp_e,exp_f,exp_g,exp_h,exp_i,exp_j,exp_k,exp_l,exp_m,exp_n\n0.2863,0.262,"
},
{
"path": "data/FrictionDyn-OneHot.json",
"chars": 416,
"preview": "{\n \"metadata\": {\n \"name\": \"FrictionDyn-OneHot\",\n \"filename\": \"FrictionDyn-OneHot.csv\",\n \"formula"
},
{
"path": "data/FrictionStat-OneHot.csv",
"chars": 96858,
"preview": "p_rel,T_0,target,exp_a,exp_b,exp_c,exp_d,exp_e,exp_f,exp_g,exp_h,exp_i,exp_j,exp_k,exp_l,exp_m,exp_n\n0.2863,18.1,0.09768"
},
{
"path": "data/FrictionStat-OneHot.json",
"chars": 418,
"preview": "{\n \"metadata\": {\n \"name\": \"FrictionStat-OneHot\",\n \"filename\": \"FrictionStat-OneHot.csv\",\n \"formu"
},
{
"path": "data/Friedman-I.csv",
"chars": 1978975,
"preview": "X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,Y\r\n0.236619971747654,0.600080705620367,0.487644763544119,0.296937824528883,0.020660492130"
},
{
"path": "data/Friedman-I.json",
"chars": 394,
"preview": "{\n \"metadata\": {\n \"name\": \"Friedman-I\",\n \"filename\": \"Friedman-I.csv\",\n \"formula\": \"\",\n \""
},
{
"path": "data/Friedman-II.csv",
"chars": 1979027,
"preview": "X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,Y\r\n0.726927566744137,0.81838005776945,0.021370209758489,0.430856247765677,0.1507603458945"
},
{
"path": "data/Friedman-II.json",
"chars": 396,
"preview": "{\n \"metadata\": {\n \"name\": \"Friedman-II\",\n \"filename\": \"Friedman-II.csv\",\n \"formula\": \"\",\n "
},
{
"path": "data/GP-Challenge.csv",
"chars": 7547749,
"preview": "T1,T2,T3,T4,T5,T6,T7,T8,rank,RMSD,energy\r\n-7.58,-187.84,-167.04,-126.5692594,43.54275172,68.1772,170.5913573,107.81,957,"
},
{
"path": "data/GP-Challenge.json",
"chars": 405,
"preview": "{\n \"metadata\": {\n \"name\": \"GP-Challenge\",\n \"filename\": \"GP-Challenge.csv\",\n \"formula\": \"\",\n "
},
{
"path": "data/NasaBattery-1_10min.csv",
"chars": 73068,
"preview": "dischargeCycles,initialCapacity,Voltage0,DeltaVoltage3,Voltage10,Temperature10,target\n1,1.8564874208181574,4.19149180750"
},
{
"path": "data/NasaBattery-1_10min.json",
"chars": 417,
"preview": "{\n \"metadata\": {\n \"name\": \"Nasa Battery 1h 10min\",\n \"filename\": \"NasaBattery-1_10min.csv\",\n \"for"
},
{
"path": "data/NasaBattery-2_20min.csv",
"chars": 157687,
"preview": "dischargeCycles,initialCapacity,Voltage20,AvgCurrent20,AvgTemp20,target\n2,1.8518025516704486,3.6234948625001504,-2.02399"
},
{
"path": "data/NasaBattery-2_20min.json",
"chars": 420,
"preview": "{\n \"metadata\": {\n \"name\": \"Nasa Battery 2h 20min\",\n \"filename\": \"NasaBattery-2_20min.csv\",\n \"for"
},
{
"path": "data/Nikuradse_1.csv",
"chars": 5600,
"preview": "r_k,log_Re,target\n507,4.114,0.456\n507,4.23,0.438\n507,4.322,0.417\n507,4.362,0.407\n507,4.362,0.403\n507,4.462,0.381\n507,4.4"
},
{
"path": "data/Nikuradse_1.json",
"chars": 399,
"preview": "{\n \"metadata\": {\n \"name\": \"Nikuradse-I\",\n \"filename\": \"Nikuradse_1.csv\",\n \"formula\": \"\",\n "
},
{
"path": "data/Nikuradse_2.csv",
"chars": 4032,
"preview": "log_v_k_nu,target\n1.511,1.94\n2.608,1.74\n1.394,1.91\n1.519,1.78\n1.49665,1.93\n3.255,1.72\n0.33686,1.33\n1.38,2.02\n1.993,1.73\n"
},
{
"path": "data/Nikuradse_2.json",
"chars": 400,
"preview": "{\n \"metadata\": {\n \"name\": \"Nikuradse-II\",\n \"filename\": \"Nikuradse_2.csv\",\n \"formula\": \"\",\n "
},
{
"path": "data/Pagie-1.csv",
"chars": 70806,
"preview": "X,Y,F\r\n-5,-5,1.99680511182109\r\n-5,-4.6,1.99617412180445\r\n-5,-4.2,1.99519916903367\r\n-5,-3.8,1.9936295960645\r\n-5,-3.4,1.99"
},
{
"path": "data/Pagie-1.json",
"chars": 437,
"preview": "{\n \"metadata\": {\n \"name\": \"Spatial Coevolution\",\n \"filename\": \"Pagie-1.csv\",\n \"formula\": \"F(x,y)"
},
{
"path": "data/Poly-10.csv",
"chars": 102300,
"preview": "X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,Y\r\n-0.996123041491053,-0.342333388361692,-0.585257368531371,-0.0186943437481984,-0.306348"
},
{
"path": "data/Poly-10.json",
"chars": 384,
"preview": "{\n \"metadata\": {\n \"name\": \"Poly-10\",\n \"filename\": \"Poly-10.csv\",\n \"formula\": \"\",\n \"kind\":"
},
{
"path": "data/Sextic.csv",
"chars": 95624,
"preview": "X,Y\n-0.97789,0.00182882\n-0.93914,0.012284\n-0.898858,0.0298011\n-0.850502,0.0553608\n-0.80849,0.0784088\n-0.784378,0.0910774"
},
{
"path": "data/Sextic.json",
"chars": 382,
"preview": "{\n \"metadata\": {\n \"name\": \"Sextic\",\n \"filename\": \"Sextic.csv\",\n \"formula\": \"\",\n \"kind\": \""
},
{
"path": "data/Vladislavleva-1.csv",
"chars": 61106,
"preview": "X1,X2,Y\r\n2.85610608401618,0.360281924661315,0.00552067309875047\r\n1.19774234578892,2.30787014234994,0.777461224626437\r\n0."
},
{
"path": "data/Vladislavleva-1.json",
"chars": 451,
"preview": "{\n \"metadata\": {\n \"name\": \"Vladislavleva-1\",\n \"filename\": \"Vladislavleva-1.csv\",\n \"formula\": \"F1"
},
{
"path": "data/Vladislavleva-2.csv",
"chars": 7942,
"preview": "X,Y\r\n0.05,-5.92047290537525E-06\r\n0.15,-0.000419749007439608\r\n0.25,-0.00274401196221596\r\n0.35,-0.00865712869883085\r\n0.45,"
},
{
"path": "data/Vladislavleva-2.json",
"chars": 460,
"preview": "{\n \"metadata\": {\n \"name\": \"Vladislavleva-2\",\n \"filename\": \"Vladislavleva-2.csv\",\n \"formula\": \"F2"
},
{
"path": "data/Vladislavleva-3.csv",
"chars": 152659,
"preview": "X1,X2,Y\r\n0.05,0.05,2.93063408816075E-05\r\n0.05,2.05,1.7465395070857E-05\r\n0.05,4.05,5.62444926010648E-06\r\n0.05,6.05,-6.216"
},
{
"path": "data/Vladislavleva-3.json",
"chars": 480,
"preview": "{\n \"metadata\": {\n \"name\": \"Vladislavleva-3\",\n \"filename\": \"Vladislavleva-3.csv\",\n \"formula\": \"F3"
},
{
"path": "data/Vladislavleva-4.csv",
"chars": 629721,
"preview": "X1,X2,X3,X4,X5,Y\r\n0.449094023834703,2.07673772769671,3.05001488276758,0.90014683400517,3.06119295670911,0.59611936162968"
},
{
"path": "data/Vladislavleva-4.json",
"chars": 453,
"preview": "{\n \"metadata\": {\n \"name\": \"Vladislavleva-4\",\n \"filename\": \"Vladislavleva-4.csv\",\n \"formula\": \"F4"
},
{
"path": "data/Vladislavleva-5.csv",
"chars": 105065,
"preview": "X1,X2,X3,Y\r\n0.533650793387473,1.90948500482121,0.488797764524072,-0.207209763781291\r\n1.40375737780793,1.39874084047013,1"
},
{
"path": "data/Vladislavleva-5.json",
"chars": 463,
"preview": "{\n \"metadata\": {\n \"name\": \"Vladislavleva-5\",\n \"filename\": \"Vladislavleva-5.csv\",\n \"formula\": \"F5"
},
{
"path": "data/Vladislavleva-6.csv",
"chars": 2691847,
"preview": "X1,X2,Y\r\n1.01584214026012,1.61989856211466,-0.250298572687778\r\n3.87612407993901,4.76313587247001,-0.203987843788056\r\n3.3"
},
{
"path": "data/Vladislavleva-6.json",
"chars": 434,
"preview": "{\n \"metadata\": {\n \"name\": \"Vladislavleva-6\",\n \"filename\": \"Vladislavleva-6.csv\",\n \"formula\": \"F6"
},
{
"path": "data/Vladislavleva-7.csv",
"chars": 68753,
"preview": "X1,X2,Y\r\n1.97649262024241,5.33710876388641,-3.23657921858249\r\n5.22873620409023,2.65913343369242,-2.75381015612599\r\n5.809"
},
{
"path": "data/Vladislavleva-7.json",
"chars": 458,
"preview": "{\n \"metadata\": {\n \"name\": \"Vladislavleva-7\",\n \"filename\": \"Vladislavleva-7.csv\",\n \"formula\": \"F7"
},
{
"path": "data/Vladislavleva-8.csv",
"chars": 36443,
"preview": "X1,X2,Y\r\n4.42333200694372,6.01606719632774,0.10559134469785\r\n1.27750320640102,2.68184236191023,0.88967188760059\r\n0.73136"
},
{
"path": "data/Vladislavleva-8.json",
"chars": 466,
"preview": "{\n \"metadata\": {\n \"name\": \"Vladislavleva-8\",\n \"filename\": \"Vladislavleva-8.csv\",\n \"formula\": \"F8"
},
{
"path": "docs/Doxyfile.in",
"chars": 1069,
"preview": "# Configuration for Doxygen for use with CMake\n# Only options that deviate from the default are included\n# To create a n"
},
{
"path": "docs/conf.py.in",
"chars": 113,
"preview": "DOXYFILE = 'Doxyfile'\n\nLINKS_NAVBAR1 = [\n (None, 'pages', [(None, 'about')]),\n (None, 'namespaces', []),\n]\n"
},
{
"path": "docs/pages/about.dox",
"chars": 269,
"preview": "/**\n * @page about About\n * @section about-doxygen Doxygen documentation\n * This page is auto generated using\n * <a href"
},
{
"path": "example/CMakeLists.txt",
"chars": 666,
"preview": "cmake_minimum_required(VERSION 3.14)\n\nproject(operonExamples CXX)\n\ninclude(../cmake/project-is-top-level.cmake)\ninclude("
},
{
"path": "example/custom_primitives.cpp",
"chars": 7798,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n//\n// Demonstration: symbol"
},
{
"path": "example/empty_example.cpp",
"chars": 35,
"preview": "auto main() -> int\n{\n return 0;\n}\n"
},
{
"path": "flake.nix",
"chars": 4117,
"preview": "{\n description = \"Operon development environment\";\n\n inputs = {\n flake-parts.url = \"github:hercules-ci/flake-parts\""
},
{
"path": "include/operon/algorithms/config.hpp",
"chars": 930,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_ALGORITHM_C"
},
{
"path": "include/operon/algorithms/ga_base.hpp",
"chars": 4317,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef GA_BASE_HPP\n#defin"
},
{
"path": "include/operon/algorithms/gp.hpp",
"chars": 1574,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef GP_HPP\n#define GP_"
},
{
"path": "include/operon/algorithms/nsga2.hpp",
"chars": 2518,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_NSGA2_HPP\n#"
},
{
"path": "include/operon/algorithms/solution_archive.hpp",
"chars": 712,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_SOLUTION_AR"
},
{
"path": "include/operon/analyzers/analyzer_base.hpp",
"chars": 392,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_ANALYZER_BA"
},
{
"path": "include/operon/analyzers/diversity.hpp",
"chars": 1890,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef DIVERSITY_HPP\n#def"
},
{
"path": "include/operon/ceres/integer_sequence_algorithm.h",
"chars": 11421,
"preview": "// Ceres Solver - A fast non-linear least squares minimizer\n// Copyright 2022 Google Inc. All rights reserved.\n// http:/"
},
{
"path": "include/operon/ceres/jet.h",
"chars": 50731,
"preview": "// Ceres Solver - A fast non-linear least squares minimizer\n// Copyright 2022 Google Inc. All rights reserved.\n// http:/"
},
{
"path": "include/operon/ceres/jet_fwd.h",
"chars": 1994,
"preview": "// Ceres Solver - A fast non-linear least squares minimizer\n// Copyright 2022 Google Inc. All rights reserved.\n// http:/"
},
{
"path": "include/operon/ceres/jet_traits.h",
"chars": 7148,
"preview": "// Ceres Solver - A fast non-linear least squares minimizer\n// Copyright 2022 Google Inc. All rights reserved.\n// http:/"
},
{
"path": "include/operon/ceres/port.h",
"chars": 3682,
"preview": "// Ceres Solver - A fast non-linear least squares minimizer\n// Copyright 2022 Google Inc. All rights reserved.\n// http:/"
},
{
"path": "include/operon/ceres/tiny_solver.h",
"chars": 14311,
"preview": "// Ceres Solver - A fast non-linear least squares minimizer\n// Copyright 2021 Google Inc. All rights reserved.\n// http:/"
},
{
"path": "include/operon/collections/bitset.hpp",
"chars": 3274,
"preview": "#ifndef OPERON_BITSET_HPP\n#define OPERON_BITSET_HPP\n\n#include <bit>\n#include <cstddef>\n#include <cstdint>\n#include <util"
},
{
"path": "include/operon/collections/projection.hpp",
"chars": 3791,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_PROJECTION_"
},
{
"path": "include/operon/core/aligned_allocator.hpp",
"chars": 2068,
"preview": "#ifndef OPERON_ALIGNED_ALLOCATOR_HPP\n#define OPERON_ALIGNED_ALLOCATOR_HPP\n\n#include <cstddef>\n#include <limits>\n#include"
},
{
"path": "include/operon/core/buildinfo.hpp.in",
"chars": 913,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BUILDINFO_H"
},
{
"path": "include/operon/core/comparison.hpp",
"chars": 4230,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_COMPARISON_"
},
{
"path": "include/operon/core/concepts.hpp",
"chars": 280,
"preview": "#ifndef OPERON_CONCEPTS_HPP\n#define OPERON_CONCEPTS_HPP\n\n#include <concepts>\n#include <type_traits>\n\nnamespace Operon::C"
},
{
"path": "include/operon/core/constants.hpp",
"chars": 1900,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_CONSTANTS_H"
},
{
"path": "include/operon/core/contracts.hpp",
"chars": 323,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_CONTRACTS_H"
},
{
"path": "include/operon/core/dataset.hpp",
"chars": 5298,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef DATASET_H\n#define "
},
{
"path": "include/operon/core/dispatch.hpp",
"chars": 14867,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_EVAL_DETAIL"
},
{
"path": "include/operon/core/distance.hpp",
"chars": 549,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_DISTANCE_HP"
},
{
"path": "include/operon/core/individual.hpp",
"chars": 2943,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_INDIVIDUAL_"
},
{
"path": "include/operon/core/node.hpp",
"chars": 7261,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_CORE_NODE_H"
},
{
"path": "include/operon/core/operator.hpp",
"chars": 889,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_OPERATOR_HP"
},
{
"path": "include/operon/core/problem.hpp",
"chars": 4611,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef PROBLEM_HPP\n#defin"
},
{
"path": "include/operon/core/pset.hpp",
"chars": 8477,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_PSET_HPP\n#d"
},
{
"path": "include/operon/core/range.hpp",
"chars": 1430,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_RANGE_HPP\n#"
},
{
"path": "include/operon/core/subtree.hpp",
"chars": 4655,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_SUBTREE_HPP"
},
{
"path": "include/operon/core/symbol_library.hpp",
"chars": 11084,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_SYMBOL_LIBR"
},
{
"path": "include/operon/core/tree.hpp",
"chars": 4737,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef TREE_HPP\n#define T"
},
{
"path": "include/operon/core/types.hpp",
"chars": 3267,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_TYPES_HPP\n#"
},
{
"path": "include/operon/core/variable.hpp",
"chars": 598,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_VARIABLE_HP"
},
{
"path": "include/operon/core/version.hpp",
"chars": 359,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_VERSION_HPP"
},
{
"path": "include/operon/error_metrics/correlation_coefficient.hpp",
"chars": 3243,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_METRICS_COR"
},
{
"path": "include/operon/error_metrics/error_metrics.hpp",
"chars": 570,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_ERROR_METRI"
},
{
"path": "include/operon/error_metrics/mean_absolute_error.hpp",
"chars": 2491,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_METRICS_MEA"
},
{
"path": "include/operon/error_metrics/mean_squared_error.hpp",
"chars": 2424,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_METRICS_MEA"
},
{
"path": "include/operon/error_metrics/normalized_mean_squared_error.hpp",
"chars": 2404,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_METRICS_NOR"
},
{
"path": "include/operon/error_metrics/r2_score.hpp",
"chars": 2764,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_METRICS_R2_"
},
{
"path": "include/operon/error_metrics/root_mean_squared_error.hpp",
"chars": 1235,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_METRICS_ROO"
},
{
"path": "include/operon/error_metrics/sum_of_squared_errors.hpp",
"chars": 2445,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_METRICS_SUM"
},
{
"path": "include/operon/formatter/formatter.hpp",
"chars": 2019,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_FORMAT_HPP\n"
},
{
"path": "include/operon/hash/hash.hpp",
"chars": 741,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_HASH_HPP\n#d"
},
{
"path": "include/operon/hash/metrohash64.hpp",
"chars": 1767,
"preview": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: Copyright 2015-2018 J. Andrew Rogers\n\n#ifndef METROHAS"
},
{
"path": "include/operon/hash/zobrist.hpp",
"chars": 3050,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_HASH_ZOBRIS"
},
{
"path": "include/operon/interpreter/backend/arma/derivatives.hpp",
"chars": 9971,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_ARM"
},
{
"path": "include/operon/interpreter/backend/arma/functions.hpp",
"chars": 6966,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_ARM"
},
{
"path": "include/operon/interpreter/backend/arma.hpp",
"chars": 198,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_BACKEND_ARM"
},
{
"path": "include/operon/interpreter/backend/blaze/derivatives.hpp",
"chars": 10241,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_BLA"
},
{
"path": "include/operon/interpreter/backend/blaze/functions.hpp",
"chars": 7313,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_BLA"
},
{
"path": "include/operon/interpreter/backend/blaze.hpp",
"chars": 201,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_BACKEND_BLA"
},
{
"path": "include/operon/interpreter/backend/eigen/derivatives.hpp",
"chars": 10016,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_EIG"
},
{
"path": "include/operon/interpreter/backend/eigen/functions.hpp",
"chars": 7252,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_EIG"
},
{
"path": "include/operon/interpreter/backend/eigen.hpp",
"chars": 201,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_BACKEND_EIG"
},
{
"path": "include/operon/interpreter/backend/eve/derivatives.hpp",
"chars": 15764,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_EVE"
},
{
"path": "include/operon/interpreter/backend/eve/functions.hpp",
"chars": 10971,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_EVE"
},
{
"path": "include/operon/interpreter/backend/eve.hpp",
"chars": 195,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_BACKEND_EVE"
},
{
"path": "include/operon/interpreter/backend/fast_approx/derivatives.hpp",
"chars": 13451,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_FAS"
},
{
"path": "include/operon/interpreter/backend/fast_approx/functions.hpp",
"chars": 9194,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_fas"
},
{
"path": "include/operon/interpreter/backend/fast_approx/impl/aq.hpp",
"chars": 521,
"preview": "#ifndef OPERON_BACKEND_FAST_APPROX_AQ_HPP\n#define OPERON_BACKEND_FAST_APPROX_AQ_HPP\n\n#include \"operon/core/types.hpp\"\n#i"
},
{
"path": "include/operon/interpreter/backend/fast_approx/impl/exp.hpp",
"chars": 2381,
"preview": "#ifndef OPERON_BACKEND_FAST_APPROX_EXP_HPP\n#define OPERON_BACKEND_FAST_APPROX_EXP_HPP\n\n#include \"operon/core/types.hpp\"\n"
},
{
"path": "include/operon/interpreter/backend/fast_approx/impl/inv.hpp",
"chars": 2234,
"preview": "#ifndef OPERON_BACKEND_FAST_APPROX_INV_HPP\n#define OPERON_BACKEND_FAST_APPROX_INV_HPP\n\n#include \"operon/core/types.hpp\"\n"
},
{
"path": "include/operon/interpreter/backend/fast_approx/impl/log.hpp",
"chars": 1661,
"preview": "#ifndef OPERON_BACKEND_FAST_APPROX_LOG_HPP\n#define OPERON_BACKEND_FAST_APPROX_LOG_HPP\n\n#include \"operon/core/types.hpp\"\n"
},
{
"path": "include/operon/interpreter/backend/fast_approx/impl/pow.hpp",
"chars": 2386,
"preview": "#ifndef OPERON_BACKEND_FAST_APPROX_POW_HPP\n#define OPERON_BACKEND_FAST_APPROX_POW_HPP\n\n#include \"inv.hpp\"\n#include \"exp."
},
{
"path": "include/operon/interpreter/backend/fast_approx/impl/sqrt.hpp",
"chars": 1938,
"preview": "#ifndef OPERON_BACKEND_FAST_APPROX_SQRT_HPP\n#define OPERON_BACKEND_FAST_APPROX_SQRT_HPP\n\n#include \"operon/core/types.hpp"
},
{
"path": "include/operon/interpreter/backend/fast_approx/impl/tanh.hpp",
"chars": 1635,
"preview": "#ifndef OPERON_BACKEND_FAST_APPROX_TANH_HPP\n#define OPERON_BACKEND_FAST_APPROX_TANH_HPP\n\n#include \"operon/core/types.hpp"
},
{
"path": "include/operon/interpreter/backend/fast_approx/impl/trig.hpp",
"chars": 2173,
"preview": "#ifndef OPERON_BACKEND_FAST_APPROX_TRIG_HPP\n#define OPERON_BACKEND_FAST_APPROX_TRIG_HPP\n\n#include \"operon/core/types.hpp"
},
{
"path": "include/operon/interpreter/backend/fast_v1.hpp",
"chars": 255,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_BACKEND_FAS"
},
{
"path": "include/operon/interpreter/backend/fast_v2.hpp",
"chars": 255,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_BACKEND_FAS"
},
{
"path": "include/operon/interpreter/backend/fast_v3.hpp",
"chars": 255,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_BACKEND_FAS"
},
{
"path": "include/operon/interpreter/backend/fastor/derivatives.hpp",
"chars": 10556,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_FAS"
},
{
"path": "include/operon/interpreter/backend/fastor/functions.hpp",
"chars": 6585,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_FAS"
},
{
"path": "include/operon/interpreter/backend/fastor.hpp",
"chars": 204,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_BACKEND_FAS"
},
{
"path": "include/operon/interpreter/backend/plain/derivatives.hpp",
"chars": 13147,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_PLA"
},
{
"path": "include/operon/interpreter/backend/plain/functions.hpp",
"chars": 7029,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_PLA"
},
{
"path": "include/operon/interpreter/backend/plain.hpp",
"chars": 201,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_BACKEND_PLA"
},
{
"path": "include/operon/interpreter/backend/vdt/derivatives.hpp",
"chars": 13247,
"preview": "#ifndef OPERON_BACKEND_VDT_DERIVATIVES_HPP\n#define OPERON_BACKEND_VDT_DERIVATIVES_HPP\n\n#include \"functions.hpp\"\n\nnamespa"
},
{
"path": "include/operon/interpreter/backend/vdt/functions.hpp",
"chars": 14480,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_BACKEND_VDT"
},
{
"path": "include/operon/interpreter/backend/vdt.hpp",
"chars": 195,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_BACKEND_VDT"
},
{
"path": "include/operon/interpreter/derivatives.hpp",
"chars": 10145,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_INTERPRETER"
},
{
"path": "include/operon/interpreter/dual.hpp",
"chars": 429,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_AUTODIFF_FO"
},
{
"path": "include/operon/interpreter/functions.hpp",
"chars": 16022,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_INTERPRETER"
},
{
"path": "include/operon/interpreter/interpreter.hpp",
"chars": 13176,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_INTERPRETER"
},
{
"path": "include/operon/mdspan/mdspan.hpp",
"chars": 8091,
"preview": "#ifndef OPERON_MDSPAN_HPP\n#define OPERON_MDSPAN_HPP\n\n#define MDSPAN_IMPL_STANDARD_NAMESPACE std\n#define MDSPAN_IMPL_PROP"
},
{
"path": "include/operon/operators/creator.hpp",
"chars": 3932,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_CREATOR_HPP"
},
{
"path": "include/operon/operators/crossover.hpp",
"chars": 1912,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_CROSSOVER_H"
},
{
"path": "include/operon/operators/evaluator.hpp",
"chars": 26728,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_EVALUATOR_H"
},
{
"path": "include/operon/operators/generator.hpp",
"chars": 9757,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_GENERATOR_H"
},
{
"path": "include/operon/operators/initializer.hpp",
"chars": 3282,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_INITIALIZER"
},
{
"path": "include/operon/operators/local_search.hpp",
"chars": 867,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2024 Heal Research\n\n#ifndef OPERON_LOCAL_SEARC"
},
{
"path": "include/operon/operators/mutation.hpp",
"chars": 5448,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_MUTATION_HP"
},
{
"path": "include/operon/operators/non_dominated_sorter.hpp",
"chars": 3190,
"preview": "// SPDX-License-Identifier: MIT\n// SPDX-FileCopyrightText: Copyright 2019-2023 Heal Research\n\n#ifndef OPERON_OPERATORS_N"
}
]
// ... and 101 more files (download for full content)
About this extraction
This page contains the full source code of the heal-research/operon GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 301 files (19.6 MB), approximately 5.2M tokens, and a symbol index with 1731 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.