From d5be26b04da9418f0623f3e9ee74aa65f9667393 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Paulo?=
<88985821+Joao-Paulo-Silva@users.noreply.github.com>
Date: Fri, 21 Nov 2025 19:24:53 -0300
Subject: [PATCH] docs: update documentation for version 0.5.0
---
docs/advanced-guides/Utils/Distance.md | 16 +-
docs/advanced-guides/Utils/Multiclass.md | 28 +-
docs/advanced-guides/Utils/Random.md | 17 +
docs/advanced-guides/Utils/Validation.md | 81 +-
.../base-classes-reference/_category_.json | 5 -
.../base-classes-reference/csa/README.mdx | 11 -
.../base-classes-reference/csa/airs.md | 91 -
.../base-classes-reference/ina/README.mdx | 11 -
.../base-classes-reference/ina/ainet.md | 99 -
.../base-classes-reference/nsa.md | 88 -
.../base-module/{ => core}/Base.md | 18 -
.../base-module/{ => core}/Classifier.md | 12 +-
.../base-module/{ => core}/Clusterer.md | 4 +-
.../base-module/{ => core}/Optimizer.md | 2 +-
.../base-module/immune/cell.md | 116 +
.../{Mutation.md => immune/mutation.md} | 1 -
.../base-module/immune/populations.md | 49 +
.../clonal-selection-algorithms/Cell.md | 52 -
.../airs/README.md | 47 +-
.../clonal-selection-algorithms/airs/abr.md | 2 +-
.../clonal-selection-algorithms/clonalg.md | 12 +-
.../immune-network-theory/AiNet.md | 21 +-
.../negative-selection/BNSA.md | 12 +-
.../negative-selection/RNSA.md | 29 +-
.../current/advanced-guides/Utils/Distance.md | 12 +-
.../advanced-guides/Utils/Multiclass.md | 26 +
.../current/advanced-guides/Utils/Random.md | 16 +
.../advanced-guides/Utils/Validation.md | 85 +-
.../base-classes-reference/_category_.json | 4 -
.../base-classes-reference/csa/README.mdx | 11 -
.../base-classes-reference/csa/airs.md | 88 -
.../base-classes-reference/ina/README.mdx | 11 -
.../base-classes-reference/ina/ainet.md | 99 -
.../base-classes-reference/nsa.md | 88 -
.../base-module/{ => core}/Base.md | 15 -
.../base-module/{ => core}/Classifier.md | 12 +-
.../base-module/{ => core}/Clusterer.md | 4 +-
.../base-module/{ => core}/Optimizer.md | 0
.../base-module/immune/cell.md | 117 +
.../{Mutation.md => immune/mutation.md} | 1 -
.../base-module/immune/populations.md | 49 +
.../clonal-selection-algorithms/Cell.md | 52 -
.../airs/README.md | 17 +-
.../clonal-selection-algorithms/airs/abr.md | 2 +-
.../clonal-selection-algorithms/clonalg.md | 15 +-
.../immune-network-theory/AiNet.md | 21 +-
.../negative-selection/BNSA.md | 14 +-
.../negative-selection/RNSA.md | 27 +-
.../advanced-guides/Utils/Distance.md | 12 +-
.../Negative Selection/RNSA.md | 4 +-
.../advanced-guides/Utils/Distance.md | 12 +-
.../airs/README.md | 4 +-
.../Negative Selection/RNSA.md | 4 +-
.../advanced-guides/Utils/Distance.md | 12 +-
.../airs/README.md | 4 +-
.../negative-selection/RNSA.md | 4 +-
.../advanced-guides/Utils/Distance.md | 12 +-
.../airs/README.md | 4 +-
.../negative-selection/RNSA.md | 4 +-
.../version-0.5.x.json | 62 +
.../version-0.5.x/about-us.mdx | 48 +
.../advanced-guides/Core/_category_.json | 3 +
.../Core/negative-selection.md | 85 +
.../advanced-guides/Utils/Display.md | 152 ++
.../advanced-guides/Utils/Distance.md | 176 ++
.../advanced-guides/Utils/Metrics.md | 38 +
.../advanced-guides/Utils/Multiclass.md | 55 +
.../advanced-guides/Utils/Random.md | 16 +
.../advanced-guides/Utils/Sanitizers.md | 82 +
.../advanced-guides/Utils/Validation.md | 108 +
.../advanced-guides/Utils/_category_.json | 4 +
.../advanced-guides/_category_.json | 8 +
.../base-module/_category_.json | 4 +
.../advanced-guides/base-module/core/Base.md | 55 +
.../base-module/core/Classifier.md | 94 +
.../base-module/core/Clusterer.md | 93 +
.../base-module/core/Optimizer.md | 165 ++
.../base-module/immune/cell.md | 117 +
.../base-module/immune/mutation.md | 94 +
.../base-module/immune/populations.md | 49 +
.../version-0.5.x/aisp-techniques/README.mdx | 17 +
.../clonal-selection-algorithms/README.mdx | 15 +
.../airs/README.md | 216 ++
.../clonal-selection-algorithms/airs/abr.md | 47 +
.../clonal-selection-algorithms/clonalg.md | 197 ++
.../immune-network-theory/AiNet.md | 327 +++
.../immune-network-theory/README.mdx | 39 +
.../negative-selection/BNSA.md | 134 +
.../negative-selection/README.md | 44 +
.../negative-selection/RNSA.md | 248 ++
.../version-0.5.x/assets/ainet_blob.png | Bin 0 -> 329078 bytes
.../version-0.5.x/assets/ainet_circler.png | Bin 0 -> 422458 bytes
.../version-0.5.x/assets/ainet_moon.png | Bin 0 -> 360011 bytes
.../version-0.5.x/assets/clonalg.png | Bin 0 -> 598853 bytes
.../assets/exemple_airs_plot.png | Bin 0 -> 54525 bytes
.../version-0.5.x/assets/exemple_pt_d.png | Bin 0 -> 785091 bytes
.../version-0.5.x/assets/exemple_pt_v.png | Bin 0 -> 323470 bytes
.../version-0.5.x/assets/logo.svg | 2190 +++++++++++++++++
.../version-0.5.x/assets/matrizBNSA.png | Bin 0 -> 13832 bytes
.../examples/Classification/README.mdx | 24 +
.../examples/Classification/csa.md | 59 +
.../examples/Classification/nsa.md | 61 +
.../examples/Clustering/README.mdx | 49 +
.../version-0.5.x/examples/Clustering/ina.md | 39 +
.../examples/Optimization/README.mdx | 30 +
.../examples/Optimization/csa.md | 38 +
.../version-0.5.x/examples/README.mdx | 11 +
.../getting-started/_category_.json | 5 +
.../getting-started/basic-use/AIRS.md | 101 +
.../getting-started/basic-use/AiNet.mdx | 263 ++
.../getting-started/basic-use/BNSA.md | 127 +
.../getting-started/basic-use/Clonalg.md | 223 ++
.../getting-started/basic-use/RNSA.md | 129 +
.../getting-started/basic-use/_category_.json | 5 +
.../getting-started/instalation.md | 65 +
.../version-0.5.x/intro.md | 46 +
.../advanced-guides/Utils/Distance.md | 16 +-
.../advanced-guides/Utils/Distance.md | 16 +-
.../advanced-guides/Utils/Distance.md | 16 +-
.../advanced-guides/Utils/Distance.md | 16 +-
versioned_docs/version-0.5.x/about-us.mdx | 50 +
.../advanced-guides/Core/_category_.json | 3 +
.../Core/negative-selection.md | 86 +
.../advanced-guides/Utils/Display.md | 152 ++
.../advanced-guides/Utils/Distance.md | 180 ++
.../advanced-guides/Utils/Metrics.md | 39 +
.../advanced-guides/Utils/Multiclass.md | 54 +
.../advanced-guides/Utils/Random.md | 17 +
.../advanced-guides/Utils/Sanitizers.md | 85 +
.../advanced-guides/Utils/Validation.md | 104 +
.../advanced-guides/Utils/_category_.json | 4 +
.../advanced-guides/_category_.json | 8 +
.../base-module/_category_.json | 5 +
.../advanced-guides/base-module/core/Base.md | 57 +
.../base-module/core/Classifier.md | 92 +
.../base-module/core/Clusterer.md | 102 +
.../base-module/core/Optimizer.md | 173 ++
.../base-module/immune/cell.md | 116 +
.../base-module/immune/mutation.md | 121 +
.../base-module/immune/populations.md | 49 +
.../version-0.5.x/aisp-techniques/README.mdx | 18 +
.../clonal-selection-algorithms/README.mdx | 16 +
.../airs/README.md | 210 ++
.../clonal-selection-algorithms/airs/abr.md | 47 +
.../clonal-selection-algorithms/clonalg.md | 198 ++
.../immune-network-theory/AiNet.md | 322 +++
.../immune-network-theory/README.mdx | 39 +
.../negative-selection/BNSA.md | 143 ++
.../negative-selection/README.md | 42 +
.../negative-selection/RNSA.md | 241 ++
.../version-0.5.x/assets/ainet_blob.png | Bin 0 -> 409552 bytes
.../version-0.5.x/assets/ainet_circler.png | Bin 0 -> 510690 bytes
.../version-0.5.x/assets/ainet_moon.png | Bin 0 -> 455885 bytes
.../version-0.5.x/assets/clonalg.png | Bin 0 -> 596460 bytes
.../assets/exemple_airs_plot.png | Bin 0 -> 53769 bytes
.../version-0.5.x/assets/exemple_en_d.png | Bin 0 -> 629294 bytes
.../version-0.5.x/assets/exemple_en_v.png | Bin 0 -> 270270 bytes
versioned_docs/version-0.5.x/assets/logo.svg | 2190 +++++++++++++++++
.../version-0.5.x/assets/matrixBNSA.png | Bin 0 -> 12938 bytes
.../examples/Classification/README.mdx | 46 +
.../examples/Classification/csa.md | 60 +
.../examples/Classification/nsa.md | 60 +
.../examples/Clustering/README.mdx | 50 +
.../version-0.5.x/examples/Clustering/ina.md | 39 +
.../examples/Optimization/README.mdx | 31 +
.../examples/Optimization/csa.md | 40 +
.../version-0.5.x/examples/README.mdx | 11 +
.../getting-started/_category_.json | 5 +
.../getting-started/basic-use/AIRS.md | 93 +
.../getting-started/basic-use/AiNet.mdx | 266 ++
.../getting-started/basic-use/BNSA.md | 136 +
.../getting-started/basic-use/Clonalg.md | 222 ++
.../getting-started/basic-use/RNSA.md | 128 +
.../getting-started/basic-use/_category_.json | 5 +
.../getting-started/instalation.md | 65 +
versioned_docs/version-0.5.x/intro.md | 42 +
.../version-0.5.x-sidebars.json | 8 +
versions.json | 1 +
178 files changed, 13398 insertions(+), 880 deletions(-)
create mode 100644 docs/advanced-guides/Utils/Random.md
delete mode 100644 docs/advanced-guides/base-classes-reference/_category_.json
delete mode 100644 docs/advanced-guides/base-classes-reference/csa/README.mdx
delete mode 100644 docs/advanced-guides/base-classes-reference/csa/airs.md
delete mode 100644 docs/advanced-guides/base-classes-reference/ina/README.mdx
delete mode 100644 docs/advanced-guides/base-classes-reference/ina/ainet.md
delete mode 100644 docs/advanced-guides/base-classes-reference/nsa.md
rename docs/advanced-guides/base-module/{ => core}/Base.md (81%)
rename docs/advanced-guides/base-module/{ => core}/Classifier.md (80%)
rename docs/advanced-guides/base-module/{ => core}/Clusterer.md (93%)
rename docs/advanced-guides/base-module/{ => core}/Optimizer.md (97%)
create mode 100644 docs/advanced-guides/base-module/immune/cell.md
rename docs/advanced-guides/base-module/{Mutation.md => immune/mutation.md} (99%)
create mode 100644 docs/advanced-guides/base-module/immune/populations.md
delete mode 100644 docs/aisp-techniques/clonal-selection-algorithms/Cell.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Random.md
delete mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/_category_.json
delete mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/csa/README.mdx
delete mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/csa/airs.md
delete mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/ina/README.mdx
delete mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/ina/ainet.md
delete mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/nsa.md
rename i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/{ => core}/Base.md (80%)
rename i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/{ => core}/Classifier.md (81%)
rename i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/{ => core}/Clusterer.md (93%)
rename i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/{ => core}/Optimizer.md (100%)
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/cell.md
rename i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/{Mutation.md => immune/mutation.md} (99%)
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/populations.md
delete mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/Cell.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x.json
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/about-us.mdx
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Core/_category_.json
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Core/negative-selection.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Display.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Distance.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Metrics.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Multiclass.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Random.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Sanitizers.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Validation.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/_category_.json
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/_category_.json
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/_category_.json
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Base.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Classifier.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Clusterer.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Optimizer.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/cell.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/mutation.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/populations.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/README.mdx
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/README.mdx
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/airs/README.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/airs/abr.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/clonalg.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/immune-network-theory/AiNet.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/immune-network-theory/README.mdx
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/BNSA.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/README.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/RNSA.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/ainet_blob.png
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/ainet_circler.png
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/ainet_moon.png
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/clonalg.png
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/exemple_airs_plot.png
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/exemple_pt_d.png
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/exemple_pt_v.png
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/logo.svg
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/matrizBNSA.png
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/examples/Classification/README.mdx
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/examples/Classification/csa.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/examples/Classification/nsa.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/examples/Clustering/README.mdx
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/examples/Clustering/ina.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/examples/Optimization/README.mdx
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/examples/Optimization/csa.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/examples/README.mdx
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/getting-started/_category_.json
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/getting-started/basic-use/AIRS.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/getting-started/basic-use/AiNet.mdx
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/getting-started/basic-use/BNSA.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/getting-started/basic-use/Clonalg.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/getting-started/basic-use/RNSA.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/getting-started/basic-use/_category_.json
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/getting-started/instalation.md
create mode 100644 i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/intro.md
create mode 100644 versioned_docs/version-0.5.x/about-us.mdx
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/Core/_category_.json
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/Core/negative-selection.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/Utils/Display.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/Utils/Distance.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/Utils/Metrics.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/Utils/Multiclass.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/Utils/Random.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/Utils/Sanitizers.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/Utils/Validation.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/Utils/_category_.json
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/_category_.json
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/base-module/_category_.json
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/base-module/core/Base.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/base-module/core/Classifier.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/base-module/core/Clusterer.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/base-module/core/Optimizer.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/base-module/immune/cell.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/base-module/immune/mutation.md
create mode 100644 versioned_docs/version-0.5.x/advanced-guides/base-module/immune/populations.md
create mode 100644 versioned_docs/version-0.5.x/aisp-techniques/README.mdx
create mode 100644 versioned_docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/README.mdx
create mode 100644 versioned_docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/airs/README.md
create mode 100644 versioned_docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/airs/abr.md
create mode 100644 versioned_docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/clonalg.md
create mode 100644 versioned_docs/version-0.5.x/aisp-techniques/immune-network-theory/AiNet.md
create mode 100644 versioned_docs/version-0.5.x/aisp-techniques/immune-network-theory/README.mdx
create mode 100644 versioned_docs/version-0.5.x/aisp-techniques/negative-selection/BNSA.md
create mode 100644 versioned_docs/version-0.5.x/aisp-techniques/negative-selection/README.md
create mode 100644 versioned_docs/version-0.5.x/aisp-techniques/negative-selection/RNSA.md
create mode 100644 versioned_docs/version-0.5.x/assets/ainet_blob.png
create mode 100644 versioned_docs/version-0.5.x/assets/ainet_circler.png
create mode 100644 versioned_docs/version-0.5.x/assets/ainet_moon.png
create mode 100644 versioned_docs/version-0.5.x/assets/clonalg.png
create mode 100644 versioned_docs/version-0.5.x/assets/exemple_airs_plot.png
create mode 100644 versioned_docs/version-0.5.x/assets/exemple_en_d.png
create mode 100644 versioned_docs/version-0.5.x/assets/exemple_en_v.png
create mode 100644 versioned_docs/version-0.5.x/assets/logo.svg
create mode 100644 versioned_docs/version-0.5.x/assets/matrixBNSA.png
create mode 100644 versioned_docs/version-0.5.x/examples/Classification/README.mdx
create mode 100644 versioned_docs/version-0.5.x/examples/Classification/csa.md
create mode 100644 versioned_docs/version-0.5.x/examples/Classification/nsa.md
create mode 100644 versioned_docs/version-0.5.x/examples/Clustering/README.mdx
create mode 100644 versioned_docs/version-0.5.x/examples/Clustering/ina.md
create mode 100644 versioned_docs/version-0.5.x/examples/Optimization/README.mdx
create mode 100644 versioned_docs/version-0.5.x/examples/Optimization/csa.md
create mode 100644 versioned_docs/version-0.5.x/examples/README.mdx
create mode 100644 versioned_docs/version-0.5.x/getting-started/_category_.json
create mode 100644 versioned_docs/version-0.5.x/getting-started/basic-use/AIRS.md
create mode 100644 versioned_docs/version-0.5.x/getting-started/basic-use/AiNet.mdx
create mode 100644 versioned_docs/version-0.5.x/getting-started/basic-use/BNSA.md
create mode 100644 versioned_docs/version-0.5.x/getting-started/basic-use/Clonalg.md
create mode 100644 versioned_docs/version-0.5.x/getting-started/basic-use/RNSA.md
create mode 100644 versioned_docs/version-0.5.x/getting-started/basic-use/_category_.json
create mode 100644 versioned_docs/version-0.5.x/getting-started/instalation.md
create mode 100644 versioned_docs/version-0.5.x/intro.md
create mode 100644 versioned_sidebars/version-0.5.x-sidebars.json
diff --git a/docs/advanced-guides/Utils/Distance.md b/docs/advanced-guides/Utils/Distance.md
index a3d758f8..1ac5aba8 100644
--- a/docs/advanced-guides/Utils/Distance.md
+++ b/docs/advanced-guides/Utils/Distance.md
@@ -16,7 +16,9 @@ def hamming(u: npt.NDArray, v: npt.NDArray) -> np.float64:
The function to calculate the normalized Hamming distance between two points.
-$$\frac{(x_1 \neq y_1) + (x_2 \neq y_2) + \cdots + (x_n \neq y_n)}{n}$$
+$$
+\frac{(x_1 \neq y_1) + (x_2 \neq y_2) + \cdots + (x_n \neq y_n)}{n}
+$$
**Parameters:**
@@ -37,7 +39,9 @@ def euclidean(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Function to calculate the normalized Euclidean distance between two points.
-$$\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}$$
+$$
+\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}
+$$
**Parameters:**
@@ -58,7 +62,9 @@ def cityblock(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Function to calculate the normalized Manhattan distance between two points.
-$$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$
+$$
+\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+$$
**Parameters:**
@@ -79,7 +85,9 @@ def minkowski(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64], p: float =
Function to calculate the normalized Minkowski distance between two points.
-$$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$
+$$
+\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}
+$$
**Parameters:**
diff --git a/docs/advanced-guides/Utils/Multiclass.md b/docs/advanced-guides/Utils/Multiclass.md
index 83c58b1d..dc919f82 100644
--- a/docs/advanced-guides/Utils/Multiclass.md
+++ b/docs/advanced-guides/Utils/Multiclass.md
@@ -8,7 +8,7 @@ author: João Paulo
This file contains internal utility functions designed to simplify data manipulation and processing in multiclass classification scenarios within the AISP package.
-### def slice_index_list_by_class(...)
+## def slice_index_list_by_class(...)
```python
def slice_index_list_by_class(classes: Union[npt.NDArray, list], y: npt.NDArray) -> dict
@@ -26,3 +26,29 @@ the output is the class being trained.
**returns**:
* dict: A dictionary with the list of array positions(``y``), with the classes as key.
+
+---
+
+## def predict_knn_affinity(...)
+
+```python
+def predict_knn_affinity(
+ X: npt.NDArray,
+ k: int,
+ all_cell_vectors: List[Tuple[Union[str, int], npt.NDArray]],
+ affinity_func: Callable[[npt.NDArray, npt.NDArray], float]
+) -> npt.NDArray
+```
+
+Function to predict classes using k-nearest neighbors and trained cells.
+
+**Parameters:**
+
+* ***X*** (`npt.NDArray`): Input data to be classified.
+* ***k*** (`int`): Number of nearest neighbors to consider for prediction.
+* ***all_cell_vectors*** (`List[Tuple[Union[str, int], npt.NDArray]]`): List of tuples containing (class_name, cell vector) pairs.
+* ***affinity_func*** (`Callable[[npt.NDArray, npt.NDArray], float]`): Function that takes two vectors and returns an affinity value.
+
+**Returns:**
+
+* `npt.NDArray`: Array of predicted labels for each sample in X, based on the k nearest neighbors.
diff --git a/docs/advanced-guides/Utils/Random.md b/docs/advanced-guides/Utils/Random.md
new file mode 100644
index 00000000..8bcd0393
--- /dev/null
+++ b/docs/advanced-guides/Utils/Random.md
@@ -0,0 +1,17 @@
+# Random
+
+Utility functions for random number generation and reproducibility.
+
+## Function set_seed_numba(...)
+
+```python
+@njit(cache=True)
+def set_seed_numba(seed: int)
+```
+
+Set the seed for random numbers used by functions compiled with Numba.
+
+**Parameters**:
+
+* **seed**: `int`
+ Integer value used to initialize Numba's random number generator.
diff --git a/docs/advanced-guides/Utils/Validation.md b/docs/advanced-guides/Utils/Validation.md
index fdbcb573..c0d5bba6 100644
--- a/docs/advanced-guides/Utils/Validation.md
+++ b/docs/advanced-guides/Utils/Validation.md
@@ -16,14 +16,89 @@ This function analyzes the input vector and classifies its data as one of the su
* **continuous**: Float values within the normalized range `[0.0, 1.0]`.
* **ranged**: Float values outside the normalized range.
-**Parameters**
+### Parameters
* `vector` (`npt.NDArray`): An array containing the data to be classified.
-**Returns**
+### Returns
* `FeatureType` (`Literal["binary-features", "continuous-features", "ranged-features"]`): The detected type of data in the vector.
-**Raises**
+### Raises
* `UnsupportedDataTypeError`: Raised if the vector contains an unsupported data type.
+
+---
+
+## def check_array_type(...)
+
+```python
+def check_array_type(x, name: str = "X") -> npt.NDArray:
+```
+
+Ensure X is a numpy array. Convert from list if needed.
+
+### Parameters
+
+* `x` (`Any`): Array, containing the samples and their characteristics, \[`N samples` (rows)\]\[`N features` (columns)\].
+* `name` (`str`, default='X'): Variable name used in error messages.
+
+### Returns
+
+* `npt.NDArray`: The converted or validated array.
+
+### Raises
+
+* `TypeError`: If X or y are not ndarrays or have incompatible shapes.
+
+---
+
+## def check_shape_match(...)
+
+```python
+def check_shape_match(x: npt.NDArray, y: npt.NDArray):
+```
+
+Ensure X and y have compatible first dimensions.
+
+### Parameters
+
+* `x` (`npt.NDArray`): Array, containing the samples and their characteristics, \[`N samples` (rows)\]\[`N features` (columns)\].
+* `y` (`npt.NDArray`): Array of target classes of `x` with [`N samples` (lines)].
+
+### Raises
+
+* `TypeError`: If x or y are not ndarrays or have incompatible shapes.
+
+---
+
+## def check_feature_dimension(...)
+
+```python
+def check_feature_dimension(x: npt.NDArray, expected: int):
+```
+
+Ensure X has the expected number of features.
+
+### Parameters
+
+* `x` (`npt.NDArray`): Input array for prediction, containing the samples and their characteristics, \[`N samples` (rows)\]\[`N features` (columns)\].
+* `expected` (`int`): Expected number of features per sample (columns in X).
+
+### Raises
+
+* `FeatureDimensionMismatch`: If the number of features in X does not match the expected number.
+
+---
+
+## def check_binary_array(...)
+
+```python
+def check_binary_array(x: npt.NDArray):
+```
+
+Ensure X contains only 0 and 1.
+
+### Raises
+
+* `ValueError`: If feature_type is binary-features and X contains values that are not composed only of 0 and 1.
diff --git a/docs/advanced-guides/base-classes-reference/_category_.json b/docs/advanced-guides/base-classes-reference/_category_.json
deleted file mode 100644
index d5ae9afd..00000000
--- a/docs/advanced-guides/base-classes-reference/_category_.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "label": "Base classes reference",
- "position": 2,
- "description": "Base classes for implementing the algorithms provided in this package."
-}
\ No newline at end of file
diff --git a/docs/advanced-guides/base-classes-reference/csa/README.mdx b/docs/advanced-guides/base-classes-reference/csa/README.mdx
deleted file mode 100644
index 2b7d8d5c..00000000
--- a/docs/advanced-guides/base-classes-reference/csa/README.mdx
+++ /dev/null
@@ -1,11 +0,0 @@
----
-sidebar_position: 2.61
----
-
-import DocCardList from '@theme/DocCardList';
-
-# Clonal Selection Algorithms
-
-The base classes provide the core framework for implementing Clonal Selection Algorithm techniques.
-
-
\ No newline at end of file
diff --git a/docs/advanced-guides/base-classes-reference/csa/airs.md b/docs/advanced-guides/base-classes-reference/csa/airs.md
deleted file mode 100644
index 9b48c5d6..00000000
--- a/docs/advanced-guides/base-classes-reference/csa/airs.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-sidebar_position: 1
-title: Artificial Immune Recognition System Base
-sidebar_label: Artificial Immune Recognition System
-lastUpdatedAt: 2025/05/25
-author: João Paulo
-keywords:
- - BaseAIRS
- - AIRS
- - Artificial Immune Recognition System
- - Artificial Immune Systems
- - Base Classifier
- - Continuous Features
- - Binary Features
- - Feature Validation
- - Machine Learning
- - Classification
----
-
-Base class for algorithm **AIRS**.
-
-## ``BaseAIRS(BaseClassifier, ABC)``
-
-The base class contains functions that are used by more than one class in the package, and
-therefore are considered essential for the overall functioning of the system.
-
----
-
-### def _check_and_raise_exceptions_fit(...)
-
- Verify the fit parameters and throw exceptions if the verification is not successful.
-
-```python
-@staticmethod
-def _check_and_raise_exceptions_fit(
- X: npt.NDArray = None,
- y: npt.NDArray = None,
- algorithm: Literal[
- "continuous-features", "binary-features"
- ] = "continuous-features"
-):
-```
-
-**Parameters**:
-
-* ***X*** (``npt.NDArray``): Training array, containing the samples and their characteristics, \[``N samples`` (rows)\]\[``N features`` (columns)\].
-* ***y*** (``npt.NDArray``): Array of target classes of ``X`` with \[``N samples`` (lines)].
-* ***algorithm*** (``Literal["continuous-features", "binary-features"], optional``): Specifies the type of algorithm to use, depending
-on whether the input data has continuous or binary features.
-
-**Raises**
-
-* `TypeError`:
- If X or y are not ndarrays or have incompatible shapes.
-* `ValueError`
- If *class* is BNSA and X contains values that are not composed only of 0 and 1.
-
----
-
-### def _check_and_raise_exceptions_predict(...)
-
- Verify the fit parameters and throw exceptions if the verification is not successful.
-
-```python
-@staticmethod
-def _check_and_raise_exceptions_predict(
- X: npt.NDArray = None,
- expected: int = 0,
- algorithm: Literal[
- "continuous-features", "binary-features"
- ] = "continuous-features"
-) -> None:
-```
-
-**Parameters**:
-
-* ***X*** (``npt.NDArray``): Training array, containing the samples and their characteristics, \[``N samples`` (rows)\]\[``N features`` (columns)].
-* ***expected*** (``int``): Expected number of features per sample (columns in X).
-* ***algorithm*** (``Literal["continuous-features", "binary-features"], optional``): Specifies the type of algorithm to use, depending
-on whether the input data has continuous or binary features.
-
-**Raises**
-
-* ``TypeError``
- If X is not a ndarray or list.
-* `FeatureDimensionMismatch`
- If the number of features in X does not match the expected number.
-* `ValueError`
- If algorithm is binary-features and X contains values that are not composed only of 0 and 1.
-
----
diff --git a/docs/advanced-guides/base-classes-reference/ina/README.mdx b/docs/advanced-guides/base-classes-reference/ina/README.mdx
deleted file mode 100644
index 92be3d08..00000000
--- a/docs/advanced-guides/base-classes-reference/ina/README.mdx
+++ /dev/null
@@ -1,11 +0,0 @@
----
-sidebar_position: 2.71
----
-
-import DocCardList from '@theme/DocCardList';
-
-# Immune Network Algorithms
-
-The base classes provide the core framework for implementing Immune Network Algorithm techniques.
-
-
\ No newline at end of file
diff --git a/docs/advanced-guides/base-classes-reference/ina/ainet.md b/docs/advanced-guides/base-classes-reference/ina/ainet.md
deleted file mode 100644
index 7a21c8b5..00000000
--- a/docs/advanced-guides/base-classes-reference/ina/ainet.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-sidebar_position: 1
-title: Artificial Immune Network Base
-sidebar_label: Artificial Immune Network
-lastUpdatedAt: 2025/05/25
-author: João Paulo
-keywords:
- - AiNet
- - Immune Network Theory
- - Clustering
- - BaseAiNet
- - Artificial Immune Systems
- - Antibodies
----
-
-Base class for Network Theory algorithms based on AiNet.
-
-## ``BaseAiNet(BaseClusterer, ABC)``
-
-The base class contains functions that are used by multiple classes in the AiNet package and
-are considered essential for proper functioning of clustering algorithms based on immune network theory.
-
----
-
-### def _check_and_raise_exceptions_fit(...)
-
-Verify the fit parameters and throw exceptions if the verification is not successful.
-
-```python
-@staticmethod
-def _check_and_raise_exceptions_fit(X: npt.NDArray)
-```
-
-**Parameters**:
-
-* ***X*** (`npt.NDArray`): Training array, containing the samples and their characteristics, \\[`N samples` (rows)]\\[`N features` (columns)].
-
-**Raises**:
-
-* `TypeError`: If X is not an ndarray or list.
-
----
-
-### def _check_and_raise_exceptions_predict(...)
-
-Verify the predict parameters and throw exceptions if the verification is not successful.
-
-```python
-@staticmethod
-def _check_and_raise_exceptions_predict(
- X: npt.NDArray,
- expected: int = 0,
- feature_type: FeatureType = "continuous-features"
-) -> None
-```
-
-**Parameters**:
-
-* ***X*** (`npt.NDArray`): Input array for prediction, containing the samples and their characteristics, \\[`N samples` (rows)]\\[`N features` (columns)].
-* ***expected*** (`int`, default=0): Expected number of features per sample (columns in X).
-* ***feature_type*** (`FeatureType`, default="continuous-features"): Specifies the type of features: "continuous-features", "binary-features", or "ranged-features".
-
-**Raises**:
-
-* `TypeError`: If X is not an ndarray or list.
-* `FeatureDimensionMismatch`: If the number of features in X does not match the expected number.
-* `ValueError`: If feature_type is "binary-features" and X contains values other than 0 and 1.
-
----
-
-### def _generate_random_antibodies(...)
-
-Generate a random antibody population.
-
-```python
-@staticmethod
-def _generate_random_antibodies(
- n_samples: int,
- n_features: int,
- feature_type: FeatureType = "continuous-features",
- bounds: Optional[npt.NDArray[np.float64]] = None
-) -> npt.NDArray
-```
-
-**Parameters**:
-
-* ***n_samples*** (`int`): Number of antibodies (samples) to generate.
-* ***n_features*** (`int`): Number of features (dimensions) for each antibody.
-* ***feature_type*** (`FeatureType`, default="continuous-features"): Specifies the type of features: "continuous-features", "binary-features", or "ranged-features".
-* ***bounds*** (`Optional[npt.NDArray[np.float64]]`): Array of shape (n_features, 2) with min and max per dimension (used only for ranged features).
-
-**Returns**:
-
-* `npt.NDArray`: Array of shape (n_samples, n_features) containing the generated antibodies.
- Data type depends on the feature_type (float for continuous/ranged, bool for binary).
-
-**Raises**:
-
-* `ValueError`: If n_features $<=$ 0.
diff --git a/docs/advanced-guides/base-classes-reference/nsa.md b/docs/advanced-guides/base-classes-reference/nsa.md
deleted file mode 100644
index 021c4575..00000000
--- a/docs/advanced-guides/base-classes-reference/nsa.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-sidebar_position: 1
-title: Negative Selection Base
-sidebar_label: Negative Selection
-lastUpdatedAt: 2025/04/04
-author: João Paulo
-keywords:
- - BaseNSA
- - Negative Selection
- - Artificial Immune Systems
- - RNSA
- - BNSA
- - Base Classifier
- - Machine Learning
- - Anomaly Detection
- - Continuous Features
- - Binary Features
- - Feature Validation
- - Classification
----
-
-## ``class BaseNSA(BaseClassifier, ABC)``
-
-The ``BaseNSA`` class contains utility functions with the ``protected`` modifier that can be inherited by various classes for ease of use. It includes functions for distance calculation, data separation to improve training and prediction efficiency, accuracy measurement and other functions.
-
-### Protected Functions
-
----
-
-#### Function _check_and_raise_exceptions_fit(...)
-
-```python
-def _check_and_raise_exceptions_fit(
- X: npt.NDArray = None,
- y: npt.NDArray = None,
- _class_: Literal["RNSA", "BNSA"] = "RNSA",
-) -> None:
-```
-
-Function responsible for verifying fit function parameters and throwing exceptions if the verification is not successful.
-
-**Parameters**:
-
-* ***X*** (``npt.NDArray``): Training array, containing the samples and their characteristics, \[``N samples`` (rows)\]\[``N features`` (columns)].
-* ***y*** (``npt.NDArray``): Array of target classes of ``X`` with \[``N samples`` (lines)].
-* ****class**** (Literal[RNSA, BNSA], optional): Current class. Defaults to 'RNSA'.
-
-**Raises**
-
-* ``TypeError``: If X or y are not ndarrays or have incompatible shapes.
-* ``ValueError``: If *class* is BNSA and X contains values that are not composed only of 0 and 1.
-
----
-
-#### Function _check_and_raise_exceptions_predict(...)
-
-```python
-def _check_and_raise_exceptions_predict(
- X: npt.NDArray = None,
- expected: int = 0,
- _class_: Literal["RNSA", "BNSA"] = "RNSA",
-) -> None:
-```
-
-Function responsible for verifying predict function parameters and throwing exceptions if the verification is not successful.
-
-**Parameters**:
-
-* ***X*** (``npt.NDArray``): Input array for prediction, containing the samples and their characteristics, \[``N samples`` (rows)\]\[``N features`` (columns)].
-* ***expected*** (``int``): Expected number of features per sample (columns in X).
-* *class* (``Literal[RNSA, BNSA], optional``): Current class. Defaults to 'RNSA'.
-
-**Raises**
-
-* ``TypeError``: If X is not an ndarray or list.
-* ``FeatureDimensionMismatch``: If the number of features in X does not match the expected number.
-* ``ValueError``: If *class* is BNSA and X contains values that are not composed only of 0 and 1.
-
----
-
-## Detector class
-
-Represents a non-self detector of the RNSA class.
-
-**Attributes:**
-
-* ***position*** (``np.ndarray``): Detector feature vector.
-* ***radius*** (``float, optional``): Detector radius, used in the V-detector algorithm.
diff --git a/docs/advanced-guides/base-module/Base.md b/docs/advanced-guides/base-module/core/Base.md
similarity index 81%
rename from docs/advanced-guides/base-module/Base.md
rename to docs/advanced-guides/base-module/core/Base.md
index cf9da1dc..2d458c1b 100644
--- a/docs/advanced-guides/base-module/Base.md
+++ b/docs/advanced-guides/base-module/core/Base.md
@@ -55,21 +55,3 @@ Return a dictionary with the object's main parameters. Ensures compatibility wit
* params: `dict`
Dictionary containing the object's attributes that do not start with "_".
-
----
-
-## Utility Functions
-
-### Function set_seed_numba(...)
-
-```python
-@njit(cache=True)
-def set_seed_numba(seed: int)
-```
-
-Set the seed for random numbers used by functions compiled with Numba.
-
-**Parameters**:
-
-* **seed**: `int`
- Integer value used to initialize Numba's random number generator.
diff --git a/docs/advanced-guides/base-module/Classifier.md b/docs/advanced-guides/base-module/core/Classifier.md
similarity index 80%
rename from docs/advanced-guides/base-module/Classifier.md
rename to docs/advanced-guides/base-module/core/Classifier.md
index 697cd21b..86baa60f 100644
--- a/docs/advanced-guides/base-module/Classifier.md
+++ b/docs/advanced-guides/base-module/core/Classifier.md
@@ -37,9 +37,9 @@ Fit the model to the training data.
Implementation:
-- [RNSA](../../aisp-techniques/negative-selection/RNSA.md#Function-fit)
-- [BNSA](../../aisp-techniques/negative-selection/BNSA.md#Function-fit)
-- [AIRS](../../aisp-techniques/clonal-selection-algorithms/airs/#Function-fit)
+- [RNSA](../../../aisp-techniques/negative-selection/RNSA.md#Function-fit)
+- [BNSA](../../../aisp-techniques/negative-selection/BNSA.md#Function-fit)
+- [AIRS](../../../aisp-techniques/clonal-selection-algorithms/airs/#Function-fit)
### def predict(...)
@@ -51,9 +51,9 @@ Performs label prediction for the given data.
Implementation:
-- [RNSA](../../aisp-techniques/negative-selection/RNSA.md#Function-predict)
-- [BNSA](../../aisp-techniques/negative-selection/BNSA.md#Function-predict)
-- [AIRS](../../aisp-techniques/clonal-selection-algorithms/airs/#Function-predict)
+- [RNSA](../../../aisp-techniques/negative-selection/RNSA.md#Function-predict)
+- [BNSA](../../../aisp-techniques/negative-selection/BNSA.md#Function-predict)
+- [AIRS](../../../aisp-techniques/clonal-selection-algorithms/airs/#Function-predict)
---
diff --git a/docs/advanced-guides/base-module/Clusterer.md b/docs/advanced-guides/base-module/core/Clusterer.md
similarity index 93%
rename from docs/advanced-guides/base-module/Clusterer.md
rename to docs/advanced-guides/base-module/core/Clusterer.md
index 565b9c96..559c3049 100644
--- a/docs/advanced-guides/base-module/Clusterer.md
+++ b/docs/advanced-guides/base-module/core/Clusterer.md
@@ -52,7 +52,7 @@ This abstract method must be implemented by subclasses.
**Implementation**:
-* [AiNet](../../aisp-techniques/immune-network-theory/AiNet.md#Function-fit)
+* [AiNet](../../../aisp-techniques/immune-network-theory/AiNet.md#Function-fit)
---
@@ -77,7 +77,7 @@ This abstract method must be implemented by subclasses.
**Implementation**:
-* [AiNet](../../aisp-techniques/immune-network-theory/AiNet.md#Function-predict)
+* [AiNet](../../../aisp-techniques/immune-network-theory/AiNet.md#Function-predict)
---
diff --git a/docs/advanced-guides/base-module/Optimizer.md b/docs/advanced-guides/base-module/core/Optimizer.md
similarity index 97%
rename from docs/advanced-guides/base-module/Optimizer.md
rename to docs/advanced-guides/base-module/core/Optimizer.md
index 3e0d99cf..aa33b86c 100644
--- a/docs/advanced-guides/base-module/Optimizer.md
+++ b/docs/advanced-guides/base-module/core/Optimizer.md
@@ -152,7 +152,7 @@ Execute the optimization process. This method must be implemented by the subclas
**Implementation**:
-* [Clonalg](../../aisp-techniques/clonal-selection-algorithms/clonalg.md#Function-optimize)
+* [Clonalg](../../../aisp-techniques/clonal-selection-algorithms/clonalg.md#Function-optimize)
---
diff --git a/docs/advanced-guides/base-module/immune/cell.md b/docs/advanced-guides/base-module/immune/cell.md
new file mode 100644
index 00000000..1ceacb91
--- /dev/null
+++ b/docs/advanced-guides/base-module/immune/cell.md
@@ -0,0 +1,116 @@
+---
+title: Cell Classes
+sidebar_label: Cell Classes
+keywords:
+ - Binary
+ - classifying
+ - affinity threshold
+ - Real-Valued
+ - classifying
+ - anomalies
+ - K-Nearest Neighbors
+ - memory B-cell
+lastUpdatedAt: 2025/05/25
+author: João Paulo
+---
+
+Representation of immune system cells.
+
+## Cell
+
+Represents a basic immune cell.
+
+```python
+@dataclass(slots=True)
+class Cell:
+ vector: np.ndarray
+```
+
+### Attributes
+
+* **vector** (`np.ndarray`): A vector of cell features.
+
+### Methods
+
+* `__eq__(other)`: Check if two cells are equal based on their vectors.
+* `__array__()`: Array interface to NumPy, allows the instance to be treated as a `np.ndarray`.
+* `__getitem__(item)`: Get elements from the feature vector using indexing.
+
+---
+
+## BCell
+
+Represents a memory B-cell.
+
+```python
+@dataclass(slots=True, eq=False)
+class BCell(Cell):
+ vector: np.ndarray
+```
+
+### Methods
+
+#### hyper_clonal_mutate(...)
+
+```python
+def hyper_clonal_mutate(
+ self,
+ n: int,
+ feature_type: FeatureType = "continuous-features",
+ bounds: Optional[npt.NDArray[np.float64]] = None
+) -> np.ndarray
+```
+
+Clones N features from a cell's features, generating a set of mutated vectors.
+
+##### Parameters
+
+* **n** (`int`): Number of clones to be generated from mutations of the original cell.
+* **feature_type** (`Literal["binary-features", "continuous-features", "ranged-features"]`):
+ Specifies the type of feature_type to use based on the nature of the input features
+* **bounds** (`Optional[npt.NDArray[np.float64]]`): Array (n_features, 2) with min and max per dimension.
+
+##### Returns
+
+* **npt.NDArray**: An array containing N mutated vectors from the original cell.
+
+---
+
+## Antibody
+
+Represent an antibody.
+
+```python
+@dataclass(slots=True)
+class Antibody(Cell):
+ vector: np.ndarray
+ affinity: float
+```
+
+### Attributes
+
+* **vector** (`npt.NDArray`): A vector of cell features.
+* **affinity** (`float`): Affinity value for the antibody.
+
+### Methods
+
+* `__lt__(other)`: Compare this cell with another Antibody cell based on affinity.
+* `__eq__(other)`: Check if this cell has the same affinity as another cell.
+
+---
+
+## Detector
+
+Represents a non-self detector of the RNSA class.
+
+```python
+@dataclass(slots=True)
+class Detector:
+ position: npt.NDArray[np.float64]
+ radius: Optional[float] = None
+```
+
+### Attributes
+
+* **position** (`npt.NDArray[np.float64]`): Detector feature vector.
+* **radius** (`Optional[float]`): Detector radius, used in the V-detector algorithm.
diff --git a/docs/advanced-guides/base-module/Mutation.md b/docs/advanced-guides/base-module/immune/mutation.md
similarity index 99%
rename from docs/advanced-guides/base-module/Mutation.md
rename to docs/advanced-guides/base-module/immune/mutation.md
index f7d906db..d6c3082c 100644
--- a/docs/advanced-guides/base-module/Mutation.md
+++ b/docs/advanced-guides/base-module/immune/mutation.md
@@ -1,5 +1,4 @@
---
-sidebar_position: 5
title: Mutation
sidebar_label: Mutation
lastUpdatedAt: 2025/04/04
diff --git a/docs/advanced-guides/base-module/immune/populations.md b/docs/advanced-guides/base-module/immune/populations.md
new file mode 100644
index 00000000..3944371f
--- /dev/null
+++ b/docs/advanced-guides/base-module/immune/populations.md
@@ -0,0 +1,49 @@
+---
+title: Populations Module
+sidebar_label: Populations
+pagination_next: null
+keywords:
+ - Binary
+ - classifying
+ - affinity threshold
+ - Real-Valued
+ - classifying
+ - anomalies
+ - K-Nearest Neighbors
+ - memory B-cell
+ - Clonal Expansion
+ - Immune System
+ - Artificial Immune Systems
+lastUpdatedAt: 2025/11/21
+author: João Paulo
+---
+
+Utility functions for generating antibody populations in immunological algorithms.
+
+## generate_random_antibodies(...)
+
+```python
+def generate_random_antibodies(
+ n_samples: int,
+ n_features: int,
+ feature_type: FeatureTypeAll = "continuous-features",
+ bounds: Optional[npt.NDArray[np.float64]] = None
+) -> npt.NDArray
+```
+
+Generate a random antibody population.
+
+### Parameters
+
+* **n_samples** (`int`): Number of antibodies (samples) to generate.
+* **n_features** (`int`): Number of features (dimensions) for each antibody.
+* **feature_type** (`FeatureTypeAll`, default="continuous-features"): Specifies the type of features: "continuous-features", "binary-features", "ranged-features", or "permutation-features".
+* **bounds** (`Optional[npt.NDArray[np.float64]]`): Array (n_features, 2) with min and max per dimension.
+
+### Returns
+
+* **npt.NDArray**: Array of shape (n_samples, n_features) containing the generated antibodies.
+
+### Raises
+
+* **ValueError**: If the number of features is less than or equal to zero.
\ No newline at end of file
diff --git a/docs/aisp-techniques/clonal-selection-algorithms/Cell.md b/docs/aisp-techniques/clonal-selection-algorithms/Cell.md
deleted file mode 100644
index 8992d823..00000000
--- a/docs/aisp-techniques/clonal-selection-algorithms/Cell.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-id: cell
-title: Memory B-cell
-sidebar_label: Cell - Memory B-cell
-sidebar_position: 2
-pagination_next: null
-keywords:
- - Binary
- - classifying
- - affinity threshold
- - Real-Valued
- - classifying
- - anomalies
- - K-Nearest Neighbors
- - memory B-cell
-lastUpdatedAt: 2025/05/25
-author: João Paulo
----
-
-Representa uma célula-B de memória.
-
-### Constructor
-
-Parameters:
-
-* **vector** (``Optional[npt.NDArray]``): A feature vector of the cell. Defaults to None.
-
----
-
-### Function hyper_clonal_mutate(...)
-
-Parameters:
-
-* **n** (``int``): The number of clones to be generated from mutations in the original cell.
-* **feature_type** (``Literal["continuous-features", "binary-features", "ranged-features"]``): Specifies the type of
-algorithm to use based on the nature of the input features
-* **bounds** (``np.ndarray``): Array (n_features, 2) with min and max per dimension.
-
-```python
-def hyper_clonal_mutate(
- self,
- n: int,
- feature_type: Literal[
- "binary-features",
- "continuous-features",
- "ranged-features"
- ],
- bounds: Optional[npt.NDArray[np.float64]] = None
-) -> npt.NDArray
-```
-
-Returns an array containing N mutated vectors from the original cell.
diff --git a/docs/aisp-techniques/clonal-selection-algorithms/airs/README.md b/docs/aisp-techniques/clonal-selection-algorithms/airs/README.md
index f391f96e..9e523121 100644
--- a/docs/aisp-techniques/clonal-selection-algorithms/airs/README.md
+++ b/docs/aisp-techniques/clonal-selection-algorithms/airs/README.md
@@ -29,7 +29,7 @@ Based on Algorithm 16.5 from Brabazon et al. [1](#1).
:::info
-**``AIRS``** extends the **[``_ABR`` class](abr)**, inheriting its base functionality.
+**``AIRS``** extends the **[``BaseClassifier`` class](../../../advanced-guides/base-module/core/Classifier.md)**, inheriting its base functionality.
:::
@@ -45,11 +45,18 @@ Based on Algorithm 16.5 from Brabazon et al. [1](#1).
- **max_iters** (``int``): Maximum number of interactions in the refinement process of the ARB set exposed to aᵢ. Defaults to 100.
- **resource_amplified** (``float``): Resource consumption amplifier is multiplied with the incentive to subtract resources. Defaults to 1.0 without amplification.
- **metric** (Literal["manhattan", "minkowski", "euclidean"]): Way to calculate the distance between the detector and the sample:
- - ``'Euclidean'`` ➜ The calculation of the distance is given by the expression:
- $$\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}$$
- - ``'minkowski'`` ➜ The calculation of the distance is given by the expression:
- $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
- - ``'manhattan'`` ➜ The calculation of the distance is given by the expression: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
+ - ``'Euclidean'`` ➜ The calculation of the distance is given by the expression:
+ $$
+ \sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}
+ $$
+ - ``'minkowski'`` ➜ The calculation of the distance is given by the expression:
+ $$
+ \frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}
+ $$
+ - ``'manhattan'`` ➜ The calculation of the distance is given by the expression:
+ $$
+ \frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+ $$
Defaults to **"Euclidean"**.
@@ -74,7 +81,7 @@ Based on Algorithm 16.5 from Brabazon et al. [1](#1).
The ``fit(...)`` function generates detectors for the non-owners relative to the samples:
```python
-def fit(self, X: npt.NDArray, y: npt.NDArray):
+def fit(self, X: npt.NDArray, y: npt.NDArray, verbose: bool = True) -> AIRS:
```
It performs the training according to ``X`` and ``y``, using the method Artificial Immune Recognition System (``AIRS``).
@@ -126,15 +133,15 @@ Returns accuracy as a ``float``.
The function "_refinement_arb(...)" refines the ARB set until the average stimulation value exceeds the defined threshold (``affinity_threshold_scalar``).
+```python
+def _refinement_arb(self, ai: npt.NDArray, c_match: Cell, arb_list: List[_ARB]) -> _ARB:
+```
+
Parameters:
- **c_match** (``Cell``): Cell with the highest stimulation relative to aᵢ.
- **arb_list** (``List[_ARB]``): ARB set.
-```python
-def _refinement_arb(self, ai: npt.NDArray, c_match: Cell, arb_list: List[_ARB]) -> _ARB:
-```
-
Returns the cell (_ARB) with the highest ARB stimulation.
---
@@ -163,15 +170,15 @@ def _cells_affinity_threshold(self, antigens_list: npt.NDArray):
The function "_affinity(...)" calculates the stimulus between two vectors using metrics.
+```python
+def _affinity(self, u: npt.NDArray, v: npt.NDArray) -> float:
+```
+
Parameters:
- **u** (``npt.NDArray``): Coordinates of the first point.
- **v** (``npt.NDArray``): Coordinates of the second point.
-```python
-def _affinity(self, u: npt.NDArray, v: npt.NDArray) -> float:
-```
-
Returns the stimulus rate between the vectors.
---
@@ -180,13 +187,17 @@ Returns the stimulus rate between the vectors.
The function "_init_memory_c(...)" initializes memory cells by randomly selecting `n_antigens_selected` from the list of training antigens.
+```python
+def _init_memory_c(self, antigens_list: npt.NDArray) -> List[BCell]:
+```
+
Parameters:
- **antigens_list** (``NDArray``): List of training antigens.
-```python
-def _init_memory_c(self, antigens_list: npt.NDArray) -> List[Cell]:
-```
+Returns
+
+- ``List[BCell]``: List of initialized memories.
---
diff --git a/docs/aisp-techniques/clonal-selection-algorithms/airs/abr.md b/docs/aisp-techniques/clonal-selection-algorithms/airs/abr.md
index 13ad2b94..bf2bcf61 100644
--- a/docs/aisp-techniques/clonal-selection-algorithms/airs/abr.md
+++ b/docs/aisp-techniques/clonal-selection-algorithms/airs/abr.md
@@ -21,7 +21,7 @@ Individual from the set of recognizing cells (ABR), inherits characteristics fro
:::info
-**``ABR``** extends the **[``Cell`` class](../cell)**, inheriting its base functionality.
+**``ABR``** extends the **[``BCell`` class](../../../advanced-guides/base-module/immune/cell.md#BCell)**, inheriting its base functionality.
:::
diff --git a/docs/aisp-techniques/clonal-selection-algorithms/clonalg.md b/docs/aisp-techniques/clonal-selection-algorithms/clonalg.md
index 634a0334..7ee8a2da 100644
--- a/docs/aisp-techniques/clonal-selection-algorithms/clonalg.md
+++ b/docs/aisp-techniques/clonal-selection-algorithms/clonalg.md
@@ -31,6 +31,12 @@ specific implementation. This adaptation aims to generalize CLONALG to minimizat
maximization tasks, in addition to supporting continuous, discrete, and permutation problems.
:::
+:::info
+
+**``Clonalg``** extends the **[``BaseOptimizer`` class](../../advanced-guides/base-module/core/Optimizer.md)**, inheriting its base functionality.
+
+:::
+
---
## CLONALG Constructor
@@ -61,9 +67,9 @@ The constructor initializes the CLONALG instance with key parameters that define
def optimize(
self,
max_iters: int = 50,
- n_iter_no_change=10,
+ n_iter_no_change=10,
verbose: bool = True
-) -> npt.NDArray:
+) -> List[Antibody]:
```
This method execute the optimization process and return the population.
@@ -76,7 +82,7 @@ This method execute the optimization process and return the population.
**Returns:**
-* `npt.NDArray`: The best antibody population after clonal expansion.
+* population : ``List[Antibody]``, [Antibody](../../advanced-guides/base-module/immune/cell.md#Antibody) population after clonal expansion.
---
diff --git a/docs/aisp-techniques/immune-network-theory/AiNet.md b/docs/aisp-techniques/immune-network-theory/AiNet.md
index 44016b0c..5f6807b9 100644
--- a/docs/aisp-techniques/immune-network-theory/AiNet.md
+++ b/docs/aisp-techniques/immune-network-theory/AiNet.md
@@ -40,7 +40,7 @@ For clustering, the class uses SciPy's implementation of the [**Minimum Spanning
:::info
-**``AiNet``** extends the **[``BaseAiNet`` class](../../advanced-guides/base-classes-reference/ina/ainet.md)**, inheriting its base functionality.
+**``AiNet``** extends the **[``BaseClusterer`` class](../../advanced-guides/base-module/core/Clusterer.md)**, inheriting its base functionality.
:::
@@ -77,11 +77,18 @@ class AiNet(
* **max_iterations** (``int``): Maximum number of training iterations. Defaults to 10.
* **k** (``int``): Number of nearest neighbors used for label prediction. Defaults to 3.
* **metric** (Literal["manhattan", "minkowski", "euclidean"]): Way to calculate the distance between the detector and the sample:
- * ``'Euclidean'`` ➜ The calculation of the distance is given by the expression:
- $$\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}$$
- * ``'minkowski'`` ➜ The calculation of the distance is given by the expression:
- $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
- * ``'manhattan'`` ➜ The calculation of the distance is given by the expression: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
+ * ``'Euclidean'`` ➜ The calculation of the distance is given by the expression:
+ $$
+ \sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}
+ $$
+ * ``'minkowski'`` ➜ The calculation of the distance is given by the expression:
+ $$
+ \frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}
+ $$
+ * ``'manhattan'`` ➜ The calculation of the distance is given by the expression:
+ $$
+ \frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+ $$
Defaults to **"Euclidean"**.
@@ -108,7 +115,7 @@ class AiNet(
Trains the AiNet model on input data:
```python
-def fit(self, X: npt.NDArray, verbose: bool = True):
+def fit(self, X: npt.NDArray, verbose: bool = True) -> AiNet:
```
**Input parameters:**
diff --git a/docs/aisp-techniques/negative-selection/BNSA.md b/docs/aisp-techniques/negative-selection/BNSA.md
index 3a4e0e0b..a8f7cd82 100644
--- a/docs/aisp-techniques/negative-selection/BNSA.md
+++ b/docs/aisp-techniques/negative-selection/BNSA.md
@@ -23,6 +23,12 @@ last_update:
# BNSA (Binary Negative Selection Algorithm)
+:::info
+
+**``BNSA``** extends the **[``BaseClassifier`` class](../../advanced-guides/base-module/core/Classifier.md)**, inheriting its base functionality.
+
+:::
+
## Constructor RNSA
The ``BNSA`` (Binary Negative Selection Algorithm) class has the purpose of classifying and identifying anomalies through the self and not self methods.
@@ -45,9 +51,9 @@ class BNSA(
* *N* (``int``): Number of detectors. Defaults to ``100``.
* *aff_thresh* (``float``): The variable ('affinity threshold') represents the percentage of dissimilarity between the T cell and the own samples. The default value is 10% (0.1), while a value of 1.0 represents 100% dissimilarity.
-:::note
-Setting the difference percentage too high can result in the inability to generate detectors for non-self.
-:::
+ :::note
+ Setting the difference percentage too high can result in the inability to generate detectors for non-self.
+ :::
* *max_discards* (``int``): This parameter indicates the maximum number of detector discards in sequence, which aims to avoid a
possible infinite loop if a radius is defined that it is not possible to generate non-self detectors. Defaults to ``1000``.
diff --git a/docs/aisp-techniques/negative-selection/RNSA.md b/docs/aisp-techniques/negative-selection/RNSA.md
index 530f8959..3c102d26 100644
--- a/docs/aisp-techniques/negative-selection/RNSA.md
+++ b/docs/aisp-techniques/negative-selection/RNSA.md
@@ -20,6 +20,12 @@ last_update:
# RNSA (Real-Valued Negative Selection Algorithm)
+:::info
+
+**``RNSA``** extends the **[``BaseClassifier`` class](../../advanced-guides/base-module/core/Classifier.md)**, inheriting its base functionality.
+
+:::
+
## Constructor RNSA
The ``RNSA`` (Real-Valued Negative Selection Algorithm) class has the purpose of classifying and identifying anomalies through the self and not self methods.
@@ -44,17 +50,26 @@ class RNSA(
* *N* (``int``): Number of detectors. Defaults to ``100``.
* *r* (``float``): Radius of the detector. Defaults to ``0.05``.
-:::note
-it is important to consider that setting a very low radius for the detector can significantly reduce the detection rate. On the other hand, a very large radius can make it impossible to incorporate the detector into the search space, which can also compromise detection performance. It is essential to find a balance between the radius size and detection efficiency to achieve the best possible results.
-:::
+ :::note
+ it is important to consider that setting a very low radius for the detector can significantly reduce the detection rate. On the other hand, a very large radius can make it impossible to incorporate the detector into the search space, which can also compromise detection performance. It is essential to find a balance between the radius size and detection efficiency to achieve the best possible results.
+ :::
* *k* (``int``): Number of neighbors near the randomly generated detectors to perform the distance average calculation. Defaults to ``1``.
* *metric* (``str``): Way to calculate the distance between the detector and the sample:
- * ``'Euclidean'`` ➜ The calculation of the distance is given by the expression: $$\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}$$.
-
- * ``'minkowski'`` ➜ The calculation of the distance is given by the expression: $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
- * ``'manhattan'`` ➜ The calculation of the distance is given by the expression: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
+ * ``'Euclidean'`` ➜ The calculation of the distance is given by the expression:
+ $$
+ \sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}
+ $$
+
+ * ``'minkowski'`` ➜ The calculation of the distance is given by the expression:
+ $$
+ \frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}
+ $$
+ * ``'manhattan'`` ➜ The calculation of the distance is given by the expression:
+ $$
+ \frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+ $$
Defaults to ``'euclidean'``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Distance.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Distance.md
index 4c4e896f..f4b5939b 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Distance.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Distance.md
@@ -16,7 +16,9 @@ def hamming(u: npt.NDArray, v: npt.NDArray) -> np.float64:
Função para calcular a distância de Hamming normalizada entre dois pontos.
-$((x₁ ≠ x₂) + (y₁ ≠ y₂) + ... + (y_n ≠ y_n)) / n$
+$$
+\frac{(x_1 \neq y_1) + (x_2 \neq y_2) + \cdots + (x_n \neq y_n)}{n}
+$$
**Parameters:**
@@ -37,7 +39,9 @@ def euclidean(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Função para calcular a distância euclidiana normalizada entre dois pontos.
-$√( (x₁ - x₂)² + (y₁ - y₂)² + ... + (y_n - y_n)²)$
+$$
+\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}
+$$
**Parameters:**
@@ -58,7 +62,9 @@ def cityblock(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Função para calcular a distância Manhattan normalizada entre dois pontos.
-$(|x₁ - x₂| + |y₁ - y₂| + ... + |y_n - y_n|) / n$
+$$
+\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+$$
**Parameters:**
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Multiclass.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Multiclass.md
index 8dc80f3b..fbe8d25e 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Multiclass.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Multiclass.md
@@ -27,3 +27,29 @@ a classe que está sendo treinada.
**Returns:**
* dict: Um dicionário com a lista de posições do array(``y``), com as classes como chave.
+
+---
+
+### def predict_knn_affinity(...)
+
+Função para prever classes usando k-vizinhos mais próximos e células treinadas.
+
+```python
+def predict_knn_affinity(
+ X: npt.NDArray,
+ k: int,
+ all_cell_vectors: List[Tuple[Union[str, int], npt.NDArray]],
+ affinity_func: Callable[[npt.NDArray, npt.NDArray], float]
+) -> npt.NDArray
+```
+
+**Parâmetros:**
+
+* **_X_** (`npt.NDArray`): Dados de entrada a serem classificados.
+* **_k_** (`int`): Número de vizinhos mais próximos a considerar para a previsão.
+* **_all_cell_vectors_** (`List[Tuple[Union[str, int], npt.NDArray]]`): Lista de tuplas contendo pares (nome_da_classe, vetor_da_célula).
+* **_affinity_func_** (`Callable[[npt.NDArray, npt.NDArray], float]`): Função que recebe dois vetores e retorna um valor de afinidade.
+
+**Retorna:**
+
+* `npt.NDArray`: Array de rótulos previstos para cada amostra em X, baseado nos k vizinhos mais próximos.
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Random.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Random.md
new file mode 100644
index 00000000..b6554071
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Random.md
@@ -0,0 +1,16 @@
+# Random
+
+Funções utilitárias para geração e reprodutibilidade de números aleatórios.
+
+## Função set_seed_numba(...)
+
+```python
+@njit(cache=True)
+def set_seed_numba(seed: int)
+```
+
+Define a semente para números aleatórios usados por funções compiladas com Numba.
+
+**Parâmetros**:
+
+* **seed**: `int` - Valor inteiro usado para inicializar o gerador de números aleatórios do Numba.
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Validation.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Validation.md
index 711e2392..030678fc 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Validation.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/Utils/Validation.md
@@ -16,14 +16,93 @@ Esta função analisa o vetor de entrada e classifica seus dados como um dos tip
* **contínuo**: Valores float dentro do intervalo normalizado `[0.0, 1.0]`.
* **intervalo**: Valores float fora do intervalo normalizado.
-**Parâmetros**
+### Parâmetros
* `vetor` (`npt.NDArray`): Um array contendo os dados a serem classificados.
-**Returns:**
+### Retorna
* `FeatureType` (`Literal["binary-features", "continuous-features", "ranged-features"]`): O tipo de dado detectado no vetor.
-**Lança**
+### Gera
* `UnsupportedDataTypeError`: Gerado se o vetor contiver um tipo de dado não suportado.
+
+---
+
+## def check_array_type(...)
+
+```python
+def check_array_type(x, name: str = "X") -> npt.NDArray:
+```
+
+Garante que o parâmetro recebido é um array numpy. Converte de lista se necessário.
+
+**Parâmetros:**
+
+* `x`: Array ou lista contendo as amostras e características.
+* `name`: Nome da variável para mensagens de erro.
+
+**Retorna:**
+
+* `npt.NDArray`: O array convertido ou validado.
+
+**Lança:**
+
+* `TypeError`: Se não for possível converter para ndarray.
+
+---
+
+## def check_shape_match(...)
+
+```python
+def check_shape_match(x: npt.NDArray, y: npt.NDArray):
+```
+
+Garante que os arrays `x` e `y` possuem o mesmo número de amostras (primeira dimensão).
+
+**Parâmetros:**
+
+* `x`: Array de amostras.
+* `y`: Array de classes alvo.
+
+**Lança:**
+
+* `TypeError`: Se as dimensões não forem compatíveis.
+
+---
+
+## def check_feature_dimension(...)
+
+```python
+def check_feature_dimension(x: npt.NDArray, expected: int):
+```
+
+Garante que o array possui o número esperado de características (features).
+
+**Parâmetros:**
+
+* `x`: Array de entrada para predição.
+* `expected`: Número esperado de características por amostra.
+
+**Lança:**
+
+* `FeatureDimensionMismatch`: Se o número de características não corresponder ao esperado.
+
+---
+
+## def check_binary_array(...)
+
+```python
+def check_binary_array(x: npt.NDArray):
+```
+
+Garante que o array contém apenas valores 0 e 1.
+
+**Parâmetros:**
+
+* `x`: Array a ser verificado.
+
+**Lança:**
+
+* `ValueError`: Se o array contiver valores diferentes de 0 e 1.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/_category_.json b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/_category_.json
deleted file mode 100644
index c25b4f9a..00000000
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/_category_.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "position": 2,
- "description": "Classes base para implementar os algoritmos fornecidos neste pacote."
-}
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/csa/README.mdx b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/csa/README.mdx
deleted file mode 100644
index 5c6e7378..00000000
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/csa/README.mdx
+++ /dev/null
@@ -1,11 +0,0 @@
----
-sidebar_position: 2.61
----
-
-import DocCardList from '@theme/DocCardList';
-
-# Algoritmos de Seleção Clonal
-
-As classes base fornecem a estrutura central para a implementação das técnicas de Algoritmo de Seleção Clonal.
-
-
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/csa/airs.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/csa/airs.md
deleted file mode 100644
index 0e2c5d23..00000000
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/csa/airs.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-sidebar_position: 1
-title: Classe Base do Sistema Imunológico Artificial de Reconhecimento
-sidebar_label: Sistema Imunológico Artificial de Reconhecimento
-lastUpdatedAt: 2025/05/25
-author: João Paulo
-keywords:
- - BaseAIRS
- - AIRS
- - Sistema Imunológico Artificial de Reconhecimento
- - Sistemas Imunológicos Artificiais
- - Classificador Base
- - Atributos Contínuos
- - Atributos Binários
- - Validação de Atributos
- - Aprendizado de Máquina
- - Classificação
----
-
-## ``BaseAIRS(BaseClassifier, ABC)``
-
-Classe base para o algoritmo **AIRS**.
-
-A classe base contém funções que são utilizadas por mais de uma classe no pacote e, portanto, são consideradas essenciais para o funcionamento geral do sistema.
-
----
-
-### def _check_and_raise_exceptions_fit(...)
-
-Verifica os parâmetros de ajuste (*fit*) e lança exceções caso a verificação não seja bem-sucedida.
-
-```python
-@staticmethod
-def _check_and_raise_exceptions_fit(
- X: npt.NDArray = None,
- y: npt.NDArray = None,
- algorithm: Literal[
- "continuous-features", "binary-features"
- ] = "continuous-features"
-):
-```
-
-**Parâmetros**:
-
-* ***X*** (`npt.NDArray`): Array de treinamento, contendo as amostras e suas características, com formato \[`N amostras` (linhas)]\[`N características` (colunas)].
-* ***y*** (`npt.NDArray`): Array das classes alvo de `X` com \[`N amostras` (linhas)].
-* ***algorithm*** (`Literal["continuous-features", "binary-features"], opcional`): Especifica o tipo de algoritmo a ser usado, dependendo se os dados de entrada possuem características contínuas ou binárias.
-
-**Exceções**:
-
-* `TypeError`:
- Se X ou y não forem ndarrays ou tiverem formatos incompatíveis.
-* `ValueError`:
- Se a *classe* for BNSA e X contiver valores que não sejam compostos apenas por 0 e 1.
-
----
-
-### def _check_and_raise_exceptions_predict(...)
-
-Verifica os parâmetros de predição e lança exceções caso a verificação não seja bem-sucedida.
-
-```python
-@staticmethod
-def _check_and_raise_exceptions_predict(
- X: npt.NDArray = None,
- expected: int = 0,
- algorithm: Literal[
- "continuous-features", "binary-features"
- ] = "continuous-features"
-) -> None:
-```
-
-**Parâmetros**:
-
-* ***X*** (`npt.NDArray`): Array de entrada, contendo as amostras e suas características, com formato \[`N amostras` (linhas)]\[`N características` (colunas)].
-* ***expected*** (`int`): Número esperado de características por amostra (colunas de X).
-* ***algorithm*** (`Literal["continuous-features", "binary-features"], opcional`): Especifica o tipo de algoritmo a ser usado, dependendo se os dados de entrada possuem características contínuas ou binárias.
-
-**Exceções**:
-
-* `TypeError`:
- Se X não for um ndarray ou lista.
-* `FeatureDimensionMismatch`:
- Se o número de características em X não corresponder ao número esperado.
-* `ValueError`:
- Se o algoritmo for "binary-features" e X contiver valores que não sejam compostos apenas por 0 e 1.
-
----
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/ina/README.mdx b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/ina/README.mdx
deleted file mode 100644
index 88e4a961..00000000
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/ina/README.mdx
+++ /dev/null
@@ -1,11 +0,0 @@
----
-sidebar_position: 2.71
----
-
-import DocCardList from '@theme/DocCardList';
-
-# Algoritmos de Rede Imunológica
-
-As classes base fornecem a estrutura central para a implementação das técnicas de Algoritmo de Rede Imunológica.
-
-
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/ina/ainet.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/ina/ainet.md
deleted file mode 100644
index 7f6abe70..00000000
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/ina/ainet.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-sidebar_position: 1
-title: Base da Rede Imunológica Artificial
-sidebar_label: Rede Imunológica Artificial
-lastUpdatedAt: 2025/05/25
-author: João Paulo
-keywords:
- - AiNet
- - Teoria da Rede Imunológica
- - Agrupamento
- - BaseAiNet
- - Sistemas Imunológicos Artificiais
- - Anticorpos
----
-
-## ``BaseAiNet(BaseClusterer, ABC)``
-
-Classe base para algoritmos de Teoria de Redes baseados em AiNet.
-
-A classe base contém funções utilizadas por múltiplas classes no pacote AiNet e
-são consideradas essenciais para o funcionamento adequado de algoritmos de clustering baseados na teoria de redes imunes.
-
----
-
-### def _check_and_raise_exceptions_fit(...)
-
-Verifica os parâmetros do método `fit` e lança exceções caso a verificação não seja bem-sucedida.
-
-```python
-@staticmethod
-def _check_and_raise_exceptions_fit(X: npt.NDArray)
-```
-
-**Parâmetros**:
-
-* ***X*** (`npt.NDArray`): Matriz de treinamento contendo as amostras e suas características, \[`N amostras` (linhas)]\[`N atributos` (colunas)].
-
-**Exceções**:
-
-* `TypeError`: Se X não for um `ndarray` ou uma `list`.
-
----
-
-### def _check_and_raise_exceptions_predict(...)
-
-Verifica os parâmetros do método `predict` e lança exceções caso a verificação não seja bem-sucedida.
-
-```python
-@staticmethod
-def _check_and_raise_exceptions_predict(
- X: npt.NDArray,
- expected: int = 0,
- feature_type: FeatureType = "continuous-features"
-) -> None
-```
-
-**Parâmetros**:
-
-* ***X*** (`npt.NDArray`): Matriz de entrada para predição, contendo as amostras e suas características, \[`N amostras` (linhas)]\[`N atributos` (colunas)].
-* ***expected*** (`int`, default=0): Número esperado de atributos por amostra (colunas em X).
-* ***feature_type*** (`FeatureType`, default="continuous-features"): Especifica o tipo de atributos: `"continuous-features"`, `"binary-features"` ou `"ranged-features"`.
-
-**Exceções**:
-
-* `TypeError`: Se X não for um `ndarray` ou uma `list`.
-* `FeatureDimensionMismatch`: Se o número de atributos em X não corresponder ao esperado.
-* `ValueError`: Se `feature_type` for `"binary-features"` e X contiver valores diferentes de 0 e 1.
-
----
-
-### def _generate_random_antibodies(...)
-
-Gera uma população aleatória de anticorpos.
-
-```python
-@staticmethod
-def _generate_random_antibodies(
- n_samples: int,
- n_features: int,
- feature_type: FeatureType = "continuous-features",
- bounds: Optional[npt.NDArray[np.float64]] = None
-) -> npt.NDArray
-```
-
-**Parâmetros**:
-
-* ***n_samples*** (`int`): Número de anticorpos (amostras) a serem gerados.
-* ***n_features*** (`int`): Número de atributos (dimensões) para cada anticorpo.
-* ***feature_type*** (`FeatureType`, default="continuous-features"): Especifica o tipo de atributos: `"continuous-features"`, `"binary-features"` ou `"ranged-features"`.
-* ***bounds*** (`Optional[npt.NDArray[np.float64]]`): Matriz de formato `(n_features, 2)` com valores mínimos e máximos por dimensão (usado apenas para atributos do tipo "ranged").
-
-**Retorna**:
-
-* `npt.NDArray`: Matriz de formato `(n_samples, n_features)` contendo os anticorpos gerados.
- O tipo dos dados depende de `feature_type` (float para contínuo/ranged, bool para binário).
-
-**Exceções**:
-
-* `ValueError`: Se `n_features <= 0`.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/nsa.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/nsa.md
deleted file mode 100644
index 0d2fc458..00000000
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-classes-reference/nsa.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-sidebar_position: 1
-title: Classe Base de Seleção Negativa
-sidebar_label: Seleção Negativa
-lastUpdatedAt: 2025/04/04
-author: João Paulo
-keywords:
- - BaseNSA
- - Seleção Negativa
- - Sistemas Imunológicos Artificiais
- - RNSA
- - BNSA
- - Classificador Base
- - Aprendizado de Máquina
- - Detecção de Anomalias
- - Atributos Contínuos
- - Atributos Binários
- - Validação de Atributos
- - Classificação
----
-
-## ``class BaseNSA(BaseClassifier, ABC)``
-
-A classe ``BaseNSA`` contém funções utilitárias com o modificador ``protected`` que podem ser herdadas por várias classes para facilitar o uso. Ela inclui funções para calcular distância, separar dados para melhorar a eficiência de treinamento e previsão, medir precisão e outras funções.
-
----
-
-### Funções Protegidas
-
----
-
-#### def _check_and_raise_exceptions_fit(...)
-
-```python
-def _check_and_raise_exceptions_fit(
- X: npt.NDArray = None,
- y: npt.NDArray = None,
- _class_: Literal["RNSA", "BNSA"] = "RNSA",
-) -> None:
-```
-
-Função responsável por verificar os parâmetros da função fit e lançar exceções se a verificação não for bem-sucedida.
-
-**Parâmetros**:
-
-* **X** (``npt.NDArray``): Array de treinamento, contendo as amostras e suas características, \[``N samples`` (linhas)\]\[``N features`` (colunas)].
-* ***y*** (``npt.NDArray``): Array de classes alvo de ``X`` com \[``N samples`` (linhas)].
-* ****class**** (Literal[RNSA, BNSA], opcional): Classe atual. O padrão é 'RNSA'.
-
-**Lança:**
-
-* ``TypeError``: Se X ou y não forem ndarrays ou tiverem formas incompatíveis.
-* ``MaxDiscardsReachedError``: O número máximo de descartes do detector foi atingido durante
-a maturação. Verifique o valor do raio definido e considere reduzi-lo.
-
-#### def _check_and_raise_exceptions_predict(...)
-
-```python
-def _check_and_raise_exceptions_predict(
- X: npt.NDArray = None,
- expected: int = 0,
- _class_: Literal["RNSA", "BNSA"] = "RNSA",
-) -> None:
-```
-
-Função responsável por verificar os parâmetros da função predict e lançar exceções caso a verificação não seja bem-sucedida.
-**Parâmetros**:
-
-* ***X*** (``npt.NDArray``): Array de treinamento, contendo as amostras e suas características, \[``N samples`` (linhas)\]\[``N features`` (colunas)].
-* ***expected*** (``int``): Número esperado de características por amostra (colunas em X).
-* ****class**** (``Literal[RNSA, BNSA], opcional``): Classe atual. O padrão é 'RNSA'.
-
-**Lança:**
-
-* ``TypeError``: Se X ou y não forem ndarrays ou tiverem formas incompatíveis.
-* ``MaxDiscardsReachedError``: O número máximo de descartes do detector foi atingido durante
-a maturação. Verifique o valor do raio definido e considere reduzi-lo.
-
----
-
-## ``Class Detector``
-
-Representa um detector não-próprio do class RNSA.
-
-**Atributos:**
-
-* ***position*** (``np.ndarray``): Vetor de características do detector.
-* ***radius*** (``float, opcional``): Raio do detector, utilizado no algoritmo V-detector.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Base.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Base.md
similarity index 80%
rename from i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Base.md
rename to i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Base.md
index dc887ed5..bd5f0f0e 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Base.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Base.md
@@ -53,18 +53,3 @@ Retorna um dicionário com os principais parâmetros do objeto. Garante compatib
* params: `dict` - Dicionário contendo os atributos do objeto que não começam com "_".
---
-
-## Funções utilitárias
-
-### Função set_seed_numba(...)
-
-```python
-@njit(cache=True)
-def set_seed_numba(seed: int)
-```
-
-Define a semente para números aleatórios usados por funções compiladas com Numba.
-
-**Parâmetros**:
-
-* **seed**: `int` - Valor inteiro usado para inicializar o gerador de números aleatórios do Numba.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Classifier.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Classifier.md
similarity index 81%
rename from i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Classifier.md
rename to i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Classifier.md
index eef99a11..546e22f9 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Classifier.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Classifier.md
@@ -24,9 +24,9 @@ Ajusta o modelo aos dados de treinamento.
Implementação:
-- [RNSA](../../aisp-techniques/negative-selection/RNSA.md#Função-fit)
-- [BNSA](../../aisp-techniques/negative-selection/BNSA.md#Função-fit)
-- [AIRS](../../aisp-techniques/clonal-selection-algorithms/airs/#Método-fit)
+- [RNSA](../../../aisp-techniques/negative-selection/RNSA.md#Função-fit)
+- [BNSA](../../../aisp-techniques/negative-selection/BNSA.md#Função-fit)
+- [AIRS](../../../aisp-techniques/clonal-selection-algorithms/airs/#Método-fit)
### def predict(...)
@@ -38,9 +38,9 @@ Realiza a previsão dos rótulos para os dados fornecidos.
Implementação:
-- [RNSA](../../aisp-techniques/negative-selection/RNSA.md#Função-predict)
-- [BNSA](../../aisp-techniques/negative-selection/BNSA.md#Função-predict)
-- [AIRS](../../aisp-techniques/clonal-selection-algorithms/airs/#Método-predict)
+- [RNSA](../../../aisp-techniques/negative-selection/RNSA.md#Função-predict)
+- [BNSA](../../../aisp-techniques/negative-selection/BNSA.md#Função-predict)
+- [AIRS](../../../aisp-techniques/clonal-selection-algorithms/airs/#Método-predict)
---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Clusterer.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Clusterer.md
similarity index 93%
rename from i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Clusterer.md
rename to i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Clusterer.md
index ced74add..aea519ce 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Clusterer.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Clusterer.md
@@ -48,7 +48,7 @@ Este método abstrato deve ser implementado pelas subclasses.
**Implementação**:
-* [AiNet](../../aisp-techniques/immune-network-theory/AiNet.md#Função-fit)
+* [AiNet](../../../aisp-techniques/immune-network-theory/AiNet.md#Função-fit)
---
@@ -71,7 +71,7 @@ Este método abstrato deve ser implementado pelas subclasses.
**Implementação**:
-* [AiNet](../../aisp-techniques/immune-network-theory/AiNet.md#Função-predict)
+* [AiNet](../../../aisp-techniques/immune-network-theory/AiNet.md#Função-predict)
---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Optimizer.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Optimizer.md
similarity index 100%
rename from i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Optimizer.md
rename to i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/core/Optimizer.md
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/cell.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/cell.md
new file mode 100644
index 00000000..ef81da74
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/cell.md
@@ -0,0 +1,117 @@
+---
+title: Cell Classes
+sidebar_label: Cell Classes
+keywords:
+ - Binário
+ - classificação
+ - limiar de afinidade
+ - Valores Reais
+ - classificação
+ - anomalias
+ - K-Vizinhos Mais Próximos
+ - célula-B de memória
+lastUpdatedAt: 2025/05/25
+author: João Paulo
+---
+
+Representação de células do sistema imunológico.
+
+## Cell
+
+Representa uma célula imune básica.
+
+```python
+@dataclass(slots=True)
+class Cell:
+ vector: np.ndarray
+```
+
+### Atributos
+
+* **vector** (`np.ndarray`): Um vetor de características da célula.
+
+### Métodos
+
+* `__eq__(other)`: Verifica se duas células são iguais com base em seus vetores.
+* `__array__()`: Interface de array para NumPy, permite que a instância seja tratada como um `np.ndarray`.
+* `__getitem__(item)`: Obtém elementos do vetor de características usando indexação.
+
+---
+
+## BCell
+
+Representa uma célula B de memória, derivada de `Cell`.
+
+```python
+@dataclass(slots=True, eq=False)
+class BCell(Cell):
+ vector: np.ndarray
+```
+
+### Métodos
+
+### hyper_clonal_mutate(...)
+
+```python
+def hyper_clonal_mutate(
+ self,
+ n: int,
+ feature_type: FeatureType = "continuous-features",
+ bounds: Optional[npt.NDArray[np.float64]] = None
+) -> np.ndarray
+```
+
+Clona N características das características de uma célula, gerando um conjunto de vetores mutados.
+
+#### Parâmetros
+
+* **n** (`int`): Número de clones a serem gerados a partir de mutações da célula original.
+* **feature_type** (`Literal["binary-features", "continuous-features", "ranged-features"]`): Especifica o tipo de características com base na natureza das características de entrada.
+* **bounds** (`Optional[npt.NDArray[np.float64]]`): Array (n_features, 2) com mínimo e máximo por dimensão.
+
+#### Retorna
+
+* **npt.NDArray**: Um array contendo N vetores mutados da célula original.
+
+---
+
+## Antibody
+
+Representa um anticorpo com afinidade, derivado de `Cell`.
+
+```python
+@dataclass(slots=True)
+class Antibody(Cell):
+ vector: np.ndarray
+ affinity: float
+```
+
+### Atributos
+
+* **vector** (`npt.NDArray`): Um vetor de características da célula.
+* **affinity** (`float`): Valor de afinidade do anticorpo.
+
+### Métodos
+
+* `__lt__(other)`: Compara este anticorpo com outro com base na afinidade.
+* `__eq__(other)`: Verifica se dois anticorpos têm a mesma afinidade.
+
+---
+
+## Detector
+
+Representa um detector não-próprio da classe RNSA.
+
+```python
+@dataclass(slots=True)
+class Detector:
+ position: npt.NDArray[np.float64]
+ radius: Optional[float] = None
+```
+
+### Atributos
+
+* **position** (`npt.NDArray[np.float64]`): Vetor de características do detector.
+* **radius** (`Optional[float]`): Raio do detector, usado no algoritmo V-detector.
+
+---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Mutation.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/mutation.md
similarity index 99%
rename from i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Mutation.md
rename to i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/mutation.md
index 4eaef904..d9e29b66 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/Mutation.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/mutation.md
@@ -1,5 +1,4 @@
---
-sidebar_position: 4
title: Mutation
sidebar_label: Mutation
lastUpdatedAt: 2025/04/04
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/populations.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/populations.md
new file mode 100644
index 00000000..f3cbae8d
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/advanced-guides/base-module/immune/populations.md
@@ -0,0 +1,49 @@
+---
+title: Módulo de Populações
+sidebar_label: Populações
+pagination_next: null
+keywords:
+ - Binary
+ - classifying
+ - affinity threshold
+ - Real-Valued
+ - classifying
+ - anomalies
+ - K-Nearest Neighbors
+ - memory B-cell
+ - Clonal Expansion
+ - Immune System
+ - Artificial Immune Systems
+lastUpdatedAt: 2025/11/21
+author: João Paulo
+---
+
+Fornece funções utilitárias para gerar populações de anticorpos em algoritmos imunológicos.
+
+## generate_random_antibodies(...)
+
+Gera uma população aleatória de anticorpos.
+
+```python
+def generate_random_antibodies(
+ n_samples: int,
+ n_features: int,
+ feature_type: FeatureTypeAll = "continuous-features",
+ bounds: Optional[npt.NDArray[np.float64]] = None
+) -> npt.NDArray
+```
+
+### Parâmetros
+
+* **n_samples** (`int`): Número de anticorpos (amostras) a serem gerados.
+* **n_features** (`int`): Número de características (dimensões) para cada anticorpo.
+* **feature_type** (`FeatureTypeAll`, default="continuous-features"): Especifica o tipo das características: "continuous-features", "binary-features", "ranged-features", or "permutation-features".
+* **bounds** (`Optional[npt.NDArray[np.float64]]`): Array (n_features, 2) contendo os valores mínimo e máximo por dimensão.
+
+### Retorno
+
+* **npt.NDArray**: Array com forma (n_samples, n_features) contendo os anticorpos gerados.
+
+### Exceções
+
+* **ValueError**: Caso o número de características seja menor ou igual a zero.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/Cell.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/Cell.md
deleted file mode 100644
index 61d70cf4..00000000
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/Cell.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-id: cell
-sidebar_label: Célula-B de Memória
-sidebar_position: 2
-pagination_next: null
-keywords:
- - Binário
- - classificação
- - limiar de afinidade
- - Valores Reais
- - classificação
- - anomalias
- - K-Vizinhos Mais Próximos
- - célula-B de memória
-lastUpdatedAt: 2025/05/25
-author: João Paulo
----
-
-# Célula-B de memória
-
-Representa uma célula-B de memória.
-
-## Construtor
-
-Parâmetros:
-
-* **vector** (`npt.NDArray`): Vetor de características da célula. Padrão é None.
-
----
-
-## Função hyper_clonal_mutate(...)
-
-Parâmetros:
-
-* **n** (`int`): O número de clones a serem gerados a partir de mutações da célula original.
-* **feature_type** (`Literal["continuous-features", "binary-features", "ranged-features"]`): Especifica o tipo de algoritmo com base na natureza das características de entrada.
-* **bounds** (``np.ndarray``): Array (n_features, 2) com mínimo e máximo por dimensão.
-
-```python
-def hyper_clonal_mutate(
- self,
- n: int,
- feature_type: Literal[
- "binary-features",
- "continuous-features",
- "ranged-features"
- ],
- bounds: Optional[npt.NDArray[np.float64]] = None
-) -> npt.NDArray
-```
-
-Retorna um array contendo N vetores mutados a partir da célula original.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/airs/README.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/airs/README.md
index 02a88ed2..1c500308 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/airs/README.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/airs/README.md
@@ -28,7 +28,7 @@ Com base no algoritmo 16.5 de Brabazon et al. [1](#1).
:::info
-**``AIRS``** estende a classe **[``_ABR``](abr)**, herdando sua funcionalidade base.
+**``AIRS``** estende a classe **[classe ``BaseClassifier``](../../../advanced-guides/base-module/core/Classifier.md)**, herdando sua funcionalidade base.
:::
@@ -54,9 +54,18 @@ A classe `AIRS` tem como objetivo realizar classificação utilizando metáforas
- **metric** (Literal["manhattan", "minkowski", "euclidean"]): Forma de calcular a distância entre o detector e a amostra:
- - ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão: $$\sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}$$.
- - ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - Y_1|^p + |X_2 - Y_2|^p + ... |X_n - Y_n|^p)^\frac{1}{p}$$.
- - ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - X_1| + |Y_2 - Y_2| + ... + |Y_n - Y_n|)$$.
+ - ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}
+ $$
+ - ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}
+ $$.
+ - ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+ $$.
Defaults to ``'euclidean'``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/airs/abr.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/airs/abr.md
index 949c9a47..eb0e525b 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/airs/abr.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/airs/abr.md
@@ -21,7 +21,7 @@ Individuo do conjunto de células reconhecedoras (ABR), herda características d
:::info
-**``ABR``** estende a classe **[``Cell``](../cell)**, herdando sua funcionalidade base.
+**``ABR``** estende a classe **[``BCell``](../../../advanced-guides/base-module/immune/cell.md#BCell)**, herdando sua funcionalidade base.
:::
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/clonalg.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/clonalg.md
index 94e2ee23..45275396 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/clonalg.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/clonal-selection-algorithms/clonalg.md
@@ -28,6 +28,12 @@ específica. Esta adaptação visa generalizar o CLONALG para tarefas de minimiz
maximização, além de suportar problemas contínuos, discretos e de permutação.
:::
+:::info
+
+**``Clonalg``** estende a **[classe ``BaseOptimizer`` ](../../advanced-guides/base-module/core/Optimizer.md)**, herdando suas funcionalidades básicas.
+
+:::
+
---
## CLONALG Constructor
@@ -55,7 +61,12 @@ O construtor inicializa a instância do CLONALG com os principais parâmetros qu
#### Função `optimize(...)`
```python
-def optimize(self, max_iters: int = 50, n_iter_no_change=10, verbose: bool = True) -> npt.NDArray:
+def optimize(
+ self,
+ max_iters: int = 50,
+ n_iter_no_change=10,
+ verbose: bool = True
+) -> List[Antibody]:
```
Este método executa o processo de otimização e retorna a população de anticorpos.
@@ -68,7 +79,7 @@ Este método executa o processo de otimização e retorna a população de antic
**Retorna:**
-* `npt.NDArray`: A população de anticorpos após a expansão clonal.
+* population : ``List[Antibody]``, A população de [anticorpos](../../advanced-guides/base-module/immune/cell.md#Antibody) após a expansão clonal.
---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/immune-network-theory/AiNet.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/immune-network-theory/AiNet.md
index fdaac866..5738f143 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/immune-network-theory/AiNet.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/immune-network-theory/AiNet.md
@@ -38,7 +38,7 @@ Para clustering, pode opcionalmente utilizar uma [**Árvore Geradora Mínima**
:::info
-**``AiNet``** estende a **[classe ``BaseAiNet``](../../advanced-guides/base-classes-reference/ina/ainet.md)**, herdando sua funcionalidade básica.
+**``AiNet``** estende a **[classe ``BaseClusterer``](../../advanced-guides/base-module/core/Clusterer.md)**, herdando sua funcionalidade básica.
:::
@@ -76,11 +76,18 @@ class AiNet(
* **k** (`int`): Número de vizinhos mais próximos usados para predição de rótulos. Padrão: 3.
* **metric** (Literal["manhattan", "minkowski", "euclidean"]): Forma de calcular a distância entre o detector e a amostra:
- * `'euclidean'` ➜ Distância dada pela expressão:
- $$\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}$$
- * ``'minkowski'`` ➜ Distância dada pela expressão:
- $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
- * ``'manhattan'`` ➜ Distância dada pela expressão: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
+ * ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}
+ $$
+ * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}
+ $$
+ * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+ $$
Padrão: **"Euclidean"**.
@@ -107,7 +114,7 @@ class AiNet(
Treina o modelo AiNet com os dados de entrada:
```python
-def fit(self, X: npt.NDArray, verbose: bool = True):
+def fit(self, X: npt.NDArray, verbose: bool = True) -> AiNet:
```
**Parâmetros de entrada:**
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/negative-selection/BNSA.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/negative-selection/BNSA.md
index 803f1022..9f619b1e 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/negative-selection/BNSA.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/negative-selection/BNSA.md
@@ -21,6 +21,14 @@ keywords:
# BNSA (Algoritmo de Seleção Negativa Binária)
+:::info
+
+**``BNSA``** estende a **[classe ``BaseClassifier``](../../advanced-guides/base-module/core/Classifier.md)**, herdando suas funcionalidades básicas.
+
+:::
+
+## Construtor RNSA
+
A classe ``BNSA`` tem a finalidade de classificação e identificação de anomalias através do método self e not self .
```python
@@ -39,9 +47,9 @@ class BNSA(
* *N* (``int``): Quantidade de detectores. Defaults to ``100``.
* *aff_thresh* (``float``): A variável ('affinity threshold') representa a porcentagem de não similaridade entre a célula T e as amostras próprias. O valor padrão é de 10% (0,1), enquanto que o valor de 1,0 representa 100% de não similaridade.
-:::note
-Definir uma porcentagem de diferença muito alta pode resultar na incapacidade de gerar detectores para não-próprio.
-:::
+ :::note
+ Definir uma porcentagem de diferença muito alta pode resultar na incapacidade de gerar detectores para não-próprio.
+ :::
* *max_discards* (``int``): Este parâmetro indica o número máximo de descartes de detectores em sequência, que tem como objetivo evitar um
possível loop infinito caso seja definido um raio que não seja possível gerar detectores do não-próprio. Defaults to ``1000``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/negative-selection/RNSA.md b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/negative-selection/RNSA.md
index 8d97e90a..6f1c88e0 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/negative-selection/RNSA.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/current/aisp-techniques/negative-selection/RNSA.md
@@ -20,6 +20,12 @@ keywords:
# RNSA (Algoritmo de Seleção Negativa de Valor Real)
+:::info
+
+**``RNSA``** estende a **[classe ``BaseClassifier``](../../advanced-guides/base-module/core/Classifier.md)**, herdando suas funcionalidades básicas.
+
+:::
+
## Construtor RNSA
A classe ``RNSA`` tem a finalidade de classificação e identificação de anomalias através do método self e not self .
@@ -44,16 +50,25 @@ class RNSA(
* *N* (``int``): Quantidade de detectores. Defaults to ``100``.
* *r* (``float``): Raio do detector. Defaults to ``0.05``.
-:::note
-É importante considerar que definir um raio muito baixo para o detector pode reduzir significativamente a taxa de detecção. Por outro lado, um raio muito grande pode inviabilizar a incorporação do detector no espaço de busca, o que também pode comprometer o desempenho da detecção. É fundamental encontrar um equilíbrio entre o tamanho do raio e a eficiência da detecção para obter os melhores resultados possíveis.
-:::
+ :::note
+ É importante considerar que definir um raio muito baixo para o detector pode reduzir significativamente a taxa de detecção. Por outro lado, um raio muito grande pode inviabilizar a incorporação do detector no espaço de busca, o que também pode comprometer o desempenho da detecção. É fundamental encontrar um equilíbrio entre o tamanho do raio e a eficiência da detecção para obter os melhores resultados possíveis.
+ :::
* *k* (``int``): Quantidade de vizinhos próximos dos detectores gerados aleatoriamente para efetuar o cálculo da média da distância. Defaults to ``1``.
* *metric* (``str``): Forma para se calcular a distância entre o detector e a amostra:
- * ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão: $$\sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}$$.
- * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - Y_1|^p + |X_2 - Y_2|^p + ... |X_n - Y_n|^p)^\frac{1}{p}$$.
- * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - X_1| + |Y_2 - Y_2| + ... + |Y_n - Y_n|)$$.
+ * ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}
+ $$
+ * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}
+ $$.
+ * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+ $$.
Defaults to ``'euclidean'``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.1.x/advanced-guides/Utils/Distance.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.1.x/advanced-guides/Utils/Distance.md
index 4c4e896f..f4b5939b 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.1.x/advanced-guides/Utils/Distance.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.1.x/advanced-guides/Utils/Distance.md
@@ -16,7 +16,9 @@ def hamming(u: npt.NDArray, v: npt.NDArray) -> np.float64:
Função para calcular a distância de Hamming normalizada entre dois pontos.
-$((x₁ ≠ x₂) + (y₁ ≠ y₂) + ... + (y_n ≠ y_n)) / n$
+$$
+\frac{(x_1 \neq y_1) + (x_2 \neq y_2) + \cdots + (x_n \neq y_n)}{n}
+$$
**Parameters:**
@@ -37,7 +39,9 @@ def euclidean(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Função para calcular a distância euclidiana normalizada entre dois pontos.
-$√( (x₁ - x₂)² + (y₁ - y₂)² + ... + (y_n - y_n)²)$
+$$
+\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}
+$$
**Parameters:**
@@ -58,7 +62,9 @@ def cityblock(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Função para calcular a distância Manhattan normalizada entre dois pontos.
-$(|x₁ - x₂| + |y₁ - y₂| + ... + |y_n - y_n|) / n$
+$$
+\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+$$
**Parameters:**
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.1.x/aisp-techniques/Negative Selection/RNSA.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.1.x/aisp-techniques/Negative Selection/RNSA.md
index 8d97e90a..ce0cb36d 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.1.x/aisp-techniques/Negative Selection/RNSA.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.1.x/aisp-techniques/Negative Selection/RNSA.md
@@ -52,8 +52,8 @@ class RNSA(
* *metric* (``str``): Forma para se calcular a distância entre o detector e a amostra:
* ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão: $$\sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}$$.
- * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - Y_1|^p + |X_2 - Y_2|^p + ... |X_n - Y_n|^p)^\frac{1}{p}$$.
- * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - X_1| + |Y_2 - Y_2| + ... + |Y_n - Y_n|)$$.
+ * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
+ * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
Defaults to ``'euclidean'``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/advanced-guides/Utils/Distance.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/advanced-guides/Utils/Distance.md
index 4c4e896f..f4b5939b 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/advanced-guides/Utils/Distance.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/advanced-guides/Utils/Distance.md
@@ -16,7 +16,9 @@ def hamming(u: npt.NDArray, v: npt.NDArray) -> np.float64:
Função para calcular a distância de Hamming normalizada entre dois pontos.
-$((x₁ ≠ x₂) + (y₁ ≠ y₂) + ... + (y_n ≠ y_n)) / n$
+$$
+\frac{(x_1 \neq y_1) + (x_2 \neq y_2) + \cdots + (x_n \neq y_n)}{n}
+$$
**Parameters:**
@@ -37,7 +39,9 @@ def euclidean(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Função para calcular a distância euclidiana normalizada entre dois pontos.
-$√( (x₁ - x₂)² + (y₁ - y₂)² + ... + (y_n - y_n)²)$
+$$
+\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}
+$$
**Parameters:**
@@ -58,7 +62,9 @@ def cityblock(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Função para calcular a distância Manhattan normalizada entre dois pontos.
-$(|x₁ - x₂| + |y₁ - y₂| + ... + |y_n - y_n|) / n$
+$$
+\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+$$
**Parameters:**
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/aisp-techniques/Clonal Selection Algorithms/airs/README.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/aisp-techniques/Clonal Selection Algorithms/airs/README.md
index 7cab8820..697df957 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/aisp-techniques/Clonal Selection Algorithms/airs/README.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/aisp-techniques/Clonal Selection Algorithms/airs/README.md
@@ -56,8 +56,8 @@ A classe `AIRS` tem como objetivo realizar classificação utilizando metáforas
- **metric** (Literal["manhattan", "minkowski", "euclidean"]): Forma de calcular a distância entre o detector e a amostra:
- ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão: $$\sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}$$.
- - ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - Y_1|^p + |X_2 - Y_2|^p + ... |X_n - Y_n|^p)^\frac{1}{p}$$.
- - ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - X_1| + |Y_2 - Y_2| + ... + |Y_n - Y_n|)$$.
+ - ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
+ - ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
Defaults to ``'euclidean'``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/aisp-techniques/Negative Selection/RNSA.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/aisp-techniques/Negative Selection/RNSA.md
index 8d97e90a..ce0cb36d 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/aisp-techniques/Negative Selection/RNSA.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.2.x/aisp-techniques/Negative Selection/RNSA.md
@@ -52,8 +52,8 @@ class RNSA(
* *metric* (``str``): Forma para se calcular a distância entre o detector e a amostra:
* ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão: $$\sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}$$.
- * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - Y_1|^p + |X_2 - Y_2|^p + ... |X_n - Y_n|^p)^\frac{1}{p}$$.
- * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - X_1| + |Y_2 - Y_2| + ... + |Y_n - Y_n|)$$.
+ * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
+ * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
Defaults to ``'euclidean'``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/advanced-guides/Utils/Distance.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/advanced-guides/Utils/Distance.md
index 4c4e896f..f4b5939b 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/advanced-guides/Utils/Distance.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/advanced-guides/Utils/Distance.md
@@ -16,7 +16,9 @@ def hamming(u: npt.NDArray, v: npt.NDArray) -> np.float64:
Função para calcular a distância de Hamming normalizada entre dois pontos.
-$((x₁ ≠ x₂) + (y₁ ≠ y₂) + ... + (y_n ≠ y_n)) / n$
+$$
+\frac{(x_1 \neq y_1) + (x_2 \neq y_2) + \cdots + (x_n \neq y_n)}{n}
+$$
**Parameters:**
@@ -37,7 +39,9 @@ def euclidean(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Função para calcular a distância euclidiana normalizada entre dois pontos.
-$√( (x₁ - x₂)² + (y₁ - y₂)² + ... + (y_n - y_n)²)$
+$$
+\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}
+$$
**Parameters:**
@@ -58,7 +62,9 @@ def cityblock(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Função para calcular a distância Manhattan normalizada entre dois pontos.
-$(|x₁ - x₂| + |y₁ - y₂| + ... + |y_n - y_n|) / n$
+$$
+\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+$$
**Parameters:**
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/aisp-techniques/clonal-selection-algorithms/airs/README.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/aisp-techniques/clonal-selection-algorithms/airs/README.md
index 02a88ed2..ec0b543f 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/aisp-techniques/clonal-selection-algorithms/airs/README.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/aisp-techniques/clonal-selection-algorithms/airs/README.md
@@ -55,8 +55,8 @@ A classe `AIRS` tem como objetivo realizar classificação utilizando metáforas
- **metric** (Literal["manhattan", "minkowski", "euclidean"]): Forma de calcular a distância entre o detector e a amostra:
- ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão: $$\sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}$$.
- - ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - Y_1|^p + |X_2 - Y_2|^p + ... |X_n - Y_n|^p)^\frac{1}{p}$$.
- - ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - X_1| + |Y_2 - Y_2| + ... + |Y_n - Y_n|)$$.
+ - ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
+ - ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
Defaults to ``'euclidean'``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/aisp-techniques/negative-selection/RNSA.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/aisp-techniques/negative-selection/RNSA.md
index 8d97e90a..ce0cb36d 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/aisp-techniques/negative-selection/RNSA.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.3.x/aisp-techniques/negative-selection/RNSA.md
@@ -52,8 +52,8 @@ class RNSA(
* *metric* (``str``): Forma para se calcular a distância entre o detector e a amostra:
* ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão: $$\sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}$$.
- * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - Y_1|^p + |X_2 - Y_2|^p + ... |X_n - Y_n|^p)^\frac{1}{p}$$.
- * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - X_1| + |Y_2 - Y_2| + ... + |Y_n - Y_n|)$$.
+ * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
+ * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
Defaults to ``'euclidean'``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/advanced-guides/Utils/Distance.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/advanced-guides/Utils/Distance.md
index 4c4e896f..f4b5939b 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/advanced-guides/Utils/Distance.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/advanced-guides/Utils/Distance.md
@@ -16,7 +16,9 @@ def hamming(u: npt.NDArray, v: npt.NDArray) -> np.float64:
Função para calcular a distância de Hamming normalizada entre dois pontos.
-$((x₁ ≠ x₂) + (y₁ ≠ y₂) + ... + (y_n ≠ y_n)) / n$
+$$
+\frac{(x_1 \neq y_1) + (x_2 \neq y_2) + \cdots + (x_n \neq y_n)}{n}
+$$
**Parameters:**
@@ -37,7 +39,9 @@ def euclidean(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Função para calcular a distância euclidiana normalizada entre dois pontos.
-$√( (x₁ - x₂)² + (y₁ - y₂)² + ... + (y_n - y_n)²)$
+$$
+\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}
+$$
**Parameters:**
@@ -58,7 +62,9 @@ def cityblock(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.floa
Função para calcular a distância Manhattan normalizada entre dois pontos.
-$(|x₁ - x₂| + |y₁ - y₂| + ... + |y_n - y_n|) / n$
+$$
+\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+$$
**Parameters:**
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/aisp-techniques/clonal-selection-algorithms/airs/README.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/aisp-techniques/clonal-selection-algorithms/airs/README.md
index 02a88ed2..ec0b543f 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/aisp-techniques/clonal-selection-algorithms/airs/README.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/aisp-techniques/clonal-selection-algorithms/airs/README.md
@@ -55,8 +55,8 @@ A classe `AIRS` tem como objetivo realizar classificação utilizando metáforas
- **metric** (Literal["manhattan", "minkowski", "euclidean"]): Forma de calcular a distância entre o detector e a amostra:
- ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão: $$\sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}$$.
- - ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - Y_1|^p + |X_2 - Y_2|^p + ... |X_n - Y_n|^p)^\frac{1}{p}$$.
- - ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - X_1| + |Y_2 - Y_2| + ... + |Y_n - Y_n|)$$.
+ - ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
+ - ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
Defaults to ``'euclidean'``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/aisp-techniques/negative-selection/RNSA.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/aisp-techniques/negative-selection/RNSA.md
index 342e3f01..36ef547f 100644
--- a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/aisp-techniques/negative-selection/RNSA.md
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.4.x/aisp-techniques/negative-selection/RNSA.md
@@ -52,8 +52,8 @@ class RNSA(
* *metric* (``str``): Forma para se calcular a distância entre o detector e a amostra:
* ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão: $$\sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}$$.
- * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - Y_1|^p + |X_2 - Y_2|^p + ... |X_n - Y_n|^p)^\frac{1}{p}$$.
- * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$( |X_1 - X_1| + |Y_2 - Y_2| + ... + |Y_n - Y_n|)$$.
+ * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}$$.
+ * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão: $$\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}$$.
Defaults to ``'euclidean'``.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x.json b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x.json
new file mode 100644
index 00000000..31abed90
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x.json
@@ -0,0 +1,62 @@
+{
+ "sidebar.docs.category.Implemented techniques": {
+ "message": "Técnicas implementadas",
+ "description": "The label for category Implemented techniques in sidebar docs"
+ },
+ "sidebar.docs.category.Negative selection": {
+ "message": "Seleção negativa",
+ "description": "The label for category Negative selection in sidebar docs"
+ },
+ "sidebar.docs.category.Getting Started": {
+ "message": "Primeiros passos",
+ "description": "The label for category Getting Started in sidebar docs"
+ },
+ "sidebar.docs.category.Técnicas implementadas": {
+ "message": "Técnicas implementadas",
+ "description": "The label for category Técnicas implementadas in sidebar docs"
+ },
+ "sidebar.docs.category.Seleção Negativa": {
+ "message": "Seleção Negativa",
+ "description": "The label for category Seleção Negativa in sidebar docs"
+ },
+ "sidebar.docs.category.Examples": {
+ "message": "Exemplos",
+ "description": "The label for category Examples in sidebar docs"
+ },
+ "sidebar.docs.category.Examples.link.generated-index.description": {
+ "message": "Abaixo estão alguns exemplos que usam base de dados para classificação com a ferramenta Jupyter notebook.",
+ "description": "Abaixo estão alguns exemplos que usam base de dados para classificação com a ferramenta Jupyter notebook."
+ },
+ "sidebar.docs.category.Basic usage": {
+ "message": "Utilização básica",
+ "description": "The label for category Basic usage in sidebar docs"
+ },
+ "sidebar.docs.category.Advanced Guides": {
+ "message": "Guias avançados",
+ "description": "The label for category Advanced Guides in sidebar docs"
+ },
+ "sidebar.docs.category.Base Classes Reference": {
+ "message": "Referência das Classes Base",
+ "description": "The label for category Examples in sidebar docs"
+ },
+ "sidebar.docs.category.Advanced Guides.link.generated-index.description": {
+ "message": "Explore a documentação avançada da biblioteca, que abrange as classes base, além das funções utilitárias do módulo utils voltadas para métricas e manipulação de classificação multiclasse.",
+ "description": "The generated-index page description for category Advanced Guides in sidebar docs"
+ },
+ "sidebar.docs.category.Base module.description": {
+ "message": "Classe base para algoritmo de classificação.",
+ "description": "Classe base para algoritmo de classificação."
+ },
+ "sidebar.docs.category.Base Classes Reference.description": {
+ "message": "Classes base para implementar os algoritmos fornecidos neste pacote.",
+ "description": "Classes base para implementar os algoritmos fornecidos neste pacote."
+ },
+ "sidebar.docs.category.Core.description": {
+ "message": "As funções realizam verificações de detectores e utilizam decoradores Numba para compilação Just-In-Time",
+ "description": "As funções realizam verificações de detectores e utilizam decoradores Numba para compilação Just-In-Time"
+ },
+ "sidebar.docs.category.utils.description": {
+ "message": "Funções utilitárias e auxiliares para o desenvolvimento.",
+ "description": "Funções utilitárias e auxiliares para o desenvolvimento."
+ }
+}
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/about-us.mdx b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/about-us.mdx
new file mode 100644
index 00000000..fb136e1e
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/about-us.mdx
@@ -0,0 +1,48 @@
+---
+sidebar_position: 3
+pagination_prev: null
+---
+
+import TeamUser from '@site/src/components/TeamUser';
+
+# Sobre nós
+
+## História
+
+O AISP, ou pacote de Sistemas Imunológicos Artificiais, teve sua origem em um projeto de pesquisa do IFNMG
+(Instituto Federal do Norte de Minas Gerais) no campus de Salinas. A partir de 2 de maio de 2022, com o objetivo
+de iniciar a criação de um pacote de software aberto que permita a aplicação, estudo e popularização de técnicas
+pertencentes à área de sistemas imunológicos artificiais.
+
+---
+
+## Equipe de colaboradores
+
+### Coordenador
+
+
+
+
+
+
+
+---
+
+### Discentes
+
+
+
+
+
+
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Core/_category_.json b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Core/_category_.json
new file mode 100644
index 00000000..3587f364
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Core/_category_.json
@@ -0,0 +1,3 @@
+{
+ "description": "As funções realizam verificações de detectores e utilizam decoradores Numba para compilação Just-In-Time"
+}
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Core/negative-selection.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Core/negative-selection.md
new file mode 100644
index 00000000..9041d2b2
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Core/negative-selection.md
@@ -0,0 +1,85 @@
+---
+last_update:
+ date: 2025/05/17
+ author: João Paulo
+---
+
+# Seleção Negativa
+
+As funções realizam verificações de detectores e utilizam decoradores Numba para compilação Just-In-Time.
+
+## Função check_detector_bnsa_validity(...)
+
+```python
+def check_detector_bnsa_validity(
+ x_class: npt.NDArray,
+ vector_x: npt.NDArray,
+ aff_thresh: float
+) -> bool:
+```
+
+Verifica a validade de um candidato a detector (vector_x) contra amostras de uma classe (x_class) usando a distância de Hamming. Um detector é considerado INVÁLIDO se a sua distância para qualquer amostra em ``x_class`` for menor ou igual a ``aff_thresh``.
+
+**Os parâmetros de entrada são:**
+
+* x_class (``npt.NDArray``): Array contendo as amostras da classe. Formato esperado: (n_amostras, n_características).
+* vector_x (``npt.NDArray``): Array representando o detector. Formato esperado: (n_características,).
+* aff_thresh (``float``): Limiar de afinidade.
+
+**Retorna:**
+
+* True se o detector for válido, False caso contrário.
+
+---
+
+## Função bnsa_class_prediction(...)
+
+```python
+def bnsa_class_prediction(
+ features: npt.NDArray,
+ class_detectors: npt.NDArray,
+ aff_thresh: float
+) -> int:
+```
+
+Define a classe de uma amostra a partir dos detectores não-próprios.
+
+**Os parâmetros de entrada são:**
+
+* features (``npt.NDArray``): amostra binária a ser classificada (shape: [n_features]).
+* class_detectors (``npt.NDArray``): Matriz contendo os detectores de todas as classes (shape: [n_classes, n_detectors, n_features]).
+* aff_thresh (``float``): Limiar de afinidade que determina se um detector reconhece a amostra como não-própria.
+
+**Retorna:**
+
+* int: Índice da classe predita. Retorna -1 se for não-própria para todas as classes.
+
+---
+
+## Função check_detector_rnsa_validity(...)
+
+```python
+def check_detector_rnsa_validity(
+ x_class: npt.NDArray,
+ vector_x: npt.NDArray,
+ threshold: float,
+ metric: int,
+ p: float
+) -> bool:
+```
+
+Verifica a validade de um candidato a detector (vector_x) contra amostras de uma classe (x_class) usando a distância de Hamming. Um detector é considerado INVÁLIDO se a sua distância para qualquer amostra em ``x_class`` for menor ou igual a ``aff_thresh``.
+
+**Os parâmetros de entrada são:**
+
+* x_class (``npt.NDArray``): Array contendo as amostras da classe. Formato esperado: (n_amostras, n_características).
+* vector_x (``npt.NDArray``): Array representando o detector. Formato esperado: (n_características,).
+* threshold (``float``): Afinidade.
+* metric (``int``): Métrica de distância a ser utilizada. Opções disponíveis: [0 (Euclidean), 1 (Manhattan), 2 (Minkowski)].
+* p (``float``): Parâmetro da métrica de Minkowski (utilizado apenas se `metric` for "minkowski").
+
+**Retorna:**
+
+* True se o detector for válido, False caso contrário.
+
+---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Display.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Display.md
new file mode 100644
index 00000000..5096345b
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Display.md
@@ -0,0 +1,152 @@
+# Display
+
+Funções utilitárias para exibir informações de algoritmos
+
+## def _supports_box_drawing()
+
+```python
+def _supports_box_drawing() -> bool
+```
+
+Função para verificar se o terminal suporta caracteres de borda.
+
+**Retorna**:
+
+* ***bool*** (`bool`): True se o terminal provavelmente suporta caracteres de borda, False caso contrário.
+
+---
+
+## class TableFormatter
+
+Classe para formatar dados tabulares em strings para exibição no console.
+
+**Parâmetros**:
+
+* ***headers*** (`Mapping[str, int]`): Mapeamento dos nomes das colunas para suas larguras respectivas, no formato `{nome_coluna: largura_coluna}`.
+
+**Exceções**:
+
+* `ValueError`: Se `headers` estiver vazio ou não for um mapeamento válido.
+
+---
+
+### def _border(left, middle, right, line, new_line=True)
+
+```python
+def _border(self, left: str, middle: str, right: str, line: str, new_line: bool = True) -> str
+```
+
+Cria uma borda horizontal para a tabela.
+
+**Parâmetros**:
+
+* ***left*** (`str`): Caractere na borda esquerda.
+* ***middle*** (`str`): Caractere separador entre colunas.
+* ***right*** (`str`): Caractere na borda direita.
+* ***line*** (`str`): Caractere usado para preencher a borda.
+* ***new_line*** (`bool`, opcional): Se True, adiciona uma quebra de linha antes da borda (padrão é True).
+
+**Retorna**:
+
+* ***border*** (`str`): String representando a borda horizontal.
+
+---
+
+### def get_header()
+
+```python
+def get_header(self) -> str
+```
+
+Gera o cabeçalho da tabela, incluindo a borda superior, os títulos das colunas e a linha separadora.
+
+**Retorna**:
+
+* ***header*** (`str`): String formatada do cabeçalho da tabela.
+
+---
+
+### def get_row(values)
+
+```python
+def get_row(self, values: Mapping[str, Union[str, int, float]]) -> str
+```
+
+Gera uma linha formatada para os dados da tabela.
+
+**Parâmetros**:
+
+* ***values*** (`Mapping[str, Union[str, int, float]]`): Dicionário com os valores de cada coluna, no formato `{nome_coluna: valor}`.
+
+**Retorna**:
+
+* ***row*** (`str`): String formatada da linha da tabela.
+
+---
+
+### def get_bottom(new_line=False)
+
+```python
+def get_bottom(self, new_line: bool = False) -> str
+```
+
+Gera a borda inferior da tabela.
+
+**Parâmetros**:
+
+* ***new_line*** (`bool`, opcional): Se True, adiciona uma quebra de linha antes da borda (padrão é False).
+
+**Retorna**:
+
+* ***bottom*** (`str`): String formatada da borda inferior.
+
+---
+
+## class ProgressTable(TableFormatter)
+
+Classe para exibir uma tabela formatada no console para acompanhar o progresso de um algoritmo.
+
+**Parâmetros**:
+
+* ***headers*** (`Mapping[str, int]`): Mapeamento `{nome_coluna: largura_coluna}`.
+* ***verbose*** (`bool`, padrão=True): Se False, não imprime nada no terminal.
+
+**Exceções**:
+
+* `ValueError`: Se `headers` estiver vazio ou não for um mapeamento válido.
+
+---
+
+### def _print_header()
+
+```python
+def _print_header(self) -> None
+```
+
+Imprime o cabeçalho da tabela.
+
+---
+
+### def update(values)
+
+```python
+def update(self, values: Mapping[str, Union[str, int, float]]) -> None
+```
+
+Adiciona uma nova linha de valores à tabela.
+
+**Parâmetros**:
+
+* ***values*** (`Mapping[str, Union[str, int, float]]`): As chaves devem corresponder às colunas definidas em `headers`.
+
+---
+
+### def finish()
+
+```python
+def finish(self) -> None
+```
+
+Encerra a exibição da tabela, imprimindo a borda inferior e o tempo total.
+
+---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Distance.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Distance.md
new file mode 100644
index 00000000..f4b5939b
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Distance.md
@@ -0,0 +1,176 @@
+---
+last_update:
+ date: 2025/05/17
+ author: João Paulo
+---
+
+# Distance
+
+Funções utilitárias para distância normalizada entre matrizes com decoradores numba.
+
+## def hamming(...)
+
+```python
+def hamming(u: npt.NDArray, v: npt.NDArray) -> np.float64:
+```
+
+Função para calcular a distância de Hamming normalizada entre dois pontos.
+
+$$
+\frac{(x_1 \neq y_1) + (x_2 \neq y_2) + \cdots + (x_n \neq y_n)}{n}
+$$
+
+**Parameters:**
+
+* u (``npt.NDArray``): Coordenadas do primeiro ponto
+* v (``npt.NDArray``): Coordenadas do segundo ponto.
+
+**Returns:**
+
+* Distância (``float``) entre os dois pontos.
+
+---
+
+## def euclidean(...)
+
+```python
+def euclidean(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.float64:
+```
+
+Função para calcular a distância euclidiana normalizada entre dois pontos.
+
+$$
+\sqrt{(X_{1} - X_{1})^2 + (Y_{2} - Y_{2})^2 + \cdots + (Y_{n} - Y_{n})^2}
+$$
+
+**Parameters:**
+
+* u (``npt.NDArray``): Coordenadas do primeiro ponto
+* v (``npt.NDArray``): Coordenadas do segundo ponto.
+
+**Returns:**
+
+* Distância (``float``) entre os dois pontos.
+
+---
+
+## def cityblock(...)
+
+```python
+def cityblock(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64]) -> np.float64:
+```
+
+Função para calcular a distância Manhattan normalizada entre dois pontos.
+
+$$
+\frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+$$
+
+**Parameters:**
+
+* u (``npt.NDArray``): Coordenadas do primeiro ponto
+* v (``npt.NDArray``): Coordenadas do segundo ponto.
+
+**Returns:**
+
+* Distância (``float``) entre os dois pontos.
+
+---
+
+## def minkowski(...)
+
+```python
+def minkowski(u: npt.NDArray[np.float64], v: npt.NDArray[np.float64], p: float = 2.0):
+```
+
+Função para calcular a distância de Minkowski normalizada entre dois pontos.
+
+$(( |X₁ - Y₁|p + |X₂ - Y₂|p + ... + |X_n - Y_n|p) ¹/ₚ) / n$
+
+**Parameters:**
+
+* u (``npt.NDArray``): Coordenadas do primeiro ponto.
+* v (``npt.NDArray``): Coordenadas do segundo ponto.
+* p (``float``): O parâmetro p define o tipo de distância a ser calculada:
+ * p = 1: Distância **Manhattan** — soma das diferenças absolutas.
+ * p = 2: Distância **Euclidiana** — soma das diferenças ao quadrado (raiz quadrada).
+ * p > 2: Distância **Minkowski** com uma penalidade crescente à medida que p aumenta.
+
+**Returns:**
+
+* Distância (``float``) entre os dois pontos.
+
+---
+
+## def compute_metric_distance(...)
+
+```python
+def compute_metric_distance(
+ u: npt.NDArray[np.float64],
+ v: npt.NDArray[np.float64],
+ metric: int,
+ p: np.float64 = 2.0
+) -> np.float64:
+```
+
+Função para calcular a distância entre dois pontos pela ``métrica`` escolhida.
+
+**Parameters:**
+
+* u (``npt.NDArray``): Coordenadas do primeiro ponto.
+* v (``npt.NDArray``): Coordenadas do segundo ponto.
+* metric (``int``): Métrica de distância a ser utilizada. Opções disponíveis: [0 (Euclidean), 1 (Manhattan), 2 (Minkowski)].
+* p (``float``): Parâmetro da métrica de Minkowski (utilizado apenas se `metric` for "minkowski").
+
+**Returns:**
+
+* Distância (``double``) entre os dois pontos com a métrica selecionada.
+
+---
+
+## def min_distance_to_class_vectors(...)
+
+```python
+def min_distance_to_class_vectors(
+ x_class: npt.NDArray,
+ vector_x: npt.NDArray,
+ metric: int,
+ p: float = 2.0
+) -> float:
+```
+
+Calcula a menor distância entre um vetor de entrada e os vetores de uma classe.
+
+**Parameters:**
+
+* x_class (``npt.NDArray``): Array contendo os vetores da classe com os quais o vetor de entrada será comparado. Formato esperado: (n_amostras, n_características).
+* vector_x (``npt.NDArray``): Vetor a ser comparado com os vetores da classe. Formato esperado: (n_características,).
+* metric (``int``): Métrica de distância a ser utilizada. Opções disponíveis: [0 (Euclidean), 1 (Manhattan), 2 (Minkowski)].
+* p (``float``): Parâmetro da métrica de Minkowski (utilizado apenas se `metric` for "minkowski").
+
+**Returns:**
+
+* float: A menor distância calculada entre o vetor de entrada e os vetores da classe.
+* Retorna -1.0 se as dimensões de entrada forem incompatíveis.
+
+---
+
+## def get_metric_code(...)
+
+```python
+def get_metric_code(metric: str) -> int:
+```
+
+Retorna o código numérico associado a uma métrica de distância.
+
+**Parameters:**
+
+* metric (``str``): Nome da métrica. Pode ser "euclidean", "manhattan", "minkowski" ou "hamming".
+
+**Raises**
+
+* ``ValueError``: Se a métrica informada não for suportada.
+
+**Returns:**
+
+* ``int``: Código numérico correspondente à métrica.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Metrics.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Metrics.md
new file mode 100644
index 00000000..1bef4601
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Metrics.md
@@ -0,0 +1,38 @@
+---
+sidebar_position: 1
+title: Métricas
+sidebar_label: Metrics
+lastUpdatedAt: 2025/04/04
+author: João Paulo
+---
+
+O arquivo de métricas fornece utilitários para medir, analisar e comparar o desempenho dos algoritmos do pacote de forma padronizada.
+
+### def accuracy_score(...)
+
+```python
+def accuracy_score(
+ y_true: Union[npt.NDArray, list],
+ y_pred: Union[npt.NDArray, list]
+) -> float
+```
+
+Função para calcular a acurácia de precisão com base em listas de rótulos
+verdadeiros e nos rótulos previstos.
+
+**Parâmetros**
+
+* y_true (``Union[npt.NDArray, list]``): Rótulos verdadeiros (corretos)..
+* y_pred (``Union[npt.NDArray, list]``): Rótulos previstos.
+
+**Retornos**
+
+* Precisão (``float``): A proporção de previsões corretas em relação
+ao número total de previsões.
+
+**Lança**
+
+* ValueError: Se `y_true` ou `y_pred` estiverem vazios ou se não
+tiverem o mesmo tamanho.
+
+---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Multiclass.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Multiclass.md
new file mode 100644
index 00000000..fbe8d25e
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Multiclass.md
@@ -0,0 +1,55 @@
+---
+sidebar_position: 1
+title: Multiclasse
+sidebar_label: Multiclass
+lastUpdatedAt: 2025/04/04
+author: João Paulo
+---
+
+Este arquivo contém funções utilitárias internas desenvolvidas para simplificar a manipulação e o processamento de dados em cenários de classificação multiclasse dentro do pacote AISP.
+
+### def slice_index_list_by_class(...)
+
+```python
+def slice_index_list_by_class(classes: Union[npt.NDArray, list], y: npt.NDArray) -> dict
+```
+
+A função ``slice_index_list_by_class(...)``, separa os índices das linhas conforme a \
+classe de saída, para percorrer o array de amostra, apenas nas posições que a saída for \
+a classe que está sendo treinada.
+
+**Parameters:**
+
+* classes (``list or npt.NDArray``): lista com classes únicas.
+* y (npt.NDArray): Recebe um array ``y``[``N amostra``] com as classes de saída do \
+ array de amostra ``X``.
+
+**Returns:**
+
+* dict: Um dicionário com a lista de posições do array(``y``), com as classes como chave.
+
+---
+
+### def predict_knn_affinity(...)
+
+Função para prever classes usando k-vizinhos mais próximos e células treinadas.
+
+```python
+def predict_knn_affinity(
+ X: npt.NDArray,
+ k: int,
+ all_cell_vectors: List[Tuple[Union[str, int], npt.NDArray]],
+ affinity_func: Callable[[npt.NDArray, npt.NDArray], float]
+) -> npt.NDArray
+```
+
+**Parâmetros:**
+
+* **_X_** (`npt.NDArray`): Dados de entrada a serem classificados.
+* **_k_** (`int`): Número de vizinhos mais próximos a considerar para a previsão.
+* **_all_cell_vectors_** (`List[Tuple[Union[str, int], npt.NDArray]]`): Lista de tuplas contendo pares (nome_da_classe, vetor_da_célula).
+* **_affinity_func_** (`Callable[[npt.NDArray, npt.NDArray], float]`): Função que recebe dois vetores e retorna um valor de afinidade.
+
+**Retorna:**
+
+* `npt.NDArray`: Array de rótulos previstos para cada amostra em X, baseado nos k vizinhos mais próximos.
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Random.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Random.md
new file mode 100644
index 00000000..b6554071
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Random.md
@@ -0,0 +1,16 @@
+# Random
+
+Funções utilitárias para geração e reprodutibilidade de números aleatórios.
+
+## Função set_seed_numba(...)
+
+```python
+@njit(cache=True)
+def set_seed_numba(seed: int)
+```
+
+Define a semente para números aleatórios usados por funções compiladas com Numba.
+
+**Parâmetros**:
+
+* **seed**: `int` - Valor inteiro usado para inicializar o gerador de números aleatórios do Numba.
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Sanitizers.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Sanitizers.md
new file mode 100644
index 00000000..56be3c29
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Sanitizers.md
@@ -0,0 +1,82 @@
+---
+last_update:
+ date: 2025/05/17
+ author: João Paulo
+---
+
+# Sanitizers
+
+## def sanitize_choice(...)
+
+```python
+def sanitize_choice(value: T, valid_choices: Iterable[T], default: T) -> T
+```
+
+A função ``sanitize_choice(...)``, retorna o valor se estiver presente no conjunto de opções válidas; caso contrário, retorna o valor padrão.
+
+**Parameters:**
+
+* ***value*** (``T``): O valor a ser verificado.
+* ***valid_choices*** (``Iterable[T]``): Uma coleção de opções válidas.
+* ***default***: O valor padrão a ser retornado se ``value`` não estiver em ``valid_choices``.
+
+**Returns:**
+
+* `T`: O valor original, se válido, ou o valor padrão, se não.
+
+---
+
+## def sanitize_param(...)
+
+```python
+def sanitize_param(value: T, default: T, condition: Callable[[T], bool]) -> T:
+```
+
+A função ``sanitize_param(...)``, retorna o valor se ele satisfizer a condição especificada; caso contrário, retorna o valor padrão.
+
+**Parameters:**
+
+* value (``T``): O valor a ser verificado.
+* default (``T``): O valor padrão a ser retornado se a condição não for satisfeita.
+* condition (``Callable[[T], bool]``): Uma função que recebe um valor e retorna um booleano, determinando se o valor é válido.
+
+**Returns:**
+
+* `T`: O valor original se a condição for satisfeita, ou o valor padrão se não for.
+
+---
+
+## def sanitize_seed(...)
+
+```python
+def sanitize_seed(seed: Any) -> Optional[int]:
+```
+
+A função ``sanitize_param(...)``, retorna a semente se for um inteiro não negativo; caso contrário, retorna Nenhum.
+
+**Parameters:**
+
+* seed (``Any``): O valor da seed a ser validado.
+
+**Returns:**
+
+* ``Optional[int]``: A seed original se for um inteiro não negativo, ou ``None`` se for inválido.
+
+---
+
+## def sanitize_bounds(...)
+
+```python
+def sanitize_bounds(bounds: Any, problem_size: int) -> Dict[str, npt.NDArray[np.float64]]
+```
+
+A função `sanitize_bounds(...)` valida e normaliza os limites das características (features).
+
+**Parâmetros**:
+
+* ***bounds*** (`Any`): Os limites de entrada, que devem ser `None` ou um dicionário com as chaves `'low'` e `'high'`.
+* ***problem_size*** (`int`): O tamanho esperado para as listas de limites normalizadas, correspondente ao número de features do problema.
+
+**Retorna**:
+
+* `Dict[str, list]`: Dicionário no formato `{'low': [low_1, ..., low_N], 'high': [high_1, ..., high_N]}`.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Validation.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Validation.md
new file mode 100644
index 00000000..030678fc
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/Validation.md
@@ -0,0 +1,108 @@
+# Validation
+
+## def detect_vector_data_type(...)
+
+```python
+def detect_vector_data_type(
+ vector: npt.NDArray
+) -> FeatureType:
+```
+
+Detecta o tipo de dado em um determinado vetor.
+
+Esta função analisa o vetor de entrada e classifica seus dados como um dos tipos suportados:
+
+* **binário**: Valores booleanos (`True`/`False`) ou inteiro `0`/`1`.
+* **contínuo**: Valores float dentro do intervalo normalizado `[0.0, 1.0]`.
+* **intervalo**: Valores float fora do intervalo normalizado.
+
+### Parâmetros
+
+* `vetor` (`npt.NDArray`): Um array contendo os dados a serem classificados.
+
+### Retorna
+
+* `FeatureType` (`Literal["binary-features", "continuous-features", "ranged-features"]`): O tipo de dado detectado no vetor.
+
+### Gera
+
+* `UnsupportedDataTypeError`: Gerado se o vetor contiver um tipo de dado não suportado.
+
+---
+
+## def check_array_type(...)
+
+```python
+def check_array_type(x, name: str = "X") -> npt.NDArray:
+```
+
+Garante que o parâmetro recebido é um array numpy. Converte de lista se necessário.
+
+**Parâmetros:**
+
+* `x`: Array ou lista contendo as amostras e características.
+* `name`: Nome da variável para mensagens de erro.
+
+**Retorna:**
+
+* `npt.NDArray`: O array convertido ou validado.
+
+**Lança:**
+
+* `TypeError`: Se não for possível converter para ndarray.
+
+---
+
+## def check_shape_match(...)
+
+```python
+def check_shape_match(x: npt.NDArray, y: npt.NDArray):
+```
+
+Garante que os arrays `x` e `y` possuem o mesmo número de amostras (primeira dimensão).
+
+**Parâmetros:**
+
+* `x`: Array de amostras.
+* `y`: Array de classes alvo.
+
+**Lança:**
+
+* `TypeError`: Se as dimensões não forem compatíveis.
+
+---
+
+## def check_feature_dimension(...)
+
+```python
+def check_feature_dimension(x: npt.NDArray, expected: int):
+```
+
+Garante que o array possui o número esperado de características (features).
+
+**Parâmetros:**
+
+* `x`: Array de entrada para predição.
+* `expected`: Número esperado de características por amostra.
+
+**Lança:**
+
+* `FeatureDimensionMismatch`: Se o número de características não corresponder ao esperado.
+
+---
+
+## def check_binary_array(...)
+
+```python
+def check_binary_array(x: npt.NDArray):
+```
+
+Garante que o array contém apenas valores 0 e 1.
+
+**Parâmetros:**
+
+* `x`: Array a ser verificado.
+
+**Lança:**
+
+* `ValueError`: Se o array contiver valores diferentes de 0 e 1.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/_category_.json b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/_category_.json
new file mode 100644
index 00000000..59b3ccf9
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/Utils/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Utils",
+ "description": "Funções utilitárias e auxiliares para o desenvolvimento."
+}
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/_category_.json b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/_category_.json
new file mode 100644
index 00000000..871d71c3
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/_category_.json
@@ -0,0 +1,8 @@
+{
+ "label": "Advanced Guides",
+ "position": 2.6,
+ "link": {
+ "type": "generated-index",
+ "description": "Explore a documentação avançada da biblioteca, que abrange as classes base, além das funções utilitárias do módulo utils voltadas para métricas e manipulação de classificação multiclasse."
+ }
+}
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/_category_.json b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/_category_.json
new file mode 100644
index 00000000..8c11fd00
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/_category_.json
@@ -0,0 +1,4 @@
+{
+ "position": 1,
+ "description": "Classe base para algoritmo de classificação."
+}
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Base.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Base.md
new file mode 100644
index 00000000..bd5f0f0e
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Base.md
@@ -0,0 +1,55 @@
+---
+sidebar_position: 1
+title: Classe Base
+sidebar_label: Base
+lastUpdatedAt: 2025/08/19
+author: João Paulo
+keywords:
+ - Classe Base
+ - Modelo Base
+ - Compatibilidade com Scikit-learn
+ - get_params
+ - set_params
+ - Semente Aleatória
+ - Classes Python
+---
+
+Classe base para compatibilidade com a API do scikit-learn.
+
+Fornece os métodos `get_params` e `set_params` para compatibilidade com a API do scikit-learn, permitindo acesso aos parâmetros públicos do modelo.
+
+### Função set_params(...)
+
+```python
+def set_params(self, **params)
+```
+
+Define os parâmetros da instância. Garante compatibilidade com funções do scikit-learn.
+
+**Parâmetros**:
+
+* **params**: dict - Dicionário de parâmetros que serão definidos como atributos da instância. Apenas atributos públicos (que não começam com "_") são modificados.
+
+**Retorno**:
+
+* self: `Base` - Retorna a própria instância após definir os parâmetros.
+
+---
+
+### Função get_params(...)
+
+```python
+def get_params(self, deep: bool = True) -> dict
+```
+
+Retorna um dicionário com os principais parâmetros do objeto. Garante compatibilidade com funções do scikit-learn.
+
+**Parâmetros**:
+
+* **deep**: `bool` (padrão=True) - Ignorado nesta implementação, mas incluído para compatibilidade com scikit-learn.
+
+**Retorno**:
+
+* params: `dict` - Dicionário contendo os atributos do objeto que não começam com "_".
+
+---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Classifier.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Classifier.md
new file mode 100644
index 00000000..546e22f9
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Classifier.md
@@ -0,0 +1,94 @@
+---
+sidebar_position: 1
+sidebar_label: BaseClassifier
+last_update:
+ date: 2025/05/17
+ author: João Paulo
+---
+
+# Classe base para algoritmo de classificação
+
+## ``class BaseClassifier(ABC)``
+
+Classe base para algoritmos de classificação, definindo os métodos abstratos ``fit`` e ``predict``, e implementando o método ``get_params``.
+
+## Abstract methods
+
+### def fit(...)
+
+```python
+def fit(self, X: npt.NDArray, y: npt.NDArray, verbose: bool = True)
+```
+
+Ajusta o modelo aos dados de treinamento.
+
+Implementação:
+
+- [RNSA](../../../aisp-techniques/negative-selection/RNSA.md#Função-fit)
+- [BNSA](../../../aisp-techniques/negative-selection/BNSA.md#Função-fit)
+- [AIRS](../../../aisp-techniques/clonal-selection-algorithms/airs/#Método-fit)
+
+### def predict(...)
+
+```python
+def predict(self, X) -> Optional[npt.NDArray]:
+```
+
+Realiza a previsão dos rótulos para os dados fornecidos.
+
+Implementação:
+
+- [RNSA](../../../aisp-techniques/negative-selection/RNSA.md#Função-predict)
+- [BNSA](../../../aisp-techniques/negative-selection/BNSA.md#Função-predict)
+- [AIRS](../../../aisp-techniques/clonal-selection-algorithms/airs/#Método-predict)
+
+---
+
+## Métodos
+
+### def score(...)
+
+```python
+def score(self, X: npt.NDArray, y: list) -> float
+```
+
+A função de pontuação (score) calcula a precisão da previsão.
+
+Esta função realiza a previsão de X e verifica quantos elementos são iguais entre o vetor y e y_predicted.
+Esta função foi adicionada para compatibilidade com algumas funções do scikit-learn.
+
+**Parâmetros**:
+
+- ***X***: np.ndarray
+ Conjunto de características com formato (n_amostras, n_características).
+- ***y***: np.ndarray
+ Valores verdadeiros com formato (n_amostras,).
+
+**Retorna**:
+
+- precisão: float
+ A precisão do modelo.
+
+---
+
+### Método _slice_index_list_by_class(...)
+
+A função ``_slice_index_list_by_class(...)``, separa os índices das linhas conforme a classe de saída, para percorrer o array de amostra, apenas nas posições que a saída for a classe que está sendo treinada:
+
+```python
+def _slice_index_list_by_class(self, y: npt.NDArray) -> dict:
+```
+
+Retorna um dicionário com as classes como chave e os índices em ``X`` das amostras.
+
+---
+
+### def get_params(...)
+
+```python
+def get_params(self, deep: bool = True) -> dict:
+```
+
+A função get_params retorna um dicionário com os parâmetros principais do objeto.
+
+Esta função é necessária para garantir a compatibilidade com as funções do scikit-learn.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Clusterer.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Clusterer.md
new file mode 100644
index 00000000..aea519ce
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Clusterer.md
@@ -0,0 +1,93 @@
+---
+sidebar_position: 3
+title: Base class for clustering algorithm.
+sidebar_label: BaseClusterer
+lastUpdatedAt: 2025/08/19
+author: João Paulo
+keywords:
+ - Base Clusterer
+ - Clustering
+ - Unsupervised Learning
+ - BaseClusterer
+ - Abstract Base Class
+ - fit Method
+ - predict Method
+ - fit_predict Method
+ - AiNet
+ - Cluster Prediction
+ - Python ML Classes
+---
+
+## ``BaseClusterer(ABC, Base)``
+
+Classe base abstrata para algoritmos de clustering.
+
+Esta classe define a interface central para modelos de agrupamento. Ela exige
+a implementação dos métodos **`fit`** e **`predict`** em todas as classes derivadas,
+e fornece uma implementação padrão para **`fit_predict`** e **`get_params`**.
+
+---
+
+### Função fit(...)
+
+```python
+def fit(self, X: npt.NDArray, verbose: bool = True) -> BaseClusterer
+```
+
+Ajusta o modelo aos dados de treinamento.
+Este método abstrato deve ser implementado pelas subclasses.
+
+**Parâmetros**:
+
+* ***X***: `npt.NDArray` - Dados de entrada utilizados para treinar o modelo.
+* ***verbose***: `bool`, default=True - Indica se a saída detalhada durante o treinamento deve ser exibida.
+
+**Retorna**:
+
+* ***self***: `BaseClusterer` - Instância da classe que implementa este método.
+
+**Implementação**:
+
+* [AiNet](../../../aisp-techniques/immune-network-theory/AiNet.md#Função-fit)
+
+---
+
+### Função predict(...)
+
+```python
+def predict(self, X: npt.NDArray) -> Optional[npt.NDArray]
+```
+
+Gera previsões com base nos dados de entrada.
+Este método abstrato deve ser implementado pelas subclasses.
+
+**Parâmetros**:
+
+* ***X***: `npt.NDArray` - Dados de entrada para os quais as previsões serão geradas.
+
+**Retorna**:
+
+* ***predictions***: `Optional[npt.NDArray]` - Rótulos previstos dos clusters para cada amostra de entrada, ou `None` caso a previsão não seja possível.
+
+**Implementação**:
+
+* [AiNet](../../../aisp-techniques/immune-network-theory/AiNet.md#Função-predict)
+
+---
+
+### Função fit_predict(...)
+
+```python
+def fit_predict(self, X: npt.NDArray, verbose: bool = True) -> Optional[npt.NDArray]
+```
+
+Método de conveniência que combina `fit` e `predict` em uma única chamada.
+
+**Parâmetros**:
+
+* ***X***: `npt.NDArray` - Dados de entrada para os quais as previsões serão geradas.
+* ***verbose***: `bool`, default=True - Indica se a saída detalhada durante o treinamento deve ser exibida.
+
+**Retorna**:
+
+* ***predictions***: `Optional[npt.NDArray]` - Rótulos previstos dos clusters para cada amostra de entrada, ou `None` caso a previsão não seja possível.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Optimizer.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Optimizer.md
new file mode 100644
index 00000000..2bbb5b15
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/core/Optimizer.md
@@ -0,0 +1,165 @@
+---
+sidebar_position: 4
+title: Classe base para algoritmos de otimização.
+sidebar_label: BaseOptimizer
+author: João Paulo
+keywords:
+ - BaseOptimizer
+ - classe base de otimização
+ - abstract base class
+ - otimização em machine learning
+ - função objetivo
+ - método optimize
+ - avaliação de modelos
+ - metaheurísticas
+ - algoritmos bio-inspirados
+ - Python ML
+---
+
+Esta classe define a interface central para estratégias de otimização e mantém o histórico de custos, soluções avaliadas e a melhor solução encontrada. Subclasses devem implementar os métodos `optimize` e `objective_function`.
+
+---
+
+### Propriedades
+
+#### `cost_history`
+
+```python
+@property
+def cost_history(self) -> List[float]
+```
+
+Retorna o histórico de custos durante a otimização.
+
+---
+
+#### `solution_history`
+
+```python
+@property
+def solution_history(self) -> List
+```
+
+Retorna o histórico de soluções avaliadas.
+
+---
+
+#### `best_solution`
+
+```python
+@property
+def best_solution(self) -> Optional[Any]
+```
+
+Retorna a melhor solução encontrada até o momento, ou `None` se não disponível.
+
+---
+
+#### `best_cost`
+
+```python
+@property
+def best_cost(self) -> Optional[float]
+```
+
+Retorna o custo da melhor solução encontrada até o momento, ou `None` se não disponível.
+
+---
+
+## Funções
+
+### Função _record_best(...)
+
+```python
+def _record_best(self, cost: float, best_solution: Any) -> None
+```
+
+Registra um novo valor de custo e atualiza a melhor solução se houver melhoria.
+
+**Parâmetros**:
+
+* ***cost***: `float` - Valor de custo a ser adicionado ao histórico.
+
+---
+
+### Função get_report()
+
+```python
+def get_report(self) -> str
+```
+
+Gera um relatório resumido e formatado do processo de otimização. O relatório inclui a melhor solução, seu custo associado e a evolução dos valores de custo por iteração.
+
+**Retorna**:
+
+* **report**: `str` - String formatada contendo o resumo da otimização.
+
+---
+
+### Função register(...)
+
+```python
+def register(self, alias: str, function: Callable[..., Any]) -> None
+```
+
+Registra dinamicamente uma função na instância do otimizador.
+
+**Parâmetros**:
+
+* ***alias***: `str` - Nome usado para acessar a função como atributo.
+* ***function***: `Callable[..., Any]` - Callable a ser registrado.
+
+**Exceções**:
+
+* **TypeError**: Se `function` não for chamável.
+* **AttributeError**: Se `alias` for protegido e não puder ser modificado, ou se `alias` não existir na classe do otimizador.
+
+---
+
+### Função reset()
+
+```python
+def reset(self)
+```
+
+Reinicia o estado interno do objeto, limpando o histórico e resetando os valores.
+
+---
+
+### Métodos abstratos
+
+#### Função optimize(...)
+
+```python
+def optimize(self, max_iters: int = 50, n_iter_no_change=10, verbose: bool = True) -> Any
+```
+
+Executa o processo de otimização. Este método deve ser implementado pela subclasse para definir como a estratégia de otimização explora o espaço de busca.
+
+**Parâmetros**:
+
+* ***max_iters***: `int` - Número máximo de iterações.
+* ***n_iter_no_change***: `int`, padrão=10 - Número máximo de iterações sem atualização da melhor solução.
+* ***verbose***: `bool`, padrão=True - Flag para habilitar ou desabilitar saída detalhada durante a otimização.
+
+**Retorna**:
+
+* **best_solution**: `Any` - A melhor solução encontrada pelo algoritmo de otimização.
+
+---
+
+#### Função affinity_function(...)
+
+```python
+def affinity_function(self, solution: Any) -> float
+```
+
+Avalia a afinidade de uma solução candidata. Este método deve ser implementado pela subclasse para definir o problema específico.
+
+**Parâmetros**:
+
+* ***solution***: `Any` - Solução candidata a ser avaliada.
+
+**Retorna**:
+
+* **cost**: `float` - Valor de custo associado à solução fornecida.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/cell.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/cell.md
new file mode 100644
index 00000000..ef81da74
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/cell.md
@@ -0,0 +1,117 @@
+---
+title: Cell Classes
+sidebar_label: Cell Classes
+keywords:
+ - Binário
+ - classificação
+ - limiar de afinidade
+ - Valores Reais
+ - classificação
+ - anomalias
+ - K-Vizinhos Mais Próximos
+ - célula-B de memória
+lastUpdatedAt: 2025/05/25
+author: João Paulo
+---
+
+Representação de células do sistema imunológico.
+
+## Cell
+
+Representa uma célula imune básica.
+
+```python
+@dataclass(slots=True)
+class Cell:
+ vector: np.ndarray
+```
+
+### Atributos
+
+* **vector** (`np.ndarray`): Um vetor de características da célula.
+
+### Métodos
+
+* `__eq__(other)`: Verifica se duas células são iguais com base em seus vetores.
+* `__array__()`: Interface de array para NumPy, permite que a instância seja tratada como um `np.ndarray`.
+* `__getitem__(item)`: Obtém elementos do vetor de características usando indexação.
+
+---
+
+## BCell
+
+Representa uma célula B de memória, derivada de `Cell`.
+
+```python
+@dataclass(slots=True, eq=False)
+class BCell(Cell):
+ vector: np.ndarray
+```
+
+### Métodos
+
+### hyper_clonal_mutate(...)
+
+```python
+def hyper_clonal_mutate(
+ self,
+ n: int,
+ feature_type: FeatureType = "continuous-features",
+ bounds: Optional[npt.NDArray[np.float64]] = None
+) -> np.ndarray
+```
+
+Clona N características das características de uma célula, gerando um conjunto de vetores mutados.
+
+#### Parâmetros
+
+* **n** (`int`): Número de clones a serem gerados a partir de mutações da célula original.
+* **feature_type** (`Literal["binary-features", "continuous-features", "ranged-features"]`): Especifica o tipo de características com base na natureza das características de entrada.
+* **bounds** (`Optional[npt.NDArray[np.float64]]`): Array (n_features, 2) com mínimo e máximo por dimensão.
+
+#### Retorna
+
+* **npt.NDArray**: Um array contendo N vetores mutados da célula original.
+
+---
+
+## Antibody
+
+Representa um anticorpo com afinidade, derivado de `Cell`.
+
+```python
+@dataclass(slots=True)
+class Antibody(Cell):
+ vector: np.ndarray
+ affinity: float
+```
+
+### Atributos
+
+* **vector** (`npt.NDArray`): Um vetor de características da célula.
+* **affinity** (`float`): Valor de afinidade do anticorpo.
+
+### Métodos
+
+* `__lt__(other)`: Compara este anticorpo com outro com base na afinidade.
+* `__eq__(other)`: Verifica se dois anticorpos têm a mesma afinidade.
+
+---
+
+## Detector
+
+Representa um detector não-próprio da classe RNSA.
+
+```python
+@dataclass(slots=True)
+class Detector:
+ position: npt.NDArray[np.float64]
+ radius: Optional[float] = None
+```
+
+### Atributos
+
+* **position** (`npt.NDArray[np.float64]`): Vetor de características do detector.
+* **radius** (`Optional[float]`): Raio do detector, usado no algoritmo V-detector.
+
+---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/mutation.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/mutation.md
new file mode 100644
index 00000000..d9e29b66
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/mutation.md
@@ -0,0 +1,94 @@
+---
+title: Mutation
+sidebar_label: Mutation
+lastUpdatedAt: 2025/04/04
+author: João Paulo
+keywords:
+ - Mutação
+ - Expansão Clonal
+ - Sistema Imunológico
+ - clone_and_mutate
+ - clone_and_mutate_continuous
+ - clone_and_mutate_binary
+ - clone_and_mutate_ranged
+ - Sistemas Imunológicos Artificiais
+ - Funções Python Numba
+ - Mutação Vetorial
+---
+
+Contém funções que geram conjuntos de clones mutados a partir de vetores contínuos ou binários, simulando o processo de expansão clonal em sistemas imunológicos artificiais.
+
+## clone_and_mutate_continuous
+
+```python
+@njit([(types.float64[:], types.int64)], cache=True)
+def clone_and_mutate_continuous(
+ vector: npt.NDArray[np.float64],
+ n: int
+) -> npt.NDArray[np.float64]:
+```
+
+Gera um conjunto de clones mutados a partir de um vetor contínuo.
+
+Esta função cria `n` clones do vetor de entrada e aplica mutações aleatórias em cada um, simulando o processo de expansão clonal em sistemas imunes artificiais. Cada clone recebe um número aleatório de mutações em posições distintas do vetor original.
+
+### Parâmetros
+
+* `vector` (`npt.NDArray[np.float64]`): Vetor contínuo original que representa a célula imune a ser clonada e mutada.
+* `n` (`int`): Quantidade de clones mutados a serem gerados.
+
+### Retorno
+
+* `clone_set` (`npt.NDArray[np.float64]`): Array com forma `(n, len(vector))` contendo os `n` clones mutados do vetor original.
+
+---
+
+## clone_and_mutate_binary
+
+```python
+@njit([(types.boolean[:], types.int64)], cache=True)
+def clone_and_mutate_binary(
+ vector: npt.NDArray[np.bool_],
+ n: int
+) -> npt.NDArray[np.bool_]:
+```
+
+Gera um conjunto de clones mutados a partir de um vetor binário.
+
+Esta função cria `n` clones do vetor binário de entrada e aplica mutações aleatórias em alguns bits, simulando a expansão clonal em sistemas imunes artificiais com representações discretas.
+
+### Parâmetros
+
+* `vector` (`npt.NDArray[np.bool_]`): Vetor binário original que representa a célula imune a ser clonada e mutada.
+* `n` (`int`): Quantidade de clones mutados a serem gerados.
+
+### Retorno
+
+* `clone_set` (`npt.NDArray[np.bool_]`): Array com forma `(n, len(vector))` contendo os `n` clones mutados do vetor original.
+
+---
+
+## clone_and_mutate_ranged
+
+```python
+@njit([(types.float64[:], types.int64, types.float64[:, :])], cache=True)
+def clone_and_mutate_ranged(
+vector: npt.NDArray[np.float64],
+n: int,
+bounds: npt.NDArray[np.float64]
+) -> npt.NDArray[np.float64]:
+```
+
+Gera um conjunto de clones mutados a partir de um vetor contínuo usando limites personalizados por dimensão.
+
+Esta função cria `n` clones do vetor de entrada e aplica mutações aleatórias em cada um, simulando o processo de expansão clonal em sistemas imunes artificiais. Cada clone recebe um número aleatório de mutações em posições distintas do vetor original.
+
+### Parâmetros
+
+* `vector` (`npt.NDArray[np.float64]`): Vetor contínuo original que representa a célula imune a ser clonada e mutada.
+* `n` (`int`): Quantidade de clones mutados a serem gerados.
+* `bounds` (`npt.NDArray[np.float64]`): Um array 2D com o formato `(len(vector), 2)` contendo os valores mínimo e máximo para cada dimensão.
+
+### Retorna
+
+* `clone_set` (`npt.NDArray[np.float64]`): Array com forma `(n, len(vector))` contendo os `n` clones mutados do vetor original.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/populations.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/populations.md
new file mode 100644
index 00000000..f3cbae8d
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/advanced-guides/base-module/immune/populations.md
@@ -0,0 +1,49 @@
+---
+title: Módulo de Populações
+sidebar_label: Populações
+pagination_next: null
+keywords:
+ - Binary
+ - classifying
+ - affinity threshold
+ - Real-Valued
+ - classifying
+ - anomalies
+ - K-Nearest Neighbors
+ - memory B-cell
+ - Clonal Expansion
+ - Immune System
+ - Artificial Immune Systems
+lastUpdatedAt: 2025/11/21
+author: João Paulo
+---
+
+Fornece funções utilitárias para gerar populações de anticorpos em algoritmos imunológicos.
+
+## generate_random_antibodies(...)
+
+Gera uma população aleatória de anticorpos.
+
+```python
+def generate_random_antibodies(
+ n_samples: int,
+ n_features: int,
+ feature_type: FeatureTypeAll = "continuous-features",
+ bounds: Optional[npt.NDArray[np.float64]] = None
+) -> npt.NDArray
+```
+
+### Parâmetros
+
+* **n_samples** (`int`): Número de anticorpos (amostras) a serem gerados.
+* **n_features** (`int`): Número de características (dimensões) para cada anticorpo.
+* **feature_type** (`FeatureTypeAll`, default="continuous-features"): Especifica o tipo das características: "continuous-features", "binary-features", "ranged-features", or "permutation-features".
+* **bounds** (`Optional[npt.NDArray[np.float64]]`): Array (n_features, 2) contendo os valores mínimo e máximo por dimensão.
+
+### Retorno
+
+* **npt.NDArray**: Array com forma (n_samples, n_features) contendo os anticorpos gerados.
+
+### Exceções
+
+* **ValueError**: Caso o número de características seja menor ou igual a zero.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/README.mdx b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/README.mdx
new file mode 100644
index 00000000..88f30a29
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/README.mdx
@@ -0,0 +1,17 @@
+---
+sidebar_position: 2
+---
+
+import DocCardList from '@theme/DocCardList';
+
+# Técnicas implementadas
+
+# Classes AISP
+
+Classes implementadas utilizando as metáforas do sistemas imunológicos artificiais.
+
+---
+
+## Classe do módulo:
+
+
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/README.mdx b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/README.mdx
new file mode 100644
index 00000000..fc3db09d
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/README.mdx
@@ -0,0 +1,15 @@
+---
+sidebar_position: 2
+lastUpdatedAt: 2025/05/25
+author: João Paulo
+---
+import DocCardList from '@theme/DocCardList';
+
+# Algoritmos de Seleção Clonal.
+
+Os Algoritmos de Seleção Clonal são inspirados no processo de proliferação de anticorpos após a detecção de um antígeno,
+durante o qual os anticorpos gerados sofrem mutações na tentativa de aumentar o reconhecimento do patógeno.
+
+## Classes:
+
+
\ No newline at end of file
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/airs/README.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/airs/README.md
new file mode 100644
index 00000000..1c500308
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/airs/README.md
@@ -0,0 +1,216 @@
+---
+id: airs
+sidebar_label: AIRS - Sistema Imunológico Artificial de Reconhecimento
+keywords:
+ - Binário
+ - Classificação
+ - Limiar de Afinidade
+ - Valores Reais
+ - Anomalias
+ - K-Vizinhos Mais Próximos
+lastUpdatedAt: 2025/08/22
+author: João Paulo
+---
+
+# AIRS - Sistema Imunológico Artificial de Reconhecimento
+
+O ``AIRS`` é um algoritmo de classificação inspirado no processo de seleção clonal. A versão implementada nesta classe é inspirada na sua versão simplificada, o AIRS2, descrito em[Brabazon, O'Neill, and McGarraghy (2015)](#1)
+
+Esta implementação é inspirada no AIRS2, uma versão simplificada do algoritmo AIRS original, introduzindo adaptações para lidar com conjuntos de dados contínuos e binários.
+
+Com base no algoritmo 16.5 de Brabazon et al. [1](#1).
+
+:::tip Trabalhos relacionados e notáveis:
+
+- [Artificial Immune Recognition System V2 - AZZOUG Aghiles](https://github.com/AghilesAzzoug/Artificial-Immune-System)
+
+:::
+
+:::info
+
+**``AIRS``** estende a classe **[classe ``BaseClassifier``](../../../advanced-guides/base-module/core/Classifier.md)**, herdando sua funcionalidade base.
+
+:::
+
+## Construtor AIRS
+
+A classe `AIRS` tem como objetivo realizar classificação utilizando metáforas de seleção e expansão clonal.
+
+**Atributos:**
+
+- **n_resources** (`float`): Quantidade total de recursos disponíveis. O padrão é 10.
+
+- **rate_clonal** (`float`): Número máximo de clones possíveis de uma classe. Esta quantidade é multiplicada por (estímulo da célula * taxa de hipermutação) para definir o número de clones. O padrão é 10.
+
+- **rate_hypermutation** (`int`): Taxa de clones mutados derivada de rate_clonal como um fator escalar. O padrão é 0,75.
+
+- **affinity_threshold_scalar** (`float`): Limiar de afinidade normalizado. O padrão é 0,75.
+
+- **k** (`int`): Número de vizinhos mais próximos (k-NN) que será usado para escolher um rótulo na predição. O padrão é 10.
+
+- **max_iters** (`int`): Número máximo de interações no processo de refinamento do conjunto ARB exposto a aᵢ. O padrão é 100.
+
+- **resource_amplified** (`float`): Amplificador de consumo de recursos, multiplicado com o estímulo para subtrair recursos. O padrão é 1.0 (sem amplificação).
+
+- **metric** (Literal["manhattan", "minkowski", "euclidean"]): Forma de calcular a distância entre o detector e a amostra:
+
+ - ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}
+ $$
+ - ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}
+ $$.
+ - ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+ $$.
+
+ Defaults to ``'euclidean'``.
+
+- **seed** (``Optional[int]``): Semente para geração aleatória de valores dos detectores. O padrão é None.
+
+- `**kwargs`:
+
+ - **p** (`float`): Este parâmetro armazena o valor de `p` usado na distância de Minkowski.
+ O padrão é `2`, que corresponde à distância euclidiana normalizada. Diferentes valores de p resultam em variantes distintas da distância de Minkowski. [Saiba mais](https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.minkowski.html).
+
+**Outras variáveis inicializadas:**
+
+- **cells_memory** (`dict`): Armazena uma lista de células de memória por classe.
+- **affinity_threshold** (`dict`): Define o limiar de afinidade entre antígenos.
+- **classes** (`npt.NDArray`): Lista de classes de saída.
+
+---
+
+## Métodos Públicos
+
+### Método fit(...)
+
+A função `fit(...)` gera detectores para os não-pertencentes em relação às amostras:
+
+```python
+def fit(self, X: npt.NDArray, y: npt.NDArray):
+```
+
+Realiza o treinamento conforme `X` e `y`, utilizando o método Sistema de Reconhecimento Imune Artificial (`AIRS`).
+
+**Parâmetros de entrada:**
+
+- **X**: Array com as características das amostras, com **N** amostras (linhas) e **N** características (colunas), normalizado para valores entre [0, 1].
+- **y**: Array com as classes de saída correspondentes às **N** amostras relacionadas a `X`.
+- **verbose**: Booleano, padrão `True`, determina se o feedback da geração dos detectores será impresso.
+
+*Retorna a instância da classe.*
+
+---
+
+### Método predict(...)
+
+A função `predict(...)` realiza a predição de classes utilizando os detectores gerados:
+
+```python
+def predict(self, X: npt.NDArray) -> npt.NDArray:
+```
+
+**Parâmetro de entrada:**
+
+- **X**: Array com as características para predição, com **N** amostras (linhas) e **N** colunas.
+
+**Retorna:**
+
+- **C**: Um array de predições com as classes de saída para as características fornecidas.
+- **None**: Se não houver detectores.
+
+---
+
+### Método score(...)
+
+A função `score(...)` calcula a acurácia do modelo treinado realizando predições e calculando a precisão.
+
+```python
+def score(self, X: npt.NDArray, y: list) -> float:
+```
+
+Retorna a acurácia como um `float`.
+
+---
+
+## Métodos Privados
+
+### Método _refinement_arb(...)
+
+A função "_refinement_arb(...)" refina o conjunto ARB até que o valor médio de estímulo ultrapasse o limiar definido (`affinity_threshold_scalar`).
+
+Parâmetros:
+
+- **c_match** (`Cell`): Célula com o maior estímulo em relação a aᵢ.
+- **arb_list** (`List[_ARB]`): Conjunto ARB.
+
+```python
+def _refinement_arb(self, ai: npt.NDArray, c_match: Cell, arb_list: List[_ARB]) -> _ARB:
+```
+
+Retorna a célula (_ARB) com o maior estímulo ARB.
+
+---
+
+### Método _cells_affinity_threshold(...)
+
+A função "_cells_affinity_threshold(...)" calcula o limiar de afinidade com base na afinidade média entre instâncias de treinamento, onde aᵢ e aⱼ são um par de antígenos, e a afinidade é medida pela distância (Euclidiana, Manhattan, Minkowski, Hamming).
+**Seguindo a fórmula:**
+
+$$
+\text{affinity}_{\text{threshold}} = \frac{
+\sum_{i=1}^{n-1} \sum_{j=i+1}^{n} \text{affinity}(a_i, a_j)}{n(n-1)/2}
+$$
+
+Parâmetros:
+
+- **antigens_list** (`NDArray`): Lista de antígenos de treinamento.
+
+```python
+def _cells_affinity_threshold(self, antigens_list: npt.NDArray):
+```
+
+---
+
+### Método _affinity(...)
+
+A função "_affinity(...)" calcula o estímulo entre dois vetores usando métricas.
+
+Parâmetros:
+
+- **u** (`npt.NDArray`): Coordenadas do primeiro ponto.
+- **v** (`npt.NDArray`): Coordenadas do segundo ponto.
+
+```python
+def _affinity(self, u: npt.NDArray, v: npt.NDArray) -> float:
+```
+
+Retorna a taxa de estímulo entre os vetores.
+
+---
+
+### Método _init_memory_c(...)
+
+A função "_init_memory_c(...)" inicializa células de memória selecionando aleatoriamente `n_antigens_selected` da lista de antígenos de treinamento.
+
+Parâmetros:
+
+- **antigens_list** (`NDArray`): Lista de antígenos de treinamento.
+
+```python
+def _init_memory_c(self, antigens_list: npt.NDArray) -> List[Cell]:
+```
+
+---
+
+## Referências
+
+---
+
+### 1
+>
+> BRABAZON, Anthony; O'NEILL, Michael; MCGARRAGHY, Seán. Natural Computing Algorithms. [S. l.]: Springer Berlin Heidelberg, 2015. DOI 10.1007/978-3-662-43631-8. Disponível em: [https://dx.doi.org/10.1007/978-3-662-43631-8](https://dx.doi.org/10.1007/978-3-662-43631-8).
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/airs/abr.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/airs/abr.md
new file mode 100644
index 00000000..eb0e525b
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/airs/abr.md
@@ -0,0 +1,47 @@
+---
+id: abr
+title: ABR
+sidebar_label: ABR - Bolha de reconhecimento artificial
+sidebar_position: 2
+keywords:
+ - Binary
+ - classifying
+ - affinity threshold
+ - Real-Valued
+ - classifying
+ - anomalies
+ - K-Nearest Neighbors
+lastUpdatedAt: 2025/05/25
+author: João Paulo
+---
+
+## ABR (Artificial Recognition Ball)
+
+Individuo do conjunto de células reconhecedoras (ABR), herda características de uma célula-B, adicionando o consumo de recursos
+
+:::info
+
+**``ABR``** estende a classe **[``BCell``](../../../advanced-guides/base-module/immune/cell.md#BCell)**, herdando sua funcionalidade base.
+
+:::
+
+### Constructor
+
+Parameters:
+
+* vector (``npt.NDArray``): A feature vector of the cell. Defaults to None.
+
+---
+
+### Function consume_resource(...)
+
+Parameters:
+
+* n_resource (```float```) : The initial amount of resources.
+* amplified (``float``): Amplifier for resource consumption by the cell. It is multiplied by the cell's stimulus. The default value is 1.
+
+```python
+def consume_resource(self, n_resource: float, amplified: float = 1) -> float:
+```
+
+Returns the remaining amount of resources after consumption.
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/clonalg.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/clonalg.md
new file mode 100644
index 00000000..45275396
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/clonal-selection-algorithms/clonalg.md
@@ -0,0 +1,197 @@
+---
+id: clonalg
+sidebar_label: CLONALG - Algoritmo de Seleção Clonal
+keywords:
+ - CLONALG
+ - algoritmo de seleção clonal
+ - otimização bio-inspirada
+ - inteligência artificial
+ - problemas binários
+ - problemas contínuos
+ - ranged optimization
+ - permutação
+ - metaheurísticas
+---
+
+# CLONALG - Algoritmo de Seleção Clonal
+
+A classe `Clonalg` é um **algoritmo de otimização** inspirado no processo biológico de seleção clonal do sistema imunológico. Esta implementação é projetada para minimizar ou maximizar funções de custo em diversos tipos de problemas, incluindo problemas binários, contínuos, com valores limitados (ranged) e de permutação.
+
+:::tip
+A implementação do CLONALG foi inspirada na descrição apresentada em [1](#1).
+:::
+
+:::info
+Esta implementação do CLONALG contém algumas alterações baseadas no contexto do AISP, para aplicação geral
+a diversos problemas, que podem produzir resultados diferentes da implementação padrão ou
+específica. Esta adaptação visa generalizar o CLONALG para tarefas de minimização e
+maximização, além de suportar problemas contínuos, discretos e de permutação.
+:::
+
+:::info
+
+**``Clonalg``** estende a **[classe ``BaseOptimizer`` ](../../advanced-guides/base-module/core/Optimizer.md)**, herdando suas funcionalidades básicas.
+
+:::
+
+---
+
+## CLONALG Constructor
+
+O construtor inicializa a instância do CLONALG com os principais parâmetros que definem o processo de otimização.
+
+**Atributos:**
+
+* **problem_size**: `int` - Dimensão do problema a ser otimizado.
+* **N**: `int`, padrão=50 - Número de células de memória (anticorpos) na população.
+* **rate_clonal**: `float`, padrão=10 - Número máximo de clones possíveis de uma célula. Este valor é multiplicado pela afinidade da célula para determinar o número de clones.
+* **rate_hypermutation**: `float`, padrão=0.75 - Taxa de clones mutados, usada como fator escalar.
+* **n_diversity_injection**: `int`, padrão=5 - Número de novas células de memória aleatórias injetadas para manter a diversidade.
+* **selection_size**: `int`, padrão=5 - Número de melhores anticorpos selecionados para clonagem.
+* **affinity_function**: `Optional[Callable[..., npt.NDArray]]`, padrão=None - Função objetivo usada para avaliar soluções candidatas.
+* **feature_type**: `FeatureTypeAll`, padrão='ranged-features' - Tipo de amostra do problema, podendo ser `'continuous-features'`, `'binary-features'`, `'ranged-features'` ou `'permutation-features'`.
+* **bounds**: `Optional[Dict]`, padrão=None - Dicionário definindo os limites de busca para problemas `'ranged-features'`. Pode ser um único intervalo ou uma lista de intervalos para cada dimensão.
+* **mode**: `Literal["min", "max"]`, padrão="min" - Especifica se o algoritmo minimiza ou maximiza a função de custo.
+* **seed**: `Optional[int]`, padrão=None - Semente para geração de números aleatórios.
+
+---
+
+### Métodos Públicos
+
+#### Função `optimize(...)`
+
+```python
+def optimize(
+ self,
+ max_iters: int = 50,
+ n_iter_no_change=10,
+ verbose: bool = True
+) -> List[Antibody]:
+```
+
+Este método executa o processo de otimização e retorna a população de anticorpos.
+
+**Parâmetros de entrada:**
+
+* **max_iters**: `int`, padrão=50 - Número máximo de interações.
+* **n_iter_no_change**: `int`, padrão=10 - Número máximo de iterações sem melhoria na melhor solução.
+* **verbose**: `bool`, padrão=True - Flag para habilitar ou desabilitar saída detalhada durante o processo de otimização.
+
+**Retorna:**
+
+* population : ``List[Antibody]``, A população de [anticorpos](../../advanced-guides/base-module/immune/cell.md#Antibody) após a expansão clonal.
+
+---
+
+#### Função `affinity_function(...)`
+
+```python
+def affinity_function(self, solution: npt.NDArray) -> np.float64:
+```
+
+Este método avalia a afinidade de uma solução candidata. Levanta `NotImplementedError` se nenhuma função de afinidade tiver sido fornecida à instância da classe.
+
+**Parâmetros de entrada:**
+
+* **solution**: `npt.NDArray` - Solução candidata a ser avaliada.
+
+**Retorna:**
+
+* `np.float64`: Valor de afinidade associado à solução.
+
+---
+
+### Métodos Privados
+
+#### Função `_select_top_antibodies(...)`
+
+```python
+def _select_top_antibodies(self, n: int, antibodies: list[tuple]) -> list[tuple]:
+```
+
+Seleciona os `n` melhores anticorpos com base em suas pontuações de afinidade, de acordo com o `mode` (`'min'` ou `'max'`).
+
+**Parâmetros de entrada:**
+
+* **n**: `int` - Número de anticorpos a serem selecionados.
+* **antibodies**: `list[tuple]` - Lista de tuplas, onde cada tupla representa um anticorpo e sua pontuação associada.
+
+**Retorna:**
+
+* `list[tuple]`: Lista contendo os `n` anticorpos selecionados.
+
+---
+
+#### Função `_init_population_antibodies(...)`
+
+```python
+def _init_population_antibodies(self) -> npt.NDArray:
+```
+
+Inicializa aleatoriamente a população inicial de anticorpos.
+
+**Retorna:**
+
+* `npt.NDArray`: Lista com os anticorpos inicializados.
+
+---
+
+#### Função `_diversity_introduction(...)`
+
+```python
+def _diversity_introduction(self):
+```
+
+Introduz novos anticorpos aleatórios na população para manter a diversidade genética e ajudar a evitar convergência prematura.
+
+**Retorna:**
+
+* `npt.NDArray`: Array contendo os novos anticorpos aleatórios.
+
+---
+
+#### Função `_clone_and_mutate(...)`
+
+```python
+def _clone_and_mutate(self, antibody: npt.NDArray, n_clone: int, rate_hypermutation: float) -> npt.NDArray:
+```
+
+Gera clones mutados a partir de um único anticorpo. A estratégia de mutação depende do `feature_type` especificado durante a inicialização (`'binary-features'`, `'continuous-features'`, `'ranged-features'` ou `'permutation-features'`).
+
+**Parâmetros de entrada:**
+
+* **antibody**: `npt.NDArray` - Vetor original do anticorpo a ser clonado e mutado.
+* **n_clone**: `int` - Número de clones a serem gerados.
+* **rate_hypermutation**: `float` - Taxa de hipermutação.
+
+**Retorna:**
+
+* `npt.NDArray`: Array contendo os clones mutados.
+
+---
+
+#### Função `_clone_and_hypermutation(...)`
+
+```python
+def _clone_and_hypermutation(self, population: list[tuple]) -> list:
+```
+
+Clona e aplica hipermutação a uma população de anticorpos. Retorna uma lista de todos os clones e suas afinidades em relação à função de custo.
+
+**Parâmetros de entrada:**
+
+* **population**: `list[tuple]` - Lista de anticorpos a serem avaliados e clonados.
+
+**Retorna:**
+
+* `list`: Lista contendo os clones mutados.
+
+---
+
+## Referências
+
+---
+
+### 1
+>
+> BROWNLEE, Jason. Clonal Selection Algorithm. Clever Algorithms: Nature-inspired Programming Recipes., 2011. Available at: [https://cleveralgorithms.com/nature-inspired/immune/clonal_selection_algorithm.html](https://cleveralgorithms.com/nature-inspired/immune/clonal_selection_algorithm.html)
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/immune-network-theory/AiNet.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/immune-network-theory/AiNet.md
new file mode 100644
index 00000000..5738f143
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/immune-network-theory/AiNet.md
@@ -0,0 +1,327 @@
+---
+id: ainet
+sidebar_label: AiNet - Agrupamento e Compressão
+sidebar_position: 1
+pagination_next: null
+keywords:
+ - Rede Imunológica Artificial
+ - AiNet
+ - Agrupamento
+ - Compressão de Dados
+ - Algoritmos Imunológicos
+ - Computação Bioinspirada
+ - Células de Memória
+ - Limite de Afinidade
+ - Limite de Supressão
+ - Seleção Clonal
+ - Expansão Clonal
+ - Introdução de Diversidade
+ - Reconhecimento de Padrões
+ - Detecção de Anomalias
+ - Agrupamento MST
+ - Árvore Geradora Mínima
+ - Aprendizado Não Supervisionado
+ - Algoritmos Bioinspirados
+ - Rede de Anticorpos
+lastUpdatedAt: 2025/08/19
+author: João Paulo
+---
+
+# AiNet - Rede Imunológica Artificial para Agrupamento e Compressão
+
+A classe AiNet tem como objetivo realizar agrupamento utilizando metáforas inspiradas na teoria da rede imunológica.
+
+A classe AiNet implementa o algoritmo de Rede Imune Artificial para compressão e clustering. Ela utiliza princípios da teoria de redes imunes,
+seleção clonal e maturação por afinidade para comprimir conjuntos de dados e encontrar clusters [1](#1).
+Para clustering, pode opcionalmente utilizar uma [**Árvore Geradora Mínima**
+(MST)](#2) para separar nós distantes em grupos.
+
+:::info
+
+**``AiNet``** estende a **[classe ``BaseClusterer``](../../advanced-guides/base-module/core/Clusterer.md)**, herdando sua funcionalidade básica.
+
+:::
+
+## Constructor
+
+```python
+class AiNet(
+ self,
+ N: int = 50,
+ n_clone: int = 10,
+ top_clonal_memory_size: int = 5,
+ n_diversity_injection: int = 5,
+ affinity_threshold: float = 0.5,
+ suppression_threshold: float = 0.5,
+ mst_inconsistency_factor: float = 2.0,
+ max_iterations: int = 10,
+ k: int = 3,
+ metric: MetricType = "euclidean",
+ seed: Optional[int] = None,
+ use_mst_clustering: bool = True,
+ **kwargs
+)
+```
+
+**Atributos:**
+
+* **N** (`int`): Número de células de memória (anticorpos) na população. Padrão: 50.
+* **n_clone** (`int`): Número de clones gerados por célula de memória selecionada. Padrão: 10.
+* **top_clonal_memory_size** (`Optional[int]`): Número de anticorpos de maior afinidade selecionados para clonagem. Padrão: 5.
+* **n_diversity_injection** (`int`): Número de novos anticorpos aleatórios injetados para manter a diversidade. Padrão: 5.
+* **affinity_threshold** (`float`): Limite para seleção/supressão de células. Padrão: 0.5.
+* **suppression_threshold** (`float`): Limite para remoção de células de memória semelhantes. Padrão: 0.5.
+* **mst_inconsistency_factor** (`float`): Fator para determinar arestas inconsistentes na MST. Padrão: 2.0.
+* **max_iterations** (`int`): Número máximo de iterações de treinamento. Padrão: 10.
+* **k** (`int`): Número de vizinhos mais próximos usados para predição de rótulos. Padrão: 3.
+* **metric** (Literal["manhattan", "minkowski", "euclidean"]): Forma de calcular a distância entre o detector e a amostra:
+
+ * ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}
+ $$
+ * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}
+ $$
+ * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+ $$
+
+ Padrão: **"Euclidean"**.
+
+* **seed** (`Optional[int]`): Semente para geração de números aleatórios. Padrão: None.
+* **use_mst_clustering** (`bool`): Define se o clustering baseado em MST deve ser utilizado. Padrão: True.
+* **kwargs**:
+ * **p** (`float`): Parâmetro para distância de Minkowski. Padrão: 2.
+
+**Outras variáveis inicializadas:**
+
+* **_population_antibodies** (`npt.NDArray`): Conjunto atual de anticorpos.
+* **_memory_network** (`dict`): Dicionário que mapeia clusters para anticorpos.
+* **_mst_structure** (`scipy.sparse.csr_matrix`): Estrutura de adjacência da MST.
+* **_mst_mean_distance** (`float`): Média das distâncias das arestas da MST.
+* **_mst_std_distance** (`float`): Desvio padrão das distâncias das arestas da MST.
+* **classes** (`list`): Lista de rótulos dos clusters.
+
+---
+
+## Métodos Públicos
+
+### Função fit(...)
+
+Treina o modelo AiNet com os dados de entrada:
+
+```python
+def fit(self, X: npt.NDArray, verbose: bool = True) -> AiNet:
+```
+
+**Parâmetros de entrada:**
+
+* **X**: Matriz com amostras (linhas) e atributos (colunas).
+* **verbose**: Booleano, padrão True, habilita feedback de progresso.
+
+*Retorna a instância da classe.*
+
+---
+
+### Função predict(...)
+
+Prediz os rótulos dos clusters para novas amostras:
+
+```python
+def predict(self, X) -> Optional[npt.NDArray]:
+```
+
+**Parâmetros de entrada:**
+
+* **X**: Matriz de atributos de entrada.
+
+**Retorna:**
+
+* **Predictions**: Matriz de rótulos de clusters, ou None caso o clustering esteja desabilitado.
+
+---
+
+### Função update_clusters(...)
+
+Particiona os clusters utilizando a MST:
+
+```python
+def update_clusters(self, mst_inconsistency_factor: Optional[float] = None):
+```
+
+**Parâmetros de entrada:**
+
+* **mst_inconsistency_factor**: Valor opcional (float) para sobrescrever o fator de inconsistência da MST.
+
+**Atualiza:**
+
+* **_memory_network**: Dicionário de rótulos de clusters para vetores de anticorpos.
+* **classes**: Lista de rótulos de clusters.
+
+---
+
+## Métodos Privados
+
+### Função _init_population_antibodies(...)
+
+Inicializa a população de anticorpos aleatoriamente.
+
+```python
+def _init_population_antibodies(self) -> npt.NDArray:
+```
+
+**Parâmetros de entrada:** Nenhum
+
+**Retorna:** Anticorpos inicializados (`npt.NDArray`).
+
+---
+
+### Função _select_and_clone_population(...)
+
+Seleciona os melhores anticorpos e gera clones mutados:
+
+```python
+def _select_and_clone_population(self, antigen: npt.NDArray, population: npt.NDArray) -> list:
+```
+
+**Parâmetros de entrada:**
+
+* **antigen**: Vetor representando o antígeno para o qual as afinidades serão calculadas.
+* **population**: Matriz de anticorpos a serem avaliados e clonados.
+
+**Retorna:** Lista de clones mutados.
+
+---
+
+### Função _clonal_suppression(...)
+
+Suprime clones redundantes com base em limiares:
+
+```python
+def _clonal_suppression(self, antigen: npt.NDArray, clones: list):
+```
+
+**Parâmetros de entrada:**
+
+* **antigen**: Vetor representando o antígeno.
+* **clones**: Lista de clones candidatos a serem suprimidos.
+
+**Retorna:** Lista de clones não redundantes e de alta afinidade.
+
+---
+
+### Função _memory_suppression(...)
+
+Remove anticorpos redundantes da memória:
+
+```python
+def _memory_suppression(self, pool_memory: list) -> list:
+```
+
+**Parâmetros de entrada:**
+
+* **pool_memory**: Lista de anticorpos atualmente na memória.
+
+**Retorna:** Memória filtrada (`list`).
+
+---
+
+### Função _diversity_introduction(...)
+
+Introduce novos anticorpos aleatórios:
+
+```python
+def _diversity_introduction(self) -> npt.NDArray:
+```
+
+**Parâmetros de entrada:** Nenhum
+
+**Retorna:** Conjunto de novos anticorpos (`npt.NDArray`).
+
+---
+
+### Função _affinity(...)
+
+Calcula o estímulo entre dois vetores:
+
+```python
+def _affinity(self, u: npt.NDArray, v: npt.NDArray) -> float:
+```
+
+**Parâmetros de entrada:**
+
+* **u**: Vetor representando o primeiro ponto.
+* **v**: Vetor representando o segundo ponto.
+
+**Retorna:** Valor de afinidade (`float`) no intervalo [0,1].
+
+---
+
+### Função _calculate_affinities(...)
+
+Calcula a matriz de afinidades entre um vetor de referência e vetores-alvo:
+
+```python
+def _calculate_affinities(self, u: npt.NDArray, v: npt.NDArray) -> npt.NDArray:
+```
+
+**Parâmetros de entrada:**
+
+* **u**: Vetor de referência (`npt.NDArray`) de formato `(n_features,)`.
+* **v**: Vetores-alvo (`npt.NDArray`) de formato `(n_samples, n_features)`.
+
+**Retorna:** Vetor de afinidades (`npt.NDArray`) com formato `(n_samples,)`.
+
+---
+
+### Função _clone_and_mutate(...)
+
+Gera clones mutados:
+
+```python
+def _clone_and_mutate(self, antibody: npt.NDArray, n_clone: int) -> npt.NDArray:
+```
+
+**Parâmetros de entrada:**
+
+* **antibody**: Vetor de anticorpo original a ser clonado e mutado.
+* **n_clone**: Número de clones a serem gerados.
+
+**Retorna:** Matriz de clones mutados (`npt.NDArray`) de formato `(n_clone, len(antibody))`.
+
+---
+
+### Função _build_mst(...)
+
+Constrói a MST e armazena estatísticas:
+
+```python
+def _build_mst(self):
+```
+
+**Parâmetros de entrada:** Nenhum
+
+**Exceções:** ValueError se a população de anticorpos estiver vazia.
+
+**Atualiza variáveis internas:**
+
+* **_mst_structure**: Estrutura de adjacência da MST.
+* **_mst_mean_distance**: Distância média das arestas.
+* **_mst_std_distance**: Desvio padrão das distâncias das arestas da MST.
+
+---
+
+## Referências
+
+### 1
+>
+> 1. De Castro, Leandro & José, Fernando & von Zuben, Antonio Augusto. (2001). aiNet: An Artificial Immune Network for Data Analysis.
+> Disponível em: [https://www.researchgate.net/publication/228378350_aiNet_An_Artificial_Immune_Network_for_Data_Analysis](https://www.researchgate.net/publication/228378350_aiNet_An_Artificial_Immune_Network_for_Data_Analysis)
+
+### 2
+>
+> 2. SciPy Documentation. *Minimum Spanning Tree*.
+> Disponível em: [https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csgraph.minimum_spanning_tree](https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csgraph.minimum_spanning_tree)
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/immune-network-theory/README.mdx b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/immune-network-theory/README.mdx
new file mode 100644
index 00000000..cfa989ea
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/immune-network-theory/README.mdx
@@ -0,0 +1,39 @@
+---
+sidebar_position: 3
+lastUpdatedAt: 2025/08/19
+author: João Paulo
+keywords:
+ - Teoria da Rede Imunológica
+ - AiNet
+ - Sistemas Imunológicos Artificiais
+ - Agrupamento
+ - Otimização
+ - Classificação
+ - Aprendizado de Máquina
+ - Algoritmos Imunológicos
+---
+
+import DocCardList from '@theme/DocCardList';
+
+# Teoria da Rede Imunológica
+
+Esta técnica foi introduzida por **Niels Jerne (1974)** e modela o sistema imunológico como uma rede dinâmica,
+na qual células e moléculas são capazes de se reconhecer mutuamente. [1](#1)
+
+---
+
+A Rede Imunológica Artificial pode ser aplicada em diferentes contextos, tais como:
+- **Agrupamento (Clustering)**
+- **Otimização**
+- **Classificação**
+
+## Classes:
+
+
+
+## References
+
+---
+
+### 1
+> BRABAZON, Anthony; O'NEILL, Michael; MCGARRAGHY, Seán. Natural Computing Algorithms. [S. l.]: Springer Berlin Heidelberg, 2015. DOI 10.1007/978-3-662-43631-8. Disponível em: [https://dx.doi.org/10.1007/978-3-662-43631-8](https://dx.doi.org/10.1007/978-3-662-43631-8).
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/BNSA.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/BNSA.md
new file mode 100644
index 00000000..9f619b1e
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/BNSA.md
@@ -0,0 +1,134 @@
+---
+id: bnsa
+sidebar_label: BNSA - Algoritmo de Seleção Negativa Binária
+sidebar_position: 2
+pagination_next: null
+last_update:
+ date: 2025/05/17
+ author: João Paulo
+keywords:
+ - Binário
+ - classificação
+ - anomalias
+ - not self
+ - affinity threshold
+ - Algoritmo de Seleção Negativa
+ - Sistema Imunológico Artificial (AIS)
+ - Próprio e não-próprio
+ - Imune
+ - Computação Natural
+---
+
+# BNSA (Algoritmo de Seleção Negativa Binária)
+
+:::info
+
+**``BNSA``** estende a **[classe ``BaseClassifier``](../../advanced-guides/base-module/core/Classifier.md)**, herdando suas funcionalidades básicas.
+
+:::
+
+## Construtor RNSA
+
+A classe ``BNSA`` tem a finalidade de classificação e identificação de anomalias através do método self e not self .
+
+```python
+class BNSA(
+ self,
+ N: int = 100,
+ aff_thresh: float = 0.1,
+ max_discards: int = 1000,
+ seed: int = None,
+ no_label_sample_selection: Literal["max_average_difference", "max_nearest_difference"] = "max_average_difference"
+)
+```
+
+**Attributes:**
+
+* *N* (``int``): Quantidade de detectores. Defaults to ``100``.
+* *aff_thresh* (``float``): A variável ('affinity threshold') representa a porcentagem de não similaridade entre a célula T e as amostras próprias. O valor padrão é de 10% (0,1), enquanto que o valor de 1,0 representa 100% de não similaridade.
+
+ :::note
+ Definir uma porcentagem de diferença muito alta pode resultar na incapacidade de gerar detectores para não-próprio.
+ :::
+
+* *max_discards* (``int``): Este parâmetro indica o número máximo de descartes de detectores em sequência, que tem como objetivo evitar um
+possível loop infinito caso seja definido um raio que não seja possível gerar detectores do não-próprio. Defaults to ``1000``.
+* *seed* (``int``): Semente para a geração randômica dos valores nos detectores. Defaults to ``None``.
+* no_label_sample_selection (``str``): Método para a seleção de rótulos para amostras designadas como não pertencentes por todos os detectores não pertencentes. **Tipos de métodos disponíveis:**
+ * (``max_average_difference``): Seleciona a classe com a maior diferença média entre os detectores.
+ * (``max_nearest_difference``): Seleciona a classe com a maior diferença entre o detector mais próximo e mais distante da amostra.
+
+**Outras variáveis iniciadas:**
+
+* *detectors* (``dict``): Esta variável armazena uma lista de detectores por classe.
+
+* *classes* (``npt.NDArray``): lista de classes de saída.
+
+---
+
+## Função fit(...)
+
+A função ``fit(...)`` gera os detectores para os não próprios com relação às amostras:
+
+```python
+def fit(self, X: npt.NDArray, y: npt.NDArray, verbose: bool = True)
+```
+
+Nela é realizado o treinamento de acordo com ``X`` e ``y``, usando o método de seleção negativa(``NegativeSelect``).
+
+**Os parâmetros de entrada são:**
+
+* ``X``: array com as características das amostras com **N** amostras (linhas) e **N** características (colunas), normalizados para valores entre [0, 1].
+* ``y``: array com as classes de saídas disposto em **N** amostras que são relacionadas ao ``X``.
+* ``verbose``: boolean com valor padrão ``True``, determina se o feedback da geração dos detectores será impresso.
+
+*Retorna a instância da classe.*
+
+---
+
+## Função predict(...)
+
+A função ``predict(...)`` realiza a previsão das classes utilizando os detectores gerados:
+
+```python
+def predict(self, X: npt.NDArray) -> npt.NDArray:
+```
+
+**O parâmetro de entrada:**
+
+* ``X``: array com as características para a previsão, com **N** amostras (Linhas) e **N** colunas.
+
+**Retorna:**
+
+* ``C``: Um array de previsão com as classes de saída para as características informadas.
+* ``None``: se não houver detectores.
+
+---
+
+## Função score(...)
+
+A função "score(...)" calcula a precisão do modelo treinado por meio da realização de previsões e do cálculo da acurácia.
+
+```python
+def score(self, X: npt.NDArray, y: list) -> float:
+```
+
+retorna a acurácia, do tipo ``float``.
+
+---
+
+## Métodos privados
+
+---
+
+## Função __slice_index_list_by_class(...)
+
+A função ``__slice_index_list_by_class(...)``, separa os índices das linhas conforme a classe de saída, para percorrer o array de amostra, apenas nas posições que a saída for a classe que está sendo treinada:
+
+```python
+def __slice_index_list_by_class(self, y: npt.NDArray) -> dict:
+```
+
+Retorna um dicionario com as classes como chave e os índices em ``X`` das amostras.
+
+---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/README.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/README.md
new file mode 100644
index 00000000..610f032b
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/README.md
@@ -0,0 +1,44 @@
+---
+sidebar_position: 1
+---
+
+# Seleção Negativa
+
+A **seleção negativa** é o processo em que o sistema imunológico faz a maturação das células-T conhecidas também por linfócitos-T, no qual tornam-as aptas na detecção dos não-próprios. Assim, o Algoritmo de seleção negativa (NSA), utilizam-se de hiperesferas simbolizando os detectores em um espaço de dados N-dimensional. [1](#1)
+
+---
+
+## classes
+
+> 1. **[Binary version:](BNSA.md)**
+>
+>> O algoritmo binário adaptado para múltiplas classes neste projeto tem como base a versão proposta por [Forrest et al. (1994)](#2), originalmente desenvolvida para segurança computacional.
+>>> **Exemplo:**
+>>>
+>>> + [Base de dados Mushrooms](https://github.com/AIS-Package/aisp/blob/main/examples/pt-br/classification/BNSA/mushrooms_dataBase_example_pt-br.ipynb)
+
+> 2. **[Real-Valued version:](RNSA.md)**
+>
+>>Este algoritmo possui duas versões diferentes: uma baseada na versão canônica [[1]](#1) e outra com detectores de raio variável [[3]](#3). Ambas estão adaptadas para trabalhar com múltiplas classes e possuem métodos para previsão de dados presentes na região não-self de todos os detectores e classes.
+>>> **Exemplos:**
+>>>
+>>> + [Base de dados Iris](https://github.com/AIS-Package/aisp/blob/main/examples/pt-br/classification/RNSA/iris_dataBase_example_pt-br.ipynb)
+>>> + [Base de dados Geyser](https://github.com/AIS-Package/aisp/blob/main/examples/pt-br/classification/RNSA/geyser_dataBase_example_pt-br.ipynb)
+
+## References
+
+---
+
+### 1
+>
+> BRABAZON, Anthony; O'NEILL, Michael; MCGARRAGHY, Seán. Natural Computing Algorithms. [S. l.]: Springer Berlin Heidelberg, 2015. DOI 10.1007/978-3-662-43631-8. Disponível em: [https://dx.doi.org/10.1007/978-3-662-43631-8](https://dx.doi.org/10.1007/978-3-662-43631-8).
+
+### 2
+>
+> S. Forrest, A. S. Perelson, L. Allen and R. Cherukuri, "Self-nonself discrimination in a computer," Proceedings of 1994 IEEE Computer Society Symposium on Research in Security and Privacy, Oakland, CA, USA, 1994, pp. 202-212, doi: [https://dx.doi.org/10.1109/RISP.1994.296580](https://dx.doi.org/10.1109/RISP.1994.296580).
+
+### 3
+>
+> JI, Zhou; DASGUPTA, Dipankar. Real-Valued Negative Selection Algorithm with Variable-Sized Detectors. Genetic and Evolutionary Computation - GECCO 2004. [S. l.]: Springer Berlin Heidelberg, 2004. DOI 10.1007/978-3-540-24854-5_30. Disponível em: [https://dx.doi.org/10.1007/978-3-540-24854-5_30](https://dx.doi.org/10.1007/978-3-540-24854-5_30).
+
+---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/RNSA.md b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/RNSA.md
new file mode 100644
index 00000000..6f1c88e0
--- /dev/null
+++ b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/aisp-techniques/negative-selection/RNSA.md
@@ -0,0 +1,248 @@
+---
+id: rnsa
+sidebar_label: RNSA - Algoritmo de Seleção Negativa de Valor Real
+sidebar_position: 1
+last_update:
+ date: 2025/05/17
+ author: João Paulo
+keywords:
+ - Valor Real
+ - classificação
+ - anomalias
+ - not self
+ - V-detector
+ - Algoritmo de Seleção Negativa
+ - Sistema Imunológico Artificial (AIS)
+ - Próprio e não-próprio
+ - Imune
+ - Computação Natural
+---
+
+# RNSA (Algoritmo de Seleção Negativa de Valor Real)
+
+:::info
+
+**``RNSA``** estende a **[classe ``BaseClassifier``](../../advanced-guides/base-module/core/Classifier.md)**, herdando suas funcionalidades básicas.
+
+:::
+
+## Construtor RNSA
+
+A classe ``RNSA`` tem a finalidade de classificação e identificação de anomalias através do método self e not self .
+
+```python
+class RNSA(
+ self,
+ N: int = 100,
+ r: float = 0.05,
+ r_s: float = 0.0001,
+ k: int = 1,
+ metric: Literal['manhattan', 'minkowski', 'euclidean'] = 'euclidean',
+ max_discards: int = 1000,
+ seed: int = None,
+ algorithm: Literal['default-NSA', 'V-detector'] ='default-NSA',
+ **kwargs: Dict[str, Union[bool, str, float]]
+)
+```
+
+**Attributes:**
+
+* *N* (``int``): Quantidade de detectores. Defaults to ``100``.
+* *r* (``float``): Raio do detector. Defaults to ``0.05``.
+
+ :::note
+ É importante considerar que definir um raio muito baixo para o detector pode reduzir significativamente a taxa de detecção. Por outro lado, um raio muito grande pode inviabilizar a incorporação do detector no espaço de busca, o que também pode comprometer o desempenho da detecção. É fundamental encontrar um equilíbrio entre o tamanho do raio e a eficiência da detecção para obter os melhores resultados possíveis.
+ :::
+
+* *k* (``int``): Quantidade de vizinhos próximos dos detectores gerados aleatoriamente para efetuar o cálculo da média da distância. Defaults to ``1``.
+* *metric* (``str``): Forma para se calcular a distância entre o detector e a amostra:
+
+ * ``'euclidiana'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \sqrt{(X_1 - X_1)^2 + (Y_2 - Y_2)^2 + ... + (Y_n - Y_n)^2}
+ $$
+ * ``'minkowski'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{((|X_{1} - Y_{1}|^p + |X_{2} - Y_{2}|^p + \cdots + |X_{n} - Y_{n}|^p)^\frac{1}{p})}{n}
+ $$.
+ * ``'manhattan'`` ➜ O cálculo da distância dá-se pela expressão:
+ $$
+ \frac{(|X_{1} - X_{1}| + |Y_{2} - Y_{2}| + \cdots + |Y_{n} - Y_{n}|)}{n}
+ $$.
+
+ Defaults to ``'euclidean'``.
+
+* *max_discards* (``int``): Este parâmetro indica o número máximo de descartes de detectores em sequência, que tem como objetivo evitar um
+possível loop infinito caso seja definido um raio que não seja possível gerar detectores do não-próprio. Defaults to ``1000``.
+
+* *seed* (``int``): Semente para a geração randômica dos valores nos detectores. Defaults to ``None``.
+* *algorithm* (``str``), Definir a versão do algoritmo:
+
+ * ``'default-NSA'``: Algoritmo padrão com raio fixo.
+ * ``'V-detector'``: Este algoritmo é baseado no artigo "[Real-Valued Negative Selection Algorithm with Variable-Sized Detectors](https://doi.org/10.1007/978-3-540-24854-5_30)", de autoria de Ji, Z., Dasgupta, D. (2004), e utiliza um raio variável para a detecção de anomalias em espaços de características.
+
+ Defaults to ``'default-NSA'``.
+
+* *r_s* (``float``): O valor de ``rₛ`` é o raio das amostras próprias da matriz ``X``.
+
+* ``**kwargs``:
+ * *non_self_label* (``str``): Esta variável armazena o rótulo que será atribuído quando os dados possuírem
+ apenas uma classe de saída, e a amostra for classificada como não pertencente a essa classe. Defaults to ``'non-self'``.
+
+ * *cell_bounds* (``bool``): Se definido como ``True``, esta opção limita a geração dos detectores ao espaço do plano compreendido entre 0 e 1. Isso significa que qualquer detector cujo raio ultrapasse esse limite é descartado, e esta variável é usada exclusivamente no algoritmo ``V-detector``.
+ * p (``float``): Este parâmetro armazena o valor de ``p`` utilizada na distância de Minkowski. O padrão é ``2``, o que significa distância euclidiana normalizada. Diferentes valores de p levam a diferentes variantes da distância de Minkowski [saiba mais](https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.minkowski.html).
+
+**Outras variáveis iniciadas:**
+
+* *detectors* (``dict``): Esta variável armazena uma lista de detectores por classe.
+
+* *classes* (``npt.NDArray``): lista de classes de saída.
+
+---
+
+### Função fit(...)
+
+A função ``fit(...)`` gera os detectores para os não próprios com relação às amostras:
+
+```python
+def fit(self, X: npt.NDArray, y: npt.NDArray, verbose: bool = True)
+```
+
+Nela é realizado o treinamento de acordo com ``X`` e ``y``, usando o método de seleção negativa(``NegativeSelect``).
+
+**Os parâmetros de entrada são:**
+
+* ``X``: array com as características das amostras com **N** amostras (linhas) e **N** características (colunas), normalizados para valores entre [0, 1].
+* ``y``: array com as classes de saídas disposto em **N** amostras que são relacionadas ao ``X``.
+* ``verbose``: boolean com valor padrão ``True``, determina se o feedback da geração dos detectores será impresso.
+
+*Retorna a instância da classe.*
+
+---
+
+### Função predict(...)
+
+A função ``predict(...)`` realiza a previsão das classes utilizando os detectores gerados:
+
+```python
+def predict(self, X: npt.NDArray) -> npt.NDArray:
+```
+
+**O parâmetro de entrada:**
+
+* ``X``: array com as características para a previsão, com **N** amostras (Linhas) e **N** colunas.
+
+**Retorna:**
+
+* ``C``: Um array de previsão com as classes de saída para as características informadas.
+* ``None``: se não houver detectores.
+
+---
+
+### Função score(...)
+
+A função "score(...)" calcula a precisão do modelo treinado por meio da realização de previsões e do cálculo da acurácia.
+
+```python
+def score(self, X: npt.NDArray, y: list) -> float:
+```
+
+retorna a acurácia, do tipo ``float``.
+
+---
+
+## Métodos privados
+
+---
+
+### Função __checks_valid_detector(...)
+
+A função ``def __checks_valid_detector(...)`` verifica se o detector possui raio ``r`` válido para o não-próprio da classe:
+
+```python
+def __checks_valid_detector(self, X: npt.NDArray, vector_x: npt.NDArray, samplesIndexClass: npt.NDArray) -> bool:
+```
+
+**Os parâmetros de entrada são:**
+
+* ``X``: array com as características das amostras com **N** amostras (linhas) e **N** características (colunas), normalizados para valores entre [0, 1].
+
+* ``vector_x``: Detector candidato gerado aleatoriamente.
+
+* ``samplesIndexClass``: Array com os indexes de uma classe.
+
+**Retorna:** Verdadeiro (``True``) para os detectores que não possuam amostras em seu interior ou falso (``False``) se possuir.
+
+---
+
+### Função __compare_KnearestNeighbors_List(...)
+
+A função ``def __compare_KnearestNeighbors_List(...)`` compara a distância dos k-vizinhos mais próximo, para isso se a distância da nova amostra for menor, substitui ``k-1`` e ordena em ordem crescente:
+
+```python
+def __compare_KnearestNeighbors_List(self, knn: npt.NDArray, distance: float) -> npt.NDArray:
+```
+
+**Retorna:** uma lista com as distâncias dos k-vizinhos mais próximo.
+
+---
+
+### Função __compare_sample_to_detectors(...)
+
+Função para comparar uma amostra com os detectores, verificando se a amostra é própria.
+
+Nesta função, quando possui ambiguidade de classes, retorna a classe que possuir a média de distância maior entre os detectores.
+
+**Os parâmetros de entrada são:**
+
+* line: vetor com N-características
+
+**Retorna:** A classe prevista com os detectores ou None se a amostra não se qualificar a nenhuma classe.
+
+---
+
+### Função __detector_is_valid_to_Vdetector(...)
+
+Verifique se a distância entre o detector e as amostras, descontando o raio das amostras, é maior do que o raio mínimo.
+
+```python
+def __detector_is_valid_to_Vdetector(self, distance, vector_x):
+```
+
+**Os parâmetros de entrada são:**
+
+* distance (``float``): distância mínima calculada entre todas as amostras.
+* vector_x (``numpy.ndarray``): vetor x candidato do detector gerado aleatoriamente, com valores entre 0 e 1.
+
+**Retorna:**
+
+* ``False``: caso o raio calculado seja menor do que a distância mínima ou ultrapasse a borda do espaço, caso essa opção esteja habilitada.
+* ``True`` e a distância menos o raio das amostras, caso o raio seja válido.
+
+---
+
+### Função __distance(...)
+
+A função ``def __distance(...)`` calcula a distância entre dois pontos utilizando a técnica definida em ``metric``, no qual são: ``'euclidiana', 'minkowski', ou 'manhattan'``
+
+```python
+def __distance(self, u: npt.NDArray, v: npt.NDArray):
+```
+
+Os parâmetros de entrada são NDArrays: ``u`` e ``v``, com as coordenadas para os pontos.
+
+Retorna a distancia (``double``) entre os dois pontos.
+
+---
+
+### Função __slice_index_list_by_class(...)
+
+A função ``__slice_index_list_by_class(...)``, separa os índices das linhas conforme a classe de saída, para percorrer o array de amostra, apenas nas posições que a saída for a classe que está sendo treinada:
+
+```python
+def __slice_index_list_by_class(self, y: npt.NDArray) -> dict:
+```
+
+Retorna um dicionario com as classes como chave e os índices em ``X`` das amostras.
+
+---
diff --git a/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/ainet_blob.png b/i18n/pt-br/docusaurus-plugin-content-docs/version-0.5.x/assets/ainet_blob.png
new file mode 100644
index 0000000000000000000000000000000000000000..f680ec83f167a1e4cd8a6555153416923f3a172b
GIT binary patch
literal 329078
zcmafb1yq#l8m=fvN~d&4hcpZ&-Cfd3NO!k%Ga%jFCEXwjjC4zb(mj$xbAR0DoW0Lk
z_pZCvz|5NY=jY4!ed7IyP*IY8f$|dN$&)89WMw4Oo;-msdi+6p4!q;pX(bOlfm|ft
zx~SWKaB+X{WcEbyy^Dj5y^D>dF@>9%le4A09VaXMYgSHX3JVt(2WJo)o9%zDV6}HL
zXZ!G~F%q~7vV)9{^OGkS?;n5QN<~U6pTIqNA}b-P;gNZeh3J!Te$k(Ez$5D}KmU|N
zLIPfg>Ze#}B$d~45GDGO9;PVPg!i5Id0WlTFHH1&PvRLEkBf%?shNpUkewAv~e=gj{vX`uVOnXBVjBN(N9M1^)dA#`5LkrTynSNWtN1|F{52
zYz|9R4ijGVKMy1UDmmnTUh!U9g5mFvG2tl>!s%cA^OnJ+SVjN10cP-L>iopN+kg~^
z=_Zkg{m(1D#sZB{dDdVt@f4JGl$x<@CtaeH_4>mw;l|chs1Nk>`)`+x$*AmR;-wzX)7u^X6A?cMO?!^jkMR$$J<&jq-25+nX-?{{8!#3azT&I|X1WwbEUFCC!21
z;oy0jE!!OLqt;R|J7)00m$yvTc)?zSSKB$@A60s%-OmD^ppyxP&s1oy7o`|}g^>G4
zCoyTCV0aq@!k31=AU^3PMMtcwtGi51Vb%#GF!X>E4@2)0fOZ5ufAP|yvjR)>{d-Eg
zwq4rc9FZJy_nmP#ZGA_C4nwvdHAdj(6|boE^J#VE_mhRP9KRlCP)Wu&$A5guWVy|i
z`Lkk4l$n?qd>sv07k#+DJ3bu~aSok+xQB_{
zi;GFB;%3XN`ofk|1wA?B(@G=GBFX1FP;+
z+!dmVipod-+ja8Gi$!}Kh1Ro4`Te_&g0>}xZ!cPIPlkr-KDr$(MI0R1G}y0Z*ZV)sdP6(4lao3;j*Y9_8TKp|n`~R_
zxELc2=Icvtx1L@eL&!aa<;6-El~lE|7Y~1!`dfKr(;?|n0Ye`Q$K9F95neuIp5xnp
zem5{M@cAwC!9167FH+ZuC)J0s?3k5K?|LIueSH$(*XMVl-)ATBq)r0%=4z>Jc!=#Q
z9M}7qGo#5xx|j`GL0tALnIVMSn`u_ZL6j4b)hlk$l`Inp*X!NgT|z;R-^hK0x<<`*
z%X6@g#+(j6-zf2mU^OVp?UtAn9IEP2+JdVqLj!4v*}88zlqcy!&&U?E7kCc64Gj&G
zj8!!>f_Ybc5+3e`ImdqUX+19*G4k9@y0vEvKns<_k?F{1T5C8ABl8NUi{Uct(T)ah
zbAL7;Bl8m>l~zzdTWGKhLdK!}vgvdT+VR~O(Zqwszr#RlOZS3y!t!|ah;8l5m-a=6%hYMx$>wUfHrkvGO~_Anugf)!1L^p(MR!Lo$m%<=m7
zHwDv8*xMbvV!iG{6Rw`%Zf
z2rAQZN*K9cDzx40uzbm5Jw^_8w0y-&$|5YVrB^BX`8(%cMJABgL9-NtVjvbg
zsIL4t;}+c2_}$>T>cEYT>?Uu!|=_DH&n>)h0toN
zvw5t1jbZ0t6YQXVEZMtr6}s(PxD8~CB+;Pf$KKcH``Y;1F~q!#n(s$5`OOvw1_wdE
z_Pc>@)|m{Cjj`z|Z6mXE10g3VnMIFLR#tW}N!xIsw*6`=W5}??u7WCq$5u^EUHz&R
zNK{O-2JWOaLm%oHI=x}6QPO>mRR@AuuirmqBWE`bo@}sGeB32b+tDJr$X)
z(&O!0KTh;s?ee|3%NFu{*cEC}-t%nny}2;C=&rjX6!zg`14l&sI?i)^`TE_*
z$znxfLt*cW1Dt++AX+ZOU4=OfL!0`He{Db9LH)z-JOWpnft46%;*`It-c}Q_Du2CP
zv})qYDhe&S>jpw;60Kr7Nj-Sg?}mlVdOR0y46(ZV-mA#};a<+kiG$64wmR!mMuzvW
z8xUi4+=d(2X7!z4jLEO9t$7fQ?4O*RB<{Vo{=wY$?)C4R-P_!|V&D9$4QjBU+AhiV
zmw;!$>f5&HwiI?apV3Y^G>XD!NnCDsXPPPc{5fu0wjtKY?TO+tf83qCLM@
za*=G<-R{Odr{WfW?m$K2?8oU
zJt78~;MRGCcFh(!{xy3M;q%iG-qqi27EYgy`y!pj6te|eZMqpF)qv0_K+a400H6$?
zVZYRo4}PnkUdaz8vl(@DD16CBmX!oBNy)~>2EC@}-M5dyh2=o(&8{=Ky1#*fv5I!2
z0(C@1MZd$ed301IMbdG{!CfeQX@0#-#Irbx`MW$ebDy2|m)hO!=X>4zqlq?Gq>nQN
z+>h9|@v{6)`lElr#tYl2@-D<<@FI-E&`CjCLK(dFTeASxn&vjW&kN3^hJSDiJ@v2>
zPXx`c%4>E|Qf>kHm<2{cdNWxhKV)#0e^->My2OMMR$l53gnY7kQf$f{e(e0nsHmZ2
zb-@{ah$8QDp$6VHsWt+O=39+CU)p%8X_Bzm2nljsVW*AnPNzIIvlW8ZI|a8S5u7t2
ztX7lWWBl8hb!KNo1!MRTOi9QFdw!Ew=Ri0KA+g7nX3CG`hh&&&^Ngv7$fUPx2_iC}
zyTo&)(&hMkGV;IPElKef$}+;0c0JOa-;Ueb2jV(%D|pXwJZ5XBXWU$XhbK8l55Tbu
z&;&0>Cjf^*4#K8(H~2d-TOUy}_eT(1*@09V6@VPee{2MIg)_CINQ-m;shmedS=&nN
za43#aT+9w!{chqEKxK@27d8HOOdH^btO7nX>#`KT66@1-7=59sOsr5Z4afSc4$||tYmE|3e8a|dp5uG7JEJ}vYU%*
z9Vh`0``CiWfE~rPk<)|2$Urp`o-(~fYXbnLj6;Rx=q?DUv|f09UsP^t-3}M(kZUQB
z#C*lJ$cs$P%}@I<22WJ`o@weMZy!&G(z|kWr=+E&nGq}kK(r>4@$5$FDM=qM;oy>L
z{Rld_u+Q*~#p0RZA-S24CIU8IEU%Fo=Ni+fBmJTxsW-L}qu6#(dXl!Pj38F|Zz(bR
z*EG+`?1!iC&|Hru1eHhVOQJluDdplXWrk#0Dm+wqabLZ9B}i8Y^SL{prGyxaETjwj
zdVN1s&g83|Jg{?%KG}*NuHpLCitXEYQ9eZN#4?;9l+KZO>i2(Ou+a2QR+Obj6m5
zwlO7228WjyDdkpgAEqx&MXMBbjLS29nnJ{`q^6?1e&5cZv)1^l^$$R$$Cf#Zy;#+HQuE
z@WQ!q9w{){h@S@TDz$WMVyBjnTe@}}orR>u;>MxOP06UJQgEBniCy`q$0PTE*0gTD
zv};kv0+C-|9O}76Yi^E-JZ#W%Z>VZG=2(y*op`Bjx8+elCnLwNr#sCUrN1xEKCk$>_g;c_4y@zQu*}73TJ4-GTlij)lus<
znVr)c;WDu^hXXn-%;1-{0}2TU9D9XY7t`r!68P88u02Xclo%KoY{CgqIGWM@Y$d;M
zKs|;m^NYo#f|Z4@Xo$V0FyIv@zbnMiwrU%=;yuuhgRcfYB_w=<;f2I8s2Be>o&V*a
zac#Jli^Ke`OoW3D)D>CkSbpHio!#KKfSzVL#j*EMdO7N-9V*-v|DGz1|C1$sV|KBu
zt|mo+Y<~W{x7m2FatQ5WUbIF<6le?L%|>cOZ*o$ex)3HN-
z*GPh``sY9go)`+*;aSOvp9)0sy0*|fJ4;Wc&SIV+g_Xw|{kB&AAncW2OXKY2`nX{v
zoLxcgWvbXCccs5xAm`Iad1{#f$jyyE98%Q`mpecX0T$9jlurwCk{yI_TgnwVodCwKU(ri!e-$lP3OB>tZ
z2ZEG}kCFqdP7MMm6_{1i=T{JQWuZPIMwbHqXRh&`0FYC@c0VvJI}+UVAmaXY*(sR)
zS=N7g>N=TO=PSVk{i575y1_wN#Njl)m44Yb1BV~)N{L;OD^Xl-r?292E5&u)f5*V9
zaDS7=s}XZ#Bygk7QcnXvcP`(?GgDEevrQKPf>S)_Wm!F~8G#x;p4mNee3YpivKV15
zId$8oH$>t9j^Y2cKa;4}X7xt9P|RRiy#`4$Ia_`W(SWive4#i=_nTJmMZ5%ITbalg
znyzu7q8}naE+}Q?{4o5J{AHW5sK^Rqj{iMBTZygeuA!t@(#!EArM8!H3GAR)m4wJa
z-Ph`w7L)Rh0{fNqj4^bLnN_J1k_@{vF5@wm`!(HsW*G~3Q-vM?2BC|7rkJ>k;;O2O
z_3-{t;2?vY?~!A;%)m_L_ZaiDnUebGFB$c0IRSXrmBa5$+niA?qbaW#n3vq+!kuOZ
zAEDvmH5<&x)tmIoETObjd2Y_IEhf!?U=hZElGBhQ
zrcr^Nt8ajua4O9G!3s^>G5<1Dm+sKr%sFW=S-q7}l*kP%bU|qKG+m^0{@#TIBA|qg
zR(8vkC?wWWdel;3;v~2jv=?hcc8O6GzU^ZO|t;Fw92>8K{M$gPVJBmtq{mX#ar
zUQZ&NWUtzW2?@*XTXMb>f{GSGlU*9i*kGTq$thc$<#;WAE)ihP?VDjB%;PxJ)sqqW18>0
za(Dq^o>=hW+Dv6jxgf{9h|gY0q1F22_G;GvWP7*L;du+KHG$+8t90Uiccz%b5i|Ss
zHH0!{_Bn*u|KzC(T|miGMU@#5Q>Cq2Jb2M?x4r#a@u79q2Nm>JPd|M=9b)UAzJ|Us
zK%#bxuA8i=>kJHhI(nJcDp!j7K9L2NF+uV%iU-%x&9yjEgN;7tOhx3XO|6fdG7eo5
zb6KdgMrCvNOqZ!&WpDXd^}j78Hd`ACHw<-8qw}@;~+60
z%iQbJ@?67B&-<(GR(zunzgwBM&2mz7x}i|U+-VB$EX4*UR8ZOIIj9at;2FTF}YeSAqB_Geuif6a*FS{cs3oN
z4Y@b|kW4Ua3sk^KiY#3-bnTbLgwJDDA>Ss~CC8X}`mE`!XVSiPLOMT-kbbVLkvewdEH9mR2iRx%j~hU^B#C_%gSb4!4lfQNWj<30{p8h?xb?AzKw+0t
z#@QTOZD6&GF?1_Qbj_l#`&p?*VmcDm2Ag;JjYOJC&q%z+PNQkI(s%vWffH?aITX_f
z(-+;_IsU@U*P8Z#4jD38sZ(FqRHiI)=aQuNOg&>w&%QG$r+}v;Mc*mHX+4IQ@o=GW
z-K@5@b}$eDl@ZVb$h=A`NzVWfukmA)M`PctvD41Vim}Of?;Km5ojbw2HBo
zn-$g8Up~T_LA;k;XB}^5TUuJ`wre^sbYC$s?Wf)eI&H|zcNG^FIt-av)hH|$!YXbg
z_N%^k!dCQt7+(T%@J5Tv&UgTM1+?I<^gAFe8a?v-0KDnMdcJ_8ZO?YCqrn(fb6^VX#*Tvlei*gR+oMhp`R;C)VJ>&IZ9PvEfD>QQ-Q^MJ6h>Fas<
zD~u^?orKTf4Zxb5FZt7FRcz=D0a1E$a}OjhC#Tec!9}M5xsw2BbvmnXXgI17p0z^-q(5laXK6vbnjUc2T~uyc;EZz9kJ(o-^Qt!%G7h9Y<9ilA!V
zT`_sJ^O%r!8X!_X%xM*_)lNzT^wKPdTw@XP+GW-OUs>;G5fIQL67p(r0zwuOew3u;
zQcJDV5KA*XphAh{U7qwHlK;N%>+St50jBlAT_2RdOv>@Qj-XR`LCmu;z;O53!0&2v
z5TNR@o`(R+_fQiPi9QpTSp-yZwNYT1#%lLPIJu^Z_zNp1PM=Q_PQYIQdbFzF!yQa+
z)xA6)S9JTi;%mzj856~0asju>H5X8lR+aAYO%uRUD)Mn_jr&kyS?<`48+DWFM?vzQ
zzd{H+s0`*MSf>3*KrS+#yG1D;lVS;2x&(@$V}hp&_^+96Dj%7Jz`5tWs-`MqCZwRw
z|G{swY0-}9CaY+*7?2qB85kKsWxyJ|>eN8s2ic{kO!!F0kRCn&Ny;ahkJEgV1mB5X
z%B2!mj+!e#DmGL$%g2q+$f$@W;*_#n?GhTZv>*rcgW>KGu4X#6b+uao>GLwxvRZomO+M}jGCrH3&sSSSa%hHqmrl{0W}j3#B&(cWQX!2a
z1VISo<|@>)J$(E_ar@Ck`L?cLBD+mta7ptER@J-$+B&ECG0vBeD(UR$YUcqA-)SpJ
z?OiOg{+m=|Q9!;27#IzdqUCcWkt)fF;t~Xi1bjsPoX7712
z6!(|0_V_mVr4&E-0UM3ca{&3A;3^7mH}c3tNnOM|amRaawleHL7-5_!VT%5-<@WG5
zdc?b7ctUl+of|eTS&D(@U=RY4f41unou!ykz=&D042ym}K#>iC#9@KbdQcwSI~CsC
zBZoxfDmVDbxi6AHv*iDHaHZ0P#l=o^RC{gpcFUln29rizM?lM7Pq(iA#VU68_OboJ
zZEz7P(~{%HwLklb?FHZS@&oTVP-XwGZ#aed-?pI471@{mEo
zm|J*~pHIbQxAZpsiN>2Pl|SZU=HRWY1j9!<^^tV$DKFl~D@DWKT^ufk0bZR|CoxvY
zaNeIc`I4>@!quJ_EvpAfW|dmK>|O-}^x3JI35Z+k`vi>A#xhc(^9@&k{@CIVUN1RgjT+1ITSvfC=?@H_XoO
zf_Y9fJpURT5>c9g*KgX40M5LM`b+X3eKZ8xHxU(`b@83hBC6NO+Z3%qa;=6X9@8JI
z=<6E_%rEzMH&=#8|J9%WTU-2XBZ4oZ{{K#{2I2Uw%j=90AGTnEh)y?|gGSM{>c4s_
z&Bo#OUjy9TBq4SynTVnu)dvJ1%N46yVXE3$^oUL#nWaYY$4=a+X;r=r=m|nB08A;t
z)=VHwAg|Wj%yYQxP9oq(App{6zcjfou-r^aggBlrP#w>b5k0ewzqFR8={1rPMvF`E
z_4Dg;!5x3{KaELQbKn~W_yoHAkBZxNe2XRNXg-Ef*OS*H;Twx=EScdfe0e`Ohp6(%T
zR|ULTO`?DM{nO$*gBD(1Uae+lslmmcK4JIv_miDw0}e0Nm=J7KE!fOyaacrDksetx`ChjU|dlah|E#KzM#
zHo{`=GbJ_-PQhC0qrBBhD&Y3JZT~B~F#JEQ<|ML=;@0xVO1%yRTZd3r#(ASSH&s8tsXk};IT#h7w0|Ut5>P3atg2ljA$`I=L5_EJMH%Gd`jCH@ns1p2$nChk{uAVW
z|CuUX#5*`e|GA2qhzpa*V#jGj2jJ1ssS);3#JHuIz*#X+V_%u`Q!Trv@M
zJ;ybu5SQ|s(mr<03nAPQ2rkRIDMy-^AEM;x<5Una`XJ71uxri~$gysQ!l@xM^i}6a
z(obj2)flwnQ$q-2i{uneKW9
zYO;mE&feBx0Cx(Op{xT2jDk
z3~)BBJ;#C_-lW+j^v8bVPJX^aHj8h4>U_oS2#ly@r}v+{Mw&nUXoPENt^jk}H7TtP
z3kR~i2_T(&08StiUXhq7oF3Z_rfLRCW;BHxD<1K^~MY7jrQEk}Ev(m8qC
zS{)OythGfUnlRDJ3$pD4lPHi6Y&iM{8aEHo%e!|V9H8$;H3@1e6
ze`hF>J^xofDs_SYR+OYCWjrm8A*8YEZRm3>DF|qH5N5!6rUN|0hm7Z;bycOPFB)HK
z$SNvs5;u+(RaXB*=Q;b)UJ(~3B{B)57`A2%+l7W-gNX+IMsbif$rdtD*u+amw-qZ{|bH4{cit)
zw4*dNjMFJA|h&zRm0zcq6v6(_{Fkym*ijx9?HeQ&R&_u>~Prq_=@U
zu>}!br0-wPy2`dBI0ieIR)~?jF`W)paZeIcGQJV1^|;g*|EyTDy%qFLw(>^Xah4|1
zqY0k4rzt61%SMDk0Og12@QLPX{Mg5T;T%0G%6rhOK+-;$sth4-9-tIMZP(gjjnC)O
zfd{Ig^Z6ZI${BywXdFw7xS3p8g6Uv&*)G$>S*j1oOF;O#2qKBm&Szq+8BMa_xbZVS
z@Sq>4!g4=)@wy~4^wWV5{laU~{#yf&tG;bVz+KHbV~?Nr_VeLTb
z!;;g~i;nyB(L_+^a$0z&2lJ#C_~$0XR1WUD;T2qDcUJhaK=Vw60>grxmKJ^vtRWUy
zYZI@P&Jf-DTBL8-C5QMX6k|Hmi7*c#8cCb+4hmKWvX%LFWxFQ%o??KRu)aafiMNd>waUmD!y-s?e;F>)3W-7_q
zwNBqLBM+%DllJF~jv>yCU&p5AGVC4a?|0Bw-rf|AFd33ef$WhlWoK&V2IZsdnoWL;
z8{;st(5VaMo^_LKhUR;9A=*IrG10r5_ZNG+GJD({-__;ZH8P(jzIh`3LlH7QgcyP=
zLv5L9b-h#|vNL_!l}|`q1<}azo!(2exWii~JA6#kh5d$#0oADg8JUW9Xc7y?3T$wN
zE)#U7Cz_y%?HrO222VFAV~kNYJc(B3T268Hvv56md}f+3Qx5sPuaxk!f5Fj5Y%AS~
zD~qF|b`h8dDeTpxeTo!s{#|gbd)A$-x(nPX}MBK#|#L0BKm+UMU*2sC>MN3ZD-!1rs*Z}^Agcor=gtwjL
zPL{HdAYK(?*_tb)vBqQHL)8l-_K$v7C^od-o}3;qwQpiF
zz2o{MDswj}zV;J1NDfD+)mx>-4}_|A*5R^(^T>Vjc=Cot8RHA0X;>8cExk7=B@G_<
z#P{eEYbA$vJ^wH!57o$F3HO6J)r-_&X`r%3`@+d$rGwvFI{p`fCob06H~I5@Wx->3
zsc6CgX!iqI{fCjSw^yfF3~}^gTc6Hr3!WsYU;6l^s_T)!Txm9NuWxU!_rj&u`!2aIQ
zU*51ImRZ#>_);MG5zDCRw!fI-A0k72L;wSnMAQ1JNM7thq&A}_n|XHVJRq&RPZ#iv1GP%x
zG@=RFfN(}SwOk_n=Iij!q32EvdXi(W@N|{NFuHtH8bdO1s*J!-MmeAXChH}@#P5mi
zE6dAQzydXVMWBrme^V*lSW;xQ#2InYeZxrWA=p`J@+_T|6WTPk*xm&U(o}WndP?i3
zpCi$=N40A7k7Yi@CP7G{I`YdQ(c0V~r_`47_j(mMoJh35mUvDxXZ~3Ad6azEHqlncb4EY8?!Mp3Kc5Uv_sqKSG<%TH;`Bh
z!#*y-Y}1m{iD-TurXw|Goc1)EGJv*l6{yoFqXQ&M<`3+!KqUn0E$(SP0*
z@~KIBB2g4+YGtQn>$o%<&)+_~y*)dNu+cI5{O_eF@pW#-w1h8xTD@PXfda
z1QLG>(V~eKjUk%VQy*k0sZ#(}r8J`}<^4qLU%2}f_8MD$qDo1)1YCGWed$m(ojJ_W
zNP79HqSUi)!#~p1PS7A+S@6ME9|X3(#!YW8g`toI@#uZPXwN6WDhdWk(xALC-4ed6
z3$UqET2al*-8{SfIfOV9dDRXeTneN{d9IW=NrA*osp72-%5$f!56n!18;|#~rb1PE
zoCQ*eM3iS6isL}p9{UK|Gdu(ek+aKhGl|ef+>b|X&baP(0+;8(Ccz9dK3PC2nZf(-
zu1^=$M*RQ=l;gRnigNMR5Vk9!dc%vM1ee>?WN8l9SN9Xqe|L5n_H~>;)F-M`A-c|q
z29?&S4LWk?L*>f+oi+z+*W6y>2pRnk86O8XU*bBttTlVxgk%EP#reKaj4L)Z&RY>UGr&^qBM+&$&xeJ;VpzjNm%P=Yl5+Y!?
zHCQc@fdwz%f!*c0|HHD=+BF@h!>|9cZU}?B=yGHLnJGyhZ}ojQWJe&XF+hW)Kde=9
zF1*`u<;@2Op2bS}h$AEfKL6n0K%GaDuE!GC=?Q@`GxFgq1vh!0Fg5PJFP87hrc
zY@;2jYhJK?I=;D^YqBK<#4ho_W1_3&L4IR!C2NeRBJpfkP#gY(g~T5n?vZ;DsFo+E
z^4PvK-yb&YB&{U?OZuc(UuBbFbQmL*JM(<5^J!~Nj4@oP$xGK&&YxhL
zFAMg9YW8XUu)O}FVgxGP)%FKpj8g)ZfHCrqhKOhft6=$yHrIWvqfGvZE=kn*CEHR~
z>c10Q8<*RJu9%jd$r~Mc!1`G$(F6-Wn~3}~Y5VTC1?$*iiK1)YsFkBxn8-Qz@Os}i
zQ&+*>(44;<*fi1TpXu`T#-|Qm2rym*+$fv*Is`U_^zSIYyTu+x#nw^(Z_8h)^Lqj<_x}e>cFEEwVIrBT=M+vt*=)(GPVhU
zk8pczW-gV~Hn+{B>>6s4r|P_>u2Ew``qPThXC=nPai`cPy!lRbLPU%E4e{K_95jW)
zdY_SmbI7F%0@~M?eP^@YV`=Z4U3duk^c^)!Eou=Gv4OztI_OQegvfYRfZd^m;Y;r13)fBVuXKc*z>j~Jqwl!n
z%gMm%)9yj(1v`q7k&fw{w+U6!_F6%01pg%r^IjNl8F<(7&(~Jir|~sTj7$g
z#9rR7$2(1N^}@)*KCZwU+*B}f^U%GIXxkpi=#DdT7NmC3l?o*36i%ejY!mykaOKs)
z(MTHMg4;Ejlv!zoXzjRikeQ_tjON0xR}t
z+hcr%eo*|idDfvqc6C4b7lECH0(!9KHxJLIC2sy-vt0
z27R5u?|EgNNGUNd`?q|N@@2+Uo1dGOYhKkvTpPdHeigla+0ag(9@X+e+vNQ|`_o;R
zAGpP^0Mom_=(Ae~3P_$rp{z<(r2jxpm*I1E7(yJxRo@jQDf
zd}$z=bd=F~b7fiaWyyd-0Gl_XSBlpKY}vQ)5HjIB5{qEQfYhyy+x;wFv4|2
zqrC~-Tr47@p(~T7Z=D5Tf*R+o6DKdjOXB}@_>ZP6QT8%a?zmL2%Hht1^%MnxrDPk?
zNVs&N$eVi^i`Az~m#<$t3JBy`j8+OSxrJURDqBY+p3z$TsC)5}*E*sdN)+=95&esC
zZ6YxNV-#mGkU(>D?+WC!I^)|<5hCj^SJ6xAmzwAk2J{kR^6xT$V;aFB#1~||sLY8n
zvJ9W#7$E|>{D7<*`%T5iZfB%P4#x76MKqclU$NS&tKXRJaX(E+`406)G_4mg9ck!Z
z770`|nAXrIKzG?$X0IbV9yh(t_Zl%4huN%x*XAoTe3$3&_-27cBG?k&=X6urN!^#P
zoEm@V=^!>I93pA!B_>s#6B}6$EUdnAz_~i7+pj3==e#THFk)RW+w^>ms|p4E?=%
z*q_3*)kB^-@HG*{iuge!CQyWc((ldqJp+n4!!DW>jSJxuNGQ=~w=OKZl!QKN$dRl6
zjlk92?{<_t-o*)rouSXodye|lF4*5JqOsdnQA&monulH>pty|pV4DPR(>~8$?fxiR
z^K+bcOuNlKQP!-!fA;OcA0YRVVW@XtY_l@2Ejt1y1|n~$4R7Y;o7Db-p{$G$_NB0H
z^RFP1rq=idI9Q-V;Z$?;@kMRDw(k?|3nc(e9G#P&oX)Ucqr3Ajl_er-6`5Ai`ZP|b
z?ku2vgy_KET)}dG-3?)_!i47p41!utk0fqKrt<8kk-=ck&=*VD-XGBP_eFxc3!hxK
zgl1mhItcu9-Vi$m#bc6#pA)Pg7+tvGGG`4FDe_l{pq#jSJ&$OIVxP6{(Ecl
zx}CG&l<tvUir|Vss5N7KV3B5ON1$bXln^#dh$ZpoWejH@HH}D45HuKlhyt3jreL$SI`#@
z{y8KPE`Cb;#8Gj4?-%ra{UX@XU-qW?u&;W26B^2N?@}0(iQ2jHB&rWBWpN};$txkm
zDCO!$-)CN{DE#I-UlN3jWD4`^*EY*%#Mv)7lTG4m$ATX$~z9u7B=0
zV6>GyI(f^pCNL13Ha4+9sJMP?@B1!Y>YYskx`fniXd(Ol$rd6sByhPU7
zsL-7F-Puv2wMnI?X>1%WZxR4WU834RRH&KFv$vu(CTF}PP^)R4-bE)bq~(1$87V(^gh14o)dv6_EX
zHE%r(7g?LsXf75V$8Y@+bIWs9;MdLd*A6Ylep^*w<~FMN1$1`r=V$9#*4;v^4>U)B
zvk4dozIUVo+&Cq|NNSC)9Vb^4_z~UzkPXk*2?Pg`rTLd42A?Ic`l7V@Gxx9I?T=gh
zuBYSD(e`cpzRgH&VrIFeIcV7d?n%?`c@>~J@THs($6uAloFu-?lU`Mh;P({Pmz?e#
zBk5PZ!FOlb7Jkd!wXi9~&n8f1nSG(P)VmBmKjwbrOf-2b`O!~ml+I2mCGcMLNki~u
zxZq%R4(izqVn>B#o*P
zj%%+4XzMZkXF<+j1*PdaK(mp^Xg
z_W*J`2#-j3@Qfz3sMr1FwAlk?4eY^&tf-X#)U0h^JBIIDGq4^4T_Xs-Qt5c*aT`JB
z2>Fgh$Yp`4+h`R6F81|Vn*00Iuvi0CzD6pa=K5>KnRHI56>C^U>WGFaQrYgwo3JV5
zotW3W7KoBp0@S69wEJhNc2>M1R4go23Vcl4CNuW8$ef?W`rrquTJ#L>zapD`*w#2N
zZi&jf6m&SyM=%;iFEluvWZw_Bc87BpU;6CE4OQ=Bu2M0kAc_U--@vb89zv|RHFrq0
ziXbZYkq5C493i^WqkEQf4>NChEJ|YiK-L^8pUHFBav~l^2*U}Zuz0*lx?w{)Ir)#Z
zDuWbJT)m%Fi2t*=&i>bnegsMrp14G*et^xC8L#m{f-JwVf&*^bG-i7D?EBzw;HYt!
z$u~4y*0k@2GCf4nbR0T0%sA!B(9`3c1m$l_u7od*__4f#ei7!yz!yla4wrFp%EUwr
zVIsP}M~~h;e82A_bmq95*|TwbhzfrKbL8!uHf+{hB+0(;9sgM|Z(Wg3xZ~LR*?yD{
zx6%iZ$C^1~4r5E9SatKFc@0G3{lf&Jr~U1R2|PBUaMVW#T;D#kkll{z*|&$D+6(H!
zb0P%T5xKIZ4M2;7uQ`>+pGGKdPV?fpJuX1Lv`0naeX5FTIB+)EhG&sMU?HK*!;*hV
zjEB4AQ?-hijB8n?o*~6gX)P@tmt=U;Zr+_#R_DC75mnmh2+;NB!!3Ix%m&`Z(&F+b
zxG3w;m|6d&behb}E{8O`=S`M7yZ6y7y<_qh0;Dgd94YC+dTZn7J!uZSyL~HaJsPfe
zdA)DkkL+-(Gthlk&~L3zB=mtZq>vF)6vHqG@kh4Y+@37d+{@*n;@u5@vsy=fiYzuO
z>Fy~z&t|zbeHyid?M@ZfKa*F}UQ6(+$gLeZ(>V4bt*`6uV$ow;#GZnU7jb~0tYy3B
zhTZGTVx&e&+Z9bhMSz_fub}OcD4gft;tU(Whi#mI%BTC6jtz9Gf$+G42b6H(N4v*m
zk$6e2LsPqFZ{CRZG;Th_1mqaeC`x676Cb!xTgKNkv});D(m%g
zWw~<8nYBJIHb(y%_UB8eJyF{C)G;YeabtI9%u`zd!A&
zKVN_+cVYL&22$~)28aEFiKVtwPy_-4hZ4roPRXT^KAEgBenkBFc?Usx>>pP1r#xhD
zZ7!aI+wy=j1IMX-wrh)QL
zam}NqJ5&Uw4}p(MKO+DcLYg}?$-lTd;H0l!f^1mYHRnxzCs7lA)p3V4-gJH+9SA`O
zr4G}22$Jov@bnto!Y|$Me5tj2X{;=g(>@<>gy+dUfk!u(n(s@IV1LqC?$MESrONVF
zgcLOeZF}7l@Mvmn`WO$=g)o1N@@Bda2zZTbjbt3pEZJjDT`Cm1w<9E<@n~LjtIZyt
zbnE`yzlw^RTw|swj;2d)zt)cL#_?&}D0!7=6qE{y8V-kJL4
z#k0hDoP_TVorEI0Zs?vG65MF0A_~-0V20>;$0x3EnLgKYz}KR$Dft=u5p{b+3Mh?z
z$K?~-daBeFmDSdndPL2%ydn-33IR?v=G(7!CB^0~#EfM$gQuv=1l0n*>KOLGyPr|V
z(vAL!%?>Bire!ay!sISwDv^paxDkvt?bf%|)zz^gB-(TF(P^Xr49X4mu?~g9CNGs>
z(unzBM*Gu!)z$p%Z4l$4Utg?!Ih|S`bGZtUbi*iJzwk3clXsTW0rmNE?BeYGZ;tu+
zp2?VVeS0IaK{MPE^;7s#AW}o+JhOaLi!*Z;3)8=*S(mbQQzTaWp;no8A+Nz9B}F{y!%3^_riOt#f0!+
zRZ_>q^f%e>~nCxb_HX=;%^VtVWld#;jkJs%ohzDWR`QqnPEJyy&OT%n6W*
zwxprxrhF{VdUOa}R#DYqLXTRyCIv%AIDDSUrn!}@zO9?SK+++3&2(J0^-B4RD7{z%
zYgHc)fk|n9?S)IFlI@C5`b}FbqPc~bt>gx%WA`!oE9OvN4D9ELDBO{=$XRRB9m}!Q
zt6jY}CxaqJUj{Wr>c$h@X>$6i3YCK5f51lL47I1RUc2`@R6bbZ={8uXvYhks1r6_?
z=Y9VC8gPvPv-nn!TK6hWQckLo$RmZ-S
z)S?NB6}l>$F21YE{t-20=p>q#p&zn>J$a-7f9+Wmv=I(m461sfwalqHd_<
z=eWeuZ}xgTSq&dG*q<@I;>L3q!JJ=)O|yIKS2Yjbexkn#>&3^O?pMsl<>@Yzff~vb
zZ*db9IQTrL5-QfE?p_53v8Mev<;WWg{tgo;Dr(6r@YNg~v#MX$)ogya5P(t%2(;_N
z+SkoUCaed(FQv{AHvQ=Q$^V<_WJ?(R|FHFzVO6&4_BY)v-6`EjcXumDcL+*%N_VF;
zNF&|d6G;i_ZlpUV@xSp|d#|Z7V&u?u_@js@V2_@UigC@JUslN~2s1cSkx`KWuC2>e}$stlg7j=vK%^#AFr*R}r
zL(9+4uh`Q#?I0E3ZaH*R4s%5AvWlyzu}2iGq5${R)f6buL+r+CTa3~e>W%YV?9tcD
zCf0SKEBJ3uTR6lzXHc8q*id>35=bpfY&*mRtT!#->{iwgG_5`_dt{yEHVC-LWZFoU
zSagTIwZKQIH`OoY>|vj0I+-Hnm_6EDfBApXKd2ZL)wiA^nXPQfcOUR`*G;MaKsR3>
zcAH^XK$rQ1^Tw23BTa=X1Y4%HG~E)g-3Wc+cwu*(^>bGbIeLGNa=7pV`Iy94r%CJ$
z8RzS$_UoIyyU64t)uLdUrdTveo6YcJM&CAn1Idy}k8W3x}SEKs*5L}^w$Ud=Sgyb@(Se9!chTF`x`7W)qpjV
zU+QIC9~Lu-{d!2W*I+yzMb+J?F$>0#+&qy%dV%16|1C9LlDU{BpDIvaK+?Evu(~6R
zrxO#HJDyx}WmEQug7rIKVsiSRR5F_1-Y$r*a})d&5USd21r;%;C>9v+6z4s5sF#g*
z1|KKn!bbSVNwxN3O;vE<%-l{wyiJ(t4-B%p=GGtA7EHR~AZ0s$iXtxDD?+R)E5j#Y
z^op#?fq0sUzQrSA?9Z9+XEEa>vjK@Qs3P_UT?~w6oSIBW-&$8-KC^=McK&BjeFw}e
z3lHT@MY(GAHtaqsoO@kk?@YauEc*|BQ|)Pee2Hje52N^r56iIV4eH5;8_-ADo08k%hx!oJ!4MPGZi-D*
z+jRIV9Qe_Wz+u#8axnj53VoSygwn4;D|(Sc$oo|Qao2|*tFwK@e*(7a5+P#Nw?Ew=
zXlct>t*X^jn+P~9kC3P1ukSFWZJ=T~W8IkV(_le=&nR4VuN{Mw`sVMnTuzd7KN{
zW+P)GTNj|Rn2q6N#`9mMD!t1)-1VOOUf-`t2GSLrRbrX-L!EA>fR$O9V52#Kq1YDI
zS?fIXi0jFuIX}r&kv6Ga1El5I{A|#D3n3UtthO-Olo!RQm8{-I|L=KH8XwJYR6IO@
zJb(=_Tf9-D!Q7_dnhD`?&ew;Ke#2My*Y)Kb&*(3*C$3)rZ^eA1)$MeA$NUQ9ENIPxoO)R~QfEv@XmtQbVCq+eZmhKmk65{AuKR|x9o
z8xNsKBV9P&>iR+lT%(g+z-meebc;ZqZ91}quXLelNlNWl+C87(Dg?2J50s$;
z+SJ49M_i|OUi7AO48EV=PXw!G8*h8O-~C#c&r|I$YbXjQJp1jMU1I`Vdg^E2s~r1V
zNIK7RjYr)5ujg0TGrndzTb3x$iW4g~yTEm&(
zW+Xuk8VkP0V!|dFZc^o5dqLRW17HiKqX|j2l%yz=Xa=EDi-Q#I=%_-6S9v)>RxDbx
z(x6f#GEk({DQ(EcByG;FBE$Rnp^rkS;4Z?E9jlv2vQP>Z682TWQ3Ij6(Q0rM=XiHg
z=_ysNf1O`M1QI5j&gA+Lqj&@rDl1WBpMqiFb*3ML0WG$KcO3OVjyBz@iS|SbTChkv
z6rHcOzzekXaVv$}Z+JTG3qfR&8L?`Y$fCRL3_c1_^{BsK3#tjL2b_cTXG}W&s7=)A
z_?KA>Txboi71yc1ALn>Hyn7S1gS^el?o)@_4Z*_v9kac&w0IA1C2*P=DD^%vh5Wg<
z=9}|3z(WD7%=yD{sm`s$O&AcwsR01jV4Rg$lf5%Fazk{)lHbueEt}nOrD<(~W&kWr
z>#+E$=1fa8N3`ao*m2YzSRH={ne5X%e=pqIlUBV>)jFKS!Bv5<7He
z+Q$-AOOcBTj*w;`vEy$XR?T1H@Pvz$mhQ+nY8OG0-F`C!E^7pnD^#SDp>%5d?BF
zvwks;WCoI;7?M~U(bcnv^Vh4lFgK!SBJ52zRs6q&`_%A&-(v>qLVW?C;26fdKGB=*
z+WIbH{zL-)$gEhUVi;{nCWqZz`!Oy(tw3Q5Ag@r@ctq&(&vE?~Eh+KN0apaI5j8b6
z@!VwgGsdgODOqHQk@E)a=1i^0?{wd*Y{%t&IuCBREM)4NV1?|^+cS$aLKn#+KAv2w
zH8S2>-?x=5e=g)Xd&CC<#g?{b;U&W()Y=dXkqy(I#^e8S&jLAq^>5O@Yl0rOG)N01CPJmw*DN~abZ_?
zp7_%M=^e|zM(&6Y?QmH%nEV<{r**3)ffU?`QX>Yzrl-`np&CDl5+G`P1dW^Td
zotYJZGvd0V!R=>oMHvOWAT$cJCMttBj=hAZUgg}j70PedV18dGinUIr^wPw@n5W>d
zq=&_@+J=rBNx$9?@MYjmep9&XSslgNW}@zG9A{!mgY6DI-zffMZfT#YG3JkrT_6l4
zVm;M8{!D_7CHhk~TX9Sx`7GYbwH8DN?90&pTnKJx#?QYlNdxQ|oM3(e@1YsBQqlT`
zYdty(PPy_NCswAx{T{L`vYE*XUaaYaOdntp0Rq8^v6wY8Ohv+<-^BBQ9k$0>;eki_
zwPiA0w#!MFaQOm~a1|_cBosV!L^K+n4Y`M_em@oyFpf!zv
zd@_TO+x62UMk$&=99a5>b_e?~tY%fX?GH9gmhx%~WF8+d2e+r2^?vO!@fNZ~^(>f=
z+vP}{H=2hDynNvzy+O1+_@P#BhUI99VhR}r)5?82E~e8ZV^a?%&AN4qX_c4;#yZp=
zopvzc9VxO$1$YDk$EE0|qNJ&2+X}bw(mr8+-~VmNj4TF{Bupgg@Bk$MWA+#>HR65o
zA%VG8d<}0$)4?@*U*bf3ziE5lE&5Z%nVn5(|*J}gw=a$8&dNy7-Gc2v0LI!<|o69xp0)qGnzUow>Nv1Tsis_DG=8VG`H
zICBFnUpGt?xiQQ$a2_3Gnk{{yX}!H5whRm5jUP(-TG!VOg7Ua28+>Pn==GshSP*MY
zPihN+UVoDtj>$NQJMq`TcEb-+(2i9gjg&mt!kGz%br*5F+TM%~=!l8P4vlBXr}(Vm
znP9c+gGB%nGJY~eQpzkqnb$WU3W^*NtR8~N8ooowxs;7|T`Rck1So0WT)$P=SzY^3
z0bWT-z$-a4Z>^$F3jIKJc-*u$DDdI|?a{&~t1LGlguWU(Ss+vQTasEeb&HJopHSZG
zxI!uaTTON}y~zl36C7RjVXkids4T+dgU+ddwljspSN`z`v
zd79N`lvw=wA9vfZNURrbwj|=q^gj
z0qpIU7L4ZvC}8NPY&1s)L{+-RDHQ7APx(hhud5KW&nDB3Yk5lccHqhiZ>4vlu_87Y
zt{no{GP@$t^V*D8o+Kd#-jF9GPYfI!9P+R!LgnQ&)g^G-Ijk=TowKPDmRu4O7F*JE
zkcQUWALKA2{GK6-L=h_woZwDcFOvx|ZHAV9nsHqCmR0A>sIiwdc4XC`aMAxY0X+r6
zl**ZcHV74BI
zZBZJK_6_Hq+lijw{S^$|&(9ccKY0x-&-0G8+aIXzY8xplSAyxr?+Ah!4FVlE3WoGA
z*^#=yv|wr)6#UrD=p3h1A)7f}hwULuUd4eSRt8bUiY(MgIiukRb2v-do$=O0RM4Ao
z!l3#?gOC)#a_nuy+smBe_14lA^YLckkG|8pQA^4D|{
z5iq5o>4|M~z^nqDzPL>>TC*02Vj_NEocq|ql!iXlAhoGXN
zrz14%DsN~+JfVos1Bmvm?e0?v8_&&>or7
z#^VlW+PBQWc^01TxL+`<0Z(@(1B%`^_oA6=b&Ll0U8(20L{(Y}Mjx-YKJ|a+3Uumo
zcE73I8D;m;<8S}CwElSQK
zS!rQc9Fe~jE{|?=(O&$7$zJxwXAPn7UxwzHof;~&AQoquw{NBE@6@zF{w69kUP%-<
ziaa(*ox>}G6VnbhO8U`$T>su%$Vjuhkc57kwa)GP*j8yVsJg2l<#aHt*ixRTUzoBQ
zyqKK~1J7~l`to`8$CoPiC)!^FZ+m^*k!`ao#lrb;f~C-oE~z0pNCTUC_<$P#40u2#
z0cvpN)Y(D+S?bISW6cgF%KGyQ$sYb)5*K@J;Psi-R5cUY;aQt-%FVRG(V0v#Xhu74i`1U
z_jl6RELo%akS?CkD2<-np%_OB%d)-sjB>ZiiG8>kC@ggtQ-Fs4f@rL>5N~hgZ7lQr3
zr)BE&iFEd)Pqo?%tF~w*sP9z22dr0n&bd9|m3bQ;M2Q=%$SzCxh&4La+HGTpTkB;k
zB`Z5TKECVZFIX8B9&K#1fXe*E3*Eu;CbaZ?L6+c##!E*nM0;`n)cDX7c~oh9BLgrI
zVW+yEuNSD~JJh9^Q));J<@y4vUv{r+S8Z^#%pd0IyML^%!q0bGjwJW;Daw-LSH{3m
zTYE@BgRKNl4+Z|MwU$Pj7C+$Y|Ho#JS{)DMpL@i`@$TjS=>PN!HZJd;CxiaihD=7V
zHt0g^SntM5>`kUTGn!WBDkSiJEpPppWLO(fckd9hx+vA9@{)A5pTBaUkD`2kq31)UF?x9qtak7HqCr$y`WdNZ$f_H0lW}k^#
zPZ%+z8SWPjN%zt3I(ExdjF<)nN|K4(?7`Z6F(2Octa|?cK5`pVyl7!*m(M5xc`RNq
z1KIL701=k`Y?v<%Y|fESuteb3)dRf
zWcs|x$+^>z&D#qv?M%u77l;!fn|ScORWr8_bQYE+GFF}PKZlZRgJ&nop;0@-?cyn3XUP|m_id|o4X72?7
zBcWT|lX1&aCsuVCU(~||iIyO?qG?pC`*pW!XA%Pzg>nYC>np(y<=~)_vJ}#Pa2BX!
zR5rux!qWAb*?7J1$pxyZ9czuYy<|&`n{#6scMhMEOC@y=iU8{|HO9x(PeD3){ORn!
z$12PI-0Wuy#*{e!Fq)>E2Mb5_l0Bn`Y^%R83~Y&a>%%B4DXcHEK{t|8Y3ocKpd>*I
z7^oGRB*vf)ZA~;INZSAd8H(h2$U)eFz4?JBl&|mm^F?dAG!b0(1IzBI(+|{!e)NI^
z9`;`{!!_RLP%q0XPOLpE8q)y1%4fc;ax{iHkg%OfU=!vUQE
zC+yF$aj9+%sM9>9!d~q@G`b5o09s{po}=|Vke~Uj!R*LUz+|Egoxd(x0bNeBF53+c
z2~SD%d@&aA(Tei=fdj@Cp;xhzY_rk99&VJr>rR=>=JFzM5L1;b)a3G*I2g>CP{mqU
z!hpPdfBStT#+==8k@S!jUq8a6UJn8%58
z>WgRK|m4iI>n~a#_^J3gx
zHa6dJ_%y4ocnZIPPN(N9%cGu12d3|Q;j}+}z(h*keRl)_Vy%OyA{rdDBwIm8w^W`y
zoT;E?(AV@PrGsR3HiM{|t{J-eoq5i5r#9DZCP7)tQD+oh({0hvYsQ^QgpP%0&2(_R
zfl)}g(_Zy&hw^@5Wpvgb(|&PD3+oVUMD=Y`u9F_QZz(75Kd8HwnPM>O!%;Oj*H!w!
z!R!V*)a$c3nTw{SX&8+@`Z(Njv{N(&HKt%GVeA1cJYUM$h_)>@)6SsF$r
zbm8{J%|P7>`I<`5Nu#ejh}%VPU)_
zbq0p^?}5omZ~a5?F-TpI#=jh*X73SNO2IIw2
z|J@jtpB$@Zu6lrPe)j8G6_LW+Hr`$uEa4ZFd4!*7)p6bE%vt%lWrtdE%0qM_ba*!5
zzfymPYpfw~zhYgbrKS6463bWC_n#$4RDQeBxo7o#=|XL7Ct({b%-aXKt&cq-13FrZ
zLiUe6k}zvG`lG#Q@j&p0?$tftJ7lzK{3M=3Qf#Jg2+bG9GxXK>mm?mgPiHGw-d$#p
zt=zF<&yNoFmK6clN97;a*>x)RGpfKEK;RNY0c^3zqfi1r`q#_3kC_eT-#@2SFlkR72B7|d4`nNZbNoCx7908etYuJ1Fw@v;G%J=QYKZu5Rovi5d$k@Q{IQAX;vR
zjazQdV-cxmX5!Iwsw!mdVRJLkQsL^^f5%NDAygx
z*UyqIun$m}&<6C+*z}eUp1}8Rz9^tbIE_nfzS83dWE|8n=Vf7-W`?&xs
zACxYk`^@A&sVSO(_kfE?{y7NS@X9c!YBm4AM&KVx@c12-?y`|_MO4%&v
zC(=7)PKDSdqmZsM4D8rIftP`L#EV(}KX0Tgj`g5QrVE;zA%Hj~Rq4n(Hth=8V*#Xl
zJN@X#;5UGT!iR6NdB;nlOp6sYNFMl*S}qt;{EY^W9ysy;NJqV%IQS`O1UPYpVXJJl
z751<}mcV$OR{H-6h$<9m3W*)V@%-oH*xDD}erVv`Xk^~9bJYq2D0^O^;qpryH$F(a
zJyldiYcO;NmVM>1QhIHX&2?D~TkrfQ1{Q=gbEL&pbGKzn$zfm{$LIP|>!77Z45jog
zW2)bM30?8J3Bi_^6{Ub=s$3e&Ova`g4_VDd>Uh_}W%?5fM2Sfh1MdyEU;;N?MfY5~
z??;MNq2x=$3jKo_u|j0yka&^Th0YjlfrS?ZOEhPk^C14}UabpJRJBW67H3{Ar`S1o
zzB{uGZz{BH6JAek{qYHTHG8Xx)yVocUSl0x!FFs5@aP;%a~dvP+GDr<3SGshF{2*y
z_Z@Bm_BJL~!r^>QxA%^i+X@bT;ceXALz{KFume-%&IM@s{VCPf@5l{w$WQbS#
vlGUrLWHE2m=$B=Kn_Q+V;tas
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