From 773b89aac9d15ece657ad078a525beacfb34ce7f Mon Sep 17 00:00:00 2001 From: Sepand Haghighi Date: Thu, 19 Jan 2023 12:09:33 +0330 Subject: [PATCH] Random mode modification (#175) * fix : OPERATORS_LIST updated * fix : random_equation_gen modified * fix : RANDOM_EQUATION_GEN_FOF_MAX_DEPTH added * fix : ELEMENTS_LIST updated * fix : random equation generator params added * fix : ARGUMENTS_LIST updated * doc : CHANGELOG updated * fix : autopep8 --- CHANGELOG.md | 5 +++++ samila/functions.py | 20 ++++++++++++-------- samila/params.py | 13 ++++++++++++- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac6ec30..861a4c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] ### Added - `python_version` attribute +- `RANDOM_EQUATION_MIN_COMPLEXITY` parameter +- `RANDOM_EQUATION_FOF_MAX_DEPTH` parameter +- `RANDOM_EQUATION_FOF_MIN_DEPTH` parameter ### Changed - `load_config` function modified +- Random mode modified +- `RANDOM_EQUATION_GEN_COMPLEXITY` parameter renamed to `RANDOM_EQUATION_MAX_COMPLEXITY` ## [1.0] - 2022-12-14 ### Added - `Marker` enum diff --git a/samila/functions.py b/samila/functions.py index 3afa6f1..5e74213 100644 --- a/samila/functions.py +++ b/samila/functions.py @@ -20,7 +20,8 @@ from .params import NO_FIG_ERROR_MESSAGE, FIG_SAVE_SUCCESS_MESSAGE, NFT_STORAGE_ from .params import INVALID_COLOR_TYPE_ERROR, COLOR_SIZE_ERROR from .params import BOTH_COLOR_COMPLEMENT_WARNING, COLOR_NOT_FOUND_WARNING from .params import DATA_SAVE_SUCCESS_MESSAGE, SEED_LOWER_BOUND, SEED_UPPER_BOUND -from .params import ELEMENTS_LIST, ARGUMENTS_LIST, OPERATORS_LIST, RANDOM_COEF_LIST, RANDOM_EQUATION_GEN_COMPLEXITY +from .params import ELEMENTS_LIST, ARGUMENTS_LIST, OPERATORS_LIST, RANDOM_COEF_LIST +from .params import RANDOM_EQUATION_MIN_COMPLEXITY, RANDOM_EQUATION_MAX_COMPLEXITY, RANDOM_EQUATION_FOF_MIN_DEPTH, RANDOM_EQUATION_FOF_MAX_DEPTH from .errors import samilaDataError, samilaPlotError, samilaConfigError from warnings import warn @@ -31,17 +32,20 @@ def random_equation_gen(): :return: equation as str """ - num_elements = random.randint(1, RANDOM_EQUATION_GEN_COMPLEXITY) + num_elements = random.randint( + RANDOM_EQUATION_MIN_COMPLEXITY, + RANDOM_EQUATION_MAX_COMPLEXITY) result = "" index = 1 random_coef = random.choice(RANDOM_COEF_LIST) while(index <= num_elements): - argument = random.choice(ARGUMENTS_LIST) - if random.randint(0, 1) == 1: - argument = random.choice(ELEMENTS_LIST).format( - random_coef, argument) - result = result + \ - random.choice(ELEMENTS_LIST).format(random_coef, argument) + element = random.choice(ARGUMENTS_LIST) + fof_depth = random.randint( + RANDOM_EQUATION_FOF_MIN_DEPTH, + RANDOM_EQUATION_FOF_MAX_DEPTH) + for _ in range(fof_depth): + element = random.choice(ELEMENTS_LIST).format(random_coef, element) + result = result + element if index < num_elements: result = result + random.choice(OPERATORS_LIST) index = index + 1 diff --git a/samila/params.py b/samila/params.py index 525dcbd..a988c2e 100644 --- a/samila/params.py +++ b/samila/params.py @@ -114,6 +114,7 @@ RANDOM_COEF_LIST = [ "random.lognormvariate(0,1)"] ELEMENTS_LIST = [ + "{0}*math.exp({1})", "{0}*math.atan({1})", "{0}*math.asinh({1})", "{0}*math.acosh(abs({1})+1)", @@ -125,6 +126,7 @@ ELEMENTS_LIST = [ "{0}*math.sin({1})", "{0}*math.tan({1})", "{0}*{1}", + "{0}/{1}", "{0}*abs({1})", "{0}*math.ceil({1})", "{0}*math.floor({1})"] @@ -133,6 +135,9 @@ ARGUMENTS_LIST = [ "x*y", "x", "y", + "1/x", + "1/y", + "x/y", "y-x", "x-y", "x+y", @@ -151,4 +156,10 @@ ARGUMENTS_LIST = [ OPERATORS_LIST = ["+", "-", "*", "/"] -RANDOM_EQUATION_GEN_COMPLEXITY = len(ELEMENTS_LIST) + 1 +RANDOM_EQUATION_MAX_COMPLEXITY = len(ELEMENTS_LIST) + 1 + +RANDOM_EQUATION_MIN_COMPLEXITY = 1 + +RANDOM_EQUATION_FOF_MAX_DEPTH = 3 + +RANDOM_EQUATION_FOF_MIN_DEPTH = 1