diff --git a/doc/rtd/_static/custom.css b/doc/rtd/_static/custom.css index 8b0e9e3af..d771bd2d9 100644 --- a/doc/rtd/_static/custom.css +++ b/doc/rtd/_static/custom.css @@ -24,4 +24,10 @@ .wy-nav-content { max-width: none; -} \ No newline at end of file +} + +@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap'); + +body, h1, h2, h3, h4, h5, h6 { + font-family: "Roboto", sans-serif; +} diff --git a/doc/rtd/conf.py b/doc/rtd/conf.py index e4fd9c7ef..9d65eeb0f 100644 --- a/doc/rtd/conf.py +++ b/doc/rtd/conf.py @@ -19,7 +19,7 @@ # -- Project information ----------------------------------------------------- project = "MLPro Documentations" -copyright = "2024 South Westphalia University of Applied Sciences, Germany" +copyright = "2025 South Westphalia University of Applied Sciences, Germany" author = "Detlef Arend, Steve Yuwono, Mochammad Rizky Diprasetya, Laxmikant Shrikant Baheti et al" # The full version, including alpha/beta/rc tags diff --git a/doc/rtd/content/00_start_page/images/api_reference.png b/doc/rtd/content/00_start_page/images/api_reference.png index aec8af9a5..dbdc1318d 100644 Binary files a/doc/rtd/content/00_start_page/images/api_reference.png and b/doc/rtd/content/00_start_page/images/api_reference.png differ diff --git a/doc/rtd/content/00_start_page/images/chatgpt.png b/doc/rtd/content/00_start_page/images/chatgpt.png new file mode 100644 index 000000000..0ce8abc40 Binary files /dev/null and b/doc/rtd/content/00_start_page/images/chatgpt.png differ diff --git a/doc/rtd/content/00_start_page/images/example_pool.png b/doc/rtd/content/00_start_page/images/example_pool.png index af8ed9ac4..a63a6a337 100644 Binary files a/doc/rtd/content/00_start_page/images/example_pool.png and b/doc/rtd/content/00_start_page/images/example_pool.png differ diff --git a/doc/rtd/content/00_start_page/images/extension_hub.png b/doc/rtd/content/00_start_page/images/extension_hub.png index b94e650e7..fa8a45367 100644 Binary files a/doc/rtd/content/00_start_page/images/extension_hub.png and b/doc/rtd/content/00_start_page/images/extension_hub.png differ diff --git a/doc/rtd/content/00_start_page/images/icons intro.drawio b/doc/rtd/content/00_start_page/images/icons intro.drawio new file mode 100644 index 000000000..dee3aa6ee --- /dev/null +++ b/doc/rtd/content/00_start_page/images/icons intro.drawio @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/00_start_page/images/mlpro_bf.png b/doc/rtd/content/00_start_page/images/mlpro_bf.png index 29071765a..160d90fd7 100644 Binary files a/doc/rtd/content/00_start_page/images/mlpro_bf.png and b/doc/rtd/content/00_start_page/images/mlpro_bf.png differ diff --git a/doc/rtd/content/00_start_page/images/mlpro_gt.png b/doc/rtd/content/00_start_page/images/mlpro_gt.png index 64ba3eee0..2028eab9d 100644 Binary files a/doc/rtd/content/00_start_page/images/mlpro_gt.png and b/doc/rtd/content/00_start_page/images/mlpro_gt.png differ diff --git a/doc/rtd/content/00_start_page/images/mlpro_oa.png b/doc/rtd/content/00_start_page/images/mlpro_oa.png index 207edb353..86c67c99c 100644 Binary files a/doc/rtd/content/00_start_page/images/mlpro_oa.png and b/doc/rtd/content/00_start_page/images/mlpro_oa.png differ diff --git a/doc/rtd/content/00_start_page/images/mlpro_rl.png b/doc/rtd/content/00_start_page/images/mlpro_rl.png index 6d6013e91..d939a7d55 100644 Binary files a/doc/rtd/content/00_start_page/images/mlpro_rl.png and b/doc/rtd/content/00_start_page/images/mlpro_rl.png differ diff --git a/doc/rtd/content/00_start_page/images/mlpro_sl.png b/doc/rtd/content/00_start_page/images/mlpro_sl.png index b801e1b90..e257a9f2b 100644 Binary files a/doc/rtd/content/00_start_page/images/mlpro_sl.png and b/doc/rtd/content/00_start_page/images/mlpro_sl.png differ diff --git a/doc/rtd/content/00_start_page/images/podcast.png b/doc/rtd/content/00_start_page/images/podcast.png new file mode 100644 index 000000000..91e5dbef8 Binary files /dev/null and b/doc/rtd/content/00_start_page/images/podcast.png differ diff --git a/doc/rtd/content/00_start_page/images/project_mlpro.png b/doc/rtd/content/00_start_page/images/project_mlpro.png index cb1f79141..eb2da8ce4 100644 Binary files a/doc/rtd/content/00_start_page/images/project_mlpro.png and b/doc/rtd/content/00_start_page/images/project_mlpro.png differ diff --git a/doc/rtd/content/00_start_page/images/researchgate.jpeg b/doc/rtd/content/00_start_page/images/researchgate.jpeg deleted file mode 100644 index 0cfcff22d..000000000 Binary files a/doc/rtd/content/00_start_page/images/researchgate.jpeg and /dev/null differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/.$icons intro.drawio.bkp b/doc/rtd/content/00_start_page/images/variants/v10/.$icons intro.drawio.bkp new file mode 100644 index 000000000..dee3aa6ee --- /dev/null +++ b/doc/rtd/content/00_start_page/images/variants/v10/.$icons intro.drawio.bkp @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/00_start_page/images/variants/v10/anaconda.png b/doc/rtd/content/00_start_page/images/variants/v10/anaconda.png new file mode 100644 index 000000000..95d3e4c6f Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/anaconda.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/api_reference.png b/doc/rtd/content/00_start_page/images/variants/v10/api_reference.png new file mode 100644 index 000000000..dbdc1318d Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/api_reference.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/chatgpt.png b/doc/rtd/content/00_start_page/images/variants/v10/chatgpt.png new file mode 100644 index 000000000..0ce8abc40 Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/chatgpt.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/example_pool.png b/doc/rtd/content/00_start_page/images/variants/v10/example_pool.png new file mode 100644 index 000000000..a63a6a337 Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/example_pool.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/extension_hub.png b/doc/rtd/content/00_start_page/images/variants/v10/extension_hub.png new file mode 100644 index 000000000..fa8a45367 Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/extension_hub.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/github.png b/doc/rtd/content/00_start_page/images/variants/v10/github.png new file mode 100644 index 000000000..402191e09 Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/github.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/icons intro.drawio b/doc/rtd/content/00_start_page/images/variants/v10/icons intro.drawio new file mode 100644 index 000000000..dee3aa6ee --- /dev/null +++ b/doc/rtd/content/00_start_page/images/variants/v10/icons intro.drawio @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/00_start_page/images/variants/v10/mlpro_bf.png b/doc/rtd/content/00_start_page/images/variants/v10/mlpro_bf.png new file mode 100644 index 000000000..160d90fd7 Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/mlpro_bf.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/mlpro_gt.png b/doc/rtd/content/00_start_page/images/variants/v10/mlpro_gt.png new file mode 100644 index 000000000..2028eab9d Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/mlpro_gt.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/mlpro_oa.png b/doc/rtd/content/00_start_page/images/variants/v10/mlpro_oa.png new file mode 100644 index 000000000..86c67c99c Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/mlpro_oa.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/mlpro_rl.png b/doc/rtd/content/00_start_page/images/variants/v10/mlpro_rl.png new file mode 100644 index 000000000..d939a7d55 Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/mlpro_rl.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/mlpro_sl.png b/doc/rtd/content/00_start_page/images/variants/v10/mlpro_sl.png new file mode 100644 index 000000000..e257a9f2b Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/mlpro_sl.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/podcast.png b/doc/rtd/content/00_start_page/images/variants/v10/podcast.png new file mode 100644 index 000000000..91e5dbef8 Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/podcast.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/project_mlpro.png b/doc/rtd/content/00_start_page/images/variants/v10/project_mlpro.png new file mode 100644 index 000000000..eb2da8ce4 Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/project_mlpro.png differ diff --git a/doc/rtd/content/00_start_page/images/variants/v10/pypi.svg b/doc/rtd/content/00_start_page/images/variants/v10/pypi.svg new file mode 100644 index 000000000..6508b5882 --- /dev/null +++ b/doc/rtd/content/00_start_page/images/variants/v10/pypi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/rtd/content/00_start_page/images/variants/v10/welcome.png b/doc/rtd/content/00_start_page/images/variants/v10/welcome.png new file mode 100755 index 000000000..77d26df7e Binary files /dev/null and b/doc/rtd/content/00_start_page/images/variants/v10/welcome.png differ diff --git a/doc/rtd/content/00_start_page/images/welcome.png b/doc/rtd/content/00_start_page/images/welcome.png index 4c6b155c5..77d26df7e 100755 Binary files a/doc/rtd/content/00_start_page/images/welcome.png and b/doc/rtd/content/00_start_page/images/welcome.png differ diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/main.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/main.rst index 61f716813..18cc6d7f7 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/main.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/main.rst @@ -2,9 +2,12 @@ MLPro-OA - Online Adaptivity ============================ -This framework addresses topics of online machine learning and is already implemented and ready to be used by early adopters. The -documentation is still in preparation but the API description is already done. Just browse through the menu structure and follow -the links provided... +This framework addresses the challenge of continuously adapting to changing conditions by processing new information in real time. Unlike traditional offline approaches, +which rely on predefined models trained on historical data, online-adaptive methods dynamically refine their behavior as new data becomes available. This enables +continuous learning, rapid adaptation to non-stationary environments, and increased robustness in uncertain or evolving scenarios. Such methods are essential in domains +requiring real-time decision-making and continuous model updates, including autonomous systems, predictive analytics, and self-optimizing processes. + +The following subfields are available in MLPro-OA: .. toctree:: :maxdepth: 2 diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_oa_stream_processing.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_oa_stream_processing.rst new file mode 100644 index 000000000..b296ed995 --- /dev/null +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_oa_stream_processing.rst @@ -0,0 +1,31 @@ +.. _target_oa_streams: +Online-adaptive data stream processing (OADSP) +============================================== + +This sub-framework of MLPro-OA is directly related to the research topic of online machine learning (OML). It deals with +online-adaptive stream tasks embedded in a stream workflow as part of an extended process model. This process model extends +the non-adaptive DSP process model of sub-framework MLPro-BF-Streams by advanced adaptation mechanisms like + + - Event-oriented adaptation + - Cascaded adaptation + - Reverse adaptation + +which are explained in more detail below. + +The description is still under contruction but parts of the sub-menu and first howtos and API specifications are already available. +Browse the menu and see Section 'Cross reference' for further details. + + +**Learn more** + +.. toctree:: + :maxdepth: 3 + :glob: + + streams/* + + +**Cross reference** + - :ref:`Howtos MPro-OA-Streams ` + - :ref:`API reference: MLPro-OA-Streams ` + - :ref:`Basics of data stream processing in MLPro ` \ No newline at end of file diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_overview.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_overview.rst deleted file mode 100644 index 5d5a4e930..000000000 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/01_overview.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. _target_oa_overview: -Overview -======== - -Further descriptions coming soon... \ No newline at end of file diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/02_getstarted.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/02_getstarted.rst deleted file mode 100644 index d164b5365..000000000 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/02_getstarted.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. _target_oa_getstarted: -Getting Started -=============== - -Further descriptions coming soon... - diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_stream_processing.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_stream_processing.rst deleted file mode 100644 index 28d62550d..000000000 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_stream_processing.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. _target_oa_streams: -Online Adaptive Stream Processing -================================= - -Description under contruction. Please consider the cross reference for first technical information. - - -**Learn more** - -.. toctree:: - :maxdepth: 3 - :glob: - - layer0_oa_stream_processing/* - - -**Cross Reference** - - :ref:`Howtos MPro-OA ` - - :ref:`API Reference: MLPro-OA ` - - :ref:`API Reference: MLPro-OA Pool of Objects ` - - :ref:`Basics of stream processing in MLPro ` \ No newline at end of file diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/04_oa_systems.rst.off b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_systems.rst.off similarity index 54% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/04_oa_systems.rst.off rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_systems.rst.off index 6deb29d73..3838ed72c 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/04_oa_systems.rst.off +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/03_oa_systems.rst.off @@ -1,6 +1,6 @@ .. _target_oa_systems: -Online Adaptive Systems -======================= +Online-adaptive state-based systems +=================================== Further descriptions coming soon... @@ -8,4 +8,4 @@ Further descriptions coming soon... :maxdepth: 2 :glob: - layer1_oa_systems/* \ No newline at end of file + systems/* \ No newline at end of file diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview.rst similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview.rst diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/01_oa_stream_task.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/01_oa_stream_task.rst similarity index 68% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/01_oa_stream_task.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/01_oa_stream_task.rst index 915658a36..b11b06036 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/01_oa_stream_task.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/01_oa_stream_task.rst @@ -1,5 +1,5 @@ .. _target_oa_stream_tasks: -Online Adaptive Stream Tasks +Online-adaptive stream tasks ============================ ... diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/02_oa_stream_workflow.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/02_oa_stream_workflow.rst similarity index 68% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/02_oa_stream_workflow.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/02_oa_stream_workflow.rst index 15e56a1bf..19deb36af 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/01_overview/02_oa_stream_workflow.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/01_overview/02_oa_stream_workflow.rst @@ -1,5 +1,5 @@ .. _target_oa_stream_workflows: -Online Adaptive Stream Workflows +Online-adaptive stream workflows ================================ diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing.rst new file mode 100644 index 000000000..9431ca969 --- /dev/null +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing.rst @@ -0,0 +1,21 @@ +.. _target_oa_stream_preprocessing: +Preprocessing +============= + +Further descriptions coming soon... + + +.. toctree:: + :maxdepth: 2 + :glob: + + 10_preprocessing/* + + + +**Cross Reference** + +- BF: Stream Processing +- Howto section +- API +- MLPro-Int-River diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/02_oa_boundary_detector.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing/10_boundary_detector.rst similarity index 87% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/02_oa_boundary_detector.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing/10_boundary_detector.rst index 301f3237c..a656d6d79 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/02_oa_boundary_detector.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing/10_boundary_detector.rst @@ -1,5 +1,5 @@ .. _target_oa_boundary_detector: -Boundary Detection +Boundary detection ================== Further descriptions coming soon... diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing/20_normalization.rst similarity index 69% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing/20_normalization.rst index 43a967297..8c2c678c2 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing/20_normalization.rst @@ -1,4 +1,4 @@ -.. _target_oa_normalizers: +.. _target_oa_streams_normalization: Normalization ============= @@ -11,4 +11,4 @@ Further descriptions coming soon... :maxdepth: 2 :glob: - 03_oa_normalization/* \ No newline at end of file + normalization/* \ No newline at end of file diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization/01_oa_minmax.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing/normalization/01_oa_minmax.rst similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization/01_oa_minmax.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing/normalization/01_oa_minmax.rst diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization/02_oa_zscaling.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing/normalization/02_oa_zscaling.rst similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/03_oa_normalization/02_oa_zscaling.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/10_preprocessing/normalization/02_oa_zscaling.rst diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/10_cluster_analysis.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_cluster_analysis.rst similarity index 72% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/10_cluster_analysis.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_cluster_analysis.rst index ec1059338..2861bf2f5 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/10_cluster_analysis.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_cluster_analysis.rst @@ -1,5 +1,5 @@ -.. _target_oa_cluster_analyzer: -Cluster Analysis +.. _target_oa_cluster_analysis: +Cluster analysis ================ Further descriptions coming soon... @@ -11,7 +11,7 @@ Further descriptions coming soon... :maxdepth: 2 :glob: - 10_cluster_analysis/* + 20_cluster_analysis/* **Cross Reference** diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/10_cluster_analysis/.gitkeep b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_cluster_analysis/.gitkeep similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/10_cluster_analysis/.gitkeep rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/20_cluster_analysis/.gitkeep diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_anomaly_detection.rst similarity index 96% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_anomaly_detection.rst index 8acdea62a..4864d0ebf 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_anomaly_detection.rst @@ -1,19 +1,19 @@ .. _target_oa_anomaly_detection: -Anomaly Detection +Anomaly detection ================= Anomaly detection involves identifying instances that are structurally or dimensionally similar to non-anomalous data but deviate significantly from the normal data distribution or pattern. In real-world problems, anomaly detection helps uncover unusual activities in banking and finance, abnormalities in medical test results, uncommon behavior or sensor readings of machines, defective products in manufacturing lines, or malicious activities in network traffic monitoring. Detecting and analyzing these instances or behaviors is crucial for taking immediate action, preventing future occurrences of undesirable events, and ensuring data quality. Moreover, anomaly detection plays a pivotal role in making unbiased and accurate decisions across various domains. Anomaly detection techniques can be broadly classified into two categories based on the under- lying principles and methodologies. The two categories are Statistical anomaly detectors and Machine Learning anomaly detectors. -**Types of Anomalies** +**Types of anomalies** There are three main types of anomalies- Point anomalies, Contextual anomalies and Collective anomalies. (a) Point Anomalies : Type I anomalies or point anomalies are individual data instances that are significantly different from the rest of the dataset. Also known as global anomalies, these do not fit the normal distribution or pattern of the dataset. (b) Contextual Anomalies : Type II anomalies or contextual anomalies are data instances that are anomalies only in a particular context or subset of the dataset. Also known as conditional anomalies, these are not necessarily anomalies in the context of the whole dataset but anomalous within a specific context or condition. (c) Group Anomalies : Type III anomalies or group anomalies or collective anomalies are anomalous data instances when taken as a group or subset of the dataset. They may or may not be anomalies when considered individually. Also known as group anomalies, these occur when there is a deviation or unexpected relationship or behaviour among a group of data instances from the normal distribution of data. -**Classification of Anomaly Detectors** +**Classification of anomaly detectors** Anomaly detection techniques can be broadly classified into two categories based on the under- lying principles and methodologies. The two categories are Statistical anomaly detectors and Machine Learning anomaly detectors. (a) Statistical Anomaly Detectors : Statistical anomaly detectors use statistical methods to find data point deviations from the normal distribution. Common algorithms for this category of anomaly detectors are Z-score, Kernel Density Estimate, and Gaussian Mixture Models (GMM). @@ -26,10 +26,10 @@ Anomaly detection techniques can be broadly classified into two categories based :maxdepth: 2 :glob: - 20_anomaly_detection/* + 30_anomaly_detection/* -**Cross Reference** +**Cross reference** - Selected open access papers - Howtos diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection/01_cbad.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_anomaly_detection/01_cbad.rst.off similarity index 90% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection/01_cbad.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_anomaly_detection/01_cbad.rst.off index df676878b..e8db463eb 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/20_anomaly_detection/01_cbad.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/30_anomaly_detection/01_cbad.rst.off @@ -1,5 +1,5 @@ .. _target_oa_cbad: -Cluster-based Anomaly Detection +Cluster-based anomaly detection =============================== Cluster-based anomaly detection uses clustering algorithms to form clustered data and identify anomolous behaviours of these clusters, which are flagged as anomalies. @@ -18,7 +18,8 @@ Can uncover contextual anomalies (data points that are anomalous in one cluster Can identify global anomalies (points far from all clusters) and local anomalies (outliers within a cluster). Scalability with various clustering algorithms, such as k-means for simpler scenarios or DBSCAN for non-spherical and dense data distributions. -**New Types of Anomalies** + +**New types of anomalies** Cluster-based methods introduce nuanced anomaly categorizations: @@ -28,9 +29,10 @@ Scalability with various clustering algorithms, such as k-means for simpler scen (c) Cluster Structural Anomalies: Unusual clusters themselves, such as unexpected densities, shapes, or sizes, signaling broader irregularities. -**Special Dependencies on Cluster Algorithms** - Cluster-based anomaly detection heavily depends on the choice of clustering algorithm, as it directly impacts the detection process: +**Special dependencies on cluster algorithms** + +Cluster-based anomaly detection heavily depends on the choice of clustering algorithm, as it directly impacts the detection process: k-means: Effective for spherical clusters but may miss anomalies in datasets with non-convex shapes or varying densities. DBSCAN: Ideal for discovering density-based anomalies but sensitive to hyperparameter tuning (e.g., minPts, ε). @@ -39,7 +41,8 @@ Gaussian Mixture Models (GMM): Handles soft clustering and detects probabilistic Spectral Clustering: Good for identifying anomalies in non-linear manifolds but computationally intensive for large datasets. Effective anomaly detection requires understanding the clustering algorithm’s limitations and ensuring it aligns with the data characteristics and problem context. -**Cross Reference** + +**Cross reference** - Howtos - API diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/30_anomaly_prediction.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/31_anomaly_prediction.rst.off similarity index 76% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/30_anomaly_prediction.rst rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/31_anomaly_prediction.rst.off index 273e957f2..d5cc86c18 100644 --- a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/30_anomaly_prediction.rst +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/31_anomaly_prediction.rst.off @@ -1,5 +1,5 @@ .. _target_oa_anomaly_prediction: -Anomaly Prediction +Anomaly prediction ================== Further descriptions coming soon... @@ -11,10 +11,10 @@ Further descriptions coming soon... :maxdepth: 2 :glob: - 20_anomaly_prediction/* + 31_anomaly_prediction/* -**Cross Reference** +**Cross reference** - Selected open access papers - Howtos diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/30_anomaly_prediction/.gitkeep b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/31_anomaly_prediction/.gitkeep similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer0_oa_stream_processing/30_anomaly_prediction/.gitkeep rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/31_anomaly_prediction/.gitkeep diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/40_drift_detection.rst b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/40_drift_detection.rst new file mode 100644 index 000000000..002563bdd --- /dev/null +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/40_drift_detection.rst @@ -0,0 +1,21 @@ +.. _target_oa_drift_detection: +Drift detection +=============== + +Further descriptions coming soon... + + +**Learn more** + +.. toctree:: + :maxdepth: 2 + :glob: + + 40_drift_detection/* + + +**Cross reference** + +- Selected open access papers +- Howtos +- API diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/40_drift_detection/01_cbdd.rst.off b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/40_drift_detection/01_cbdd.rst.off new file mode 100644 index 000000000..81e8efda7 --- /dev/null +++ b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/streams/40_drift_detection/01_cbdd.rst.off @@ -0,0 +1,21 @@ +.. _target_oa_cbdd: +Cluster-based drift detection +============================= + +Further descriptions coming soon... + + +**New types of drift** + +... + + +**Special dependencies on cluster algorithms** + +... + + +**Cross reference** + +- Howtos +- API diff --git a/doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer1_oa_systems/.gitkeep b/doc/rtd/content/03_machine_learning/mlpro_oa/sub/systems/.gitkeep similarity index 100% rename from doc/rtd/content/03_machine_learning/mlpro_oa/sub/layer1_oa_systems/.gitkeep rename to doc/rtd/content/03_machine_learning/mlpro_oa/sub/systems/.gitkeep diff --git a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/01_streams.rst b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/01_streams.rst index ec0513982..741c03a73 100644 --- a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/01_streams.rst +++ b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/01_streams.rst @@ -1,8 +1,9 @@ -Online Adaptive Stream Processing -================================= +.. _target_appendix1_OA_streams: +Online-adaptive data stream processing +====================================== .. toctree:: :maxdepth: 1 :glob: - oa_dsp/* + streams/* diff --git a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_009.rst b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_009.rst deleted file mode 100644 index fd5588ec5..000000000 --- a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_009.rst +++ /dev/null @@ -1,26 +0,0 @@ -.. _Howto_OA_PP_009: -Howto OA-PP-009: Complex Preprocessing with Parallel Tasks -========================================================== - - -**Executable code** - -.. literalinclude:: ../../../../../../../../test/howtos/oa/howto_oa_pp_009_complex_preprocessing.py - :language: python - - - -**Results** - -After starting the Howto, the Workflow and Tasks windows appear. These can now be arranged on -the screen before the actual processing is started with a keystroke... - -.. image:: - images/howto_oa_pp_009.gif - :width: 700px - - - -**Cross Reference** - -- :ref:`API Reference - Online Adaptive Stream Processing ` diff --git a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_121.rst b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_121.rst new file mode 100644 index 000000000..07617824d --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/howto_oa_pp_121.rst @@ -0,0 +1,26 @@ +.. _Howto_OA_PP_121: +Howto OA-PP-121: Complex preprocessing with parallel tasks +========================================================== + + +**Executable code** + +.. literalinclude:: ../../../../../../../../test/howtos/oa/streams/hybrid/howto_oa_streams_pp_121_complex_preprocessing.py + :language: python + + + +**Results** + +After starting the Howto, the Workflow and Tasks windows appear. These can now be arranged on +the screen before the actual processing is started with a keystroke... + +.. image:: + images/howto_oa_pp_121.gif + :width: 700px + + + +**Cross reference** + +- :ref:`API Reference - Online-adaptive data stream processing ` diff --git a/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/images/howto_oa_pp_009.gif b/doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/images/howto_oa_pp_121.gif similarity index 100% rename from doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/images/howto_oa_pp_009.gif rename to doc/rtd/content/99_appendices/appendix1/sub/mlpro_oa/streams/images/howto_oa_pp_121.gif diff --git a/doc/rtd/content/99_appendices/appendix2/sub/01_core.rst b/doc/rtd/content/99_appendices/appendix2/sub/01_core.rst deleted file mode 100644 index 14becf59f..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/01_core.rst +++ /dev/null @@ -1,10 +0,0 @@ -Core Functions -============== - -.. toctree:: - :maxdepth: 2 - :glob: - - core/* - - diff --git a/doc/rtd/content/99_appendices/appendix2/sub/02_pool.rst b/doc/rtd/content/99_appendices/appendix2/sub/02_pool.rst deleted file mode 100644 index 48d9f356f..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/02_pool.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. _target_pool_objects: -Pool Objects -============ - - -.. toctree:: - :maxdepth: 2 - :glob: - - pool/* diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/10_mlpro.bf.rst b/doc/rtd/content/99_appendices/appendix2/sub/10_mlpro.bf.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/10_mlpro.bf.rst rename to doc/rtd/content/99_appendices/appendix2/sub/10_mlpro.bf.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/20_mlpro.sl.rst b/doc/rtd/content/99_appendices/appendix2/sub/20_mlpro.sl.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/20_mlpro.sl.rst rename to doc/rtd/content/99_appendices/appendix2/sub/20_mlpro.sl.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/30_mlpro.oa.rst b/doc/rtd/content/99_appendices/appendix2/sub/30_mlpro.oa.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/30_mlpro.oa.rst rename to doc/rtd/content/99_appendices/appendix2/sub/30_mlpro.oa.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/40_mlpro.rl.rst b/doc/rtd/content/99_appendices/appendix2/sub/40_mlpro.rl.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/40_mlpro.rl.rst rename to doc/rtd/content/99_appendices/appendix2/sub/40_mlpro.rl.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/50_mlpro.gt.rst b/doc/rtd/content/99_appendices/appendix2/sub/50_mlpro.gt.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/50_mlpro.gt.rst rename to doc/rtd/content/99_appendices/appendix2/sub/50_mlpro.gt.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/03_wrappers.rst b/doc/rtd/content/99_appendices/appendix2/sub/99_wrappers.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/03_wrappers.rst rename to doc/rtd/content/99_appendices/appendix2/sub/99_wrappers.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/01_streams.rst b/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/01_streams.rst deleted file mode 100644 index 0feed5d49..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/01_streams.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. _target_api_oa_streams: -OA Stream Processing -==================== - -.. image:: streams/images/MLPro-OA-Stream-Processing_class_diagram.drawio.png - :scale: 50% - -.. automodule:: mlpro.oa.streams.basics - :members: - :undoc-members: - :private-members: - :show-inheritance: \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/images/bf/MLPro-BF-Systems-AdaptiveSystems_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/images/bf/MLPro-BF-Systems-AdaptiveSystems_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/images/bf/MLPro-BF-Systems-AdaptiveSystems_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/images/bf/MLPro-BF-Systems-AdaptiveSystems_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/images/rl/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/images/rl/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/images/rl/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/images/rl/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/01_layer0_elementary.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/10_layer0_elementary.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/01_layer0_elementary.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/10_layer0_elementary.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/02_layer1_computation.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/20_layer1_computation.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/02_layer1_computation.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/20_layer1_computation.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/03_layer2_mathematics.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/30_layer2_mathematics.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/03_layer2_mathematics.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/30_layer2_mathematics.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/04_layer3_application_support.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/40_layer3_application_support.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/04_layer3_application_support.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/40_layer3_application_support.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/05_layer4_machine_learning.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/50_layer4_machine_learning.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/05_layer4_machine_learning.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/50_layer4_machine_learning.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/10_mlpro.bf.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/90_pool_objects.rst similarity index 50% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/10_mlpro.bf.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/90_pool_objects.rst index 85983008a..62a064749 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/10_mlpro.bf.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/90_pool_objects.rst @@ -1,9 +1,9 @@ .. _target_api_pool_bf: -MLPro-BF - Basic Functions -========================== +Pool objects +============ .. toctree:: :maxdepth: 3 :glob: - mlpro_bf/* \ No newline at end of file + pool/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/01_various.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/01_various.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/01_various.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/01_various.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/02_data_management.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/02_data_management.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/02_data_management.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/02_data_management.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/03_plot.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/03_plot.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/03_plot.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/03_plot.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/04_exceptions.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/04_exceptions.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/04_exceptions.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/04_exceptions.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/05_ui_sciui_main.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/05_ui_sciui_main.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/05_ui_sciui_main.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/05_ui_sciui_main.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/06_ui_sciui_framework.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/06_ui_sciui_framework.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/06_ui_sciui_framework.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/06_ui_sciui_framework.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Data_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Data_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Data_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Data_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Data_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Data_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Data_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Data_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Plot_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Plot_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Plot_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Plot_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Plot_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Plot_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Plot_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Plot_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Various_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Various_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Various_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Various_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Various_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Various_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-BF-Various_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-BF-Various_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-SciUI-IIS_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-SciUI-IIS_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-SciUI-IIS_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-SciUI-IIS_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-SciUI-IIS_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-SciUI-IIS_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-SciUI-IIS_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-SciUI-IIS_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-SciUI_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-SciUI_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-SciUI_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-SciUI_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-SciUI_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-SciUI_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer0_elementary/images/MLPro-SciUI_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer0_elementary/images/MLPro-SciUI_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/01_event_handling.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/01_event_handling.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/01_event_handling.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/01_event_handling.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/02_multitasking.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/02_multitasking.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/02_multitasking.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/02_multitasking.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/03_ops.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/03_ops.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/03_ops.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/03_ops.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/.$MLPro-BF-MT_class_diagram.drawio.bkp b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/.$MLPro-BF-MT_class_diagram.drawio.bkp similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/.$MLPro-BF-MT_class_diagram.drawio.bkp rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/.$MLPro-BF-MT_class_diagram.drawio.bkp diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-Events_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-Events_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-Events_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-Events_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-Events_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-Events_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-Events_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-Events_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-MT_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-MT_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-MT_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-MT_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-MT_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-MT_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-MT_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-MT_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-OPS_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-OPS_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-OPS_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-OPS_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-OPS_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-OPS_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer1_computation/images/MLPro-BF-OPS_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer1_computation/images/MLPro-BF-OPS_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/01_basics.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/01_basics.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/01_basics.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/01_basics.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/02_normalizers.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/02_normalizers.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/02_normalizers.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/02_normalizers.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/03_geometry.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/03_geometry.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/03_geometry.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/03_geometry.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Geometry_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Geometry_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Geometry_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Geometry_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Geometry_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Geometry_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Geometry_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Geometry_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Normalizers_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Normalizers_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Normalizers_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Normalizers_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Normalizers_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Normalizers_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Normalizers_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math-Normalizers_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer2_mathematics/images/MLPro-BF-Math_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/01_streams.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/01_streams.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/01_streams.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/01_streams.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/02_pyhsics.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/02_pyhsics.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/02_pyhsics.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/02_pyhsics.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/03_physics_unitconverter.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/03_physics_unitconverter.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/03_physics_unitconverter.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/03_physics_unitconverter.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/04_systems.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/04_systems.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/04_systems.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/04_systems.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/.$MLPro-BF-Streams_class_diagram.drawio.bkp b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/.$MLPro-BF-Streams_class_diagram.drawio.bkp similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/.$MLPro-BF-Streams_class_diagram.drawio.bkp rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/.$MLPro-BF-Streams_class_diagram.drawio.bkp diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-MultiSystems_class_diagram-Page-1.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-MultiSystems_class_diagram-Page-1.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-MultiSystems_class_diagram-Page-1.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-MultiSystems_class_diagram-Page-1.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-MultiSystems_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-MultiSystems_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-MultiSystems_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-MultiSystems_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics-UnitConverter_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics-UnitConverter_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics-UnitConverter_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics-UnitConverter_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics-UnitConverter_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics-UnitConverter_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics-UnitConverter_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics-UnitConverter_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Physics_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Streams_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Streams_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Streams_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Streams_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Streams_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Streams_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Streams_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Streams_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Systems_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Systems_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Systems_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Systems_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Systems_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Systems_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer3_application_support/images/MLPro-BF-Systems_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer3_application_support/images/MLPro-BF-Systems_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/01_basics.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/01_basics.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/01_basics.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/01_basics.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/02_adaptive_systems.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/02_adaptive_systems.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/02_adaptive_systems.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/02_adaptive_systems.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML-Systems_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML-Systems_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML-Systems_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML-Systems_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML-Systems_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML-Systems_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML-Systems_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML-Systems_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/layer4_machine_learning/images/MLPro-BF-ML_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/01_bf_streams.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/01_bf_streams.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/01_bf_streams.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/01_bf_streams.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/02_bf_systems.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/02_bf_systems.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/02_bf_systems.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/02_bf_systems.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/01_streams.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/01_streams.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/01_streams.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/01_streams.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/02_tasks.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/02_tasks.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/02_tasks.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/02_tasks.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/03_samplers.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/03_samplers.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/03_samplers.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/03_samplers.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/samplers/min_wise.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/samplers/min_wise.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/samplers/min_wise.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/samplers/min_wise.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/samplers/random.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/samplers/random.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/samplers/random.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/samplers/random.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/samplers/reservoir.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/samplers/reservoir.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/samplers/reservoir.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/samplers/reservoir.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/samplers/weighted_random.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/samplers/weighted_random.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/samplers/weighted_random.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/samplers/weighted_random.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/streams/001_csv_file.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/streams/001_csv_file.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/streams/001_csv_file.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/streams/001_csv_file.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/streams/002_rnd10d.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/streams/002_rnd10d.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/streams/002_rnd10d.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/streams/002_rnd10d.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/streams/003_doublespiral2d.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/streams/003_doublespiral2d.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/streams/003_doublespiral2d.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/streams/003_doublespiral2d.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/streams/004_point_outliers.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/streams/004_point_outliers.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/streams/004_point_outliers.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/streams/004_point_outliers.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/streams/005_clouds.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/streams/005_clouds.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/streams/005_clouds.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/streams/005_clouds.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/deriver.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/deriver.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/deriver.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/deriver.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Deriver_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Deriver_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Deriver_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Deriver_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Deriver_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Deriver_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Deriver_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Deriver_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Rearranger_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Rearranger_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Rearranger_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Rearranger_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Rearranger_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Rearranger_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Rearranger_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Rearranger_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Window_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Window_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Window_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Window_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Window_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Window_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Window_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/images/MLPro-BF-Streams-Tasks-Window_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/rearranger.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/rearranger.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/rearranger.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/rearranger.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/windows.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/windows.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_streams/tasks/windows.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_streams/tasks/windows.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_systems/01_double_pendulum_native_system.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_systems/01_double_pendulum_native_system.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_systems/01_double_pendulum_native_system.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_systems/01_double_pendulum_native_system.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_systems/images/MLPro-BF-MultiSystems_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_systems/images/MLPro-BF-MultiSystems_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_systems/images/MLPro-BF-MultiSystems_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_systems/images/MLPro-BF-MultiSystems_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_systems/images/MLPro-BF-Systems-NativeDoublePendulumSystem_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_systems/images/MLPro-BF-Systems-NativeDoublePendulumSystem_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_systems/images/MLPro-BF-Systems-NativeDoublePendulumSystem_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_systems/images/MLPro-BF-Systems-NativeDoublePendulumSystem_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_systems/images/MLPro-BF-Systems-NativeDoublePendulumSystem_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_systems/images/MLPro-BF-Systems-NativeDoublePendulumSystem_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_bf/bf_systems/images/MLPro-BF-Systems-NativeDoublePendulumSystem_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_bf/pool/bf_systems/images/MLPro-BF-Systems-NativeDoublePendulumSystem_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/01_dg.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/10_dg.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/01_dg.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/10_dg.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/02_native.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/20_native.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/02_native.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/20_native.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/50_mlpro.gt.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/90_pool_objects.rst similarity index 53% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/50_mlpro.gt.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/90_pool_objects.rst index 6e5317380..3a1ba7aed 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/50_mlpro.gt.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/90_pool_objects.rst @@ -1,10 +1,10 @@ .. _target_api_pool_gt: -MLPro-GT - Game Theory -====================== +Pool objects +============ .. toctree:: :maxdepth: 3 :glob: - mlpro_gt/* + pool/* diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/images/MLPro-GT-Native_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/images/MLPro-GT-Native_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/images/MLPro-GT-Native_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/images/MLPro-GT-Native_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/images/MLPro-GT-Native_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/images/MLPro-GT-Native_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/images/MLPro-GT-Native_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/images/MLPro-GT-Native_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/images/MLPro-GT_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/images/MLPro-GT_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/images/MLPro-GT_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/images/MLPro-GT_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/images/MLPro-GT_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/images/MLPro-GT_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_gt/images/MLPro-GT_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/images/MLPro-GT_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/01_dg.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/01_dg.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/01_dg.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/01_dg.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/02_native.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/02_native.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/02_native.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/02_native.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/dg/01_games.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/dg/01_games.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/dg/01_games.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/dg/01_games.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/dg/game_boards/bglp.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/dg/game_boards/bglp.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/dg/game_boards/bglp.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/dg/game_boards/bglp.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/dg/game_boards/multi_cartpole.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/dg/game_boards/multi_cartpole.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/dg/game_boards/multi_cartpole.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/dg/game_boards/multi_cartpole.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/01_games.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/01_games.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/01_games.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/01_games.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/02_solvers.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/02_solvers.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/02_solvers.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/02_solvers.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/games/prisonersdilemma_2p.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/games/prisonersdilemma_2p.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/games/prisonersdilemma_2p.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/games/prisonersdilemma_2p.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/games/prisonersdilemma_3p.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/games/prisonersdilemma_3p.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/games/prisonersdilemma_3p.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/games/prisonersdilemma_3p.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/games/rockpaperscissors.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/games/rockpaperscissors.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/games/rockpaperscissors.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/games/rockpaperscissors.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/games/routingproblems_3p.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/games/routingproblems_3p.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/games/routingproblems_3p.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/games/routingproblems_3p.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/games/supplydemand_3p.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/games/supplydemand_3p.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/games/supplydemand_3p.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/games/supplydemand_3p.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/solvers/greedypolicy.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/solvers/greedypolicy.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/solvers/greedypolicy.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/solvers/greedypolicy.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/solvers/randomsolver.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/solvers/randomsolver.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_gt/native/solvers/randomsolver.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_gt/pool/native/solvers/randomsolver.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/01_streams.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/01_streams.rst new file mode 100644 index 000000000..334dc24f5 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/01_streams.rst @@ -0,0 +1,14 @@ +.. _target_api_oa_streams: +Online-adaptive data stream processing +====================================== + +.. toctree:: + :maxdepth: 2 + :glob: + + streams/00_basics/* + streams/10_preprocessing/* + streams/20_cluster_analysis/* + streams/30_anomaly_detection/* + streams/31_anomaly_prediction/* + streams/40_drift_detection/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/02_systems.rst.off b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/02_systems.rst.off new file mode 100644 index 000000000..53516997f --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/02_systems.rst.off @@ -0,0 +1,9 @@ +.. _target_api_oa_systems: +Online-adaptive state-based systems +=================================== + +.. toctree:: + :maxdepth: 2 + :glob: + + systems/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/00_basics/01_basics.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/00_basics/01_basics.rst new file mode 100644 index 000000000..a64ffdce5 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/00_basics/01_basics.rst @@ -0,0 +1,12 @@ +.. _target_api_oa_streams_basics: +Basics +====== + +.. image:: images/MLPro-OA-Stream-Processing_class_diagram.drawio.png + :scale: 50% + +.. automodule:: mlpro.oa.streams.basics + :members: + :undoc-members: + :private-members: + :show-inheritance: \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/streams/images/MLPro-OA-Stream-Processing_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/00_basics/images/MLPro-OA-Stream-Processing_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/streams/images/MLPro-OA-Stream-Processing_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/00_basics/images/MLPro-OA-Stream-Processing_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/streams/images/MLPro-OA-Stream-Processing_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/00_basics/images/MLPro-OA-Stream-Processing_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/streams/images/MLPro-OA-Stream-Processing_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/00_basics/images/MLPro-OA-Stream-Processing_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/01_preprocessing_tasks.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/10_preprocessing/10_preprocessing_tasks.rst similarity index 90% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/01_preprocessing_tasks.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/10_preprocessing/10_preprocessing_tasks.rst index 959b5f3c1..8638031f1 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/01_preprocessing_tasks.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/10_preprocessing/10_preprocessing_tasks.rst @@ -1,12 +1,12 @@ .. _target_api_oa_stream_tasks_prepro: -OA Data Preprocessing -===================== +Preprocessing +============= .. image:: images/MLPro-OA-Preprocessing-Tasks_class_diagram.drawio.png :scale: 50% -Boundary Detector +Boundary detector ----------------- .. automodule:: mlpro.oa.streams.tasks.boundarydetectors diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Preprocessing-Tasks_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/10_preprocessing/images/MLPro-OA-Preprocessing-Tasks_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Preprocessing-Tasks_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/10_preprocessing/images/MLPro-OA-Preprocessing-Tasks_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Preprocessing-Tasks_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/10_preprocessing/images/MLPro-OA-Preprocessing-Tasks_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Preprocessing-Tasks_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/10_preprocessing/images/MLPro-OA-Preprocessing-Tasks_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/02_cluster_analyzers.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/20_cluster_analysis/10_cluster_analysis.rst similarity index 93% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/02_cluster_analyzers.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/20_cluster_analysis/10_cluster_analysis.rst index 13c65ec5e..7a5a73b58 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/02_cluster_analyzers.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/20_cluster_analysis/10_cluster_analysis.rst @@ -1,12 +1,12 @@ .. _target_api_oa_stream_tasks_clu: -Cluster Analysis +Cluster analyzer ================ .. image:: images/MLPro-OA-Cluster_Analyzers_class_diagram.drawio.png :scale: 50% -Template for Cluster Algorithms +Template for cluster algorithms ------------------------------- .. automodule:: mlpro.oa.streams.tasks.clusteranalyzers.basics diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Cluster_Analyzers_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/20_cluster_analysis/images/MLPro-OA-Cluster_Analyzers_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Cluster_Analyzers_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/20_cluster_analysis/images/MLPro-OA-Cluster_Analyzers_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Cluster_Analyzers_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/20_cluster_analysis/images/MLPro-OA-Cluster_Analyzers_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Cluster_Analyzers_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/20_cluster_analysis/images/MLPro-OA-Cluster_Analyzers_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/10_common_anomalies.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/10_common_anomalies.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/10_common_anomalies.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/10_common_anomalies.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/20_common_algorithms.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/20_common_algorithms.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/20_common_algorithms.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/20_common_algorithms.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/03_anomaly_detectors.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/30_anomaly_detectors.rst similarity index 85% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/03_anomaly_detectors.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/30_anomaly_detectors.rst index bd4d77d36..72e54e2ef 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/03_anomaly_detectors.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/30_anomaly_detectors.rst @@ -1,8 +1,8 @@ .. _target_api_oa_stream_tasks_ad: -Anomaly Detectors +Anomaly detection ================= -.. image:: anomaly_detectors/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio.png +.. image:: images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio.png :scale: 50% diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/30_cluster_based.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/30_cluster_based.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/30_cluster_based.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/30_cluster_based.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/10_cb_anomalies.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/10_cb_anomalies.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/10_cb_anomalies.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/10_cb_anomalies.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/20_cb_algorithms.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/20_cb_algorithms.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/20_cb_algorithms.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/20_cb_algorithms.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/01_basics.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/01_basics.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/01_basics.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/01_basics.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/02_new.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/02_new.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/02_new.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/02_new.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/03_disapperance.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/03_disapperance.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/03_disapperance.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/03_disapperance.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/04_drift.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/04_drift.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/04_drift.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/04_drift.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/05_size.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/05_size.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/05_size.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/05_size.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/06_size geo.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/06_size geo.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/06_size geo.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/06_size geo.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/07_density.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/07_density.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/algorithms/07_density.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/algorithms/07_density.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/01_basics.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/01_basics.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/01_basics.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/01_basics.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/02_new.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/02_new.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/02_new.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/02_new.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/03_disapperance.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/03_disapperance.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/03_disapperance.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/03_disapperance.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/04_drift.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/04_drift.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/04_drift.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/04_drift.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/05_enlargement.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/05_enlargement.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/05_enlargement.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/05_enlargement.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/06_shrinkage.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/06_shrinkage.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/06_shrinkage.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/06_shrinkage.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/07_size_variation.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/07_size_variation.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/anomalies/07_size_variation.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/anomalies/07_size_variation.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/images/MLPro-OA-CB-Anomaly-Detectors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/images/MLPro-OA-CB-Anomaly-Detectors_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/images/MLPro-OA-CB-Anomaly-Detectors_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/images/MLPro-OA-CB-Anomaly-Detectors_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/images/MLPro-OA-CB-Anomaly-Detectors_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/images/MLPro-OA-CB-Anomaly-Detectors_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/cluster_based/images/MLPro-OA-CB-Anomaly-Detectors_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/cluster_based/images/MLPro-OA-CB-Anomaly-Detectors_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/common_algorithms/01_paga_algorithm.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/common_algorithms/01_paga_algorithm.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/common_algorithms/01_paga_algorithm.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/common_algorithms/01_paga_algorithm.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/common_anomalies/01_point.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/common_anomalies/01_point.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/common_anomalies/01_point.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/common_anomalies/01_point.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/common_anomalies/02_group.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/common_anomalies/02_group.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/common_anomalies/02_group.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/common_anomalies/02_group.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/common_anomalies/03_drift.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/common_anomalies/03_drift.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/common_anomalies/03_drift.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/common_anomalies/03_drift.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/common_anomalies/04_contextual.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/common_anomalies/04_contextual.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/common_anomalies/04_contextual.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/common_anomalies/04_contextual.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/images/.$MLPro-OA-Anomaly-Detectors_class_diagram.drawio.bkp b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/images/.$MLPro-OA-Anomaly-Detectors_class_diagram.drawio.bkp new file mode 100644 index 000000000..b89e82e3d --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/images/.$MLPro-OA-Anomaly-Detectors_class_diagram.drawio.bkp @@ -0,0 +1,349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio new file mode 100644 index 000000000..c01e69720 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio.png new file mode 100644 index 000000000..564cb3af5 Binary files /dev/null and b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio.png differ diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/instance_based/images/MLPro-OA-Anomaly-Detectors-IB_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/instance_based/images/MLPro-OA-Anomaly-Detectors-IB_class_diagram.drawio new file mode 100644 index 000000000..b89e82e3d --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/30_anomaly_detection/instance_based/images/MLPro-OA-Anomaly-Detectors-IB_class_diagram.drawio @@ -0,0 +1,349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/04_anomaly_predictors.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/31_anomaly_prediction/10_anomaly_predictors.rst.off similarity index 78% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/04_anomaly_predictors.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/31_anomaly_prediction/10_anomaly_predictors.rst.off index d4c847a1a..0ce038b8b 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/04_anomaly_predictors.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/31_anomaly_prediction/10_anomaly_predictors.rst.off @@ -1,5 +1,5 @@ .. _target_api_oa_stream_tasks_ap: -Anomaly Predictors +Anomaly predictors ================== In progress... diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_predictors/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/31_anomaly_prediction/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_predictors/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/31_anomaly_prediction/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_predictors/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/31_anomaly_prediction/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_predictors/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/31_anomaly_prediction/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/10_common_drifts.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/10_common_drifts.rst new file mode 100644 index 000000000..dcb3085f4 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/10_common_drifts.rst @@ -0,0 +1,10 @@ +.. _target_api_oa_stream_tasks_ad_common_drifts: +Common drifts +============= + + +.. toctree:: + :maxdepth: 2 + :glob: + + common_drifts/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/20_common_algorithms.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/20_common_algorithms.rst new file mode 100644 index 000000000..ae5e1efb6 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/20_common_algorithms.rst @@ -0,0 +1,10 @@ +.. _target_api_oa_stream_tasks_ad_common_algorithms: +Common algorithms +================= + + +.. toctree:: + :maxdepth: 2 + :glob: + + common_algorithms/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/40_drift_detectors.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/40_drift_detectors.rst new file mode 100644 index 000000000..227bbaec4 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/40_drift_detectors.rst @@ -0,0 +1,36 @@ +.. _target_api_oa_stream_tasks_dd: +Drift detectors +=============== + +.. image:: drift_detectors/images/MLPro-OA-Drift-Detectors_class_diagram.drawio.png + :scale: 50% + + +Template for drift detectors +---------------------------- + +.. automodule:: mlpro.oa.streams.tasks.driftdetectors.basics + :members: + :undoc-members: + :private-members: + :show-inheritance: + + +Template for drift events +------------------------- + +.. automodule:: mlpro.oa.streams.tasks.driftdetectors.drift.basics + :members: + :undoc-members: + :private-members: + :show-inheritance: + + +Concrete drift events and algorithms +------------------------------------ + +.. toctree:: + :maxdepth: 2 + :glob: + + drift_detectors/* diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/30_cluster_based.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/30_cluster_based.rst new file mode 100644 index 000000000..30d1b7a43 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/30_cluster_based.rst @@ -0,0 +1,14 @@ +.. _target_api_oa_stream_tasks_ad_cb: +Cluster-based drifts and detectors +===================================== + + +.. image:: cluster_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.png + :scale: 50% + + +.. toctree:: + :maxdepth: 2 + :glob: + + cluster_based/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/algorithms/.gitkeep b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/algorithms/.gitkeep new file mode 100644 index 000000000..8d1c8b69c --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/algorithms/.gitkeep @@ -0,0 +1 @@ + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/anomalies/.gitkeep b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/anomalies/.gitkeep new file mode 100644 index 000000000..8d1c8b69c --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/anomalies/.gitkeep @@ -0,0 +1 @@ + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/images/.$MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.bkp b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/images/.$MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.bkp new file mode 100644 index 000000000..3e94fcfa5 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/images/.$MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.bkp @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio new file mode 100644 index 000000000..9249c1e80 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/cluster_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/images/.$MLPro-OA-Drift-Detectors_class_diagram.drawio.bkp b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/images/.$MLPro-OA-Drift-Detectors_class_diagram.drawio.bkp new file mode 100644 index 000000000..3e94fcfa5 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/images/.$MLPro-OA-Drift-Detectors_class_diagram.drawio.bkp @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/images/MLPro-OA-Drift-Detectors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/images/MLPro-OA-Drift-Detectors_class_diagram.drawio new file mode 100644 index 000000000..cec6402bb --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/images/MLPro-OA-Drift-Detectors_class_diagram.drawio @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/images/MLPro-OA-Drift-Detectors_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/images/MLPro-OA-Drift-Detectors_class_diagram.drawio.png new file mode 100644 index 000000000..ced368a20 Binary files /dev/null and b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/images/MLPro-OA-Drift-Detectors_class_diagram.drawio.png differ diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/algorithms/.gitkeep b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/algorithms/.gitkeep new file mode 100644 index 000000000..8d1c8b69c --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/algorithms/.gitkeep @@ -0,0 +1 @@ + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/anomalies/.gitkeep b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/anomalies/.gitkeep new file mode 100644 index 000000000..8d1c8b69c --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/anomalies/.gitkeep @@ -0,0 +1 @@ + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/images/.$MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.bkp b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/images/.$MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.bkp new file mode 100644 index 000000000..3e94fcfa5 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/images/.$MLPro-OA-CB-Drift-Detectors_class_diagram.drawio.bkp @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio new file mode 100644 index 000000000..9249c1e80 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/streams/40_drift_detection/instance_based/images/MLPro-OA-CB-Drift-Detectors_class_diagram.drawio @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/02_systems.rst.off b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/systems/01_basics.rst similarity index 54% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/02_systems.rst.off rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/systems/01_basics.rst index e9f6cde36..44d2b88e7 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/02_systems.rst.off +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/systems/01_basics.rst @@ -1,8 +1,8 @@ -.. _target_api_oa_systems: -OA Systems -========== +.. _target_api_oa_systems_basics: +Basics +====== -.. image:: systems/images/MLPro-OA-Systems_OASystems.drawio.png +.. image:: images/MLPro-OA-Systems_OASystems.drawio.png :scale: 50% .. automodule:: mlpro.oa.systems.basics diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/systems/images/MLPro-OA-Systems_OASystems.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/systems/images/MLPro-OA-Systems_OASystems.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/systems/images/MLPro-OA-Systems_OASystems.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/systems/images/MLPro-OA-Systems_OASystems.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/systems/images/MLPro-OA-Systems_OASystems_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/systems/images/MLPro-OA-Systems_OASystems_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_oa/systems/images/MLPro-OA-Systems_OASystems_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_oa/systems/images/MLPro-OA-Systems_OASystems_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/01_environments.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/10_environments.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/01_environments.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/10_environments.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/02_env_models.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/20_env_models.rst similarity index 89% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/02_env_models.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/20_env_models.rst index bbbdcdc80..401dd22a1 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/02_env_models.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/20_env_models.rst @@ -1,5 +1,5 @@ .. _target_api_rl_env_ada: -RL-ENV-ADA - Environment Models +RL-ENV-ADA - Environment models =============================== .. image:: images/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/11_agents.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/30_agents.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/11_agents.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/30_agents.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/21_scenarios_training.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/40_scenarios_training.rst similarity index 86% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/21_scenarios_training.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/40_scenarios_training.rst index f532f9402..5f1fee645 100644 --- a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/21_scenarios_training.rst +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/40_scenarios_training.rst @@ -1,5 +1,5 @@ .. _target_api_rl_run_train: -RL-TRAIN - Scenarios, Training and Tuning +RL-TRAIN - Scenarios, training and tuning ========================================= .. image:: images/03_run_and_train/MLPro-RL-Train_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/90_pool_objects.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/90_pool_objects.rst new file mode 100644 index 000000000..fe082b168 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/90_pool_objects.rst @@ -0,0 +1,10 @@ +.. _target_api_pool_rl: +Pool objects +============ + +.. toctree:: + :maxdepth: 3 + :glob: + + pool/* + diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/.$MLPro-RL-Env-Ada_class_diagram.drawio.bkp b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/.$MLPro-RL-Env-Ada_class_diagram.drawio.bkp similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/.$MLPro-RL-Env-Ada_class_diagram.drawio.bkp rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/.$MLPro-RL-Env-Ada_class_diagram.drawio.bkp diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-Env-Ada_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-Env_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-Env_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-Env_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-Env_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-Env_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-Env_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-Env_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-Env_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-OA- Env-OAEnvironment_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-OA- Env-OAEnvironment_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-OA- Env-OAEnvironment_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-OA- Env-OAEnvironment_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-OA- Env-OAEnvironment_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-OA- Env-OAEnvironment_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/01_environments/MLPro-RL-OA- Env-OAEnvironment_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/01_environments/MLPro-RL-OA- Env-OAEnvironment_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/02_agents/MLPro-RL-Agents_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/02_agents/MLPro-RL-Agents_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/02_agents/MLPro-RL-Agents_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/02_agents/MLPro-RL-Agents_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/02_agents/MLPro-RL-Agents_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/02_agents/MLPro-RL-Agents_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/02_agents/MLPro-RL-Agents_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/02_agents/MLPro-RL-Agents_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/03_run_and_train/MLPro-RL-Train_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/03_run_and_train/MLPro-RL-Train_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/03_run_and_train/MLPro-RL-Train_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/03_run_and_train/MLPro-RL-Train_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/03_run_and_train/MLPro-RL-Train_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/03_run_and_train/MLPro-RL-Train_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_rl/images/03_run_and_train/MLPro-RL-Train_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/images/03_run_and_train/MLPro-RL-Train_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/01_actionplanners.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/01_actionplanners.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/01_actionplanners.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/01_actionplanners.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/02_environments.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/02_environments.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/02_environments.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/02_environments.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/03_policies.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/03_policies.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/03_policies.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/03_policies.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/04_sars_buffers.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/04_sars_buffers.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/04_sars_buffers.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/04_sars_buffers.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/action_planners/mpc.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/action_planners/mpc.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/action_planners/mpc.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/action_planners/mpc.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/2Dcollisiondetection.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/2Dcollisiondetection.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/2Dcollisiondetection.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/2Dcollisiondetection.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/bglp.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/bglp.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/bglp.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/bglp.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/double_pendulum.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/double_pendulum.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/double_pendulum.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/double_pendulum.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/grid_world.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/grid_world.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/grid_world.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/grid_world.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/images/MPro-RL-DoublePendulum-class-diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/images/MPro-RL-DoublePendulum-class-diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/images/MPro-RL-DoublePendulum-class-diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/images/MPro-RL-DoublePendulum-class-diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/images/MPro-RL-DoublePendulum-class-diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/images/MPro-RL-DoublePendulum-class-diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/images/MPro-RL-DoublePendulum-class-diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/images/MPro-RL-DoublePendulum-class-diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/multi_cartpole.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/multi_cartpole.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/multi_cartpole.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/multi_cartpole.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/robot_manipulator.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/robot_manipulator.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/environments/robot_manipulator.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/environments/robot_manipulator.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/policies/dummy.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/policies/dummy.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/policies/dummy.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/policies/dummy.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/policies/random.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/policies/random.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/policies/random.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/policies/random.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/sars_buffers/prioritizedbuffer.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/sars_buffers/prioritizedbuffer.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/sars_buffers/prioritizedbuffer.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/sars_buffers/prioritizedbuffer.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/sars_buffers/randomsarsbuffer.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/sars_buffers/randomsarsbuffer.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_rl/sars_buffers/randomsarsbuffer.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_rl/pool/sars_buffers/randomsarsbuffer.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/01_basics.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/10_basics.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/01_basics.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/10_basics.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/02_fnn.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/20_fnn.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/02_fnn.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/20_fnn.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/90_pool_objects.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/90_pool_objects.rst new file mode 100644 index 000000000..83ed19a79 --- /dev/null +++ b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/90_pool_objects.rst @@ -0,0 +1,9 @@ +.. _target_api_pool_sl: +Pool objects +============ + +.. toctree:: + :maxdepth: 3 + :glob: + + pool/* diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Basics_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Basics_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Basics_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Basics_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Basics_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Basics_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Basics_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Basics_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Brainstorm_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Brainstorm_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Brainstorm_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Brainstorm_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-FNN_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-FNN_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-FNN_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-FNN_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-FNN_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-FNN_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-FNN_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-FNN_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Models_Dataset.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Models_Dataset.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Models_Dataset.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Models_Dataset.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Models_Evaluation.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Models_Evaluation.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Models_Evaluation.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Models_Evaluation.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Models_training.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Models_training.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/MLPro-SL-Models_training.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/MLPro-SL-Models_training.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/Models_Evaluation.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/Models_Evaluation.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/Models_Evaluation.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/Models_Evaluation.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/New draw.io Diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/New draw.io Diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/New draw.io Diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/New draw.io Diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/Supervised learning.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/Supervised learning.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/core/mlpro_sl/images/Supervised learning.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/images/Supervised learning.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/01_adaptive_functions.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/01_adaptive_functions.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/01_adaptive_functions.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/01_adaptive_functions.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/afct_fnn_pytorch_mlp.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/afct_fnn_pytorch_mlp.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/afct_fnn_pytorch_mlp.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/afct_fnn_pytorch_mlp.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/afct_pytorch.rst b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/afct_pytorch.rst similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/afct_pytorch.rst rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/afct_pytorch.rst diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/images/MLPro-SL-pool-afct-fnn-pytorch_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/images/MLPro-SL-pool-afct-fnn-pytorch_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/images/MLPro-SL-pool-afct-fnn-pytorch_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/images/MLPro-SL-pool-afct-fnn-pytorch_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/images/MLPro-SL-pool-afct-fnn-pytorch_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/images/MLPro-SL-pool-afct-fnn-pytorch_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/images/MLPro-SL-pool-afct-fnn-pytorch_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/images/MLPro-SL-pool-afct-fnn-pytorch_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/images/MLPro-SL-pool-afct-pytorch_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/images/MLPro-SL-pool-afct-pytorch_class_diagram.drawio similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/images/MLPro-SL-pool-afct-pytorch_class_diagram.drawio rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/images/MLPro-SL-pool-afct-pytorch_class_diagram.drawio diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/images/MLPro-SL-pool-afct-pytorch_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/images/MLPro-SL-pool-afct-pytorch_class_diagram.drawio.png similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/afct/images/MLPro-SL-pool-afct-pytorch_class_diagram.drawio.png rename to doc/rtd/content/99_appendices/appendix2/sub/mlpro_sl/pool/afct/images/MLPro-SL-pool-afct-pytorch_class_diagram.drawio.png diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/20_mlpro.sl.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/20_mlpro.sl.rst deleted file mode 100644 index b86bba902..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/20_mlpro.sl.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. _target_api_pool_sl: -MLPro-SL - Supervised Learning -============================== - -.. toctree:: - :maxdepth: 3 - :glob: - - mlpro_sl/* diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/30_mlpro.oa.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/30_mlpro.oa.rst deleted file mode 100644 index 143ed96db..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/30_mlpro.oa.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. _target_api_pool_oa: -MLPro-OA - Online Adaptivity -============================ - -.. toctree:: - :maxdepth: 3 - :glob: - - mlpro_oa/* diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/40_mlpro.rl.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/40_mlpro.rl.rst deleted file mode 100644 index c9b65d4ee..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/40_mlpro.rl.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. _target_api_pool_rl: -MLPro-RL - Reinforcement Learning -================================= - -.. toctree:: - :maxdepth: 3 - :glob: - - mlpro_rl/* - diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/10_streams.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/10_streams.rst deleted file mode 100644 index cfee65612..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/10_streams.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. _target_api_pool_oa_streams: -OA Stream Processing -==================== - -.. toctree:: - :maxdepth: 2 - :glob: - - streams/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/20_systems.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/20_systems.rst deleted file mode 100644 index ad50a5910..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/20_systems.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. _target_api_pool_oa_systems: -OA Systems -========== - -Coming soon... - -.. toctree:: - :maxdepth: 2 - :glob: - - systems/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/01_stream_tasks.rst b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/01_stream_tasks.rst deleted file mode 100644 index fd9c2ab0b..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/01_stream_tasks.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. _target_api_oa_streams_tasks: -OA Stream Tasks -=============== - -.. toctree:: - :maxdepth: 2 - :glob: - - tasks/* \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio deleted file mode 100644 index 92c0aff6f..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio.png deleted file mode 100644 index 1af8d72cd..000000000 Binary files a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/anomaly_detectors/images/MLPro-OA-Anomaly-Detectors_class_diagram.drawio.png and /dev/null differ diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/.$MLPro-OA-Preprocessing-Tasks_class_diagram.drawio.bkp b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/.$MLPro-OA-Preprocessing-Tasks_class_diagram.drawio.bkp deleted file mode 100644 index ed73bd218..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/.$MLPro-OA-Preprocessing-Tasks_class_diagram.drawio.bkp +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/.$MLPro-OA_Anomaly_Predictors_class_diagram.drawio.bkp b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/.$MLPro-OA_Anomaly_Predictors_class_diagram.drawio.bkp deleted file mode 100644 index cc0c28b5c..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/.$MLPro-OA_Anomaly_Predictors_class_diagram.drawio.bkp +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Anomaly_Predictors.class_diagram.drawio.png b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Anomaly_Predictors.class_diagram.drawio.png deleted file mode 100644 index 12a449bcc..000000000 Binary files a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Anomaly_Predictors.class_diagram.drawio.png and /dev/null differ diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Anomaly_Predictors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Anomaly_Predictors_class_diagram.drawio deleted file mode 100644 index d59781427..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA-Anomaly_Predictors_class_diagram.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio b/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio deleted file mode 100644 index 1e2287de5..000000000 --- a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/streams/tasks/images/MLPro-OA_Anomaly_Predictors_class_diagram.drawio +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/rtd/index.rst b/doc/rtd/index.rst index 88993a62d..e40fdce92 100644 --- a/doc/rtd/index.rst +++ b/doc/rtd/index.rst @@ -3,63 +3,82 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -MLPro - Machine Learning Professional -##################################### +MLPro - Elevate Your Machine Learning Journey +############################################# -Welcome to MLPro - the integrative middleware framework for standardized machine learning in Python! +**Welcome to MLPro - the integrative middleware framework for standardized machine learning in Python!** -MLPro - - enables hybrid ML applications in just one framework - - provides complete process landscapes and powerful ML templates on a scientific level - - integrates a growing number of :ref:`proven ML packages ` - - enables comparable and reproducible results in publications - - is open source and even commercially usable (`Apache License 2.0 `_) +.. raw:: html + +
+ 💡 Machine learning frameworks often focus on specific algorithms or isolated tasks, leaving you to bridge + the gaps between tools, workflows, and real-world applications. MLPro takes a different approach: Instead + of just another toolbox, it provides a structured foundation with powerful processes and reusable templates + designed to bring standardization and productivity to your ML development.

+ + 📐 Whether you're a researcher exploring new methods, a developer building intelligent systems, or a student + discovering the world of machine learning, MLPro gives you the structure and flexibility to elevate your ML projects to the + next level.

+ + 🔓 MLPro is fully open source and licensed under Apache 2.0, giving you the freedom to innovate, customize, and contribute.

+ + ✨ Start exploring MLPro and take your machine learning journey further!

+
.. |welcome| image:: content/00_start_page/images/welcome.png - :scale: 65 % + :scale: 35 % :target: content/01_welcome/main.html .. |mlpro_bf| image:: content/00_start_page/images/mlpro_bf.png - :scale: 65 % + :scale: 35 % :target: content/02_basic_functions/mlpro_bf/main.html .. |mlpro_sl| image:: content/00_start_page/images/mlpro_sl.png - :scale: 65 % + :scale: 35 % :target: content/03_machine_learning/mlpro_sl/main.html .. |mlpro_rl| image:: content/00_start_page/images/mlpro_rl.png - :scale: 65 % + :scale: 35 % :target: content/03_machine_learning/mlpro_rl/main.html .. |mlpro_gt| image:: content/00_start_page/images/mlpro_gt.png - :scale: 65 % + :scale: 35 % :target: content/03_machine_learning/mlpro_gt/main.html .. |mlpro_oa| image:: content/00_start_page/images/mlpro_oa.png - :scale: 65 % + :scale: 35 % :target: content/03_machine_learning/mlpro_oa/main.html .. |examples| image:: content/00_start_page/images/example_pool.png - :scale: 65 % + :scale: 35 % :target: content/99_appendices/appendix1/main.html +.. |podcast| image:: content/00_start_page/images/podcast.png + :scale: 35 % + :target: https://www.gitpodcast.com/fhswf/mlpro + +.. |chatgpt| image:: content/00_start_page/images/chatgpt.png + :scale: 35 % + :target: https://chatgpt.com/g/g-67a1b30e91d481918ee1d6fe2af91bb5-mlpro + .. |mlpro_api| image:: content/00_start_page/images/api_reference.png - :scale: 65 % + :scale: 35 % :target: content/99_appendices/appendix2/main.html +.. |extensions| image:: content/00_start_page/images/extension_hub.png + :scale: 35 % + :target: content/04_extensions/main.html + .. |project| image:: content/00_start_page/images/project_mlpro.png - :scale: 65 % + :scale: 35 % :target: content/99_appendices/appendix3/main.html -.. |extensions| image:: content/00_start_page/images/extension_hub.png - :scale: 65 % - :target: content/04_extensions/main.html -|welcome| |mlpro_bf| |mlpro_sl| |mlpro_oa| |mlpro_rl| +|welcome| |mlpro_bf| |mlpro_sl| |mlpro_oa| |mlpro_rl| |mlpro_gt| -|mlpro_gt| |examples| |mlpro_api| |project| |extensions| +|examples| |mlpro_api| |extensions| |podcast| |chatgpt| |project| .. |mlpro_pypi| image:: content/00_start_page/images/pypi.svg @@ -68,24 +87,21 @@ MLPro .. |mlpro_anaconda| image:: content/00_start_page/images/anaconda.png :target: https://anaconda.org/mlpro/mlpro - :scale: 11 % + :scale: 10 % .. |mlpro_github| image:: content/00_start_page/images/github.png :target: https://github.com/fhswf/MLPro :scale: 2 % -.. |mlpro_rg| image:: content/00_start_page/images/researchgate.jpeg - :target: https://www.researchgate.net/project/MLPro-A-Synoptic-Framework-for-Standardized-Machine-Learning-Tasks-in-Python - :scale: 6 % - -MLPro is also present on... +🌐 MLPro is available on... .. list-table:: + :widths: 33 33 33 - * - |mlpro_pypi| `Python Package Index `_ - - |mlpro_anaconda| `Anaconda.org `_ - - |mlpro_github| `GitHub `_ + * - |mlpro_pypi| `PyPI `_ + - |mlpro_anaconda| `Anaconda `_ + - |mlpro_github| `GitHub `_ diff --git a/src/mlpro/bf/math/normalizers/basics.py b/src/mlpro/bf/math/normalizers/basics.py index e1be9bb5a..88dde747a 100644 --- a/src/mlpro/bf/math/normalizers/basics.py +++ b/src/mlpro/bf/math/normalizers/basics.py @@ -129,7 +129,7 @@ def denormalize(self, p_data: Union[Element, np.ndarray]): elif isinstance(p_data, np.ndarray): p_data = np.multiply(p_data, 1 / self._param[0]) + \ - (self._param[1] / self._param[0]) + (self._param[1] / self._param[0]) p_data = np.nan_to_num(p_data) else: raise ParamError('Wrong datatype provided for denormalization') diff --git a/src/mlpro/bf/plot/backends/__init__.py b/src/mlpro/bf/plot/backends/__init__.py index 656f482f9..d5ef44714 100644 --- a/src/mlpro/bf/plot/backends/__init__.py +++ b/src/mlpro/bf/plot/backends/__init__.py @@ -1,3 +1,3 @@ from mlpro.bf.plot.backends.basics import WindowState, WSMINIMIZED, WSMAXIMIZED, WSNORMAL, WindowGeometry, PlotBackend from mlpro.bf.plot.backends.tkagg import PlotBackendTkAgg -from mlpro.bf.plot.backends.qtagg import PlotBackendqtagg \ No newline at end of file +from mlpro.bf.plot.backends.qtagg import PlotBackendqtagg, PlotBackendQtAgg \ No newline at end of file diff --git a/src/mlpro/bf/plot/backends/qtagg.py b/src/mlpro/bf/plot/backends/qtagg.py index c810102f1..f285a9eef 100644 --- a/src/mlpro/bf/plot/backends/qtagg.py +++ b/src/mlpro/bf/plot/backends/qtagg.py @@ -88,3 +88,11 @@ def _figure_set_geometry_default(self, p_figure : Figure, p_geometry : WindowGeo state_qt = QtCore.Qt.WindowNoState window.setWindowState(state_qt) + + + + + +## ------------------------------------------------------------------------------------------------- +## ------------------------------------------------------------------------------------------------- +class PlotBackendQtAgg (PlotBackendqtagg): pass \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/__init__.py b/src/mlpro/oa/streams/tasks/anomalydetectors/__init__.py index c5978a189..d0b9e33b1 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/__init__.py +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/__init__.py @@ -1,4 +1,4 @@ from mlpro.oa.streams.tasks.anomalydetectors.basics import AnomalyDetector from mlpro.oa.streams.tasks.anomalydetectors.anomalies import * -from mlpro.oa.streams.tasks.anomalydetectors.paga_detectors import AnomalyDetectorPAGA -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors import * +from mlpro.oa.streams.tasks.anomalydetectors.instancebased import * +from mlpro.oa.streams.tasks.anomalydetectors.clusterbased import * diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/__init__.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/__init__.py index c495961d0..d6cf86def 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/__init__.py +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/__init__.py @@ -1,6 +1,3 @@ from mlpro.oa.streams.tasks.anomalydetectors.anomalies.basics import Anomaly -from mlpro.oa.streams.tasks.anomalydetectors.anomalies.point import PointAnomaly -from mlpro.oa.streams.tasks.anomalydetectors.anomalies.group import GroupAnomaly -from mlpro.oa.streams.tasks.anomalydetectors.anomalies.drift import DriftAnomaly -from mlpro.oa.streams.tasks.anomalydetectors.anomalies.contextual import ContextualAnomaly +from mlpro.oa.streams.tasks.anomalydetectors.anomalies.instancebased import * from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased import * \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/basics.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/basics.py index 32d6bdaa4..64ab695ea 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/basics.py +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/basics.py @@ -14,27 +14,32 @@ ## -- 2024-05-07 1.3.1 SK Bug fix related to p_instances ## -- 2024-05-09 1.3.2 DA Bugfix in method Anomaly._update_plot() ## -- 2024-05-22 1.4.0 SK Refactoring +## -- 2025-02-12 1.4.1 DA Code reduction +## -- 2025-02-18 2.0.0 DA Class Anomaly: +## -- - refactoring and simplification +## -- - new attribute event_id +## -- - new parent Renormalizable ## ------------------------------------------------------------------------------------------------- """ -Ver. 1.4.0 (2024-05-22) +Ver. 2.0.0 (2025-02-18) This module provides a template class for anomalies to be used in anomaly detection algorithms. """ +from datetime import datetime + from mlpro.bf.various import Id from mlpro.bf.plot import Plottable, PlotSettings from mlpro.bf.events import Event -from mlpro.bf.streams import Instance -from mlpro.bf.math.properties import PropertyDefinitions, Properties - +from mlpro.bf.math.normalizers import Renormalizable ## ------------------------------------------------------------------------------------------------- ## ------------------------------------------------------------------------------------------------- -class Anomaly (Id, Event, Plottable): +class Anomaly (Id, Event, Plottable, Renormalizable): """ This is the base class for anomaly events which can be raised by the anomaly detectors when an anomaly is detected. @@ -43,11 +48,7 @@ class Anomaly (Id, Event, Plottable): ---------- p_id : int Anomaly ID. Default value = 0. - p_instances : Instance - List of instances. Default value = None. - p_ano_scores : list - List of anomaly scores of instances. Default = None. - p_det_time : str + p_tstamp : datetime Time of occurance of anomaly. Default = None. p_visualize : bool Boolean switch for visualisation. Default = False. @@ -57,8 +58,6 @@ class Anomaly (Id, Event, Plottable): Further optional keyword arguments. """ - C_TYPE = 'Anomaly' - C_PLOT_ACTIVE = True C_PLOT_STANDALONE = False C_PLOT_VALID_VIEWS = [ PlotSettings.C_VIEW_2D, @@ -69,58 +68,18 @@ class Anomaly (Id, Event, Plottable): ## ------------------------------------------------------------------------------------------------- def __init__(self, p_id : int = 0, - p_instances: list[Instance] = None, - p_ano_scores : list = None, - p_det_time : str = None, + p_tstamp : datetime = None, p_visualize : bool = False, p_raising_object : object = None, **p_kwargs): Id.__init__( self, p_id = p_id ) - Event.__init__( self, p_raising_object=p_raising_object, - p_tstamp=p_det_time, **p_kwargs) - Plottable.__init__( self, p_visualize = p_visualize ) - - self._instances : list[Instance] = p_instances - self._ano_scores = p_ano_scores - - -## ------------------------------------------------------------------------------------------------- - def get_instances(self) -> list[Instance]: - """ - Method that returns the instances associated with the anomaly. - - Returns - ------- - list[Instance] - The list of instances. - """ - return self._instances - -## ------------------------------------------------------------------------------------------------- - def get_detection_time(self) -> float: - """ - Method that returns the time at which the anomaly/anomalies were detection. + Event.__init__( self, + p_raising_object=p_raising_object, + p_tstamp=p_tstamp, + **p_kwargs ) - Returns - ------- - float - The time of detection. - """ - return self._instances - - -## ------------------------------------------------------------------------------------------------- - def get_ano_scores(self): - """ - Method that returns the anomaly scores associated with the instances of the anomaly. - - Returns - ------- - list - The list of anomaly scores. - """ - return self._ano_scores - + Plottable.__init__( self, p_visualize = p_visualize ) + self.event_id = type(self).__name__ \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/__init__.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/__init__.py index 134079f20..b5e76cf4f 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/__init__.py +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/__init__.py @@ -1,7 +1,6 @@ from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.basics import CBAnomaly from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.density import ClusterDensityVariation from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.disappearance import ClusterDisappearance -from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.drift import ClusterDrift from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.enlargement import ClusterEnlargement from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.shrinkage import ClusterShrinkage from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.new_cluster import NewClusterAppearance \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/basics.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/basics.py index 75c75f3b5..c412aecce 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/basics.py +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/basics.py @@ -25,15 +25,14 @@ except: class Figure : pass -from mlpro.oa.streams.basics import Instance +from datetime import datetime + from mlpro.oa.streams.tasks.anomalydetectors.anomalies.basics import Anomaly from mlpro.bf.mt import Figure, PlotSettings from mlpro.oa.streams.tasks.clusteranalyzers.clusters.basics import Cluster - - ## ------------------------------------------------------------------------------------------------- ## ------------------------------------------------------------------------------------------------- class CBAnomaly (Anomaly): @@ -44,14 +43,10 @@ class CBAnomaly (Anomaly): ---------- p_id : int Anomaly ID. Default value = 0. - p_instances : Instance - List of instances. Default value = None. p_clusters : dict[Cluster] Clusters associated with the anomaly. Default = None. p_properties : dict Poperties of clusters associated with the anomaly. Default = None. - p_ano_scores : list - List of anomaly scores of instances. Default = None. p_det_time : str Time of occurance of anomaly. Default = None. p_visualize : bool @@ -62,7 +57,6 @@ class CBAnomaly (Anomaly): Further optional keyword arguments. """ - C_NAME = 'Cluster based Anomaly' C_PLOT_ACTIVE = True C_PLOT_STANDALONE = False C_PLOT_VALID_VIEWS = [ PlotSettings.C_VIEW_2D, @@ -75,39 +69,23 @@ class CBAnomaly (Anomaly): ## ------------------------------------------------------------------------------------------------- def __init__(self, p_id : int = 0, - p_instances : list[Instance] = None, p_clusters : dict[Cluster] = None, p_properties : dict = None, - p_ano_scores : list = None, - p_det_time : str = None, + p_tstamp : datetime = None, p_visualize : bool = False, p_raising_object : object = None, **p_kwargs): - super().__init__(p_id=p_id, - p_instances=p_instances, - p_ano_scores=p_ano_scores, - p_visualize=p_visualize, - p_raising_object=p_raising_object, - p_det_time=p_det_time, - **p_kwargs) + super().__init__( p_id = p_id, + p_tstamp = p_tstamp, + p_visualize = p_visualize, + p_raising_object = p_raising_object, + **p_kwargs ) - self._colour_id = 0 - self._clusters : dict[Cluster] = p_clusters - self._properties : dict = p_properties + self._colour_id = 0 + self.clusters : dict[Cluster] = p_clusters + self._properties : dict = p_properties -## ------------------------------------------------------------------------------------------------- - def get_clusters(self) -> dict[Cluster]: - """ - Method that returns the clusters associated with the anomaly. - - Returns - ------- - dict[Cluster] - Dictionary of clusters. - """ - return self._clusters - ## ------------------------------------------------------------------------------------------------- def get_properties(self) -> dict: @@ -128,7 +106,7 @@ def _init_plot_2d(self, p_figure: Figure, p_settings: PlotSettings): cluster : Cluster = None - for cluster in self._clusters.values(): + for cluster in self.clusters.values(): cluster.color = "red" @@ -139,9 +117,6 @@ def _init_plot_3d(self, p_figure: Figure, p_settings: PlotSettings): cluster : Cluster = None - for cluster in self._clusters.values(): - - cluster.color = "red" - - + for cluster in self.clusters.values(): + cluster.color = "red" \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/density.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/density.py index f16df5c96..2932df408 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/density.py +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/density.py @@ -32,7 +32,6 @@ class ClusterDensityVariation (CBAnomaly): Event class to be raised when the density of a cluster changes. """ - - C_NAME = 'Cluster density variation' - + + pass diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/drift.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/drift.py deleted file mode 100644 index 0db1e1a6f..000000000 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/clusterbased/drift.py +++ /dev/null @@ -1,39 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : mlpro.oa.tasks.anomalydetectors.anomalies.clusterbased -## -- Module : drift.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2023-06-08 0.0.0 SK Creation -## -- 2023-09-12 1.0.0 SK Release -## -- 2023-11-21 1.0.1 SK Time Stamp update -## -- 2024-02-25 1.1.0 SK Visualisation update -## -- 2024-04-10 1.2.0 DA/SK Refactoring -## -- 2024-05-22 1.2.1 SK Refactoring -## -- 2024-05-28 1.3.0 SK Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.3.0 (2024-05-28) - -This module provides a template class for cluster drift to be used in anomaly detection algorithms. -""" - -from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.basics import CBAnomaly - - - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -class ClusterDrift (CBAnomaly): - """ - Event class to be raised when cluster drift detected. - - """ - - C_NAME = 'Cluster drift Anomaly' - - diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/instancebased/__init__.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/instancebased/__init__.py new file mode 100644 index 000000000..702e77b54 --- /dev/null +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/instancebased/__init__.py @@ -0,0 +1,3 @@ +from mlpro.oa.streams.tasks.anomalydetectors.anomalies.instancebased.point import PointAnomaly +from mlpro.oa.streams.tasks.anomalydetectors.anomalies.instancebased.group import GroupAnomaly +from mlpro.oa.streams.tasks.anomalydetectors.anomalies.instancebased.contextual import ContextualAnomaly \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/contextual.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/instancebased/contextual.py similarity index 100% rename from src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/contextual.py rename to src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/instancebased/contextual.py diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/group.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/instancebased/group.py similarity index 100% rename from src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/group.py rename to src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/instancebased/group.py diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/point.py b/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/instancebased/point.py similarity index 100% rename from src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/point.py rename to src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/instancebased/point.py diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/basics.py b/src/mlpro/oa/streams/tasks/anomalydetectors/basics.py index 352c1a244..a132a6f87 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/basics.py +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/basics.py @@ -15,35 +15,33 @@ ## -- 2024-05-22 1.4.0 SK Refactoring ## -- 2024-08-12 1.4.1 DA Correction in AnomalyDetector.update_plot() ## -- 2024-12-11 1.4.2 DA Pseudo classes if matplotlib is not installed +## -- 2025-02-14 1.5.0 DA Review and refactoring ## ------------------------------------------------------------------------------------------------- """ -Ver. 1.4.2 (2024-12-11) +Ver. 1.5.0 (2025-02-12) This module provides templates for anomaly detection to be used in the context of online adaptivity. """ -from typing import List - try: from matplotlib.figure import Figure except: class Figure : pass -from mlpro.bf.math.properties import * +from mlpro.bf.various import Log from mlpro.bf.plot import PlotSettings +from mlpro.bf.math.normalizers import Normalizer from mlpro.bf.streams import InstDict -from mlpro.bf.various import * -from mlpro.bf.plot import * + from mlpro.oa.streams import OAStreamTask -from mlpro.bf.math.normalizers import Normalizer from mlpro.oa.streams.tasks.anomalydetectors.anomalies import Anomaly ## ------------------------------------------------------------------------------------------------- ## ------------------------------------------------------------------------------------------------- -class AnomalyDetector(OAStreamTask): +class AnomalyDetector (OAStreamTask): """ Base class for online anomaly detectors. It raises an event when an anomaly is detected. @@ -66,40 +64,32 @@ class AnomalyDetector(OAStreamTask): Further optional named parameters. """ - C_TYPE = 'Anomaly Detector' - - C_EVENT_ANOMALY_ADDED = 'ANOMALY_ADDED' - C_EVENT_ANOMALY_REMOVED = 'ANOMALY_REMOVED' - - C_PLOT_ACTIVE = True - C_PLOT_STANDALONE = False - -## ------------------------------------------------------------------------------------------------- - def __init__(self, - p_name:str = None, - p_range_max = OAStreamTask.C_RANGE_THREAD, - p_ada : bool = True, - p_duplicate_data : bool = False, - p_visualize : bool = False, - p_logging=Log.C_LOG_ALL, - **p_kwargs): - - super().__init__(p_name = p_name, - p_range_max = p_range_max, - p_ada = p_ada, - p_duplicate_data = p_duplicate_data, - p_visualize = p_visualize, - p_logging = p_logging, - **p_kwargs) + C_TYPE = 'Anomaly Detector' + C_PLOT_ACTIVE = True + C_PLOT_STANDALONE = False + +## ------------------------------------------------------------------------------------------------- + def __init__( self, + p_name:str = None, + p_range_max = OAStreamTask.C_RANGE_THREAD, + p_ada : bool = True, + p_duplicate_data : bool = False, + p_visualize : bool = False, + p_logging=Log.C_LOG_ALL, + p_anomaly_buffer_size : int = 10, + **p_kwargs ): + + super().__init__( p_name = p_name, + p_range_max = p_range_max, + p_ada = p_ada, + p_duplicate_data = p_duplicate_data, + p_visualize = p_visualize, + p_logging = p_logging, + **p_kwargs ) - self._ano_id = 0 - self._anomalies = {} - self._ano_scores = [] - - -## ------------------------------------------------------------------------------------------------- - def _run(self, p_inst : InstDict): - pass + self._ano_id : int = 0 + self.anomalies = {} + self._ano_buffer_size : int = p_anomaly_buffer_size ## ------------------------------------------------------------------------------------------------- @@ -116,20 +106,6 @@ def _get_next_anomaly_id(self): return self._ano_id -## ------------------------------------------------------------------------------------------------- - def get_anomalies(self): - """ - Method to return the current list of anomalies. - - Returns - ------- - dict_of_anomalies : dict[Anomaly] - Current dictionary of anomalies. - """ - - return self._anomalies - - ## ------------------------------------------------------------------------------------------------- def _buffer_anomaly(self, p_anomaly:Anomaly): """ @@ -141,13 +117,23 @@ def _buffer_anomaly(self, p_anomaly:Anomaly): Anomaly object to be added. """ - p_anomaly.set_id( p_id = self._get_next_anomaly_id() ) - self._anomalies[p_anomaly.get_id()] = p_anomaly - return p_anomaly + # 1 Buffering turned on? + if self._ano_buffer_size <= 0: return + + # 2 Buffer full? + if len( self.anomalies ) >= self._ano_buffer_size: + # 2.1 Remove oldest entry + oldest_key = next(iter(self.anomalies)) + oldest_anomaly = self.anomalies.pop(oldest_key) + oldest_anomaly.remove_plot() + + # 3 Buffer new anomaly + p_anomaly.id = self._get_next_anomaly_id() + self.anomalies[p_anomaly.id] = p_anomaly ## ------------------------------------------------------------------------------------------------- - def remove_anomaly(self, p_anomaly): + def _remove_anomaly(self, p_anomaly:Anomaly): """ Method to remove an existing anomaly. Please use as part of your algorithm. @@ -158,11 +144,11 @@ def remove_anomaly(self, p_anomaly): """ p_anomaly.remove_plot(p_refresh=True) - del self._anomalies[p_anomaly.get_id()] + del self.anomalies[p_anomaly.id] ## ------------------------------------------------------------------------------------------------- - def _raise_anomaly_event(self, p_anomaly : Anomaly ): + def _raise_anomaly_event(self, p_anomaly:Anomaly, p_buffer: bool = True): """ Method to raise an anomaly event. @@ -170,14 +156,18 @@ def _raise_anomaly_event(self, p_anomaly : Anomaly ): ---------- p_anomaly : Anomaly Anomaly object to be raised. + p_buffer : bool + Anomaly is buffered when set to True. """ - p_anomaly = self._buffer_anomaly(p_anomaly=p_anomaly) + if p_buffer: self._buffer_anomaly( p_anomaly=p_anomaly ) if self.get_visualization(): - p_anomaly.init_plot( p_figure=self._figure, p_plot_settings=self.get_plot_settings() ) + p_anomaly.init_plot( p_figure=self._figure, + p_plot_settings=self.get_plot_settings() ) - self._raise_event(p_anomaly.C_TYPE, p_anomaly) + self._raise_event( p_event_id = p_anomaly.event_id, + p_event_object = p_anomaly ) ## ------------------------------------------------------------------------------------------------- @@ -191,7 +181,7 @@ def init_plot(self, p_figure: Figure = None, p_plot_settings: PlotSettings = Non super().init_plot( p_figure=p_figure, p_plot_settings=p_plot_settings) - for anomaly in self._anomalies.values(): + for anomaly in self.anomalies.values(): anomaly.init_plot(p_figure=p_figure, p_plot_settings = p_plot_settings) @@ -222,7 +212,7 @@ def update_plot(self, p_inst : InstDict = None, **p_kwargs): self._plot_ax_ylim = ax_ylim_new self._plot_ax_zlim = ax_zlim_new - for anomaly in self._anomalies.values(): + for anomaly in self.anomalies.values(): anomaly.update_plot( p_axlimits_changed = axlimits_changed, p_xlim = ax_xlim_new, p_ylim = ax_ylim_new, @@ -235,28 +225,23 @@ def remove_plot(self, p_refresh: bool = True): if not self.get_visualization(): return - super().remove_plot(p_refresh=p_refresh) + # super().remove_plot(p_refresh=p_refresh) - for anomaly in self._anomalies.values(): + for anomaly in self.anomalies.values(): anomaly.remove_plot(p_refresh=p_refresh) ## ------------------------------------------------------------------------------------------------- - def _renormalize(self, p_normalizer: Normalizer): + def _renormalize(self, p_normalizer): """ - Internal renormalization of all anomaly instances. See method OATask.renormalize_on_event() for further - information. + Internal renormalization of all buffered anomalies. See method OATask.renormalize_on_event() + for further information. Parameters ---------- p_normalizer : Normalizer Normalizer object to be applied on task-specific """ - anomaly : Anomaly = None - - for anomaly in self._anomalies.values(): - instances = anomaly.get_instances() - - for inst in instances: - inst.remormalize( p_normalizer=p_normalizer) + for anomaly in self.anomalies.values(): + anomaly.renormalize( p_normalizer=p_normalizer ) \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/__init__.py b/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/__init__.py deleted file mode 100644 index cc3af768a..000000000 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.basics import AnomalyDetectorCB -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.disappearance_detector import ClusterDisappearanceDetector -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.drift_detector import ClusterDriftDetector -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.density_change_detector import ClusterDensityChangeDetector -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.geo_size_change_detector import ClusterGeometricSizeChangeDetector -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.new_cluster_detector import NewClusterDetector -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.size_change_detector import ClusterSizeChangeDetector \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/__init__.py b/src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/__init__.py new file mode 100644 index 000000000..95ef92665 --- /dev/null +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/__init__.py @@ -0,0 +1 @@ +from mlpro.oa.streams.tasks.anomalydetectors.clusterbased.basics import AnomalyDetectorCB diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/basics.py b/src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/basics.py similarity index 77% rename from src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/basics.py rename to src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/basics.py index 80d855d54..f6367cb51 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/basics.py +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/basics.py @@ -42,17 +42,16 @@ class AnomalyDetectorCB(AnomalyDetector): # List of cluster properties necessary for the algorithm C_REQ_CLUSTER_PROPERTIES : PropertyDefinitions = [] - ## ------------------------------------------------------------------------------------------------- - def __init__(self, - p_clusterer : ClusterAnalyzer = None, - p_name : str = None, - p_range_max = StreamTask.C_RANGE_THREAD, - p_ada : bool = True, - p_duplicate_data : bool = False, - p_visualize : bool = False, - p_logging=Log.C_LOG_ALL, - **p_kwargs): + def __init__( self, + p_clusterer : ClusterAnalyzer, + p_name : str = None, + p_range_max = StreamTask.C_RANGE_THREAD, + p_ada : bool = True, + p_duplicate_data : bool = False, + p_visualize : bool = False, + p_logging=Log.C_LOG_ALL, + **p_kwargs): super().__init__(p_name = p_name, p_range_max = p_range_max, @@ -64,14 +63,7 @@ def __init__(self, self._clusterer = p_clusterer - for x in self.C_PROPERTY_DEFINITIONS: - if x not in self.C_REQ_CLUSTER_PROPERTIES: - self.C_REQ_CLUSTER_PROPERTIES.append(x) - unknown_prop = self._clusterer.align_cluster_properties(p_properties=self.C_REQ_CLUSTER_PROPERTIES) - #if len(unknown_prop) >0: - # raise RuntimeError("The following cluster properties need to be provided by the clusterer: ", unknown_prop) - - self._visualize = p_visualize - + if len(unknown_prop) >0: + raise RuntimeError("The following cluster properties need to be provided by the clusterer: ", unknown_prop) \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/density_change_detector.py b/src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/density_change_detector.py similarity index 100% rename from src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/density_change_detector.py rename to src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/density_change_detector.py diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/disappearance_detector.py b/src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/disappearance_detector.py similarity index 100% rename from src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/disappearance_detector.py rename to src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/disappearance_detector.py diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/geo_size_change_detector.py b/src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/geo_size_change_detector.py similarity index 100% rename from src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/geo_size_change_detector.py rename to src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/geo_size_change_detector.py diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/new_cluster_detector.py b/src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/new_cluster_detector.py similarity index 100% rename from src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/new_cluster_detector.py rename to src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/new_cluster_detector.py diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/size_change_detector.py b/src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/size_change_detector.py similarity index 100% rename from src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/size_change_detector.py rename to src/mlpro/oa/streams/tasks/anomalydetectors/clusterbased/size_change_detector.py diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/instancebased/__init__.py b/src/mlpro/oa/streams/tasks/anomalydetectors/instancebased/__init__.py new file mode 100644 index 000000000..44730f5e1 --- /dev/null +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/instancebased/__init__.py @@ -0,0 +1 @@ +from mlpro.oa.streams.tasks.anomalydetectors.instancebased.paga_detectors import AnomalyDetectorPAGA \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/instancebased/paga_detectors.py b/src/mlpro/oa/streams/tasks/anomalydetectors/instancebased/paga_detectors.py new file mode 100644 index 000000000..12d4dc078 --- /dev/null +++ b/src/mlpro/oa/streams/tasks/anomalydetectors/instancebased/paga_detectors.py @@ -0,0 +1,156 @@ +## ------------------------------------------------------------------------------------------------- +## -- Project : MLPro - The integrative middleware framework for standardized machine learning +## -- Package : mlpro.oa.streams.tasks.anomalydetectors +## -- Module : paga_detectors.py +## ------------------------------------------------------------------------------------------------- +## -- History : +## -- yyyy-mm-dd Ver. Auth. Description +## -- 2023-06-08 0.0.0 SK Creation +## -- 2023-09-12 1.0.0 SK Release +## -- 2023-11-21 1.0.1 SK Time Stamp update +## -- 2024-02-25 1.1.0 SK Visualisation update +## -- 2024-04-10 1.2.0 DA/SK Code review +## -- 2024-05-07 1.2.1 SK Bug fix on groupanomaly visualisation +## -- 2024-08-12 1.3.0 DA Review and adjustments on documentation +## -- 2025-02-14 1.4.0 DA Refactoring +## -- 2025-02-17 1.5.0 DA Review and generalization +## ------------------------------------------------------------------------------------------------- + +""" +Ver. 1.5.0 (2025-02-17) + +This module provides an extended template for custom anomaly detectors that supports an optional +group anomaly detection based on point anomalies. +""" + + +from mlpro.bf.various import Log +from mlpro.bf.streams import Instance + +from mlpro.oa.streams.basics import StreamTask +from mlpro.oa.streams.tasks.anomalydetectors.basics import AnomalyDetector +from mlpro.oa.streams.tasks.anomalydetectors.anomalies import Anomaly, PointAnomaly, GroupAnomaly + + + +## ------------------------------------------------------------------------------------------------- +## ------------------------------------------------------------------------------------------------- +class AnomalyDetectorPAGA (AnomalyDetector): + """ + This class is an extended template offering an optional group anomaly detection based on point + anomalies. This detection can be turned on/off via the p_group_anomaly_det parameter. See + method _buffer_anomaly() for further details. + + Parameters + ---------- + p_group_anomaly_det : bool + Paramter to activate group anomaly detection. Default is True. + p_name : str + Optional name of the task. Default is None. + p_range_max : int + Maximum range of asynchonicity. See class Range. Default is Range.C_RANGE_PROCESS. + p_ada : bool + Boolean switch for adaptivitiy. Default = True. + p_duplicate_data : bool + If True, instances will be duplicated before processing. Default = False. + p_visualize : bool + Boolean switch for visualisation. Default = False. + p_logging + Log level (see constants of class Log). Default: Log.C_LOG_ALL + p_kwargs : dict + Further optional named parameters. + """ + + C_TYPE = 'Anomaly Detector PAGA' + +## ------------------------------------------------------------------------------------------------- + def __init__( self, + p_group_anomaly_det : bool = True, + p_name:str = None, + p_range_max = StreamTask.C_RANGE_THREAD, + p_ada : bool = True, + p_duplicate_data : bool = False, + p_visualize : bool = False, + p_logging = Log.C_LOG_ALL, + **p_kwargs ): + + super().__init__( p_name = p_name, + p_range_max = p_range_max, + p_ada = p_ada, + p_duplicate_data = p_duplicate_data, + p_visualize = p_visualize, + p_logging = p_logging, + **p_kwargs ) + + self._group_anomalies : list[Anomaly] = [] + self._group_anomalies_instances : list[Instance] = [] + self._group_ano_scores = [] + self._group_anomaly_det = p_group_anomaly_det + + +## ------------------------------------------------------------------------------------------------- + def _buffer_anomaly(self, p_anomaly): + """ + Method to be used to add a new anomaly. Please use as part of your algorithm. + + Parameters + ---------- + p_anomaly : Anomaly + Anomaly object to be added. + """ + + if ( not self._group_anomaly_det ) or ( type(p_anomaly) != PointAnomaly ): + return super()._buffer_anomaly( p_anomaly = p_anomaly) + + + if self._group_anomaly_det: + self._group_anomalies.append(p_anomaly) + self._group_anomalies_instances.append(p_anomaly.get_instances()[-1]) + self._group_ano_scores.append(p_anomaly.get_ano_scores()) + + if len(self._group_anomalies_instances) > 1: + + inst_2 = self._group_anomalies_instances[-1] + second = inst_2.id + inst_1 = self._group_anomalies_instances[-2] + first = inst_1.id + + if int(second) - 1 == int(first): + + if len(self._group_anomalies_instances) == 3: + + for i in range(2): + self._remove_anomaly(self._group_anomalies[i]) + + self._ano_id -= 2 + groupanomaly = GroupAnomaly( p_instances = self._group_anomalies_instances, + p_ano_scores = self._group_ano_scores, p_visualize=self._visualize, + p_raising_object = self, + p_tstampt = inst_2.tstamp ) + + super()._buffer_anomaly( p_anomaly = groupanomaly ) + + self._group_anomalies = [] + self._group_anomalies.append(groupanomaly) + + elif len(self._group_anomalies_instances) > 3: + self._group_anomalies[0].set_instances(self._group_anomalies_instances, self._group_ano_scores) + self._group_anomalies.pop(-1) + return self._group_anomalies[0] + + else: + super()._buffer_anomaly( p_anomaly = p_anomaly) + + else: + for groupanomaly in self._group_anomalies: + if isinstance(groupanomaly, GroupAnomaly): + groupanomaly.plot_update = False + self._group_anomalies = [] + self._group_anomalies_instances = [] + self._group_ano_scores = [] + self._group_anomalies.append(p_anomaly) + self._group_anomalies_instances.append(p_anomaly.get_instances()[-1]) + self._group_ano_scores.append(p_anomaly.get_ano_scores()) + super()._buffer_anomaly( p_anomaly = p_anomaly ) + else: + super()._buffer_anomaly( p_anomaly = p_anomaly) \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/paga_detectors.py b/src/mlpro/oa/streams/tasks/anomalydetectors/paga_detectors.py deleted file mode 100644 index 3af769917..000000000 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/paga_detectors.py +++ /dev/null @@ -1,162 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : mlpro.oa.streams.tasks.anomalydetectors -## -- Module : paga_detectors.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2023-06-08 0.0.0 SK Creation -## -- 2023-09-12 1.0.0 SK Release -## -- 2023-11-21 1.0.1 SK Time Stamp update -## -- 2024-02-25 1.1.0 SK Visualisation update -## -- 2024-04-10 1.2.0 DA/SK Code review -## -- 2024-05-07 1.2.1 SK Bug fix on groupanomaly visualisation -## -- 2024-08-12 1.3.0 DA Review and adjustments on documentation -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.3.0 (2024-08-12) - -This module provides a ready-to-use detector for point and group anomalies. -""" - -from mlpro.oa.streams.basics import * -from mlpro.oa.streams.tasks.anomalydetectors.basics import AnomalyDetector -from mlpro.oa.streams.tasks.anomalydetectors.anomalies import * - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -class AnomalyDetectorPAGA(AnomalyDetector): - """ - This class implements a ready-to-use detector for point and group anomalies. - - Parameters - ---------- - p_group_anomaly_det : bool - Paramter to activate group anomaly detection. Default is True. - p_name : str - Optional name of the task. Default is None. - p_range_max : int - Maximum range of asynchonicity. See class Range. Default is Range.C_RANGE_PROCESS. - p_ada : bool - Boolean switch for adaptivitiy. Default = True. - p_duplicate_data : bool - If True, instances will be duplicated before processing. Default = False. - p_visualize : bool - Boolean switch for visualisation. Default = False. - p_logging - Log level (see constants of class Log). Default: Log.C_LOG_ALL - p_kwargs : dict - Further optional named parameters. - - """ - - C_NAME = 'Anomaly Detector' - - C_PLOT_ACTIVE = True - C_PLOT_STANDALONE = False - -## ------------------------------------------------------------------------------------------------- - def __init__(self, - p_group_anomaly_det : bool = True, - p_name:str = None, - p_range_max = StreamTask.C_RANGE_THREAD, - p_ada : bool = True, - p_duplicate_data : bool = False, - p_visualize : bool = False, - p_logging=Log.C_LOG_ALL, - **p_kwargs): - - super().__init__(p_name = p_name, - p_range_max = p_range_max, - p_ada = p_ada, - p_duplicate_data = p_duplicate_data, - p_visualize = p_visualize, - p_logging = p_logging, - **p_kwargs) - - self.group_anomalies : list[Anomaly] = [] - self.group_anomalies_instances : list[Instance] = [] - self.group_ano_scores = [] - self.group_anomaly_det = p_group_anomaly_det - - -## ------------------------------------------------------------------------------------------------- - def _buffer_anomaly(self, p_anomaly): - """ - Method to be used to add a new anomaly. Please use as part of your algorithm. - - Parameters - ---------- - p_anomaly : Anomaly - Anomaly object to be added. - - Returns - ------- - p_anomaly : Anomaly - Modified Anomaly object. - """ - - if self.group_anomaly_det: - self.group_anomalies.append(p_anomaly) - self.group_anomalies_instances.append(p_anomaly.get_instances()[-1]) - self.group_ano_scores.append(p_anomaly.get_ano_scores()) - - if len(self.group_anomalies_instances) > 1: - - inst_2 = self.group_anomalies_instances[-1] - second = inst_2.get_id() - inst_1 = self.group_anomalies_instances[-2] - first = inst_1.get_id() - - if int(second) - 1 == int(first): - - if len(self.group_anomalies_instances) == 3: - - for i in range(2): - self.remove_anomaly(self.group_anomalies[i]) - self._ano_id -= 2 - anomaly = GroupAnomaly(p_instances=self.group_anomalies_instances, - p_ano_scores=self.group_ano_scores, p_visualize=self._visualize, - p_raising_object=self, - p_det_time=str(inst_2.get_tstamp())) - anomaly.set_id( p_id = self._get_next_anomaly_id() ) - self._anomalies[anomaly.get_id()] = anomaly - self.group_anomalies = [] - self.group_anomalies.append(anomaly) - return anomaly - - elif len(self.group_anomalies_instances) > 3: - self.group_anomalies[0].set_instances(self.group_anomalies_instances, self.group_ano_scores) - self.group_anomalies.pop(-1) - return self.group_anomalies[0] - - else: - p_anomaly.set_id( p_id = self._get_next_anomaly_id() ) - self._anomalies[p_anomaly.get_id()] = p_anomaly - return p_anomaly - - else: - for anomaly in self.group_anomalies: - if isinstance(anomaly, GroupAnomaly): - anomaly.plot_update = False - self.group_anomalies = [] - self.group_anomalies_instances = [] - self.group_ano_scores = [] - self.group_anomalies.append(p_anomaly) - self.group_anomalies_instances.append(p_anomaly.get_instances()[-1]) - self.group_ano_scores.append(p_anomaly.get_ano_scores()) - p_anomaly.set_id( p_id = self._get_next_anomaly_id() ) - self._anomalies[p_anomaly.get_id()] = p_anomaly - return p_anomaly - else: - p_anomaly.set_id( p_id = self._get_next_anomaly_id() ) - self._anomalies[p_anomaly.get_id()] = p_anomaly - return p_anomaly - - else: - p_anomaly.set_id( p_id = self._get_next_anomaly_id() ) - self._anomalies[p_anomaly.get_id()] = p_anomaly - return p_anomaly diff --git a/src/mlpro/oa/streams/tasks/anomalypredictors/__init__.py b/src/mlpro/oa/streams/tasks/anomalypredictors/__init__.py.off similarity index 100% rename from src/mlpro/oa/streams/tasks/anomalypredictors/__init__.py rename to src/mlpro/oa/streams/tasks/anomalypredictors/__init__.py.off diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/__init__.py b/src/mlpro/oa/streams/tasks/driftdetectors/__init__.py new file mode 100644 index 000000000..60bc06394 --- /dev/null +++ b/src/mlpro/oa/streams/tasks/driftdetectors/__init__.py @@ -0,0 +1 @@ +from mlpro.oa.streams.tasks.driftdetectors.basics import DriftDetector \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/basics.py b/src/mlpro/oa/streams/tasks/driftdetectors/basics.py new file mode 100644 index 000000000..3c36d0b1e --- /dev/null +++ b/src/mlpro/oa/streams/tasks/driftdetectors/basics.py @@ -0,0 +1,217 @@ +## ------------------------------------------------------------------------------------------------- +## -- Project : MLPro - The integrative middleware framework for standardized machine learning +## -- Package : mlpro.oa.streams.tasks.driftdetectors +## -- Module : basics.py +## ------------------------------------------------------------------------------------------------- +## -- History : +## -- yyyy-mm-dd Ver. Auth. Description +## -- 2025-02-12 0.1.0 DA Creation +## ------------------------------------------------------------------------------------------------- + +""" +Ver. 0.1.0 (2025-02-12) + +This module provides templates for drift detection to be used in the context of online adaptivity. +""" + +try: + from matplotlib.figure import Figure +except: + class Figure : pass + +from mlpro.bf.plot import PlotSettings +from mlpro.bf.streams import InstDict +from mlpro.bf.various import Log +from mlpro.oa.streams import OAStreamTask +from mlpro.oa.streams.tasks.driftdetectors.drifts import Drift + + + +## ------------------------------------------------------------------------------------------------- +## ------------------------------------------------------------------------------------------------- +class DriftDetector (OAStreamTask): + """ + Base class for online anomaly detectors. It raises an event whenever the beginning or the end + of a drift is detected. Please describe in child classes which event classes are used. Always + use the _raise_drift_event() method when raising an event. + + Parameters + ---------- + p_name : str + Optional name of the task. Default is None. + p_range_max : int + Maximum range of asynchonicity. See class Range. Default is Range.C_RANGE_PROCESS. + p_ada : bool + Boolean switch for adaptivitiy. Default = True. + p_duplicate_data : bool + If True, instances will be duplicated before processing. Default = False. + p_visualize : bool + Boolean switch for visualisation. Default = False. + p_logging + Log level (see constants of class Log). Default: Log.C_LOG_ALL + p_kwargs : dict + Further optional named parameters. + """ + + C_TYPE = 'Drift Detector' + C_PLOT_ACTIVE = True + C_PLOT_STANDALONE = False + +## ------------------------------------------------------------------------------------------------- + def __init__( self, + p_name:str = None, + p_range_max = OAStreamTask.C_RANGE_THREAD, + p_ada : bool = True, + p_duplicate_data : bool = False, + p_visualize : bool = False, + p_logging=Log.C_LOG_ALL, + **p_kwargs ): + + super().__init__( p_name = p_name, + p_range_max = p_range_max, + p_ada = p_ada, + p_duplicate_data = p_duplicate_data, + p_visualize = p_visualize, + p_logging = p_logging, + **p_kwargs ) + + self._drift_id = 0 + self._drifts = {} + + +## ------------------------------------------------------------------------------------------------- + def get_drifts(self): + """ + Method to return the current list of drifts. + + Returns + ------- + drifts : dict[Drift] + Current dictionary of drifts. + """ + + return self._drifts + + +## ------------------------------------------------------------------------------------------------- + def _get_next_drift_id(self): + """ + Methd that returns the id of the next drift. + + Returns + ------- + drift_id : int + """ + + self._drift_id +=1 + return self._drift_id + + +## ------------------------------------------------------------------------------------------------- + def _buffer_drift(self, p_drift:Drift): + """ + Method to be used internally to add a new drift object. Please use as part of your algorithm. + + Parameters + ---------- + p_drift : Drift + Drift object to be added. + """ + + p_drift.id = self._get_next_drift_id() + self._drifts[p_drift.id] = p_drift + + +## ------------------------------------------------------------------------------------------------- + def _remove_drift(self, p_drift:Drift): + """ + Method to remove an existing drift object. Please use as part of your algorithm. + + Parameters + ---------- + p_drift : Drift + Drift object to be removed. + """ + + p_drift.remove_plot(p_refresh=True) + del self._drifts[p_drift.id] + + +## ------------------------------------------------------------------------------------------------- + def _raise_drift_event( self, p_drift : Drift ): + """ + Specialized method to raise drift events. + + Parameters + ---------- + p_drift : Drift + Drift event object to be raised. + """ + + self._buffer_drift( p_drift = p_drift ) + + if self.get_visualization(): + p_drift.init_plot( p_figure=self._figure, p_plot_settings=self.get_plot_settings() ) + + return super()._raise_event( p_event_id = p_drift.event_id, p_event_object = p_drift ) + + +## ------------------------------------------------------------------------------------------------- + def init_plot(self, p_figure: Figure = None, p_plot_settings: PlotSettings = None): + + if not self.get_visualization(): return + + self._plot_ax_xlim = None + self._plot_ax_ylim = None + self._plot_ax_zlim = None + + super().init_plot( p_figure=p_figure, p_plot_settings=p_plot_settings) + + for drift in self._drifts.values(): + drift.init_plot(p_figure=p_figure, p_plot_settings = p_plot_settings) + + +## ------------------------------------------------------------------------------------------------- + def update_plot(self, p_inst : InstDict = None, **p_kwargs): + + if not self.get_visualization(): return + + # super().update_plot(p_inst, **p_kwargs) + + axes = self._plot_settings.axes + + ax_xlim_new = axes.get_xlim() + if self._plot_settings.view != PlotSettings.C_VIEW_ND: + axlimits_changed = ( self._plot_ax_xlim is None ) or ( self._plot_ax_xlim != ax_xlim_new ) + else: + axlimits_changed = False + + ax_ylim_new = axes.get_ylim() + axlimits_changed = axlimits_changed or ( self._plot_ax_ylim is None ) or ( self._plot_ax_ylim != ax_ylim_new ) + try: + ax_zlim_new = axes.get_zlim() + axlimits_changed = axlimits_changed or ( self._plot_ax_zlim is None ) or ( self._plot_ax_zlim != ax_zlim_new ) + except: + ax_zlim_new = None + + self._plot_ax_xlim = ax_xlim_new + self._plot_ax_ylim = ax_ylim_new + self._plot_ax_zlim = ax_zlim_new + + for drift in self._drifts.values(): + drift.update_plot( p_axlimits_changed = axlimits_changed, + p_xlim = ax_xlim_new, + p_ylim = ax_ylim_new, + p_zlim = ax_zlim_new, + **p_kwargs ) + + +## ------------------------------------------------------------------------------------------------- + def remove_plot(self, p_refresh: bool = True): + + if not self.get_visualization(): return + + # super().remove_plot( p_refresh = p_refresh ) + + for drift in self._drifts.values(): + drift.remove_plot(p_refresh=p_refresh) \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/__init__.py b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/__init__.py new file mode 100644 index 000000000..a4f80c4ae --- /dev/null +++ b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/__init__.py @@ -0,0 +1,2 @@ +from mlpro.oa.streams.tasks.driftdetectors.clusterbased.basics import DriftDetectorCB +from mlpro.oa.streams.tasks.driftdetectors.clusterbased.movement import DriftDetectorCBMovement \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/basics.py b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/basics.py new file mode 100644 index 000000000..6f0dc275b --- /dev/null +++ b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/basics.py @@ -0,0 +1,83 @@ +## -- ---------------------------------------------------------------------------------------------- +## -- Project : MLPro - The integrative middleware framework for standardized machine learning +## -- Package : mlpro.oa.streams.tasks.driftdetectors.clusterbased +## -- Module : basics.py +## ------------------------------------------------------------------------------------------------- +## -- History : +## -- yyyy-mm-dd Ver. Auth. Description +## -- 2025-02-12 0.1.0 DA Creation +## ------------------------------------------------------------------------------------------------- + +""" +Ver. 0.1.0 (2025-02-12) + +This module provides template for cluster-based drift detection algorithms to be used in the context of online adaptivity. +""" + +from mlpro.bf.various import Log +from mlpro.bf.math.properties import PropertyDefinitions + +from mlpro.oa.streams.basics import OAStreamTask +from mlpro.oa.streams.tasks.driftdetectors.basics import DriftDetector +from mlpro.oa.streams.tasks.clusteranalyzers.basics import ClusterAnalyzer + + + + +## ------------------------------------------------------------------------------------------------- +## ------------------------------------------------------------------------------------------------- +class DriftDetectorCB (DriftDetector): + """ + This is the base class for online-adaptive cluster-based drift detectors. It raises an event + when a drift is detected in a cluster dataset. + + Parameters + ---------- + p_clusterer : ClusterAnalyzer + Related cluster analyzer providing its clusters as the basis for drift detection + p_name : str + Optional name of the task. Default is None. + p_range_max : int + Maximum range of asynchonicity. See class Range. Default is Range.C_RANGE_PROCESS. + p_ada : bool + Boolean switch for adaptivitiy. Default = True. + p_duplicate_data : bool + If True, instances will be duplicated before processing. Default = False. + p_visualize : bool + Boolean switch for visualisation. Default = False. + p_logging + Log level (see constants of class Log). Default: Log.C_LOG_ALL + p_kwargs : dict + Further optional named parameters. + """ + + C_TYPE = 'Cluster-based Drift Detector' + + # List of cluster properties necessary for the algorithm + C_REQ_CLUSTER_PROPERTIES : PropertyDefinitions = [] + +## ------------------------------------------------------------------------------------------------- + def __init__( self, + p_clusterer : ClusterAnalyzer, + p_name : str = None, + p_range_max = OAStreamTask.C_RANGE_THREAD, + p_ada : bool = True, + p_duplicate_data : bool = False, + p_visualize : bool = False, + p_logging=Log.C_LOG_ALL, + **p_kwargs ): + + super().__init__( p_name = p_name, + p_range_max = p_range_max, + p_ada = p_ada, + p_duplicate_data = p_duplicate_data, + p_visualize = p_visualize, + p_logging = p_logging, + **p_kwargs ) + + self._clusterer = p_clusterer + unknown_prop = self._clusterer.align_cluster_properties(p_properties=self.C_REQ_CLUSTER_PROPERTIES) + + if len(unknown_prop) > 0: + raise RuntimeError("The following cluster properties need to be provided by the clusterer: ", unknown_prop) + \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/drift_detector.py b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/movement.py similarity index 71% rename from src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/drift_detector.py rename to src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/movement.py index a28ffd8ed..a25c363ec 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/cb_detectors/drift_detector.py +++ b/src/mlpro/oa/streams/tasks/driftdetectors/clusterbased/movement.py @@ -1,7 +1,7 @@ ## -- ---------------------------------------------------------------------------------------------- ## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : mlpro.oa.tasks.anomalydetectors.cb_detectors -## -- Module : drift_detector.py +## -- Package : mlpro.oa.tasks.driftdetectors.clusterbased +## -- Module : movement.py ## ------------------------------------------------------------------------------------------------- ## -- History : ## -- yyyy-mm-dd Ver. Auth. Description @@ -9,74 +9,108 @@ ## -- 2023-09-12 1.0.0 SK Release ## -- 2024-04-10 1.1.0 DA/SK Refactoring ## -- 2024-05-28 1.2.0 SK Refactoring +## -- 2025-02-12 2.0.0 DA Relocation, refactoring, renaming ## ------------------------------------------------------------------------------------------------- """ -Ver. 1.2.0 (2024-05-28) +Ver. 2.0.0 (2025-02-12) -This module provides cluster drift detector algorithm. +This module provides a cluster-based drift detector algorithm determining cluster movement. """ -from mlpro.oa.streams.basics import * -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.basics import AnomalyDetectorCB -from mlpro.oa.streams.tasks.anomalydetectors.anomalies.clusterbased.drift import ClusterDrift -from mlpro.oa.streams.tasks.clusteranalyzers.basics import ClusterAnalyzer -from mlpro.bf.streams import Instance, InstDict +import time + + +from mlpro.bf.various import Log +from mlpro.bf.streams import InstDict +from mlpro.bf.streams.tasks import StreamTask from mlpro.bf.math.properties import * + +from mlpro.oa.streams.tasks.driftdetectors.clusterbased import DriftDetectorCB +from mlpro.oa.streams.tasks.driftdetectors.drifts.clusterbased import DriftCBMovement +from mlpro.oa.streams.tasks.clusteranalyzers.basics import ClusterAnalyzer from mlpro.oa.streams.tasks.clusteranalyzers.clusters.properties.centroid import cprop_centroid2 -import time + ## ------------------------------------------------------------------------------------------------- ## ------------------------------------------------------------------------------------------------- -class ClusterDriftDetector(AnomalyDetectorCB): +class DriftDetectorCBMovement (DriftDetectorCB): """ This is the class for detecting change in velocity of clusters. + Parameters + ---------- + p_clusterer : ClusterAnalyzer + Related cluster analyzer providing its clusters as the basis for drift detection + p_instantaneous_velocity_change_detection : bool = True + Boolean switch for instantaneous velocity change detection (Default: True) + p_min_velocity_threshold : float = 0.01 + Threshold for minimum velocity (Default: 0.01) + p_state_change_detection : bool = False + Boolean switch for state change detection (Default: False) + p_min_acceleration_threshold : float = None + Threshold for minimum acceleration (Default: None) + p_name : str + Optional name of the task. Default is None. + p_range_max : int + Maximum range of asynchonicity. See class Range. Default is Range.C_RANGE_PROCESS. + p_ada : bool + Boolean switch for adaptivitiy. Default = True. + p_duplicate_data : bool + If True, instances will be duplicated before processing. Default = False. + p_visualize : bool + Boolean switch for visualisation. Default = False. + p_logging + Log level (see constants of class Log). Default: Log.C_LOG_ALL + p_kwargs : dict + Further optional named parameters. + """ + + C_TYPE = 'Cluster-based Drift Detector (Movement)' C_PROPERTY_DEFINITIONS : PropertyDefinitions = [cprop_centroid2] ## ------------------------------------------------------------------------------------------------- - def __init__(self, - p_clusterer : ClusterAnalyzer = None, - p_instantaneous_velocity_change_detection : bool = True, - p_min_velocity_threshold : float = 0.01, - p_state_change_detection : bool = False, - p_min_acceleration_threshold : float = False, - p_buffer_size = 5, - p_ema_alpha : float = 0.7, - p_with_time_calculation : bool = True, - p_initial_skip : int = 1, - p_name:str = None, - p_range_max = StreamTask.C_RANGE_THREAD, - p_ada : bool = True, - p_duplicate_data : bool = False, - p_visualize : bool = False, - p_logging=Log.C_LOG_ALL, - **p_kwargs): - - super().__init__(p_clusterer = p_clusterer, - p_name = p_name, - p_range_max = p_range_max, - p_ada = p_ada, - p_duplicate_data = p_duplicate_data, - p_visualize = p_visualize, - p_logging = p_logging, - **p_kwargs) + def __init__( self, + p_clusterer : ClusterAnalyzer, + p_instantaneous_velocity_change_detection : bool = True, + p_min_velocity_threshold : float = 0.01, + p_state_change_detection : bool = False, + p_min_acceleration_threshold : float = None, + p_buffer_size = 5, + p_ema_alpha : float = 0.7, + p_with_time_calculation : bool = True, + p_initial_skip : int = 1, + p_name:str = None, + p_range_max = StreamTask.C_RANGE_THREAD, + p_ada : bool = True, + p_duplicate_data : bool = False, + p_visualize : bool = False, + p_logging=Log.C_LOG_ALL, + **p_kwargs ): + + super().__init__( p_clusterer = p_clusterer, + p_name = p_name, + p_range_max = p_range_max, + p_ada = p_ada, + p_duplicate_data = p_duplicate_data, + p_visualize = p_visualize, + p_logging = p_logging, + **p_kwargs ) # Parameters for dynamic threshold, EMA smoothing, and time-based calculation - self._inst_change_det = p_instantaneous_velocity_change_detection - self._state_change_det = p_state_change_detection - self._min_vel_thresh = p_min_velocity_threshold - self._min_acc_thresh = p_min_acceleration_threshold - self._buffer_size = p_buffer_size - self._ema_alpha = p_ema_alpha - self._with_time_calculation = p_with_time_calculation - self._init_skip = p_initial_skip - self._visualize = p_visualize - self._count = 0 - self._count_change = {} + self._inst_change_det : bool = p_instantaneous_velocity_change_detection + self._state_change_det : bool = p_state_change_detection + self._min_vel_thresh : float = p_min_velocity_threshold + self._min_acc_thresh : float = p_min_acceleration_threshold + self._buffer_size = p_buffer_size + self._ema_alpha = p_ema_alpha + self._with_time_calculation : bool = p_with_time_calculation + self._init_skip : int = p_initial_skip + self._count : int = 0 + self._count_change = {} # Data structures for storing previous states and buffers self._centroids_history = {} @@ -145,13 +179,14 @@ def _run(self, p_inst : InstDict): # Raise Anomaly event if (self._count >= self._init_skip): if len(drifting_clusters) != 0: - anomaly = ClusterDrift(p_id = self._get_next_anomaly_id, - p_instances=new_instances, - p_clusters=drifting_clusters, - p_properties=properties, - p_det_time=str(inst.get_tstamp()), - p_visualize=self._visualize) - self._raise_anomaly_event(anomaly) + drift = DriftCBMovement( p_drift_status = True, + p_id = self._get_next_drift_id(), + p_instances=new_instances, + p_clusters=drifting_clusters, + p_properties=properties, + p_det_time=str(inst.get_tstamp()), + p_visualize=self._visualize ) + self._raise_drift_event( p_drift = drift ) if self._count < self._init_skip: self._count += 1 diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/__init__.py b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/__init__.py new file mode 100644 index 000000000..7651d8c8f --- /dev/null +++ b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/__init__.py @@ -0,0 +1,2 @@ +from mlpro.oa.streams.tasks.driftdetectors.drifts.basics import Drift +from mlpro.oa.streams.tasks.driftdetectors.drifts.clusterbased import * \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/basics.py b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/basics.py new file mode 100644 index 000000000..7b068a888 --- /dev/null +++ b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/basics.py @@ -0,0 +1,98 @@ +## ------------------------------------------------------------------------------------------------- +## -- Project : MLPro - The integrative middleware framework for standardized machine learning +## -- Package : mlpro.oa.tasks.driftdetectors.drifts +## -- Module : basics.py +## ------------------------------------------------------------------------------------------------- +## -- History : +## -- yyyy-mm-dd Ver. Auth. Description +## -- 2025-02-12 0.1.0 DA Creation +## -- 2025-02-13 0.2.0 DA Class Drift: new attributes event_id, drift_status +## -- 2025-02-19 0.3.0 DA Class Drift: new parent Renomalizable +## ------------------------------------------------------------------------------------------------- + +""" +Ver. 0.3.0 (2025-02-19) + +This module provides a template class for types of data drift to be used in drift detection algorithms. +""" + +from datetime import datetime + +from mlpro.bf.various import Id +from mlpro.bf.plot import Plottable +from mlpro.bf.events import Event +from mlpro.bf.math.normalizers import Renormalizable + + + +## ------------------------------------------------------------------------------------------------- +## ------------------------------------------------------------------------------------------------- +class Drift (Id, Event, Plottable, Renormalizable): + """ + This is the base class for drift events which can be raised by drift detectors when the beginning + or end of a drift is detected. + + Parameters + ---------- + p_drift_status : bool + Determines whether a new drift starts (True) or an existing drift ends (False). + p_id : int + Drift ID. Default value = 0. + p_tstamp : datetime + Time stamp of drift detection. Default = None. + p_visualize : bool + Boolean switch for visualisation. Default = False. + p_raising_object : object + Reference of the object raised. Default = None. + **p_kwargs + Further optional keyword arguments. + + Attributes + ---------- + event_id : str + Event id to be used when raising a drift event object. It is a string consisting of the + class name and one of the postfixes '(ON)', '(OFF)' depending on the drift status. + """ + + C_TYPE = 'Drift' + C_PLOT_STANDALONE = False + +## ------------------------------------------------------------------------------------------------- + def __init__( self, + p_drift_status : bool, + p_id : int = 0, + p_tstamp : datetime = None, + p_visualize : bool = False, + p_raising_object : object = None, + **p_kwargs): + + Id.__init__( self, p_id = p_id ) + + Event.__init__( self, + p_raising_object=p_raising_object, + p_tstamp=p_tstamp, + **p_kwargs ) + + Plottable.__init__( self, p_visualize = p_visualize ) + + self._drift_status : bool = p_drift_status + + if p_drift_status: + self._event_id = type(self).__name__ + '(ON)' + else: + self._event_id = type(self).__name__ + '(OFF)' + + +## ------------------------------------------------------------------------------------------------- + def _get_drift_status(self) -> bool: + return self._drift_status + + +## ------------------------------------------------------------------------------------------------- + def _get_event_id(self) -> str: + return self._event_id + + +## ------------------------------------------------------------------------------------------------- + drift_status = property( fget = _get_drift_status ) + event_id = property( fget = _get_event_id ) diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/__init__.py b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/__init__.py new file mode 100644 index 000000000..620733649 --- /dev/null +++ b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/__init__.py @@ -0,0 +1,2 @@ +from mlpro.oa.streams.tasks.driftdetectors.drifts.clusterbased.basics import DriftCB +from mlpro.oa.streams.tasks.driftdetectors.drifts.clusterbased.movement import DriftCBMovement \ No newline at end of file diff --git a/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/basics.py b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/basics.py new file mode 100644 index 000000000..2b79382a2 --- /dev/null +++ b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/basics.py @@ -0,0 +1,128 @@ +## ------------------------------------------------------------------------------------------------- +## -- Project : MLPro - The integrative middleware framework for standardized machine learning +## -- Package : mlpro.oa.tasks.driftdetectors.drifts.clusterbased +## -- Module : basics.py +## ------------------------------------------------------------------------------------------------- +## -- History : +## -- yyyy-mm-dd Ver. Auth. Description +## -- 2025-02-12 1.0.0 DA Creation +## ------------------------------------------------------------------------------------------------- + +""" +Ver. 0.1.0 (2025-02-12) + +This module provides a template class for cluster-based drifts to be used in cluster-based drift +detection algorithms. +""" + +from datetime import datetime + +try: + from matplotlib.figure import Figure +except: + class Figure : pass + +from mlpro.bf.mt import PlotSettings +from mlpro.oa.streams.tasks.driftdetectors.drifts.basics import Drift +from mlpro.oa.streams.tasks.clusteranalyzers.clusters.basics import Cluster + + + +## ------------------------------------------------------------------------------------------------- +## ------------------------------------------------------------------------------------------------- +class DriftCB (Drift): + """ + Sub-type for cluster-based drift events. + + Parameters + ---------- + p_id : int + Drift ID. Default value = 0. + p_tstamp : datetime + Time stamp of drift detection. Default = None. + p_visualize : bool + Boolean switch for visualisation. Default = False. + p_raising_object : object + Reference of the object raised. Default = None. + p_clusters : dict[Cluster] + Clusters associated with the anomaly. Default = None. + p_properties : dict + Poperties of clusters associated with the anomaly. Default = None. + **p_kwargs + Further optional keyword arguments. + """ + + C_PLOT_ACTIVE = True + +## ------------------------------------------------------------------------------------------------- + def __init__(self, + p_drift_status : bool, + p_id : int = 0, + p_tstamp : datetime = None, + p_visualize : bool = False, + p_raising_object : object = None, + p_clusters : dict[Cluster] = None, + p_properties : dict = None, + **p_kwargs): + + super().__init__( p_drift_status = p_drift_status, + p_id = p_id, + p_tstamp = p_tstamp, + p_visualize = p_visualize, + p_raising_object = p_raising_object, + **p_kwargs ) + + self._clusters : dict[Cluster] = p_clusters + self._properties : dict = p_properties + + +## ------------------------------------------------------------------------------------------------- + def get_clusters(self) -> dict[Cluster]: + """ + Method that returns the clusters associated with the drift. + + Returns + ------- + dict[Cluster] + Dictionary of clusters. + """ + return self._clusters + + +## ------------------------------------------------------------------------------------------------- + def get_properties(self) -> dict: + """ + Method that returns the properties of clusters associated with the drift. + + Returns + ------- + dict + Dictionary of properties. + """ + return self._properties + + +## ------------------------------------------------------------------------------------------------- + def _init_plot_2d(self, p_figure: Figure, p_settings: PlotSettings): + super()._init_plot_2d(p_figure=p_figure, p_settings=p_settings) + + cluster : Cluster = None + + for cluster in self._clusters.values(): + if self.drift_status: + cluster.color = "red" + else: + raise NotImplementedError + + +## ------------------------------------------------------------------------------------------------- + def _init_plot_3d(self, p_figure: Figure, p_settings: PlotSettings): + super()._init_plot_3d(p_figure=p_figure, p_settings=p_settings) + + cluster : Cluster = None + + for cluster in self._clusters.values(): + if self.drift_status: + cluster.color = "red" + else: + raise NotImplementedError diff --git a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/drift.py b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/movement.py similarity index 56% rename from src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/drift.py rename to src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/movement.py index 2a3efd241..6b00e92f5 100644 --- a/src/mlpro/oa/streams/tasks/anomalydetectors/anomalies/drift.py +++ b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/clusterbased/movement.py @@ -1,34 +1,29 @@ ## ------------------------------------------------------------------------------------------------- ## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : mlpro.oa.tasks.anomalydetectors.anomalies -## -- Module : drift.py +## -- Package : mlpro.oa.tasks.driftdetectors.drifts.clusterbased +## -- Module : movement.py ## ------------------------------------------------------------------------------------------------- ## -- History : ## -- yyyy-mm-dd Ver. Auth. Description -## -- 2023-06-08 0.0.0 SK Creation -## -- 2023-09-12 1.0.0 SK Release -## -- 2024-04-10 1.2.0 DA/SK Refactoring +## -- 2025-02-13 1.0.0 DA Creation ## ------------------------------------------------------------------------------------------------- """ -Ver. 1.2.0 (2024-04-10) +Ver. 1.0.0 (2025-02-13) -This module provides a template class for drift anomaly to be used in anomaly detection algorithms. +This module provides a sub-typ of class DriftCB related to cluster movement. """ -from mlpro.oa.streams.tasks.anomalydetectors.anomalies.basics import Anomaly +from mlpro.oa.streams.tasks.driftdetectors.drifts.clusterbased.basics import DriftCB + ## ------------------------------------------------------------------------------------------------- ## ------------------------------------------------------------------------------------------------- -class DriftAnomaly (Anomaly): +class DriftCBMovement (DriftCB): """ - Event class to be raised when drift is detected. + Sub-type indicating the begin or end of a cluster movement. """ - C_NAME = 'Drift' - - - - + C_PLOT_ACTIVE = True \ No newline at end of file diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/systems/.gitkeep b/src/mlpro/oa/streams/tasks/driftdetectors/drifts/instancebased/__init__.py similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_oa/systems/.gitkeep rename to src/mlpro/oa/streams/tasks/driftdetectors/drifts/instancebased/__init__.py diff --git a/doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/.gitkeep b/src/mlpro/oa/streams/tasks/driftdetectors/instancebased/__init__.py similarity index 100% rename from doc/rtd/content/99_appendices/appendix2/sub/pool/mlpro_sl/.gitkeep rename to src/mlpro/oa/streams/tasks/driftdetectors/instancebased/__init__.py diff --git a/test/howtos/oa/howto_oa_streams_cbad_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py b/test/howtos/oa/howto_oa_streams_cbad_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py deleted file mode 100644 index 90cc691b3..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py +++ /dev/null @@ -1,180 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_002_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -4. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import ClusterDriftDetector - - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=2, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.5, 0.6], - p_points_of_change_velocities=[1000, 1200], - p_num_clusters_for_change_velocities=2, - p_seed=12, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.05, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_instantaneous_velocity_change_detection=True, - p_min_velocity_threshold=1, - p_initial_skip=400, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[1].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbad_002_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_2d.py b/test/howtos/oa/howto_oa_streams_cbad_002_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_2d.py deleted file mode 100644 index 3bfc52da4..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_002_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_2d.py +++ /dev/null @@ -1,208 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_002_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_2d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Normalizing streaming data using the MinMax Normalizer, with boundary detector as a predecessor task. - -4. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -5. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" - -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers.kmeans import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks.anomalydetectors import ClusterDriftDetector -from mlpro.oa.streams.tasks import NormalizerMinMax -from mlpro.oa.streams.tasks import BoundaryDetector - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=2, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.5, 0.6], - p_points_of_change_velocities=[1000, 1200], - p_num_clusters_for_change_velocities=2, - p_seed=12, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - task_bd = BoundaryDetector( p_name='T1 - Boundary Detector', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_bd) - - - task_norm = NormalizerMinMax( p_name='T2 - MinMax Normalizer', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task = task_norm, p_pred_tasks=[task_bd]) - - task_bd.register_event_handler( - p_event_id=BoundaryDetector.C_EVENT_ADAPTED, - p_event_handler=task_norm.adapt_on_event - ) - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.1, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer, p_pred_tasks=[task_norm]) - - task_norm.register_event_handler( p_event_id=NormalizerMinMax.C_EVENT_ADAPTED, - p_event_handler=task_clusterer.renormalize_on_event ) - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_instantaneous_velocity_change_detection=True, - p_min_velocity_threshold=0.015, - p_ema_alpha=0.9, - p_initial_skip=400, - p_visualize=p_visualize, - p_logging=p_logging) - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[3].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') - diff --git a/test/howtos/oa/howto_oa_streams_cbad_003_KMeans_ClusterDriftDetector_StateDetection_2d.py b/test/howtos/oa/howto_oa_streams_cbad_003_KMeans_ClusterDriftDetector_StateDetection_2d.py deleted file mode 100644 index 0b1789aed..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_003_KMeans_ClusterDriftDetector_StateDetection_2d.py +++ /dev/null @@ -1,182 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_003_KMeans_ClusterDriftDetector_StateDetection_2d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -4. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" - -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers.kmeans import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks.anomalydetectors import ClusterDriftDetector - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=2, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.5, 0.6], - p_points_of_change_velocities=[1000, 1200], - p_num_clusters_for_change_velocities=2, - p_seed=12, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.05, - p_sigma=3, - p_seed=40, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_state_change_detection=True, - p_instantaneous_velocity_change_detection=False, - p_min_velocity_threshold=1, - p_initial_skip=400, - p_buffer_size=50, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[1].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbad_004_KMeans_ClusterDriftDetector_StateDetection_normalization_2d.py b/test/howtos/oa/howto_oa_streams_cbad_004_KMeans_ClusterDriftDetector_StateDetection_normalization_2d.py deleted file mode 100644 index e590a33e6..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_004_KMeans_ClusterDriftDetector_StateDetection_normalization_2d.py +++ /dev/null @@ -1,209 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_004_KMeans_ClusterDriftDetector_StateDetection_normalization_2d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Normalizing streaming data using the MinMax Normalizer, with boundary detector as a predecessor task. - -4. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -5. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" - -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import BoundaryDetector, NormalizerMinMax, ClusterDriftDetector - - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=2, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.5, 0.6], - p_points_of_change_velocities=[1000, 1200], - p_num_clusters_for_change_velocities=2, - p_seed=12, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - task_bd = BoundaryDetector( p_name='T1 - Boundary Detector', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_bd) - - - task_norm = NormalizerMinMax( p_name='T2 - MinMax Normalizer', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task = task_norm, p_pred_tasks=[task_bd]) - - task_bd.register_event_handler( - p_event_id=BoundaryDetector.C_EVENT_ADAPTED, - p_event_handler=task_norm.adapt_on_event - ) - - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.05, - p_sigma=3, - p_seed=40, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - task_norm.register_event_handler( p_event_id=NormalizerMinMax.C_EVENT_ADAPTED, - p_event_handler=task_clusterer.renormalize_on_event ) - - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_state_change_detection=True, - p_instantaneous_velocity_change_detection=False, - p_min_velocity_threshold=0.01, - p_initial_skip=400, - p_buffer_size=50, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[3].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbad_005_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py b/test/howtos/oa/howto_oa_streams_cbad_005_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py deleted file mode 100644 index ff54c0cf3..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_005_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py +++ /dev/null @@ -1,180 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_005_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -4. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" - -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import ClusterDriftDetector - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=3, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.5, 0.6], - p_points_of_change_velocities=[1000, 1200], - p_num_clusters_for_change_velocities=2, - p_seed=23, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.05, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_instantaneous_velocity_change_detection=True, - p_min_velocity_threshold=1, - p_initial_skip=400, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[1].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbad_006_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py b/test/howtos/oa/howto_oa_streams_cbad_006_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py deleted file mode 100644 index 1ae780b75..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_006_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py +++ /dev/null @@ -1,206 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_006_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_3d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Normalizing streaming data using the MinMax Normalizer, with boundary detector as a predecessor task. - -4. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -5. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" - -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers.kmeans import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import BoundaryDetector, NormalizerMinMax, ClusterDriftDetector - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=3, - p_num_instances=5000, - p_num_clusters=5, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.3, 0.8, 0.6], - p_points_of_change_velocities=[1000, 1200, 1500], - p_num_clusters_for_change_velocities=3, - p_seed=23, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - task_bd = BoundaryDetector( p_name='T1 - Boundary Detector', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_bd) - - - task_norm = NormalizerMinMax( p_name='T2 - MinMax Normalizer', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task = task_norm, p_pred_tasks=[task_bd]) - - task_bd.register_event_handler( - p_event_id=BoundaryDetector.C_EVENT_ADAPTED, - p_event_handler=task_norm.adapt_on_event - ) - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=5, - p_halflife=0.1, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - task_norm.register_event_handler( p_event_id=NormalizerMinMax.C_EVENT_ADAPTED, - p_event_handler=task_clusterer.renormalize_on_event ) - - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_instantaneous_velocity_change_detection=True, - p_min_velocity_threshold=0.01, - p_initial_skip=400, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[3].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbad_007_KMeans_ClusterDriftDetector_StateDetection_3d.py b/test/howtos/oa/howto_oa_streams_cbad_007_KMeans_ClusterDriftDetector_StateDetection_3d.py deleted file mode 100644 index 747ee214d..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_007_KMeans_ClusterDriftDetector_StateDetection_3d.py +++ /dev/null @@ -1,182 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_007_KMeans_ClusterDriftDetector_StateDetection_3d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -4. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" - -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import ClusterDriftDetector - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=3, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.5, 0.6], - p_points_of_change_velocities=[1000, 1200, 1500], - p_num_clusters_for_change_velocities=2, - p_seed=23, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.05, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_state_change_detection=True, - p_instantaneous_velocity_change_detection=False, - p_min_velocity_threshold=1, - p_initial_skip=400, - p_buffer_size=50, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[1].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbad_008_KMeans_ClusterDriftDetector_StateDetection_normalization_3d.py b/test/howtos/oa/howto_oa_streams_cbad_008_KMeans_ClusterDriftDetector_StateDetection_normalization_3d.py deleted file mode 100644 index aae113b6f..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_008_KMeans_ClusterDriftDetector_StateDetection_normalization_3d.py +++ /dev/null @@ -1,208 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_008_KMeans_ClusterDriftDetector_StateDetection_normalization_3d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Normalizing streaming data using the MinMax Normalizer, with boundary detector as a predecessor task. - -4. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -5. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" - -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import BoundaryDetector, NormalizerMinMax, ClusterDriftDetector - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=3, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.5, 0.6], - p_points_of_change_velocities=[1000, 1200, 1500], - p_num_clusters_for_change_velocities=2, - p_seed=23, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - task_bd = BoundaryDetector( p_name='T1 - Boundary Detector', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_bd) - - - task_norm = NormalizerMinMax( p_name='T2 - MinMax Normalizer', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task = task_norm, p_pred_tasks=[task_bd]) - - task_bd.register_event_handler( - p_event_id=BoundaryDetector.C_EVENT_ADAPTED, - p_event_handler=task_norm.adapt_on_event - ) - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.05, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - task_norm.register_event_handler( p_event_id=NormalizerMinMax.C_EVENT_ADAPTED, - p_event_handler=task_clusterer.renormalize_on_event ) - - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_state_change_detection=True, - p_instantaneous_velocity_change_detection=False, - p_min_velocity_threshold=0.01, - p_initial_skip=400, - p_buffer_size=50, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[3].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbad_009_KMeans_ClusterDriftDetector_InstantaneousDetection_5d.py b/test/howtos/oa/howto_oa_streams_cbad_009_KMeans_ClusterDriftDetector_InstantaneousDetection_5d.py deleted file mode 100644 index b0483ece0..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_009_KMeans_ClusterDriftDetector_InstantaneousDetection_5d.py +++ /dev/null @@ -1,180 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_009_KMeans_ClusterDriftDetector_InstantaneousDetection_5d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -4. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" - -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import ClusterDriftDetector - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=5, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.8, 0.8], - p_points_of_change_velocities=[1000, 1200], - p_num_clusters_for_change_velocities=2, - p_seed=23, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.05, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_instantaneous_velocity_change_detection=True, - p_min_velocity_threshold=1.5, - p_initial_skip=400, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[1].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbad_010_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_5d.py b/test/howtos/oa/howto_oa_streams_cbad_010_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_5d.py deleted file mode 100644 index 05d224c20..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_010_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_5d.py +++ /dev/null @@ -1,205 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_010_KMeans_ClusterDriftDetector_InstantaneousDetection_normalization_5d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Normalizing streaming data using the MinMax Normalizer, with boundary detector as a predecessor task. - -4. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -5. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers.kmeans import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import BoundaryDetector, NormalizerMinMax, ClusterDriftDetector - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=5, - p_num_instances=5000, - p_num_clusters=4, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.6, 1.0, 0.3], - p_points_of_change_velocities=[1200, 1500, 1700], - p_num_clusters_for_change_velocities=3, - p_seed=23, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - task_bd = BoundaryDetector( p_name='T1 - Boundary Detector', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_bd) - - - task_norm = NormalizerMinMax( p_name='T2 - MinMax Normalizer', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task = task_norm, p_pred_tasks=[task_bd]) - - task_bd.register_event_handler( - p_event_id=BoundaryDetector.C_EVENT_ADAPTED, - p_event_handler=task_norm.adapt_on_event - ) - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=4, - p_halflife=0.1, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - task_norm.register_event_handler( p_event_id=NormalizerMinMax.C_EVENT_ADAPTED, - p_event_handler=task_clusterer.renormalize_on_event ) - - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_instantaneous_velocity_change_detection=True, - p_min_velocity_threshold=0.01, - p_initial_skip=400, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[3].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbad_011_KMeans_ClusterDriftDetector_StateDetection_5d.py b/test/howtos/oa/howto_oa_streams_cbad_011_KMeans_ClusterDriftDetector_StateDetection_5d.py deleted file mode 100644 index 4a34d4269..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_011_KMeans_ClusterDriftDetector_StateDetection_5d.py +++ /dev/null @@ -1,182 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_011_KMeans_ClusterDriftDetector_StateDetection_5d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -4. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" - -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import ClusterDriftDetector - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=5, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.8, 0.8], - p_points_of_change_velocities=[1000, 1200], - p_num_clusters_for_change_velocities=2, - p_seed=23, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.05, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_state_change_detection=True, - p_instantaneous_velocity_change_detection=False, - p_min_velocity_threshold=1.5, - p_initial_skip=400, - p_buffer_size=50, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[1].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbad_012_KMeans_ClusterDriftDetector_StateDetection_normalization_5d.py b/test/howtos/oa/howto_oa_streams_cbad_012_KMeans_ClusterDriftDetector_StateDetection_normalization_5d.py deleted file mode 100644 index ff17f43ae..000000000 --- a/test/howtos/oa/howto_oa_streams_cbad_012_KMeans_ClusterDriftDetector_StateDetection_normalization_5d.py +++ /dev/null @@ -1,208 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbad_012_KMeans_ClusterDriftDetector_StateDetection_normalization_5d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-04 1.0.0 SK Creation -## -- 2024-10-29 1.0.1 DA Refactoring -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.0.1 (2024-10-29) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Normalizing streaming data using the MinMax Normalizer, with boundary detector as a predecessor task. - -4. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -5. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" - -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers.kmeans import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks import BoundaryDetector, NormalizerMinMax, ClusterDriftDetector - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=5, - p_num_instances=5000, - p_num_clusters=4, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.6, 1.0, 0.3], - p_points_of_change_velocities=[1200, 1500, 1700], - p_num_clusters_for_change_velocities=3, - p_seed=23, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - task_bd = BoundaryDetector( p_name='T1 - Boundary Detector', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_bd) - - - task_norm = NormalizerMinMax( p_name='T2 - MinMax Normalizer', - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task = task_norm, p_pred_tasks=[task_bd]) - - task_bd.register_event_handler( - p_event_id=BoundaryDetector.C_EVENT_ADAPTED, - p_event_handler=task_norm.adapt_on_event - ) - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=4, - p_halflife=0.1, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - task_norm.register_event_handler( p_event_id=NormalizerMinMax.C_EVENT_ADAPTED, - p_event_handler=task_clusterer.renormalize_on_event ) - - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector(p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_state_change_detection=True, - p_instantaneous_velocity_change_detection=False, - p_min_velocity_threshold=0.01, - p_initial_skip=400, - p_buffer_size=50, - p_visualize=p_visualize, - p_logging=p_logging) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[3].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_cbap_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off b/test/howtos/oa/howto_oa_streams_cbap_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off deleted file mode 100644 index 9dad40ce2..000000000 --- a/test/howtos/oa/howto_oa_streams_cbap_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py.off +++ /dev/null @@ -1,199 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : test.howtos.oa -## -- Module : howto_oa_streams_cbap_001_KMeans_ClusterDriftDetector_InstantaneousDetection_2d.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2024-08-14 0.0.0 DA Copied from howto_oa_streams_cbad_001_KMeans_....py -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 0.0.0 (2024-08-14) - -This module is done as a part of the Master's Thesis named Online Adaptive Cluster-based Anomaly -Detection, authored by Syamraj Purushamparambil Satheesh, as a part of the course -"Systems Engineering and Engineering Management" in the Department of "Electrical Energy Engineering", -supervised by Dipl.-Info. Detlef Arend. - - -This module demonstrates cluster-based anomlay detection, on synthetic 2-dimensional data generated by -the StreamMLProClusterGenerator, using the ClusterDriftDetector anomaly detection algorithm employing -the KMeans clustering algorithm wrapped from River library, to detect ClusterDrift anomaly. - -You will learn: - -1. Generating synthetic data using the native StreamMLProClusterGenerator. - -2. Creating a workflow and tasks in MLPro-OA. - -3. Clustering the normalized streaming data using the WrRiverKMeans2MLPro, with normalizer as a predecessor. - -4. Detecting drift anomalies in the clustered data using the ClusterDriftDetector. - -In the visualization, the cross hair designating the cluster's centroid becomes'red' in colour when -an anomaly is detected linked to that specific cluster. An overview of the anomalies is displayed on -the screen following the run. - -""" -from mlpro.bf.math import Event -from mlpro.bf.mt import Event -from mlpro.bf.streams.streams import * -from mlpro.bf.various import Log -from mlpro.oa.streams import * -from mlpro_int_river.wrappers.clusteranalyzers.kmeans import WrRiverKMeans2MLPro -from mlpro.oa.streams.tasks.anomalydetectors.cb_detectors.drift_detector import ClusterDriftDetector -from mlpro.oa.streams.tasks.anomalypredictors.tsf.ad_based import AnomalyPredictorAD - - - - -class DevindisPredictor (AnomalyPredictorAD): - - def _adapt_on_event(self, p_event_id: str, p_event_object: Event) -> bool: - - # Set breakpoint here... - pass - - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -# 1 Prepare a scenario -class MyScenario(OAStreamScenario): - C_NAME = 'ClusterDriftScenario' - - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1.1 Get MLPro benchmark Clutser Generator - stream = StreamMLProClusterGenerator(p_num_dim=2, - p_num_instances=5000, - p_num_clusters=3, - p_radii=[100], - p_velocities=[0.0], - p_change_velocities=True, - p_changed_velocities=[0.5, 0.6], - p_points_of_change_velocities=[1000, 1200], - p_num_clusters_for_change_velocities=2, - p_seed=12, - p_logging=p_logging) - - - # 1.2 Set up a stream workflow - - # 1.2.1 Creation of a workflow - workflow = OAStreamWorkflow( p_name='Anomaly Detection', - p_range_max=OAStreamWorkflow.C_RANGE_NONE, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 1.2.2 Creation of tasks and add them to the workflow - - # Cluster Analyzer - task_clusterer = WrRiverKMeans2MLPro( p_name='#1: KMeans@River', - p_n_clusters=3, - p_halflife=0.05, - p_sigma=3, - p_seed=42, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task = task_clusterer) - - # Anomaly Detector - task_anomaly_detector = ClusterDriftDetector( p_clusterer=task_clusterer, - p_with_time_calculation=False, - p_instantaneous_velocity_change_detection=True, - p_min_velocity_threshold=1, - p_initial_skip=400, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task=task_anomaly_detector, p_pred_tasks=[task_clusterer]) - - # Anomaly Predictor - task_anomaly_predictor = DevindisPredictor( p_visualize=p_visualize, - p_logging=p_logging) - - task_anomaly_detector.register_event_handler( p_event_id = 'Anomaly', - p_event_handler = task_anomaly_predictor.adapt_on_event ) - - # 1.3 Return stream and workflow - return stream, workflow - - - -# 2 Prepare for test -if __name__ == "__main__": - cycle_limit = 2000 - logging = Log.C_LOG_ALL - visualize = True - step_rate = 1 -else: - cycle_limit = 5 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 3 Instantiate the stream scenario -myscenario = MyScenario( p_mode=Mode.C_MODE_SIM, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging ) - -# 4 Reset and run own stream scenario -myscenario.reset() - -if __name__ == "__main__": - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_2D, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - - - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_W, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - - - -# 5 Summary -anomalies = myscenario.get_workflow()._tasks[1].get_anomalies() -detected_anomalies= len(anomalies) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, 'Here is the recap of the anomaly detector') -myscenario.log(Log.C_LOG_TYPE_W, 'Number of anomalies: ', detected_anomalies ) - -for anomaly in anomalies.values(): - anomaly_name = anomaly.C_NAME - anomaly_id = str(anomaly.id) - clusters_affected = {} - clusters = anomaly.get_clusters() - properties = anomaly.get_properties() - for x in clusters.keys(): - clusters_affected[x] = {} - clusters_affected[x]["velocity"] = properties[x]["velocity"] - clusters_affected[x]["acceleration"] = properties[x]["acceleration"] - - - inst = anomaly.get_instances()[-1].get_id() - myscenario.log(Log.C_LOG_TYPE_W, - 'Anomaly : ', anomaly_name, - '\n Anomaly ID : ', anomaly_id, - '\n Instance ID : ', inst, - '\n Clusters : ', clusters_affected) - -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') -myscenario.log(Log.C_LOG_TYPE_W, '-------------------------------------------------------') - -if __name__ == "__main__": - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/howto_oa_streams_pp_105_rearranger_window_bd_normminmax_2d_3d_nD_multithreading.py.off b/test/howtos/oa/howto_oa_streams_pp_105_rearranger_window_bd_normminmax_2d_3d_nD_multithreading.py.off deleted file mode 100644 index 756c2b248..000000000 --- a/test/howtos/oa/howto_oa_streams_pp_105_rearranger_window_bd_normminmax_2d_3d_nD_multithreading.py.off +++ /dev/null @@ -1,261 +0,0 @@ -## ------------------------------------------------------------------------------------------------- -## -- Project : MLPro - The integrative middleware framework for standardized machine learning -## -- Package : mlpro.oa.examples -## -- Module : howto_oa_pp_007_rearranger_window_bd_normminmax_2d_3d_nD_multithreading.py -## ------------------------------------------------------------------------------------------------- -## -- History : -## -- yyyy-mm-dd Ver. Auth. Description -## -- 2023-01-09 1.0.0 DA Creation -## -- 2023-04-10 1.1.0 DA Refactoring after changes on class OAScenario -## -- 2023-05-20 1.1.1 DA Registered handler of boundary detector to window -## ------------------------------------------------------------------------------------------------- - -""" -Ver. 1.1.1 (2023-05-20) - -This module is an example of adaptive normalization of streaming data using MinMax normalizer. To -this regard, an online-adadptive custom scenario is set up. It combines a native 10-dimensional -sample stream with an online-adaptive workflow. The latter one consists of four tasks: a rearranger -to reduce the stream data to 3 dimensions, a window that buffers the last 50 instances, a boundary -detector and finally the MinMax normalizer. - -You will learn: - -1. How to set up online-adaptive custom stream scenarios. - -2. How to set up online-adaptive workflows reusing various adaptive/non-adaptive MLPro stream tasks - -3. How to run and visualize your own custom stream scenario. -""" - - - -from mlpro.bf.streams import * -from mlpro.bf.streams.streams import * -from mlpro.bf.streams.tasks import RingBuffer, Rearranger -from mlpro.oa.streams import * - - - -## ------------------------------------------------------------------------------------------------- -## ------------------------------------------------------------------------------------------------- -class MyAdaptiveScenario (OAScenario): - - C_NAME = 'Dummy' - -## ------------------------------------------------------------------------------------------------- - def _setup(self, p_mode, p_ada: bool, p_visualize: bool, p_logging): - - # 1 Prepare a native stream from MLPro - mlpro = StreamProviderMLPro(p_logging=p_logging) - stream = mlpro.get_stream( p_name=StreamMLProRnd10D.C_NAME, - p_mode=p_mode, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 2 Set up a stream workflow based on a custom stream task - - # 2.1 Creation of a workflow - workflow = OAWorkflow( p_name='wf', - p_range_max=OAWorkflow.C_RANGE_THREAD, - p_ada=p_ada, - p_visualize=p_visualize, - p_logging=p_logging ) - - - # 2.2 Creation of a task chain 2D - - # 2.2.1 Rearranger to reduce the number of features - features = stream.get_feature_space().get_dims() - features_new = [ ( 'F', features[1:3] ) ] - - task_rearranger = Rearranger( p_name='Chain 2D, Task T1', - p_duplicate_data=True, - p_range_max=Task.C_RANGE_THREAD, - p_visualize=p_visualize, - p_logging=p_logging, - p_features_new=features_new ) - - workflow.add_task( p_task=task_rearranger ) - - # 2.2.2 Window to buffer some data - task_window = RingBuffer( p_buffer_size=50, - p_delay=True, - p_enable_statistics=True, - p_name='Chain 2D, Task T2', - p_duplicate_data=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task=task_window, p_pred_tasks=[task_rearranger]) - - # 2.2.3 Boundary detector - task_bd = BoundaryDetector( p_name='Chain 2D, Task T3', - p_ada=True, - p_visualize=True, - p_logging=p_logging ) - - task_window.register_event_handler( p_event_id=RingBuffer.C_EVENT_DATA_REMOVED, p_event_handler=task_bd.adapt_on_event ) - workflow.add_task(p_task = task_bd, p_pred_tasks=[task_window]) - - # # 2.2.4 MinMax-Normalizer - task_norm_minmax = NormalizerMinMax( p_name='Chain 2D, Task T4', - p_ada=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - task_bd.register_event_handler( p_event_id=BoundaryDetector.C_EVENT_ADAPTED, p_event_handler=task_norm_minmax.adapt_on_event ) - - workflow.add_task(p_task = task_norm_minmax, p_pred_tasks=[task_bd]) - - - # 2.3 Creation of a task chain 3D - - # 2.3.1 Rearranger to reduce the number of features - features = stream.get_feature_space().get_dims() - features_new = [ ( 'F', features[1:4] ) ] - - task_rearranger = Rearranger( p_name='Chain 3D, Task T1', - p_range_max=Task.C_RANGE_THREAD, - p_duplicate_data=True, - p_visualize=p_visualize, - p_logging=p_logging, - p_features_new=features_new ) - - workflow.add_task( p_task=task_rearranger ) - - # 2.3.2 Window to buffer some data - task_window = Window( p_buffer_size=50, - p_delay=True, - p_enable_statistics=True, - p_name='Chain 3D, Task T2', - p_duplicate_data=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task=task_window, p_pred_tasks=[task_rearranger]) - - # 2.3.3 Boundary detector - task_bd = BoundaryDetector( p_name='Chain 3D, Task T3', - p_ada=True, - p_visualize=True, - p_logging=p_logging, - p_window=task_window ) - - workflow.add_task(p_task = task_bd, p_pred_tasks=[task_window]) - - # # 2.3.4 MinMax-Normalizer - task_norm_minmax = NormalizerMinMax( p_name='Chain 3D, Task T4', - p_ada=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - task_bd.register_event_handler( p_event_id=BoundaryDetector.C_EVENT_ADAPTED, p_event_handler=task_norm_minmax.adapt_on_event ) - - workflow.add_task(p_task = task_norm_minmax, p_pred_tasks=[task_bd]) - - - - # 2.5 Creation of a task chain nD - - # 2.5.1 Rearranger to reduce the number of features - features = stream.get_feature_space().get_dims() - features_new = [ ( 'F', features[1:5] ) ] - - task_rearranger = Rearranger( p_name='Chain nD, Task T1', - p_range_max=Task.C_RANGE_THREAD, - p_duplicate_data=True, - p_visualize=p_visualize, - p_logging=p_logging, - p_features_new=features_new ) - - workflow.add_task( p_task=task_rearranger ) - - # 2.5.2 Window to buffer some data - task_window = Window( p_buffer_size=50, - p_delay=True, - p_enable_statistics=True, - p_name='Chain nD, Task T2', - p_duplicate_data=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - workflow.add_task(p_task=task_window, p_pred_tasks=[task_rearranger]) - - # 2.5.3 Boundary detector - task_bd = BoundaryDetector( p_name='Chain nD, Task T3', - p_ada=True, - p_visualize=True, - p_logging=p_logging, - p_window=task_window ) - - workflow.add_task(p_task = task_bd, p_pred_tasks=[task_window]) - - # # 2.5.4 MinMax-Normalizer - task_norm_minmax = NormalizerMinMax( p_name='Chain nD, Task T4', - p_ada=True, - p_visualize=p_visualize, - p_logging=p_logging ) - - task_bd.register_event_handler( p_event_id=BoundaryDetector.C_EVENT_ADAPTED, p_event_handler=task_norm_minmax.adapt_on_event ) - - workflow.add_task(p_task = task_norm_minmax, p_pred_tasks=[task_bd]) - - - # 3 Return stream and workflow - return stream, workflow - - - - -# 1 Preparation of demo/unit test mode -if __name__ == "__main__": - # 1.1 Parameters for demo mode - logging = Log.C_LOG_ALL - visualize = True - - try: - cycle_limit = min(1000, max(1, int(input('\nPlease enter number of cycles (1 - 1000, default = 200): ')))) - except: - cycle_limit = 200 - - try: - step_rate = max(1, int(input('\nPlease enter update step rate for visualization (1 = update after every cycle): '))) - except: - step_rate = 1 - -else: - # 1.2 Parameters for internal unit test - cycle_limit = 2 - logging = Log.C_LOG_NOTHING - visualize = False - step_rate = 1 - - -# 2 Instantiate the stream scenario -myscenario = MyAdaptiveScenario(p_mode=Mode.C_MODE_REAL, - p_cycle_limit=cycle_limit, - p_visualize=visualize, - p_logging=logging) - - - - -# 3 Reset and run own stream scenario -myscenario.reset() - -if __name__ == '__main__': - myscenario.init_plot( p_plot_settings=PlotSettings( p_view = PlotSettings.C_VIEW_ND, - p_step_rate = step_rate ) ) - input('\nPlease arrange all windows and press ENTER to start stream processing...') - -tp_before = datetime.now() -myscenario.run() -tp_after = datetime.now() -tp_delta = tp_after - tp_before -duraction_sec = ( tp_delta.seconds * 1000000 + tp_delta.microseconds + 1 ) / 1000000 -myscenario.log(Log.C_LOG_TYPE_S, 'Duration [sec]:', round(duraction_sec,2), ', Cycles/sec:', round(cycle_limit/duraction_sec,2)) - -if __name__ == '__main__': - input('Press ENTER to exit...') \ No newline at end of file diff --git a/test/howtos/oa/streams/anomalydetection/.gitkeep b/test/howtos/oa/streams/anomalydetection/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/howtos/oa/streams/anomalyprediction/.gitkeep b/test/howtos/oa/streams/anomalyprediction/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/howtos/oa/streams/driftdetection/.gitkeep b/test/howtos/oa/streams/driftdetection/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/howtos/oa/howto_oa_streams_pp_121_complex_preprocessing.py b/test/howtos/oa/streams/hybrid/howto_oa_streams_pp_121_complex_preprocessing.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_121_complex_preprocessing.py rename to test/howtos/oa/streams/hybrid/howto_oa_streams_pp_121_complex_preprocessing.py diff --git a/test/howtos/oa/howto_oa_streams_pp_001_bd_normminmax_2d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_001_bd_normminmax_2d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_001_bd_normminmax_2d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_001_bd_normminmax_2d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_002_bd_normminmax_3d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_002_bd_normminmax_3d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_002_bd_normminmax_3d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_002_bd_normminmax_3d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_003_bd_normminmax_nd.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_003_bd_normminmax_nd.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_003_bd_normminmax_nd.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_003_bd_normminmax_nd.py diff --git a/test/howtos/oa/howto_oa_streams_pp_006_normztrans_2d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_006_normztrans_2d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_006_normztrans_2d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_006_normztrans_2d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_007_normztrans_3d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_007_normztrans_3d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_007_normztrans_3d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_007_normztrans_3d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_008_normztrans_nd.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_008_normztrans_nd.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_008_normztrans_nd.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_008_normztrans_nd.py diff --git a/test/howtos/oa/howto_oa_streams_pp_101_rearranger_window_bd_normminmax_2d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_101_rearranger_window_bd_normminmax_2d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_101_rearranger_window_bd_normminmax_2d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_101_rearranger_window_bd_normminmax_2d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_102_rearranger_window_bd_normminmax_3d.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_102_rearranger_window_bd_normminmax_3d.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_102_rearranger_window_bd_normminmax_3d.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_102_rearranger_window_bd_normminmax_3d.py diff --git a/test/howtos/oa/howto_oa_streams_pp_103_rearranger_window_bd_normminmax_nd.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_103_rearranger_window_bd_normminmax_nd.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_103_rearranger_window_bd_normminmax_nd.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_103_rearranger_window_bd_normminmax_nd.py diff --git a/test/howtos/oa/howto_oa_streams_pp_104_rearranger_window_bd_normminmax_2d_3d_nD.py b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_104_rearranger_window_bd_normminmax_2d_3d_nD.py similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_104_rearranger_window_bd_normminmax_2d_3d_nD.py rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_104_rearranger_window_bd_normminmax_2d_3d_nD.py diff --git a/test/howtos/oa/howto_oa_streams_pp_111_rearranger_deriver_normalizer.py.off b/test/howtos/oa/streams/normalization/howto_oa_streams_pp_111_rearranger_deriver_normalizer.py.off similarity index 100% rename from test/howtos/oa/howto_oa_streams_pp_111_rearranger_deriver_normalizer.py.off rename to test/howtos/oa/streams/normalization/howto_oa_streams_pp_111_rearranger_deriver_normalizer.py.off