diff --git a/_sources/api/index.rst b/_sources/api/index.rst
index a14a758c..e250b196 100644
--- a/_sources/api/index.rst
+++ b/_sources/api/index.rst
@@ -6,5 +6,6 @@ This page contains auto-generated API reference documentation [#f1]_.
.. toctree::
:titlesonly:
+ /api/nebula/index
.. [#f1] Created by `Enrique Tomás Martínez Beltrán `_
\ No newline at end of file
diff --git a/_sources/api/nebula/addons/attacks/attacks/index.rst b/_sources/api/nebula/addons/attacks/attacks/index.rst
index 0e9ccbae..9397683c 100644
--- a/_sources/api/nebula/addons/attacks/attacks/index.rst
+++ b/_sources/api/nebula/addons/attacks/attacks/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.addons.attacks.attacks`
-=======================================
+nebula.addons.attacks.attacks
+=============================
.. py:module:: nebula.addons.attacks.attacks
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -19,15 +16,16 @@ Classes
nebula.addons.attacks.attacks.DelayerAttack
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
nebula.addons.attacks.attacks.create_attack
+Module Contents
+---------------
.. py:function:: create_attack(attack_name)
@@ -36,10 +34,10 @@ Functions
.. py:class:: Attack
-
.. py:method:: attack(received_weights)
:abstractmethod:
+
Function to perform the attack on the received weights. It should return the
attacked weights.
@@ -47,11 +45,12 @@ Functions
.. py:class:: GLLNeuronInversionAttack(strength=5.0, perc=1.0)
-
Bases: :py:obj:`Attack`
+
Function to perform neuron inversion attack on the received weights.
+
.. py:method:: attack(received_weights)
Function to perform the attack on the received weights. It should return the
@@ -61,11 +60,12 @@ Functions
.. py:class:: NoiseInjectionAttack(strength=10000, perc=1.0)
-
Bases: :py:obj:`Attack`
+
Function to perform noise injection attack on the received weights.
+
.. py:method:: attack(received_weights)
Function to perform the attack on the received weights. It should return the
@@ -75,9 +75,9 @@ Functions
.. py:class:: SwappingWeightsAttack(layer_idx=0)
-
Bases: :py:obj:`Attack`
+
Function to perform swapping weights attack on the received weights. Note that this
attack performance is not consistent due to its stochasticity.
@@ -86,6 +86,7 @@ Functions
Do not apply to last layer, as it would make the attack detectable (high loss
on malicious node).
+
.. py:method:: attack(received_weights)
Function to perform the attack on the received weights. It should return the
@@ -95,12 +96,13 @@ Functions
.. py:class:: DelayerAttack
-
Bases: :py:obj:`Attack`
+
Function to perform delayer attack on the received weights. It delays the
weights for an indefinite number of rounds.
+
.. py:method:: attack(received_weights)
Function to perform the attack on the received weights. It should return the
diff --git a/_sources/api/nebula/addons/attacks/index.rst b/_sources/api/nebula/addons/attacks/index.rst
index ef638a45..e930b5a7 100644
--- a/_sources/api/nebula/addons/attacks/index.rst
+++ b/_sources/api/nebula/addons/attacks/index.rst
@@ -1,24 +1,24 @@
-:py:mod:`nebula.addons.attacks`
-===============================
+nebula.addons.attacks
+=====================
.. py:module:: nebula.addons.attacks
Subpackages
-----------
+
.. toctree::
- :titlesonly:
- :maxdepth: 3
+ :maxdepth: 1
- poisoning/index.rst
+ /api/nebula/addons/attacks/poisoning/index
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- attacks/index.rst
+ /api/nebula/addons/attacks/attacks/index
diff --git a/_sources/api/nebula/addons/attacks/poisoning/datapoison/index.rst b/_sources/api/nebula/addons/attacks/poisoning/datapoison/index.rst
index c9308f7f..525378f8 100644
--- a/_sources/api/nebula/addons/attacks/poisoning/datapoison/index.rst
+++ b/_sources/api/nebula/addons/attacks/poisoning/datapoison/index.rst
@@ -1,15 +1,11 @@
-:py:mod:`nebula.addons.attacks.poisoning.datapoison`
-====================================================
+nebula.addons.attacks.poisoning.datapoison
+==========================================
.. py:module:: nebula.addons.attacks.poisoning.datapoison
-Module Contents
----------------
-
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -18,6 +14,8 @@ Functions
nebula.addons.attacks.poisoning.datapoison.poison_to_nlp_rawdata
+Module Contents
+---------------
.. py:function:: datapoison(dataset, indices, poisoned_persent, poisoned_ratio, targeted=False, target_label=3, noise_type='salt')
diff --git a/_sources/api/nebula/addons/attacks/poisoning/index.rst b/_sources/api/nebula/addons/attacks/poisoning/index.rst
index 4ccdbc03..a4e6b40d 100644
--- a/_sources/api/nebula/addons/attacks/poisoning/index.rst
+++ b/_sources/api/nebula/addons/attacks/poisoning/index.rst
@@ -1,17 +1,17 @@
-:py:mod:`nebula.addons.attacks.poisoning`
-=========================================
+nebula.addons.attacks.poisoning
+===============================
.. py:module:: nebula.addons.attacks.poisoning
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- datapoison/index.rst
- labelflipping/index.rst
- modelpoison/index.rst
+ /api/nebula/addons/attacks/poisoning/datapoison/index
+ /api/nebula/addons/attacks/poisoning/labelflipping/index
+ /api/nebula/addons/attacks/poisoning/modelpoison/index
diff --git a/_sources/api/nebula/addons/attacks/poisoning/labelflipping/index.rst b/_sources/api/nebula/addons/attacks/poisoning/labelflipping/index.rst
index cd0ea80a..12c4ede6 100644
--- a/_sources/api/nebula/addons/attacks/poisoning/labelflipping/index.rst
+++ b/_sources/api/nebula/addons/attacks/poisoning/labelflipping/index.rst
@@ -1,21 +1,19 @@
-:py:mod:`nebula.addons.attacks.poisoning.labelflipping`
-=======================================================
+nebula.addons.attacks.poisoning.labelflipping
+=============================================
.. py:module:: nebula.addons.attacks.poisoning.labelflipping
-Module Contents
----------------
-
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
nebula.addons.attacks.poisoning.labelflipping.labelFlipping
+Module Contents
+---------------
.. py:function:: labelFlipping(dataset, indices, poisoned_persent=0, targeted=False, target_label=4, target_changed_label=7)
diff --git a/_sources/api/nebula/addons/attacks/poisoning/modelpoison/index.rst b/_sources/api/nebula/addons/attacks/poisoning/modelpoison/index.rst
index ba475d04..3c478755 100644
--- a/_sources/api/nebula/addons/attacks/poisoning/modelpoison/index.rst
+++ b/_sources/api/nebula/addons/attacks/poisoning/modelpoison/index.rst
@@ -1,21 +1,19 @@
-:py:mod:`nebula.addons.attacks.poisoning.modelpoison`
-=====================================================
+nebula.addons.attacks.poisoning.modelpoison
+===========================================
.. py:module:: nebula.addons.attacks.poisoning.modelpoison
-Module Contents
----------------
-
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
nebula.addons.attacks.poisoning.modelpoison.modelpoison
+Module Contents
+---------------
.. py:function:: modelpoison(model, poisoned_ratio, noise_type='gaussian')
diff --git a/_sources/api/nebula/addons/blockchain/blockchain_deployer/index.rst b/_sources/api/nebula/addons/blockchain/blockchain_deployer/index.rst
index 277636f2..adcd8d80 100644
--- a/_sources/api/nebula/addons/blockchain/blockchain_deployer/index.rst
+++ b/_sources/api/nebula/addons/blockchain/blockchain_deployer/index.rst
@@ -1,42 +1,35 @@
-:py:mod:`nebula.addons.blockchain.blockchain_deployer`
-======================================================
+nebula.addons.blockchain.blockchain_deployer
+============================================
.. py:module:: nebula.addons.blockchain.blockchain_deployer
-Module Contents
----------------
-
-Classes
-~~~~~~~
+Attributes
+----------
.. autoapisummary::
- nebula.addons.blockchain.blockchain_deployer.BlockchainDeployer
-
-
+ nebula.addons.blockchain.blockchain_deployer.w3
+ nebula.addons.blockchain.blockchain_deployer.b
-Attributes
-~~~~~~~~~~
+Classes
+-------
.. autoapisummary::
- nebula.addons.blockchain.blockchain_deployer.w3
- nebula.addons.blockchain.blockchain_deployer.b
+ nebula.addons.blockchain.blockchain_deployer.BlockchainDeployer
-.. py:data:: w3
+Module Contents
+---------------
-
+.. py:data:: w3
.. py:class:: BlockchainDeployer(n_validator=3, config_dir='.', input_dir='.')
-
Creates files (docker-compose.yaml and genesis.json) for deploying blockchain network
.. py:data:: b
-
-
diff --git a/_sources/api/nebula/addons/blockchain/chaincode/index.rst b/_sources/api/nebula/addons/blockchain/chaincode/index.rst
index eaa7ce33..6841a70f 100644
--- a/_sources/api/nebula/addons/blockchain/chaincode/index.rst
+++ b/_sources/api/nebula/addons/blockchain/chaincode/index.rst
@@ -1,5 +1,5 @@
-:py:mod:`nebula.addons.blockchain.chaincode`
-============================================
+nebula.addons.blockchain.chaincode
+==================================
.. py:module:: nebula.addons.blockchain.chaincode
diff --git a/_sources/api/nebula/addons/blockchain/geth/index.rst b/_sources/api/nebula/addons/blockchain/geth/index.rst
index c1042c80..920a0edf 100644
--- a/_sources/api/nebula/addons/blockchain/geth/index.rst
+++ b/_sources/api/nebula/addons/blockchain/geth/index.rst
@@ -1,5 +1,5 @@
-:py:mod:`nebula.addons.blockchain.geth`
-=======================================
+nebula.addons.blockchain.geth
+=============================
.. py:module:: nebula.addons.blockchain.geth
diff --git a/_sources/api/nebula/addons/blockchain/index.rst b/_sources/api/nebula/addons/blockchain/index.rst
index db575d46..3e733fd9 100644
--- a/_sources/api/nebula/addons/blockchain/index.rst
+++ b/_sources/api/nebula/addons/blockchain/index.rst
@@ -1,26 +1,26 @@
-:py:mod:`nebula.addons.blockchain`
-==================================
+nebula.addons.blockchain
+========================
.. py:module:: nebula.addons.blockchain
Subpackages
-----------
+
.. toctree::
- :titlesonly:
- :maxdepth: 3
+ :maxdepth: 1
- chaincode/index.rst
- geth/index.rst
- oracle/index.rst
+ /api/nebula/addons/blockchain/chaincode/index
+ /api/nebula/addons/blockchain/geth/index
+ /api/nebula/addons/blockchain/oracle/index
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- blockchain_deployer/index.rst
+ /api/nebula/addons/blockchain/blockchain_deployer/index
diff --git a/_sources/api/nebula/addons/blockchain/oracle/app/index.rst b/_sources/api/nebula/addons/blockchain/oracle/app/index.rst
index 1706aef2..e8bdd1e5 100644
--- a/_sources/api/nebula/addons/blockchain/oracle/app/index.rst
+++ b/_sources/api/nebula/addons/blockchain/oracle/app/index.rst
@@ -1,23 +1,28 @@
-:py:mod:`nebula.addons.blockchain.oracle.app`
-=============================================
+nebula.addons.blockchain.oracle.app
+===================================
.. py:module:: nebula.addons.blockchain.oracle.app
-Module Contents
----------------
+Attributes
+----------
+
+.. autoapisummary::
+
+ nebula.addons.blockchain.oracle.app.app
+ nebula.addons.blockchain.oracle.app.oracle
+
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.addons.blockchain.oracle.app.Oracle
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -36,20 +41,11 @@ Functions
nebula.addons.blockchain.oracle.app.rest_get_reputation_timeseries
-
-Attributes
-~~~~~~~~~~
-
-.. autoapisummary::
-
- nebula.addons.blockchain.oracle.app.app
- nebula.addons.blockchain.oracle.app.oracle
-
+Module Contents
+---------------
.. py:data:: app
-
-
.. py:function:: error_handler(func)
Adds default status and header to all REST responses used for Oracle
@@ -57,36 +53,12 @@ Attributes
.. py:class:: Oracle
-
.. py:property:: contract_abi
.. py:property:: contract_address
- .. py:property:: gas_store
-
- Experiment method for requesting the detailed records of the gas reports
- Returns: list of records of type: list[(node, timestamp, gas)]
-
- .. py:property:: time_store
- :type: list
-
- Experiment method for requesting all records of nodes which reported timings
- Returns: JSON with method:(sum_time, n_calls) for every reported node
-
- .. py:property:: reputation_store
- :type: list
-
- Experiment method for requesting all records of reputations
- Returns: list with (name, reputation, timestamp)
-
- .. py:property:: ready
- :type: bool
-
- Returns true if the Oracle is ready itself and the chain code was deployed successfully
- Returns: True if ready False otherwise
-
.. py:method:: wait_for_blockchain()
Executes REST post request for a selected RPC method to check if blockchain
@@ -95,6 +67,7 @@ Attributes
+
.. py:method:: transfer_funds(address)
Creates transaction to blockchain network for assigning funds to Cores
@@ -104,6 +77,7 @@ Attributes
+
.. py:method:: deploy_chaincode()
Creates transaction to deploy chain code on the blockchain network by
@@ -112,6 +86,7 @@ Attributes
+
.. py:method:: get_balance(addr)
Creates transaction to blockchain network to request balance for parameter address
@@ -121,6 +96,7 @@ Attributes
+
.. py:method:: report_gas(amount, aggregation_round)
Experiment method for collecting and reporting gas usage statistics
@@ -131,6 +107,7 @@ Attributes
+
.. py:method:: get_gas_report()
Experiment method for requesting the summed up records of reported gas usage
@@ -138,6 +115,12 @@ Attributes
+
+ .. py:property:: gas_store
+ Experiment method for requesting the detailed records of the gas reports
+ Returns: list of records of type: list[(node, timestamp, gas)]
+
+
.. py:method:: report_time(time_s, aggregation_round)
Experiment method for collecting and reporting time statistics
@@ -149,6 +132,7 @@ Attributes
+
.. py:method:: report_reputation(records, aggregation_round, sender)
Experiment method for collecting and reporting reputations statistics
@@ -161,43 +145,50 @@ Attributes
-.. py:function:: home()
+ .. py:property:: time_store
+ :type: list
+ Experiment method for requesting all records of nodes which reported timings
+ Returns: JSON with method:(sum_time, n_calls) for every reported node
-.. py:function:: rest_transfer_funds()
+ .. py:property:: reputation_store
+ :type: list
-.. py:function:: rest_report_gas()
+ Experiment method for requesting all records of reputations
+ Returns: list with (name, reputation, timestamp)
-.. py:function:: rest_get_balance()
+ .. py:property:: ready
+ :type: bool
+ Returns true if the Oracle is ready itself and the chain code was deployed successfully
+ Returns: True if ready False otherwise
-.. py:function:: rest_status()
+.. py:function:: home()
-.. py:function:: rest_contract()
+.. py:function:: rest_transfer_funds()
+.. py:function:: rest_report_gas()
-.. py:function:: rest_get_gas_report()
+.. py:function:: rest_get_balance()
+.. py:function:: rest_status()
-.. py:function:: rest_get_gas_series()
+.. py:function:: rest_contract()
+.. py:function:: rest_get_gas_report()
-.. py:function:: rest_report_time()
+.. py:function:: rest_get_gas_series()
+.. py:function:: rest_report_time()
.. py:function:: rest_get_time_report()
-
.. py:function:: rest_report_reputation()
-
.. py:function:: rest_get_reputation_timeseries()
-
.. py:data:: oracle
-
-
diff --git a/_sources/api/nebula/addons/blockchain/oracle/index.rst b/_sources/api/nebula/addons/blockchain/oracle/index.rst
index fb67680a..63f55390 100644
--- a/_sources/api/nebula/addons/blockchain/oracle/index.rst
+++ b/_sources/api/nebula/addons/blockchain/oracle/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.addons.blockchain.oracle`
-=========================================
+nebula.addons.blockchain.oracle
+===============================
.. py:module:: nebula.addons.blockchain.oracle
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- app/index.rst
+ /api/nebula/addons/blockchain/oracle/app/index
diff --git a/_sources/api/nebula/addons/env/index.rst b/_sources/api/nebula/addons/env/index.rst
index acc7fded..c9dbae37 100644
--- a/_sources/api/nebula/addons/env/index.rst
+++ b/_sources/api/nebula/addons/env/index.rst
@@ -1,15 +1,11 @@
-:py:mod:`nebula.addons.env`
-===========================
+nebula.addons.env
+=================
.. py:module:: nebula.addons.env
-Module Contents
----------------
-
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -17,10 +13,10 @@ Functions
nebula.addons.env.check_environment
+Module Contents
+---------------
.. py:function:: check_version()
-
.. py:function:: check_environment()
-
diff --git a/_sources/api/nebula/addons/functions/index.rst b/_sources/api/nebula/addons/functions/index.rst
index 7b24d598..f637aab7 100644
--- a/_sources/api/nebula/addons/functions/index.rst
+++ b/_sources/api/nebula/addons/functions/index.rst
@@ -1,21 +1,19 @@
-:py:mod:`nebula.addons.functions`
-=================================
+nebula.addons.functions
+=======================
.. py:module:: nebula.addons.functions
-Module Contents
----------------
-
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
nebula.addons.functions.print_msg_box
+Module Contents
+---------------
.. py:function:: print_msg_box(msg, indent=1, width=None, title=None)
diff --git a/_sources/api/nebula/addons/index.rst b/_sources/api/nebula/addons/index.rst
index 71f878c4..c662bb84 100644
--- a/_sources/api/nebula/addons/index.rst
+++ b/_sources/api/nebula/addons/index.rst
@@ -1,31 +1,31 @@
-:py:mod:`nebula.addons`
-=======================
+nebula.addons
+=============
.. py:module:: nebula.addons
Subpackages
-----------
+
.. toctree::
- :titlesonly:
- :maxdepth: 3
+ :maxdepth: 1
- attacks/index.rst
- blockchain/index.rst
- trustworthiness/index.rst
- waf/index.rst
+ /api/nebula/addons/attacks/index
+ /api/nebula/addons/blockchain/index
+ /api/nebula/addons/trustworthiness/index
+ /api/nebula/addons/waf/index
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- env/index.rst
- functions/index.rst
- mobility/index.rst
- reporter/index.rst
- topologymanager/index.rst
+ /api/nebula/addons/env/index
+ /api/nebula/addons/functions/index
+ /api/nebula/addons/mobility/index
+ /api/nebula/addons/reporter/index
+ /api/nebula/addons/topologymanager/index
diff --git a/_sources/api/nebula/addons/mobility/index.rst b/_sources/api/nebula/addons/mobility/index.rst
index fb303671..158f6327 100644
--- a/_sources/api/nebula/addons/mobility/index.rst
+++ b/_sources/api/nebula/addons/mobility/index.rst
@@ -1,27 +1,25 @@
-:py:mod:`nebula.addons.mobility`
-================================
+nebula.addons.mobility
+======================
.. py:module:: nebula.addons.mobility
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.addons.mobility.Mobility
-
+Module Contents
+---------------
.. py:class:: Mobility(config, cm)
-
Bases: :py:obj:`threading.Thread`
+
A class that represents a thread of control.
This class can be safely subclassed in a limited fashion. There are two ways
@@ -29,6 +27,7 @@ Classes
by overriding the run() method in a subclass.
+
.. py:property:: round
@@ -43,6 +42,7 @@ Classes
+
.. py:method:: change_geo_location_random_strategy(latitude, longitude)
diff --git a/_sources/api/nebula/addons/reporter/index.rst b/_sources/api/nebula/addons/reporter/index.rst
index b14f44bf..c4e7497e 100644
--- a/_sources/api/nebula/addons/reporter/index.rst
+++ b/_sources/api/nebula/addons/reporter/index.rst
@@ -1,27 +1,25 @@
-:py:mod:`nebula.addons.reporter`
-================================
+nebula.addons.reporter
+======================
.. py:module:: nebula.addons.reporter
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.addons.reporter.Reporter
-
+Module Contents
+---------------
.. py:class:: Reporter(config, trainer, cm)
-
Bases: :py:obj:`threading.Thread`
+
A class that represents a thread of control.
This class can be safely subclassed in a limited fashion. There are two ways
@@ -29,6 +27,7 @@ Classes
by overriding the run() method in a subclass.
+
.. py:method:: enqueue_data(name, value)
@@ -43,7 +42,7 @@ Classes
- .. py:method:: report_scenario_finished()
+ .. py:method:: report_scenario_finished()
diff --git a/_sources/api/nebula/addons/topologymanager/index.rst b/_sources/api/nebula/addons/topologymanager/index.rst
index ccc6d8d5..23bcaa7e 100644
--- a/_sources/api/nebula/addons/topologymanager/index.rst
+++ b/_sources/api/nebula/addons/topologymanager/index.rst
@@ -1,25 +1,22 @@
-:py:mod:`nebula.addons.topologymanager`
-=======================================
+nebula.addons.topologymanager
+=============================
.. py:module:: nebula.addons.topologymanager
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.addons.topologymanager.TopologyManager
-
+Module Contents
+---------------
.. py:class:: TopologyManager(scenario_name=None, n_nodes=5, b_symmetric=True, undirected_neighbor_num=5, topology=None)
-
.. py:method:: draw_graph(plot=False, path=None)
@@ -48,6 +45,7 @@ Classes
:staticmethod:
+
.. py:method:: add_nodes(nodes)
@@ -60,4 +58,3 @@ Classes
.. py:method:: get_neighbors_string(node_idx)
-
diff --git a/_sources/api/nebula/addons/trustworthiness/calculation/index.rst b/_sources/api/nebula/addons/trustworthiness/calculation/index.rst
index fd60071e..1c842259 100644
--- a/_sources/api/nebula/addons/trustworthiness/calculation/index.rst
+++ b/_sources/api/nebula/addons/trustworthiness/calculation/index.rst
@@ -1,15 +1,23 @@
-:py:mod:`nebula.addons.trustworthiness.calculation`
-===================================================
+nebula.addons.trustworthiness.calculation
+=========================================
.. py:module:: nebula.addons.trustworthiness.calculation
-Module Contents
----------------
+Attributes
+----------
+
+.. autoapisummary::
+
+ nebula.addons.trustworthiness.calculation.dirname
+ nebula.addons.trustworthiness.calculation.logger
+ nebula.addons.trustworthiness.calculation.R_L1
+ nebula.addons.trustworthiness.calculation.R_L2
+ nebula.addons.trustworthiness.calculation.R_LI
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -32,41 +40,24 @@ Functions
nebula.addons.trustworthiness.calculation.stop_emissions_tracking_and_save
-
-Attributes
-~~~~~~~~~~
-
-.. autoapisummary::
-
- nebula.addons.trustworthiness.calculation.dirname
- nebula.addons.trustworthiness.calculation.logger
- nebula.addons.trustworthiness.calculation.R_L1
- nebula.addons.trustworthiness.calculation.R_L2
- nebula.addons.trustworthiness.calculation.R_LI
-
+Module Contents
+---------------
.. py:data:: dirname
-
-
.. py:data:: logger
-
-
.. py:data:: R_L1
:value: 40
-
.. py:data:: R_L2
:value: 2
-
.. py:data:: R_LI
:value: 0.1
-
.. py:function:: get_mapped_score(score_key, score_map)
diff --git a/_sources/api/nebula/addons/trustworthiness/factsheet/index.rst b/_sources/api/nebula/addons/trustworthiness/factsheet/index.rst
index ce1d7471..311f47a1 100644
--- a/_sources/api/nebula/addons/trustworthiness/factsheet/index.rst
+++ b/_sources/api/nebula/addons/trustworthiness/factsheet/index.rst
@@ -1,42 +1,35 @@
-:py:mod:`nebula.addons.trustworthiness.factsheet`
-=================================================
+nebula.addons.trustworthiness.factsheet
+=======================================
.. py:module:: nebula.addons.trustworthiness.factsheet
-Module Contents
----------------
-
-Classes
-~~~~~~~
+Attributes
+----------
.. autoapisummary::
- nebula.addons.trustworthiness.factsheet.Factsheet
-
-
+ nebula.addons.trustworthiness.factsheet.dirname
+ nebula.addons.trustworthiness.factsheet.logger
-Attributes
-~~~~~~~~~~
+Classes
+-------
.. autoapisummary::
- nebula.addons.trustworthiness.factsheet.dirname
- nebula.addons.trustworthiness.factsheet.logger
+ nebula.addons.trustworthiness.factsheet.Factsheet
-.. py:data:: dirname
+Module Contents
+---------------
-
+.. py:data:: dirname
.. py:data:: logger
-
-
.. py:class:: Factsheet
-
.. py:method:: populate_factsheet_pre_train(data, scenario_name)
Populates the factsheet with values before the training.
@@ -47,6 +40,7 @@ Attributes
:type scenario_name: string
+
.. py:method:: populate_factsheet_post_train(scenario)
Populates the factsheet with values after the training.
diff --git a/_sources/api/nebula/addons/trustworthiness/index.rst b/_sources/api/nebula/addons/trustworthiness/index.rst
index f7c38677..e207a0d7 100644
--- a/_sources/api/nebula/addons/trustworthiness/index.rst
+++ b/_sources/api/nebula/addons/trustworthiness/index.rst
@@ -1,19 +1,19 @@
-:py:mod:`nebula.addons.trustworthiness`
-=======================================
+nebula.addons.trustworthiness
+=============================
.. py:module:: nebula.addons.trustworthiness
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- calculation/index.rst
- factsheet/index.rst
- metric/index.rst
- pillar/index.rst
- utils/index.rst
+ /api/nebula/addons/trustworthiness/calculation/index
+ /api/nebula/addons/trustworthiness/factsheet/index
+ /api/nebula/addons/trustworthiness/metric/index
+ /api/nebula/addons/trustworthiness/pillar/index
+ /api/nebula/addons/trustworthiness/utils/index
diff --git a/_sources/api/nebula/addons/trustworthiness/metric/index.rst b/_sources/api/nebula/addons/trustworthiness/metric/index.rst
index f06882fb..f5e0e41f 100644
--- a/_sources/api/nebula/addons/trustworthiness/metric/index.rst
+++ b/_sources/api/nebula/addons/trustworthiness/metric/index.rst
@@ -1,44 +1,38 @@
-:py:mod:`nebula.addons.trustworthiness.metric`
-==============================================
+nebula.addons.trustworthiness.metric
+====================================
.. py:module:: nebula.addons.trustworthiness.metric
-Module Contents
----------------
-
-Classes
-~~~~~~~
+Attributes
+----------
.. autoapisummary::
- nebula.addons.trustworthiness.metric.TrustMetricManager
-
-
+ nebula.addons.trustworthiness.metric.dirname
+ nebula.addons.trustworthiness.metric.logger
-Attributes
-~~~~~~~~~~
+Classes
+-------
.. autoapisummary::
- nebula.addons.trustworthiness.metric.dirname
- nebula.addons.trustworthiness.metric.logger
+ nebula.addons.trustworthiness.metric.TrustMetricManager
-.. py:data:: dirname
+Module Contents
+---------------
-
+.. py:data:: dirname
.. py:data:: logger
-
-
.. py:class:: TrustMetricManager
-
Manager class to help store the output directory and handle calls from the FL framework.
+
.. py:method:: evaluate(scenario, weights, use_weights=False)
Evaluates the trustworthiness score.
diff --git a/_sources/api/nebula/addons/trustworthiness/pillar/index.rst b/_sources/api/nebula/addons/trustworthiness/pillar/index.rst
index a0854c91..b11b90fa 100644
--- a/_sources/api/nebula/addons/trustworthiness/pillar/index.rst
+++ b/_sources/api/nebula/addons/trustworthiness/pillar/index.rst
@@ -1,37 +1,32 @@
-:py:mod:`nebula.addons.trustworthiness.pillar`
-==============================================
+nebula.addons.trustworthiness.pillar
+====================================
.. py:module:: nebula.addons.trustworthiness.pillar
-Module Contents
----------------
-
-Classes
-~~~~~~~
+Attributes
+----------
.. autoapisummary::
- nebula.addons.trustworthiness.pillar.TrustPillar
-
-
+ nebula.addons.trustworthiness.pillar.logger
-Attributes
-~~~~~~~~~~
+Classes
+-------
.. autoapisummary::
- nebula.addons.trustworthiness.pillar.logger
+ nebula.addons.trustworthiness.pillar.TrustPillar
-.. py:data:: logger
+Module Contents
+---------------
-
+.. py:data:: logger
.. py:class:: TrustPillar(name, metrics, input_docs, use_weights=False)
-
Class to represent a trust pillar.
:param name: Name of the pillar.
@@ -43,6 +38,7 @@ Attributes
:param use_weights: True to turn on the weights in the metric config file.
:type use_weights: bool
+
.. py:method:: evaluate()
Evaluate the trust score for the pillar.
@@ -51,6 +47,7 @@ Attributes
:rtype: float
+
.. py:method:: get_notion_score(name, metrics)
Evaluate the trust score for the notion.
@@ -64,6 +61,7 @@ Attributes
:rtype: float
+
.. py:method:: get_metric_score(result, name, metric)
Evaluate the trust score for the metric.
diff --git a/_sources/api/nebula/addons/trustworthiness/utils/index.rst b/_sources/api/nebula/addons/trustworthiness/utils/index.rst
index a487f53d..2bead9ea 100644
--- a/_sources/api/nebula/addons/trustworthiness/utils/index.rst
+++ b/_sources/api/nebula/addons/trustworthiness/utils/index.rst
@@ -1,15 +1,21 @@
-:py:mod:`nebula.addons.trustworthiness.utils`
-=============================================
+nebula.addons.trustworthiness.utils
+===================================
.. py:module:: nebula.addons.trustworthiness.utils
-Module Contents
----------------
+Attributes
+----------
+
+.. autoapisummary::
+
+ nebula.addons.trustworthiness.utils.hashids
+ nebula.addons.trustworthiness.utils.logger
+ nebula.addons.trustworthiness.utils.dirname
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -23,29 +29,15 @@ Functions
nebula.addons.trustworthiness.utils.save_results_csv
-
-Attributes
-~~~~~~~~~~
-
-.. autoapisummary::
-
- nebula.addons.trustworthiness.utils.hashids
- nebula.addons.trustworthiness.utils.logger
- nebula.addons.trustworthiness.utils.dirname
-
+Module Contents
+---------------
.. py:data:: hashids
-
-
.. py:data:: logger
-
-
.. py:data:: dirname
-
-
.. py:function:: count_class_samples(scenario_name, dataloaders_files)
Counts the number of samples by class.
@@ -139,4 +131,3 @@ Attributes
.. py:function:: save_results_csv(scenario_name, id, bytes_sent, bytes_recv, accuracy, loss, finish)
-
diff --git a/_sources/api/nebula/addons/waf/index.rst b/_sources/api/nebula/addons/waf/index.rst
index fac72b89..aa3d6820 100644
--- a/_sources/api/nebula/addons/waf/index.rst
+++ b/_sources/api/nebula/addons/waf/index.rst
@@ -1,5 +1,5 @@
-:py:mod:`nebula.addons.waf`
-===========================
+nebula.addons.waf
+=================
.. py:module:: nebula.addons.waf
diff --git a/_sources/api/nebula/config/config/index.rst b/_sources/api/nebula/config/config/index.rst
index 8660616e..bcd2d278 100644
--- a/_sources/api/nebula/config/config/index.rst
+++ b/_sources/api/nebula/config/config/index.rst
@@ -1,42 +1,37 @@
-:py:mod:`nebula.config.config`
-==============================
+nebula.config.config
+====================
.. py:module:: nebula.config.config
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.config.config.Config
-
+Module Contents
+---------------
.. py:class:: Config(entity, topology_config_file=None, participant_config_file=None)
-
.. py:attribute:: topology
-
.. py:attribute:: participant
-
.. py:attribute:: participants
:value: []
-
+
.. py:attribute:: participants_path
:value: []
-
+
.. py:method:: get_topology_config()
@@ -74,4 +69,3 @@ Classes
.. py:method:: reload_config_file()
-
diff --git a/_sources/api/nebula/config/index.rst b/_sources/api/nebula/config/index.rst
index bc7b4652..7b131ff3 100644
--- a/_sources/api/nebula/config/index.rst
+++ b/_sources/api/nebula/config/index.rst
@@ -1,16 +1,16 @@
-:py:mod:`nebula.config`
-=======================
+nebula.config
+=============
.. py:module:: nebula.config
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- config/index.rst
- mender/index.rst
+ /api/nebula/config/config/index
+ /api/nebula/config/mender/index
diff --git a/_sources/api/nebula/config/mender/index.rst b/_sources/api/nebula/config/mender/index.rst
index ac0c7c36..9cc50cb0 100644
--- a/_sources/api/nebula/config/mender/index.rst
+++ b/_sources/api/nebula/config/mender/index.rst
@@ -1,25 +1,22 @@
-:py:mod:`nebula.config.mender`
-==============================
+nebula.config.mender
+====================
.. py:module:: nebula.config.mender
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.config.mender.Mender
-
+Module Contents
+---------------
.. py:class:: Mender
-
.. py:method:: get_token()
@@ -30,6 +27,7 @@ Classes
:staticmethod:
+
.. py:method:: get_artifacts()
@@ -60,4 +58,3 @@ Classes
.. py:method:: get_connected_device(device_id)
-
diff --git a/_sources/api/nebula/controller/index.rst b/_sources/api/nebula/controller/index.rst
index 65847eff..9347a6b4 100644
--- a/_sources/api/nebula/controller/index.rst
+++ b/_sources/api/nebula/controller/index.rst
@@ -1,14 +1,20 @@
-:py:mod:`nebula.controller`
-===========================
+nebula.controller
+=================
.. py:module:: nebula.controller
-Module Contents
----------------
+Attributes
+----------
+
+.. autoapisummary::
+
+ nebula.controller.log_console_format
+ nebula.controller.console_handler
+
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -16,30 +22,22 @@ Classes
nebula.controller.Controller
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
nebula.controller.signal_handler
-
-Attributes
-~~~~~~~~~~
-
-.. autoapisummary::
-
- nebula.controller.log_console_format
- nebula.controller.console_handler
-
+Module Contents
+---------------
.. py:class:: TermEscapeCodeFormatter(fmt=None, datefmt=None, style='%', validate=True)
-
Bases: :py:obj:`logging.Formatter`
+
Formatter instances are used to convert a LogRecord to text.
Formatters need to know how a LogRecord is constructed. They are
@@ -80,6 +78,7 @@ Attributes
%(message)s The result of record.getMessage(), computed just as
the record is emitted
+
.. py:method:: format(record)
Format the specified record as text.
@@ -98,18 +97,13 @@ Attributes
.. py:data:: log_console_format
:value: '[%(levelname)s] - %(asctime)s - Controller - %(message)s'
-
.. py:data:: console_handler
-
-
.. py:function:: signal_handler(sig, frame)
-
.. py:class:: Controller(args)
-
.. py:method:: start()
@@ -126,14 +120,17 @@ Attributes
:staticmethod:
+
.. py:method:: stop_network()
:staticmethod:
+
.. py:method:: stop_waf()
:staticmethod:
+
.. py:method:: stop()
:staticmethod:
diff --git a/_sources/api/nebula/core/aggregation/aggregator/index.rst b/_sources/api/nebula/core/aggregation/aggregator/index.rst
index 9e760764..9be27e61 100644
--- a/_sources/api/nebula/core/aggregation/aggregator/index.rst
+++ b/_sources/api/nebula/core/aggregation/aggregator/index.rst
@@ -1,23 +1,27 @@
-:py:mod:`nebula.core.aggregation.aggregator`
-============================================
+nebula.core.aggregation.aggregator
+==================================
.. py:module:: nebula.core.aggregation.aggregator
-Module Contents
----------------
+Exceptions
+----------
+
+.. autoapisummary::
+
+ nebula.core.aggregation.aggregator.AggregatorException
+
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.aggregation.aggregator.Aggregator
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -26,29 +30,30 @@ Functions
nebula.core.aggregation.aggregator.create_malicious_aggregator
+Module Contents
+---------------
.. py:exception:: AggregatorException
-
Bases: :py:obj:`Exception`
+
Common base class for all non-exit exceptions.
.. py:function:: create_aggregator(config, engine)
-
.. py:function:: create_target_aggregator(config, engine)
-
.. py:class:: Aggregator(config=None, engine=None)
-
Bases: :py:obj:`abc.ABC`
+
Helper class that provides a standard way to create an ABC using
inheritance.
+
.. py:property:: cm
@@ -56,6 +61,7 @@ Functions
:abstractmethod:
+
.. py:method:: update_federation_nodes(federation_nodes)
@@ -72,13 +78,12 @@ Functions
:async:
+
.. py:method:: get_aggregation()
.. py:method:: print_model_size(model)
-
.. py:function:: create_malicious_aggregator(aggregator, attack)
-
diff --git a/_sources/api/nebula/core/aggregation/blockchainReputation/index.rst b/_sources/api/nebula/core/aggregation/blockchainReputation/index.rst
index 399bdcf6..e950daa7 100644
--- a/_sources/api/nebula/core/aggregation/blockchainReputation/index.rst
+++ b/_sources/api/nebula/core/aggregation/blockchainReputation/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.core.aggregation.blockchainReputation`
-======================================================
+nebula.core.aggregation.blockchainReputation
+============================================
.. py:module:: nebula.core.aggregation.blockchainReputation
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -16,9 +13,8 @@ Classes
nebula.core.aggregation.blockchainReputation.BlockchainHandler
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -27,27 +23,27 @@ Functions
nebula.core.aggregation.blockchainReputation.print_with_frame
+Module Contents
+---------------
.. py:function:: cossim_euclidean(model1, model2, similarity)
-
.. py:class:: BlockchainReputation(similarity_metric = 'CossimEuclid', config=None, **kwargs)
-
Bases: :py:obj:`nebula.core.aggregation.aggregator.Aggregator`
+
# BAT-SandrinHunkeler (BlockchainReputation)
Weighted FedAvg by using relative reputation of each model's trainer
Returns: aggregated model
+
.. py:attribute:: ALGORITHM_MAP
-
.. py:method:: run_aggregation(model_buffer)
-
.. py:function:: print_table(title, values, headers)
Prints a title, all values ordered in a table, with the headers as column titles.
@@ -70,19 +66,23 @@ Functions
.. py:class:: BlockchainHandler(home_address)
-
Handles interaction with Oracle and Non-Validator Node of Blockchain Network
+
.. py:property:: oracle_url
:type: str
+
:classmethod:
+
.. py:property:: rest_header
:type: Mapping[str, str]
+
:classmethod:
+
.. py:method:: verify_balance()
Calls blockchain directly for requesting current balance
@@ -90,6 +90,7 @@ Functions
+
.. py:method:: report_gas_oracle()
Reports accumulated gas costs of all transactions made to the blockchain
@@ -97,6 +98,7 @@ Functions
+
.. py:method:: report_reputation_oracle(records)
Reports reputations used for aggregation
@@ -104,6 +106,7 @@ Functions
+
.. py:method:: push_opinions(opinion_dict)
Pushes all locally computed opinions of models to aggregate to the reputation system
@@ -113,6 +116,7 @@ Functions
+
.. py:method:: get_reputations(ip_addresses)
Requests globally aggregated opinions values from reputation system for computing aggregation weights
@@ -122,6 +126,7 @@ Functions
+
.. py:method:: verify_registration()
Verifies the successful registration of the node itself,
@@ -130,6 +135,7 @@ Functions
+
.. py:method:: report_time_oracle(start)
Reports time used for aggregation
diff --git a/_sources/api/nebula/core/aggregation/dualhistagg/index.rst b/_sources/api/nebula/core/aggregation/dualhistagg/index.rst
index a6af92cb..1496148b 100644
--- a/_sources/api/nebula/core/aggregation/dualhistagg/index.rst
+++ b/_sources/api/nebula/core/aggregation/dualhistagg/index.rst
@@ -1,35 +1,33 @@
-:py:mod:`nebula.core.aggregation.dualhistagg`
-=============================================
+nebula.core.aggregation.dualhistagg
+===================================
.. py:module:: nebula.core.aggregation.dualhistagg
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.aggregation.dualhistagg.DualHistAgg
-
+Module Contents
+---------------
.. py:class:: DualHistAgg(config=None, **kwargs)
-
Bases: :py:obj:`nebula.core.aggregation.aggregator.Aggregator`
+
Aggregator: Dual History Aggregation (DualHistAgg)
Authors: Enrique et al.
Year: 2024
+
.. py:method:: softmax(x)
.. py:method:: run_aggregation(models, reference_model=None)
-
diff --git a/_sources/api/nebula/core/aggregation/fedavg/index.rst b/_sources/api/nebula/core/aggregation/fedavg/index.rst
index 4eaffacc..17eea6d8 100644
--- a/_sources/api/nebula/core/aggregation/fedavg/index.rst
+++ b/_sources/api/nebula/core/aggregation/fedavg/index.rst
@@ -1,32 +1,30 @@
-:py:mod:`nebula.core.aggregation.fedavg`
-========================================
+nebula.core.aggregation.fedavg
+==============================
.. py:module:: nebula.core.aggregation.fedavg
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.aggregation.fedavg.FedAvg
-
+Module Contents
+---------------
.. py:class:: FedAvg(config=None, **kwargs)
-
Bases: :py:obj:`nebula.core.aggregation.aggregator.Aggregator`
+
Aggregator: Federated Averaging (FedAvg)
Authors: McMahan et al.
Year: 2016
- .. py:method:: run_aggregation(models)
+ .. py:method:: run_aggregation(models)
diff --git a/_sources/api/nebula/core/aggregation/fedavgSVM/index.rst b/_sources/api/nebula/core/aggregation/fedavgSVM/index.rst
index 7def9fce..1fe034ba 100644
--- a/_sources/api/nebula/core/aggregation/fedavgSVM/index.rst
+++ b/_sources/api/nebula/core/aggregation/fedavgSVM/index.rst
@@ -1,33 +1,31 @@
-:py:mod:`nebula.core.aggregation.fedavgSVM`
-===========================================
+nebula.core.aggregation.fedavgSVM
+=================================
.. py:module:: nebula.core.aggregation.fedavgSVM
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.aggregation.fedavgSVM.FedAvgSVM
-
+Module Contents
+---------------
.. py:class:: FedAvgSVM(config=None, **kwargs)
-
Bases: :py:obj:`nebula.core.aggregation.aggregator.Aggregator`
+
Aggregator: Federated Averaging (FedAvg)
Authors: McMahan et al.
Year: 2016
Note: This is a modified version of FedAvg for SVMs.
- .. py:method:: run_aggregation(models)
+ .. py:method:: run_aggregation(models)
diff --git a/_sources/api/nebula/core/aggregation/index.rst b/_sources/api/nebula/core/aggregation/index.rst
index 532df44e..d23611dc 100644
--- a/_sources/api/nebula/core/aggregation/index.rst
+++ b/_sources/api/nebula/core/aggregation/index.rst
@@ -1,22 +1,22 @@
-:py:mod:`nebula.core.aggregation`
-=================================
+nebula.core.aggregation
+=======================
.. py:module:: nebula.core.aggregation
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- aggregator/index.rst
- blockchainReputation/index.rst
- dualhistagg/index.rst
- fedavg/index.rst
- fedavgSVM/index.rst
- krum/index.rst
- median/index.rst
- trimmedmean/index.rst
+ /api/nebula/core/aggregation/aggregator/index
+ /api/nebula/core/aggregation/blockchainReputation/index
+ /api/nebula/core/aggregation/dualhistagg/index
+ /api/nebula/core/aggregation/fedavg/index
+ /api/nebula/core/aggregation/fedavgSVM/index
+ /api/nebula/core/aggregation/krum/index
+ /api/nebula/core/aggregation/median/index
+ /api/nebula/core/aggregation/trimmedmean/index
diff --git a/_sources/api/nebula/core/aggregation/krum/index.rst b/_sources/api/nebula/core/aggregation/krum/index.rst
index a98b2bfa..4753411b 100644
--- a/_sources/api/nebula/core/aggregation/krum/index.rst
+++ b/_sources/api/nebula/core/aggregation/krum/index.rst
@@ -1,33 +1,31 @@
-:py:mod:`nebula.core.aggregation.krum`
-======================================
+nebula.core.aggregation.krum
+============================
.. py:module:: nebula.core.aggregation.krum
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.aggregation.krum.Krum
-
+Module Contents
+---------------
.. py:class:: Krum(config=None, **kwargs)
-
Bases: :py:obj:`nebula.core.aggregation.aggregator.Aggregator`
+
Aggregator: Krum
Authors: Peva Blanchard et al.
Year: 2017
Note: https://papers.nips.cc/paper/2017/hash/f4b9ec30ad9f68f89b29639786cb62ef-Abstract.html
- .. py:method:: run_aggregation(models)
+ .. py:method:: run_aggregation(models)
diff --git a/_sources/api/nebula/core/aggregation/median/index.rst b/_sources/api/nebula/core/aggregation/median/index.rst
index 54d4e615..10bb3f91 100644
--- a/_sources/api/nebula/core/aggregation/median/index.rst
+++ b/_sources/api/nebula/core/aggregation/median/index.rst
@@ -1,36 +1,34 @@
-:py:mod:`nebula.core.aggregation.median`
-========================================
+nebula.core.aggregation.median
+==============================
.. py:module:: nebula.core.aggregation.median
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.aggregation.median.Median
-
+Module Contents
+---------------
.. py:class:: Median(config=None, **kwargs)
-
Bases: :py:obj:`nebula.core.aggregation.aggregator.Aggregator`
+
Aggregator: Median
Authors: Dong Yin et al et al.
Year: 2021
Note: https://arxiv.org/pdf/1803.01498.pdf
+
.. py:method:: get_median(weights)
.. py:method:: run_aggregation(models)
-
diff --git a/_sources/api/nebula/core/aggregation/trimmedmean/index.rst b/_sources/api/nebula/core/aggregation/trimmedmean/index.rst
index eba506bf..81612d7d 100644
--- a/_sources/api/nebula/core/aggregation/trimmedmean/index.rst
+++ b/_sources/api/nebula/core/aggregation/trimmedmean/index.rst
@@ -1,36 +1,34 @@
-:py:mod:`nebula.core.aggregation.trimmedmean`
-=============================================
+nebula.core.aggregation.trimmedmean
+===================================
.. py:module:: nebula.core.aggregation.trimmedmean
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.aggregation.trimmedmean.TrimmedMean
-
+Module Contents
+---------------
.. py:class:: TrimmedMean(config=None, beta=0, **kwargs)
-
Bases: :py:obj:`nebula.core.aggregation.aggregator.Aggregator`
+
Aggregator: TrimmedMean
Authors: Dong Yin et al et al.
Year: 2021
Note: https://arxiv.org/pdf/1803.01498.pdf
+
.. py:method:: get_trimmedmean(weights)
.. py:method:: run_aggregation(models)
-
diff --git a/_sources/api/nebula/core/datasets/changeablesubset/index.rst b/_sources/api/nebula/core/datasets/changeablesubset/index.rst
index a5a85af9..3bcb4a25 100644
--- a/_sources/api/nebula/core/datasets/changeablesubset/index.rst
+++ b/_sources/api/nebula/core/datasets/changeablesubset/index.rst
@@ -1,25 +1,22 @@
-:py:mod:`nebula.core.datasets.changeablesubset`
-===============================================
+nebula.core.datasets.changeablesubset
+=====================================
.. py:module:: nebula.core.datasets.changeablesubset
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.datasets.changeablesubset.ChangeableSubset
-
+Module Contents
+---------------
.. py:class:: ChangeableSubset(dataset, indices, label_flipping=False, data_poisoning=False, poisoned_persent=0, poisoned_ratio=0, targeted=False, target_label=0, target_changed_label=0, noise_type='salt')
-
Bases: :py:obj:`torch.utils.data.Subset`
diff --git a/_sources/api/nebula/core/datasets/cifar10/cifar10/index.rst b/_sources/api/nebula/core/datasets/cifar10/cifar10/index.rst
index 4c0e3846..c7580a26 100644
--- a/_sources/api/nebula/core/datasets/cifar10/cifar10/index.rst
+++ b/_sources/api/nebula/core/datasets/cifar10/cifar10/index.rst
@@ -1,37 +1,37 @@
-:py:mod:`nebula.core.datasets.cifar10.cifar10`
-==============================================
+nebula.core.datasets.cifar10.cifar10
+====================================
.. py:module:: nebula.core.datasets.cifar10.cifar10
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.datasets.cifar10.cifar10.CIFAR10Dataset
-
+Module Contents
+---------------
.. py:class:: CIFAR10Dataset(num_classes=10, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`nebula.core.datasets.nebuladataset.NebulaDataset`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: load_cifar10_dataset(train=True)
@@ -40,6 +40,7 @@ Classes
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset, partition='balancediid', partition_parameter=2)
Create an iid map of the dataset.
diff --git a/_sources/api/nebula/core/datasets/cifar10/index.rst b/_sources/api/nebula/core/datasets/cifar10/index.rst
index 2ad05868..6e211fe2 100644
--- a/_sources/api/nebula/core/datasets/cifar10/index.rst
+++ b/_sources/api/nebula/core/datasets/cifar10/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.cifar10`
-======================================
+nebula.core.datasets.cifar10
+============================
.. py:module:: nebula.core.datasets.cifar10
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- cifar10/index.rst
+ /api/nebula/core/datasets/cifar10/cifar10/index
diff --git a/_sources/api/nebula/core/datasets/cifar100/cifar100/index.rst b/_sources/api/nebula/core/datasets/cifar100/cifar100/index.rst
index 2a3d846f..f1e6567f 100644
--- a/_sources/api/nebula/core/datasets/cifar100/cifar100/index.rst
+++ b/_sources/api/nebula/core/datasets/cifar100/cifar100/index.rst
@@ -1,37 +1,37 @@
-:py:mod:`nebula.core.datasets.cifar100.cifar100`
-================================================
+nebula.core.datasets.cifar100.cifar100
+======================================
.. py:module:: nebula.core.datasets.cifar100.cifar100
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.datasets.cifar100.cifar100.CIFAR100Dataset
-
+Module Contents
+---------------
.. py:class:: CIFAR100Dataset(num_classes=100, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`nebula.core.datasets.nebuladataset.NebulaDataset`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: load_cifar100_dataset(train=True)
@@ -40,6 +40,7 @@ Classes
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset, partition='balancediid', partition_parameter=2)
Create an iid map of the dataset.
diff --git a/_sources/api/nebula/core/datasets/cifar100/index.rst b/_sources/api/nebula/core/datasets/cifar100/index.rst
index ad390451..bfc0f025 100644
--- a/_sources/api/nebula/core/datasets/cifar100/index.rst
+++ b/_sources/api/nebula/core/datasets/cifar100/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.cifar100`
-=======================================
+nebula.core.datasets.cifar100
+=============================
.. py:module:: nebula.core.datasets.cifar100
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- cifar100/index.rst
+ /api/nebula/core/datasets/cifar100/cifar100/index
diff --git a/_sources/api/nebula/core/datasets/datamodule/index.rst b/_sources/api/nebula/core/datasets/datamodule/index.rst
index 0928a015..a24b087a 100644
--- a/_sources/api/nebula/core/datasets/datamodule/index.rst
+++ b/_sources/api/nebula/core/datasets/datamodule/index.rst
@@ -1,27 +1,25 @@
-:py:mod:`nebula.core.datasets.datamodule`
-=========================================
+nebula.core.datasets.datamodule
+===============================
.. py:module:: nebula.core.datasets.datamodule
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.datasets.datamodule.DataModule
-
+Module Contents
+---------------
.. py:class:: DataModule(train_set, train_set_indices, test_set, test_set_indices, local_test_set_indices, partition_id=0, partitions_number=1, batch_size=32, num_workers=0, val_percent=0.1, label_flipping=False, data_poisoning=False, poisoned_persent=0, poisoned_ratio=0, targeted=False, target_label=0, target_changed_label=0, noise_type='salt')
-
Bases: :py:obj:`lightning.LightningDataModule`
+
.. py:method:: train_dataloader()
@@ -34,4 +32,3 @@ Classes
.. py:method:: bootstrap_dataloader()
-
diff --git a/_sources/api/nebula/core/datasets/emnist/emnist/index.rst b/_sources/api/nebula/core/datasets/emnist/emnist/index.rst
index 57e2518e..19533d70 100644
--- a/_sources/api/nebula/core/datasets/emnist/emnist/index.rst
+++ b/_sources/api/nebula/core/datasets/emnist/emnist/index.rst
@@ -1,37 +1,37 @@
-:py:mod:`nebula.core.datasets.emnist.emnist`
-============================================
+nebula.core.datasets.emnist.emnist
+==================================
.. py:module:: nebula.core.datasets.emnist.emnist
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.datasets.emnist.emnist.EMNISTDataset
-
+Module Contents
+---------------
.. py:class:: EMNISTDataset(num_classes=10, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`nebula.core.datasets.nebuladataset.NebulaDataset`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: load_emnist_dataset(train=True)
@@ -40,6 +40,7 @@ Classes
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset, partition='balancediid', partition_parameter=2)
Create an iid map of the dataset.
diff --git a/_sources/api/nebula/core/datasets/emnist/index.rst b/_sources/api/nebula/core/datasets/emnist/index.rst
index 04242663..e306ccb2 100644
--- a/_sources/api/nebula/core/datasets/emnist/index.rst
+++ b/_sources/api/nebula/core/datasets/emnist/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.emnist`
-=====================================
+nebula.core.datasets.emnist
+===========================
.. py:module:: nebula.core.datasets.emnist
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- emnist/index.rst
+ /api/nebula/core/datasets/emnist/emnist/index
diff --git a/_sources/api/nebula/core/datasets/fashionmnist/fashionmnist/index.rst b/_sources/api/nebula/core/datasets/fashionmnist/fashionmnist/index.rst
index 15f8ef09..32f51b21 100644
--- a/_sources/api/nebula/core/datasets/fashionmnist/fashionmnist/index.rst
+++ b/_sources/api/nebula/core/datasets/fashionmnist/fashionmnist/index.rst
@@ -1,37 +1,37 @@
-:py:mod:`nebula.core.datasets.fashionmnist.fashionmnist`
-========================================================
+nebula.core.datasets.fashionmnist.fashionmnist
+==============================================
.. py:module:: nebula.core.datasets.fashionmnist.fashionmnist
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.datasets.fashionmnist.fashionmnist.FashionMNISTDataset
-
+Module Contents
+---------------
.. py:class:: FashionMNISTDataset(num_classes=10, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`nebula.core.datasets.nebuladataset.NebulaDataset`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: load_fmnist_dataset(train=True)
@@ -40,6 +40,7 @@ Classes
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset, partition='balancediid', partition_parameter=2)
Create an iid map of the dataset.
diff --git a/_sources/api/nebula/core/datasets/fashionmnist/index.rst b/_sources/api/nebula/core/datasets/fashionmnist/index.rst
index d83b1e7e..b1c14f64 100644
--- a/_sources/api/nebula/core/datasets/fashionmnist/index.rst
+++ b/_sources/api/nebula/core/datasets/fashionmnist/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.fashionmnist`
-===========================================
+nebula.core.datasets.fashionmnist
+=================================
.. py:module:: nebula.core.datasets.fashionmnist
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- fashionmnist/index.rst
+ /api/nebula/core/datasets/fashionmnist/fashionmnist/index
diff --git a/_sources/api/nebula/core/datasets/index.rst b/_sources/api/nebula/core/datasets/index.rst
index c2ae4a44..806b567a 100644
--- a/_sources/api/nebula/core/datasets/index.rst
+++ b/_sources/api/nebula/core/datasets/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.datasets`
-==============================
+nebula.core.datasets
+====================
.. py:module:: nebula.core.datasets
Subpackages
-----------
+
.. toctree::
- :titlesonly:
- :maxdepth: 3
-
- cifar10/index.rst
- cifar100/index.rst
- emnist/index.rst
- fashionmnist/index.rst
- kitsun/index.rst
- militarysar/index.rst
- mnist/index.rst
- mnistML/index.rst
- sentiment140/index.rst
- syscall/index.rst
- wadi/index.rst
+ :maxdepth: 1
+
+ /api/nebula/core/datasets/cifar10/index
+ /api/nebula/core/datasets/cifar100/index
+ /api/nebula/core/datasets/emnist/index
+ /api/nebula/core/datasets/fashionmnist/index
+ /api/nebula/core/datasets/kitsun/index
+ /api/nebula/core/datasets/militarysar/index
+ /api/nebula/core/datasets/mnist/index
+ /api/nebula/core/datasets/mnistML/index
+ /api/nebula/core/datasets/sentiment140/index
+ /api/nebula/core/datasets/syscall/index
+ /api/nebula/core/datasets/wadi/index
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- changeablesubset/index.rst
- datamodule/index.rst
- nebuladataset/index.rst
+ /api/nebula/core/datasets/changeablesubset/index
+ /api/nebula/core/datasets/datamodule/index
+ /api/nebula/core/datasets/nebuladataset/index
diff --git a/_sources/api/nebula/core/datasets/kitsun/index.rst b/_sources/api/nebula/core/datasets/kitsun/index.rst
index dce05d97..5a115678 100644
--- a/_sources/api/nebula/core/datasets/kitsun/index.rst
+++ b/_sources/api/nebula/core/datasets/kitsun/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.kitsun`
-=====================================
+nebula.core.datasets.kitsun
+===========================
.. py:module:: nebula.core.datasets.kitsun
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- kitsun/index.rst
+ /api/nebula/core/datasets/kitsun/kitsun/index
diff --git a/_sources/api/nebula/core/datasets/kitsun/kitsun/index.rst b/_sources/api/nebula/core/datasets/kitsun/kitsun/index.rst
index 8e28e8aa..6ae2ac44 100644
--- a/_sources/api/nebula/core/datasets/kitsun/kitsun/index.rst
+++ b/_sources/api/nebula/core/datasets/kitsun/kitsun/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.core.datasets.kitsun.kitsun`
-============================================
+nebula.core.datasets.kitsun.kitsun
+==================================
.. py:module:: nebula.core.datasets.kitsun.kitsun
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -16,32 +13,34 @@ Classes
nebula.core.datasets.kitsun.kitsun.KISTSUNDataset
-
+Module Contents
+---------------
.. py:class:: KISTSUN(train=True)
-
Bases: :py:obj:`torchvision.datasets.MNIST`
- .. py:method:: dataset_download()
+ .. py:method:: dataset_download()
.. py:class:: KISTSUNDataset(num_classes=10, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`nebula.core.datasets.nebuladataset.NebulaDataset`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: load_kitsun_dataset(train=True)
@@ -50,6 +49,7 @@ Classes
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset, partition='balancediid', partition_parameter=2)
Create an iid map of the dataset.
diff --git a/_sources/api/nebula/core/datasets/militarysar/index.rst b/_sources/api/nebula/core/datasets/militarysar/index.rst
index e06ab577..3b58a647 100644
--- a/_sources/api/nebula/core/datasets/militarysar/index.rst
+++ b/_sources/api/nebula/core/datasets/militarysar/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.militarysar`
-==========================================
+nebula.core.datasets.militarysar
+================================
.. py:module:: nebula.core.datasets.militarysar
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- militarysar/index.rst
+ /api/nebula/core/datasets/militarysar/militarysar/index
diff --git a/_sources/api/nebula/core/datasets/militarysar/militarysar/index.rst b/_sources/api/nebula/core/datasets/militarysar/militarysar/index.rst
index d3f63731..609cfa84 100644
--- a/_sources/api/nebula/core/datasets/militarysar/militarysar/index.rst
+++ b/_sources/api/nebula/core/datasets/militarysar/militarysar/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.core.datasets.militarysar.militarysar`
-======================================================
+nebula.core.datasets.militarysar.militarysar
+============================================
.. py:module:: nebula.core.datasets.militarysar.militarysar
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -18,44 +15,44 @@ Classes
nebula.core.datasets.militarysar.militarysar.MilitarySARDataset
-
+Module Contents
+---------------
.. py:class:: RandomCrop(size)
-
Bases: :py:obj:`object`
.. py:class:: CenterCrop(size)
-
Bases: :py:obj:`object`
.. py:class:: MilitarySAR(name='soc', is_train=False, transform=None)
-
Bases: :py:obj:`torch.utils.data.Dataset`
- .. py:method:: get_targets()
+ .. py:method:: get_targets()
.. py:class:: MilitarySARDataset(num_classes=10, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`nebula.core.datasets.nebuladataset.NebulaDataset`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: load_militarysar_dataset(train=True)
@@ -64,6 +61,7 @@ Classes
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset, partition='balancediid', partition_parameter=2)
Create an iid map of the dataset.
diff --git a/_sources/api/nebula/core/datasets/mnist/index.rst b/_sources/api/nebula/core/datasets/mnist/index.rst
index 3d6bd5d9..9553d5c4 100644
--- a/_sources/api/nebula/core/datasets/mnist/index.rst
+++ b/_sources/api/nebula/core/datasets/mnist/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.mnist`
-====================================
+nebula.core.datasets.mnist
+==========================
.. py:module:: nebula.core.datasets.mnist
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- mnist/index.rst
+ /api/nebula/core/datasets/mnist/mnist/index
diff --git a/_sources/api/nebula/core/datasets/mnist/mnist/index.rst b/_sources/api/nebula/core/datasets/mnist/mnist/index.rst
index f3b47346..540dcd77 100644
--- a/_sources/api/nebula/core/datasets/mnist/mnist/index.rst
+++ b/_sources/api/nebula/core/datasets/mnist/mnist/index.rst
@@ -1,37 +1,37 @@
-:py:mod:`nebula.core.datasets.mnist.mnist`
-==========================================
+nebula.core.datasets.mnist.mnist
+================================
.. py:module:: nebula.core.datasets.mnist.mnist
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.datasets.mnist.mnist.MNISTDataset
-
+Module Contents
+---------------
.. py:class:: MNISTDataset(num_classes=10, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`nebula.core.datasets.nebuladataset.NebulaDataset`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: load_mnist_dataset(train=True)
@@ -40,6 +40,7 @@ Classes
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset, partition='balancediid', partition_parameter=2)
Create an iid map of the dataset.
diff --git a/_sources/api/nebula/core/datasets/mnistML/index.rst b/_sources/api/nebula/core/datasets/mnistML/index.rst
index de06f4c2..4920c2c5 100644
--- a/_sources/api/nebula/core/datasets/mnistML/index.rst
+++ b/_sources/api/nebula/core/datasets/mnistML/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.mnistML`
-======================================
+nebula.core.datasets.mnistML
+============================
.. py:module:: nebula.core.datasets.mnistML
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- mnist/index.rst
+ /api/nebula/core/datasets/mnistML/mnist/index
diff --git a/_sources/api/nebula/core/datasets/mnistML/mnist/index.rst b/_sources/api/nebula/core/datasets/mnistML/mnist/index.rst
index 98be6613..aded5668 100644
--- a/_sources/api/nebula/core/datasets/mnistML/mnist/index.rst
+++ b/_sources/api/nebula/core/datasets/mnistML/mnist/index.rst
@@ -1,32 +1,31 @@
-:py:mod:`nebula.core.datasets.mnistML.mnist`
-============================================
+nebula.core.datasets.mnistML.mnist
+==================================
.. py:module:: nebula.core.datasets.mnistML.mnist
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.datasets.mnistML.mnist.MNISTDatasetScikit
-
+Module Contents
+---------------
.. py:class:: MNISTDatasetScikit(partition_id=0, partitions_number=1, iid=True)
-
.. py:attribute:: mnist_train
+ :value: None
+
-
.. py:attribute:: mnist_val
+ :value: None
+
-
.. py:method:: train_dataloader()
@@ -34,4 +33,3 @@ Classes
.. py:method:: test_dataloader()
-
diff --git a/_sources/api/nebula/core/datasets/nebuladataset/index.rst b/_sources/api/nebula/core/datasets/nebuladataset/index.rst
index 87dc8405..9e130dcc 100644
--- a/_sources/api/nebula/core/datasets/nebuladataset/index.rst
+++ b/_sources/api/nebula/core/datasets/nebuladataset/index.rst
@@ -1,50 +1,55 @@
-:py:mod:`nebula.core.datasets.nebuladataset`
-============================================
+nebula.core.datasets.nebuladataset
+==================================
.. py:module:: nebula.core.datasets.nebuladataset
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.datasets.nebuladataset.NebulaDataset
-
+Module Contents
+---------------
.. py:class:: NebulaDataset(num_classes=10, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`torch.utils.data.Dataset`, :py:obj:`abc.ABC`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
:abstractmethod:
+
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: generate_non_iid_map(dataset, partition='dirichlet')
:abstractmethod:
+
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset)
:abstractmethod:
+
Create an iid map of the dataset.
+
.. py:method:: plot_data_distribution(dataset, partitions_map)
Plot the data distribution of the dataset.
@@ -55,6 +60,7 @@ Classes
:param partitions_map: The map of the dataset partitions.
+
.. py:method:: visualize_tsne(dataset)
@@ -92,6 +98,7 @@ Classes
# a Dirichlet distribution with alpha = 0.5.
+
.. py:method:: homo_partition(dataset)
Homogeneously partition the dataset into multiple subsets.
@@ -121,6 +128,7 @@ Classes
# This creates federated data subsets with homogeneous distribution.
+
.. py:method:: balanced_iid_partition(dataset)
Partition the dataset into balanced and IID (Independent and Identically Distributed)
@@ -150,6 +158,7 @@ Classes
# This creates federated data subsets with equal class distributions.
+
.. py:method:: unbalanced_iid_partition(dataset, imbalance_factor=2)
Partition the dataset into multiple IID (Independent and Identically Distributed)
@@ -185,6 +194,7 @@ Classes
# an imbalance factor of 2.
+
.. py:method:: percentage_partition(dataset, percentage=20)
Partition a dataset into multiple subsets with a specified level of non-IID-ness.
@@ -221,6 +231,7 @@ Classes
# a percentage of 20.
+
.. py:method:: plot_all_data_distribution(dataset, partitions_map)
Plot all of the data distribution of the dataset according to the partitions map provided.
diff --git a/_sources/api/nebula/core/datasets/sentiment140/index.rst b/_sources/api/nebula/core/datasets/sentiment140/index.rst
index 233621b6..a6bd7b1a 100644
--- a/_sources/api/nebula/core/datasets/sentiment140/index.rst
+++ b/_sources/api/nebula/core/datasets/sentiment140/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.sentiment140`
-===========================================
+nebula.core.datasets.sentiment140
+=================================
.. py:module:: nebula.core.datasets.sentiment140
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- sentiment140/index.rst
+ /api/nebula/core/datasets/sentiment140/sentiment140/index
diff --git a/_sources/api/nebula/core/datasets/sentiment140/sentiment140/index.rst b/_sources/api/nebula/core/datasets/sentiment140/sentiment140/index.rst
index f314346a..dda30491 100644
--- a/_sources/api/nebula/core/datasets/sentiment140/sentiment140/index.rst
+++ b/_sources/api/nebula/core/datasets/sentiment140/sentiment140/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.core.datasets.sentiment140.sentiment140`
-========================================================
+nebula.core.datasets.sentiment140.sentiment140
+==============================================
.. py:module:: nebula.core.datasets.sentiment140.sentiment140
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -16,32 +13,34 @@ Classes
nebula.core.datasets.sentiment140.sentiment140.Sent140Dataset
-
+Module Contents
+---------------
.. py:class:: SENTIMENT140(train=True)
-
Bases: :py:obj:`torchvision.datasets.MNIST`
- .. py:method:: dataset_download()
+ .. py:method:: dataset_download()
.. py:class:: Sent140Dataset(num_classes=10, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`nebula.core.datasets.nebuladataset.NebulaDataset`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: load_sent14_dataset(train=True)
@@ -50,6 +49,7 @@ Classes
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset, partition='balancediid', partition_parameter=2)
Create an iid map of the dataset.
diff --git a/_sources/api/nebula/core/datasets/syscall/index.rst b/_sources/api/nebula/core/datasets/syscall/index.rst
index de994c3e..12391724 100644
--- a/_sources/api/nebula/core/datasets/syscall/index.rst
+++ b/_sources/api/nebula/core/datasets/syscall/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.syscall`
-======================================
+nebula.core.datasets.syscall
+============================
.. py:module:: nebula.core.datasets.syscall
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- syscall/index.rst
+ /api/nebula/core/datasets/syscall/syscall/index
diff --git a/_sources/api/nebula/core/datasets/syscall/syscall/index.rst b/_sources/api/nebula/core/datasets/syscall/syscall/index.rst
index 47faf5aa..64582556 100644
--- a/_sources/api/nebula/core/datasets/syscall/syscall/index.rst
+++ b/_sources/api/nebula/core/datasets/syscall/syscall/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.core.datasets.syscall.syscall`
-==============================================
+nebula.core.datasets.syscall.syscall
+====================================
.. py:module:: nebula.core.datasets.syscall.syscall
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -16,35 +13,37 @@ Classes
nebula.core.datasets.syscall.syscall.SYSCALLDataset
-
+Module Contents
+---------------
.. py:class:: SYSCALL(partition_id, partitions_number, root_dir, train=True, transform=None, target_transform=None, download=False)
-
Bases: :py:obj:`torchvision.datasets.MNIST`
+
.. py:method:: dataset_download()
.. py:method:: process()
-
.. py:class:: SYSCALLDataset(num_classes=10, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`nebula.core.datasets.nebuladataset.NebulaDataset`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: load_syscall_dataset(train=True)
@@ -53,6 +52,7 @@ Classes
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset, partition='balancediid', partition_parameter=2)
Create an iid map of the dataset.
diff --git a/_sources/api/nebula/core/datasets/wadi/index.rst b/_sources/api/nebula/core/datasets/wadi/index.rst
index adf373f0..0edefe57 100644
--- a/_sources/api/nebula/core/datasets/wadi/index.rst
+++ b/_sources/api/nebula/core/datasets/wadi/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.datasets.wadi`
-===================================
+nebula.core.datasets.wadi
+=========================
.. py:module:: nebula.core.datasets.wadi
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- wadi/index.rst
+ /api/nebula/core/datasets/wadi/wadi/index
diff --git a/_sources/api/nebula/core/datasets/wadi/wadi/index.rst b/_sources/api/nebula/core/datasets/wadi/wadi/index.rst
index d4283c6d..efbe42e8 100644
--- a/_sources/api/nebula/core/datasets/wadi/wadi/index.rst
+++ b/_sources/api/nebula/core/datasets/wadi/wadi/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.core.datasets.wadi.wadi`
-========================================
+nebula.core.datasets.wadi.wadi
+==============================
.. py:module:: nebula.core.datasets.wadi.wadi
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -16,32 +13,34 @@ Classes
nebula.core.datasets.wadi.wadi.WADIDataModule
-
+Module Contents
+---------------
.. py:class:: WADI(partition_id, partitions_number, root_dir, train=True)
-
Bases: :py:obj:`torchvision.datasets.MNIST`
- .. py:method:: dataset_download()
+ .. py:method:: dataset_download()
.. py:class:: WADIDataModule(num_classes=10, partition_id=0, partitions_number=1, batch_size=32, num_workers=4, iid=True, partition='dirichlet', partition_parameter=0.5, seed=42, config=None)
-
Bases: :py:obj:`nebula.core.datasets.nebuladataset.NebulaDataset`
+
Abstract class for a partitioned dataset.
Classes inheriting from this class need to implement specific methods
for loading and partitioning the dataset.
+
.. py:method:: initialize_dataset()
Initialize the dataset. This should load or create the dataset.
+
.. py:method:: load_wadi_dataset(train=True)
@@ -50,6 +49,7 @@ Classes
Create a non-iid map of the dataset.
+
.. py:method:: generate_iid_map(dataset, partition='balancediid', partition_parameter=2)
Create an iid map of the dataset.
diff --git a/_sources/api/nebula/core/engine/index.rst b/_sources/api/nebula/core/engine/index.rst
index ca51b722..3df6afa8 100644
--- a/_sources/api/nebula/core/engine/index.rst
+++ b/_sources/api/nebula/core/engine/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.core.engine`
-============================
+nebula.core.engine
+==================
.. py:module:: nebula.core.engine
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -20,9 +17,8 @@ Classes
nebula.core.engine.IdleNode
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -31,19 +27,17 @@ Functions
nebula.core.engine.print_banner
+Module Contents
+---------------
.. py:function:: handle_exception(exc_type, exc_value, exc_traceback)
-
.. py:function:: signal_handler(sig, frame)
-
.. py:function:: print_banner()
-
.. py:class:: Engine(model, dataset, config=Config, trainer=Lightning, security=False, model_poisoning=False, poisoned_ratio=0, noise_type='gaussian')
-
.. py:property:: cm
@@ -56,10 +50,10 @@ Functions
.. py:property:: aggregator
- .. py:property:: trainer
+ .. py:method:: get_aggregator_type()
- .. py:method:: get_aggregator_type()
+ .. py:property:: trainer
.. py:method:: get_addr()
@@ -96,10 +90,12 @@ Functions
:async:
+
.. py:method:: deploy_federation()
:async:
+
.. py:method:: reputation_calculation(aggregated_models_weights)
@@ -110,31 +106,26 @@ Functions
.. py:class:: MaliciousNode(model, dataset, config=Config, trainer=Lightning, security=False, model_poisoning=False, poisoned_ratio=0, noise_type='gaussian')
-
Bases: :py:obj:`Engine`
.. py:class:: AggregatorNode(model, dataset, config=Config, trainer=Lightning, security=False, model_poisoning=False, poisoned_ratio=0, noise_type='gaussian')
-
Bases: :py:obj:`Engine`
.. py:class:: ServerNode(model, dataset, config=Config, trainer=Lightning, security=False, model_poisoning=False, poisoned_ratio=0, noise_type='gaussian')
-
Bases: :py:obj:`Engine`
.. py:class:: TrainerNode(model, dataset, config=Config, trainer=Lightning, security=False, model_poisoning=False, poisoned_ratio=0, noise_type='gaussian')
-
Bases: :py:obj:`Engine`
.. py:class:: IdleNode(model, dataset, config=Config, trainer=Lightning, security=False, model_poisoning=False, poisoned_ratio=0, noise_type='gaussian')
-
Bases: :py:obj:`Engine`
diff --git a/_sources/api/nebula/core/eventmanager/index.rst b/_sources/api/nebula/core/eventmanager/index.rst
index cb561536..012b56f4 100644
--- a/_sources/api/nebula/core/eventmanager/index.rst
+++ b/_sources/api/nebula/core/eventmanager/index.rst
@@ -1,29 +1,27 @@
-:py:mod:`nebula.core.eventmanager`
-==================================
+nebula.core.eventmanager
+========================
.. py:module:: nebula.core.eventmanager
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.eventmanager.EventManager
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
nebula.core.eventmanager.event_handler
+Module Contents
+---------------
.. py:function:: event_handler(message_type, action)
@@ -32,29 +30,34 @@ Functions
.. py:class:: EventManager(default_callbacks=None)
-
.. py:method:: register_event(handler_info, callback)
Records a callback for a specific event.
+
.. py:method:: unregister_event(handler_info, callback)
Unregisters a previously registered callback for an event.
+
.. py:method:: trigger_event(source, message, *args, **kwargs)
:async:
+
Triggers an event, executing all associated callbacks.
+
.. py:method:: get_event_callbacks(event_name)
:async:
+
Returns the callbacks for a specific event.
+
.. py:method:: get_event_callbacks_names()
Returns the names of the registered events.
diff --git a/_sources/api/nebula/core/index.rst b/_sources/api/nebula/core/index.rst
index 73d9e66d..882ecb2a 100644
--- a/_sources/api/nebula/core/index.rst
+++ b/_sources/api/nebula/core/index.rst
@@ -1,32 +1,32 @@
-:py:mod:`nebula.core`
-=====================
+nebula.core
+===========
.. py:module:: nebula.core
Subpackages
-----------
+
.. toctree::
- :titlesonly:
- :maxdepth: 3
+ :maxdepth: 1
- aggregation/index.rst
- datasets/index.rst
- models/index.rst
- network/index.rst
- pb/index.rst
- training/index.rst
- utils/index.rst
+ /api/nebula/core/aggregation/index
+ /api/nebula/core/datasets/index
+ /api/nebula/core/models/index
+ /api/nebula/core/network/index
+ /api/nebula/core/pb/index
+ /api/nebula/core/training/index
+ /api/nebula/core/utils/index
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- engine/index.rst
- eventmanager/index.rst
- role/index.rst
+ /api/nebula/core/engine/index
+ /api/nebula/core/eventmanager/index
+ /api/nebula/core/role/index
diff --git a/_sources/api/nebula/core/models/cifar10/cnn/index.rst b/_sources/api/nebula/core/models/cifar10/cnn/index.rst
index 5b1b2a2c..2d17ad04 100644
--- a/_sources/api/nebula/core/models/cifar10/cnn/index.rst
+++ b/_sources/api/nebula/core/models/cifar10/cnn/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.cifar10.cnn`
-========================================
+nebula.core.models.cifar10.cnn
+==============================
.. py:module:: nebula.core.models.cifar10.cnn
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.cifar10.cnn.CIFAR10ModelCNN
-
+Module Contents
+---------------
.. py:class:: CIFAR10ModelCNN(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/cifar10/cnnV2/index.rst b/_sources/api/nebula/core/models/cifar10/cnnV2/index.rst
index 54034355..6ab83255 100644
--- a/_sources/api/nebula/core/models/cifar10/cnnV2/index.rst
+++ b/_sources/api/nebula/core/models/cifar10/cnnV2/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.cifar10.cnnV2`
-==========================================
+nebula.core.models.cifar10.cnnV2
+================================
.. py:module:: nebula.core.models.cifar10.cnnV2
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.cifar10.cnnV2.CIFAR10ModelCNN_V2
-
+Module Contents
+---------------
.. py:class:: CIFAR10ModelCNN_V2(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/cifar10/cnnV3/index.rst b/_sources/api/nebula/core/models/cifar10/cnnV3/index.rst
index a5aa834f..87fc3401 100644
--- a/_sources/api/nebula/core/models/cifar10/cnnV3/index.rst
+++ b/_sources/api/nebula/core/models/cifar10/cnnV3/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.cifar10.cnnV3`
-==========================================
+nebula.core.models.cifar10.cnnV3
+================================
.. py:module:: nebula.core.models.cifar10.cnnV3
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.cifar10.cnnV3.CIFAR10ModelCNN_V3
-
+Module Contents
+---------------
.. py:class:: CIFAR10ModelCNN_V3(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/cifar10/dualagg/index.rst b/_sources/api/nebula/core/models/cifar10/dualagg/index.rst
index 001f8e3f..966b2dfe 100644
--- a/_sources/api/nebula/core/models/cifar10/dualagg/index.rst
+++ b/_sources/api/nebula/core/models/cifar10/dualagg/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.core.models.cifar10.dualagg`
-============================================
+nebula.core.models.cifar10.dualagg
+==================================
.. py:module:: nebula.core.models.cifar10.dualagg
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -16,15 +13,17 @@ Classes
nebula.core.models.cifar10.dualagg.DualAggModel
-
+Module Contents
+---------------
.. py:class:: ContrastiveLoss(mu=0.5)
-
Bases: :py:obj:`torch.nn.Module`
+
Contrastive loss function.
+
.. py:method:: forward(local_out, global_out, historical_out, labels)
Calculates the contrastive loss between the local output, global output, and historical output.
@@ -55,9 +54,9 @@ Classes
.. py:class:: DualAggModel(input_channels=3, num_classes=10, learning_rate=0.001, mu=0.5, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`lightning.LightningModule`
+
.. py:method:: process_metrics(phase, y_pred, y, loss=None, mode='local')
Calculate and log metrics for the given phase.
@@ -71,6 +70,7 @@ Classes
:type loss: torch.Tensor, optional
+
.. py:method:: log_metrics_by_epoch(phase, print_cm=False, plot_cm=False, mode='local')
Log all metrics at the end of an epoch for the given phase.
@@ -80,11 +80,13 @@ Classes
:param : param plot_cm:
+
.. py:method:: forward(x, mode='local')
Forward pass of the model.
+
.. py:method:: configure_optimizers()
@@ -100,6 +102,7 @@ Classes
Returns:
+
.. py:method:: on_train_epoch_end()
@@ -112,6 +115,7 @@ Classes
Returns:
+
.. py:method:: on_validation_epoch_end()
@@ -124,6 +128,7 @@ Classes
Returns:
+
.. py:method:: on_test_epoch_end()
@@ -132,6 +137,7 @@ Classes
Save the current local model as the historical model.
+
.. py:method:: global_load_state_dict(state_dict)
Load the given state dictionary into the global model.
@@ -139,6 +145,7 @@ Classes
:type state_dict: dict
+
.. py:method:: historical_load_state_dict(state_dict)
Load the given state dictionary into the historical model.
@@ -146,16 +153,19 @@ Classes
:type state_dict: dict
+
.. py:method:: adapt_state_dict_for_model(state_dict, model_prefix)
Adapt the keys in the provided state_dict to match the structure expected by the model.
+
.. py:method:: get_global_model_parameters()
Get the parameters of the global model.
+
.. py:method:: print_summary()
Print a summary of local, historical and global models to check if they are the same.
diff --git a/_sources/api/nebula/core/models/cifar10/fastermobilenet/index.rst b/_sources/api/nebula/core/models/cifar10/fastermobilenet/index.rst
index 951f1da4..3c4cea60 100644
--- a/_sources/api/nebula/core/models/cifar10/fastermobilenet/index.rst
+++ b/_sources/api/nebula/core/models/cifar10/fastermobilenet/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.cifar10.fastermobilenet`
-====================================================
+nebula.core.models.cifar10.fastermobilenet
+==========================================
.. py:module:: nebula.core.models.cifar10.fastermobilenet
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.cifar10.fastermobilenet.FasterMobileNet
-
+Module Contents
+---------------
.. py:class:: FasterMobileNet(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/cifar10/index.rst b/_sources/api/nebula/core/models/cifar10/index.rst
index 953faf57..6f9bfce5 100644
--- a/_sources/api/nebula/core/models/cifar10/index.rst
+++ b/_sources/api/nebula/core/models/cifar10/index.rst
@@ -1,21 +1,21 @@
-:py:mod:`nebula.core.models.cifar10`
-====================================
+nebula.core.models.cifar10
+==========================
.. py:module:: nebula.core.models.cifar10
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- cnn/index.rst
- cnnV2/index.rst
- cnnV3/index.rst
- dualagg/index.rst
- fastermobilenet/index.rst
- resnet/index.rst
- simplemobilenet/index.rst
+ /api/nebula/core/models/cifar10/cnn/index
+ /api/nebula/core/models/cifar10/cnnV2/index
+ /api/nebula/core/models/cifar10/cnnV3/index
+ /api/nebula/core/models/cifar10/dualagg/index
+ /api/nebula/core/models/cifar10/fastermobilenet/index
+ /api/nebula/core/models/cifar10/resnet/index
+ /api/nebula/core/models/cifar10/simplemobilenet/index
diff --git a/_sources/api/nebula/core/models/cifar10/resnet/index.rst b/_sources/api/nebula/core/models/cifar10/resnet/index.rst
index 365eee5a..50e6f0dd 100644
--- a/_sources/api/nebula/core/models/cifar10/resnet/index.rst
+++ b/_sources/api/nebula/core/models/cifar10/resnet/index.rst
@@ -1,61 +1,53 @@
-:py:mod:`nebula.core.models.cifar10.resnet`
-===========================================
+nebula.core.models.cifar10.resnet
+=================================
.. py:module:: nebula.core.models.cifar10.resnet
-Module Contents
----------------
+Attributes
+----------
+
+.. autoapisummary::
+
+ nebula.core.models.cifar10.resnet.IMAGE_SIZE
+ nebula.core.models.cifar10.resnet.BATCH_SIZE
+ nebula.core.models.cifar10.resnet.classifiers
+
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.cifar10.resnet.CIFAR10ModelResNet
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
nebula.core.models.cifar10.resnet.conv_block
-
-Attributes
-~~~~~~~~~~
-
-.. autoapisummary::
-
- nebula.core.models.cifar10.resnet.IMAGE_SIZE
- nebula.core.models.cifar10.resnet.BATCH_SIZE
- nebula.core.models.cifar10.resnet.classifiers
-
+Module Contents
+---------------
.. py:data:: IMAGE_SIZE
:value: 32
-
.. py:data:: BATCH_SIZE
-
-
.. py:data:: classifiers
-
-
.. py:function:: conv_block(input_channels, num_classes, pool=False)
-
.. py:class:: CIFAR10ModelResNet(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None, implementation='scratch', classifier='resnet9')
-
Bases: :py:obj:`lightning.LightningModule`
+
.. py:method:: process_metrics(phase, y_pred, y, loss=None)
@@ -89,4 +81,3 @@ Attributes
.. py:method:: on_test_epoch_end()
-
diff --git a/_sources/api/nebula/core/models/cifar10/simplemobilenet/index.rst b/_sources/api/nebula/core/models/cifar10/simplemobilenet/index.rst
index 841556e6..67fa8113 100644
--- a/_sources/api/nebula/core/models/cifar10/simplemobilenet/index.rst
+++ b/_sources/api/nebula/core/models/cifar10/simplemobilenet/index.rst
@@ -1,27 +1,25 @@
-:py:mod:`nebula.core.models.cifar10.simplemobilenet`
-====================================================
+nebula.core.models.cifar10.simplemobilenet
+==========================================
.. py:module:: nebula.core.models.cifar10.simplemobilenet
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.cifar10.simplemobilenet.SimpleMobileNetV1
-
+Module Contents
+---------------
.. py:class:: SimpleMobileNetV1(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`lightning.LightningModule`
+
.. py:method:: process_metrics(phase, y_pred, y, loss=None)
@@ -34,4 +32,3 @@ Classes
.. py:method:: configure_optimizers()
-
diff --git a/_sources/api/nebula/core/models/cifar100/cnn/index.rst b/_sources/api/nebula/core/models/cifar100/cnn/index.rst
index 01d8356b..1d1ec194 100644
--- a/_sources/api/nebula/core/models/cifar100/cnn/index.rst
+++ b/_sources/api/nebula/core/models/cifar100/cnn/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.cifar100.cnn`
-=========================================
+nebula.core.models.cifar100.cnn
+===============================
.. py:module:: nebula.core.models.cifar100.cnn
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.cifar100.cnn.CNN
-
+Module Contents
+---------------
.. py:class:: CNN(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/cifar100/index.rst b/_sources/api/nebula/core/models/cifar100/index.rst
index a49f7a68..775d424f 100644
--- a/_sources/api/nebula/core/models/cifar100/index.rst
+++ b/_sources/api/nebula/core/models/cifar100/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.models.cifar100`
-=====================================
+nebula.core.models.cifar100
+===========================
.. py:module:: nebula.core.models.cifar100
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- cnn/index.rst
+ /api/nebula/core/models/cifar100/cnn/index
diff --git a/_sources/api/nebula/core/models/emnist/cnn/index.rst b/_sources/api/nebula/core/models/emnist/cnn/index.rst
index 30a1bc84..509a9635 100644
--- a/_sources/api/nebula/core/models/emnist/cnn/index.rst
+++ b/_sources/api/nebula/core/models/emnist/cnn/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.emnist.cnn`
-=======================================
+nebula.core.models.emnist.cnn
+=============================
.. py:module:: nebula.core.models.emnist.cnn
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.emnist.cnn.EMNISTModelCNN
-
+Module Contents
+---------------
.. py:class:: EMNISTModelCNN(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/emnist/index.rst b/_sources/api/nebula/core/models/emnist/index.rst
index 9d8e7e5b..5afa804a 100644
--- a/_sources/api/nebula/core/models/emnist/index.rst
+++ b/_sources/api/nebula/core/models/emnist/index.rst
@@ -1,16 +1,16 @@
-:py:mod:`nebula.core.models.emnist`
-===================================
+nebula.core.models.emnist
+=========================
.. py:module:: nebula.core.models.emnist
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- cnn/index.rst
- mlp/index.rst
+ /api/nebula/core/models/emnist/cnn/index
+ /api/nebula/core/models/emnist/mlp/index
diff --git a/_sources/api/nebula/core/models/emnist/mlp/index.rst b/_sources/api/nebula/core/models/emnist/mlp/index.rst
index 7e88830e..f497ff4b 100644
--- a/_sources/api/nebula/core/models/emnist/mlp/index.rst
+++ b/_sources/api/nebula/core/models/emnist/mlp/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.emnist.mlp`
-=======================================
+nebula.core.models.emnist.mlp
+=============================
.. py:module:: nebula.core.models.emnist.mlp
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.emnist.mlp.EMNISTModelMLP
-
+Module Contents
+---------------
.. py:class:: EMNISTModelMLP(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/fashionmnist/cnn/index.rst b/_sources/api/nebula/core/models/fashionmnist/cnn/index.rst
index ecba6f6d..a21b73ef 100644
--- a/_sources/api/nebula/core/models/fashionmnist/cnn/index.rst
+++ b/_sources/api/nebula/core/models/fashionmnist/cnn/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.fashionmnist.cnn`
-=============================================
+nebula.core.models.fashionmnist.cnn
+===================================
.. py:module:: nebula.core.models.fashionmnist.cnn
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.fashionmnist.cnn.FashionMNISTModelCNN
-
+Module Contents
+---------------
.. py:class:: FashionMNISTModelCNN(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/fashionmnist/index.rst b/_sources/api/nebula/core/models/fashionmnist/index.rst
index 4757cebb..81864e40 100644
--- a/_sources/api/nebula/core/models/fashionmnist/index.rst
+++ b/_sources/api/nebula/core/models/fashionmnist/index.rst
@@ -1,16 +1,16 @@
-:py:mod:`nebula.core.models.fashionmnist`
-=========================================
+nebula.core.models.fashionmnist
+===============================
.. py:module:: nebula.core.models.fashionmnist
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- cnn/index.rst
- mlp/index.rst
+ /api/nebula/core/models/fashionmnist/cnn/index
+ /api/nebula/core/models/fashionmnist/mlp/index
diff --git a/_sources/api/nebula/core/models/fashionmnist/mlp/index.rst b/_sources/api/nebula/core/models/fashionmnist/mlp/index.rst
index ee476b6b..676d64a2 100644
--- a/_sources/api/nebula/core/models/fashionmnist/mlp/index.rst
+++ b/_sources/api/nebula/core/models/fashionmnist/mlp/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.fashionmnist.mlp`
-=============================================
+nebula.core.models.fashionmnist.mlp
+===================================
.. py:module:: nebula.core.models.fashionmnist.mlp
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.fashionmnist.mlp.FashionMNISTModelMLP
-
+Module Contents
+---------------
.. py:class:: FashionMNISTModelMLP(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/index.rst b/_sources/api/nebula/core/models/index.rst
index 82631439..b394814c 100644
--- a/_sources/api/nebula/core/models/index.rst
+++ b/_sources/api/nebula/core/models/index.rst
@@ -1,33 +1,33 @@
-:py:mod:`nebula.core.models`
-============================
+nebula.core.models
+==================
.. py:module:: nebula.core.models
Subpackages
-----------
+
.. toctree::
- :titlesonly:
- :maxdepth: 3
+ :maxdepth: 1
- cifar10/index.rst
- cifar100/index.rst
- emnist/index.rst
- fashionmnist/index.rst
- kitsun/index.rst
- militarysar/index.rst
- mnist/index.rst
- sentiment140/index.rst
- syscall/index.rst
- wadi/index.rst
+ /api/nebula/core/models/cifar10/index
+ /api/nebula/core/models/cifar100/index
+ /api/nebula/core/models/emnist/index
+ /api/nebula/core/models/fashionmnist/index
+ /api/nebula/core/models/kitsun/index
+ /api/nebula/core/models/militarysar/index
+ /api/nebula/core/models/mnist/index
+ /api/nebula/core/models/sentiment140/index
+ /api/nebula/core/models/syscall/index
+ /api/nebula/core/models/wadi/index
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- nebulamodel/index.rst
+ /api/nebula/core/models/nebulamodel/index
diff --git a/_sources/api/nebula/core/models/kitsun/index.rst b/_sources/api/nebula/core/models/kitsun/index.rst
index b093b050..38f2e11f 100644
--- a/_sources/api/nebula/core/models/kitsun/index.rst
+++ b/_sources/api/nebula/core/models/kitsun/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.models.kitsun`
-===================================
+nebula.core.models.kitsun
+=========================
.. py:module:: nebula.core.models.kitsun
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- mlp/index.rst
+ /api/nebula/core/models/kitsun/mlp/index
diff --git a/_sources/api/nebula/core/models/kitsun/mlp/index.rst b/_sources/api/nebula/core/models/kitsun/mlp/index.rst
index 40cf8de9..d92e8f63 100644
--- a/_sources/api/nebula/core/models/kitsun/mlp/index.rst
+++ b/_sources/api/nebula/core/models/kitsun/mlp/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.kitsun.mlp`
-=======================================
+nebula.core.models.kitsun.mlp
+=============================
.. py:module:: nebula.core.models.kitsun.mlp
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.kitsun.mlp.KitsunModelMLP
-
+Module Contents
+---------------
.. py:class:: KitsunModelMLP(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/militarysar/cnn/index.rst b/_sources/api/nebula/core/models/militarysar/cnn/index.rst
index 0b0001e9..ab428766 100644
--- a/_sources/api/nebula/core/models/militarysar/cnn/index.rst
+++ b/_sources/api/nebula/core/models/militarysar/cnn/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.militarysar.cnn`
-============================================
+nebula.core.models.militarysar.cnn
+==================================
.. py:module:: nebula.core.models.militarysar.cnn
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.militarysar.cnn.MilitarySARModelCNN
-
+Module Contents
+---------------
.. py:class:: MilitarySARModelCNN(input_channels=2, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/militarysar/index.rst b/_sources/api/nebula/core/models/militarysar/index.rst
index 1689e24a..c3be55ef 100644
--- a/_sources/api/nebula/core/models/militarysar/index.rst
+++ b/_sources/api/nebula/core/models/militarysar/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.models.militarysar`
-========================================
+nebula.core.models.militarysar
+==============================
.. py:module:: nebula.core.models.militarysar
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- cnn/index.rst
+ /api/nebula/core/models/militarysar/cnn/index
diff --git a/_sources/api/nebula/core/models/mnist/cnn/index.rst b/_sources/api/nebula/core/models/mnist/cnn/index.rst
index 32f5ec6b..d7b0e98b 100644
--- a/_sources/api/nebula/core/models/mnist/cnn/index.rst
+++ b/_sources/api/nebula/core/models/mnist/cnn/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.mnist.cnn`
-======================================
+nebula.core.models.mnist.cnn
+============================
.. py:module:: nebula.core.models.mnist.cnn
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.mnist.cnn.MNISTModelCNN
-
+Module Contents
+---------------
.. py:class:: MNISTModelCNN(input_channels=1, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/mnist/index.rst b/_sources/api/nebula/core/models/mnist/index.rst
index 986b3440..55e680ac 100644
--- a/_sources/api/nebula/core/models/mnist/index.rst
+++ b/_sources/api/nebula/core/models/mnist/index.rst
@@ -1,16 +1,16 @@
-:py:mod:`nebula.core.models.mnist`
-==================================
+nebula.core.models.mnist
+========================
.. py:module:: nebula.core.models.mnist
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- cnn/index.rst
- mlp/index.rst
+ /api/nebula/core/models/mnist/cnn/index
+ /api/nebula/core/models/mnist/mlp/index
diff --git a/_sources/api/nebula/core/models/mnist/mlp/index.rst b/_sources/api/nebula/core/models/mnist/mlp/index.rst
index 47fb132c..7efc67bd 100644
--- a/_sources/api/nebula/core/models/mnist/mlp/index.rst
+++ b/_sources/api/nebula/core/models/mnist/mlp/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.mnist.mlp`
-======================================
+nebula.core.models.mnist.mlp
+============================
.. py:module:: nebula.core.models.mnist.mlp
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.mnist.mlp.MNISTModelMLP
-
+Module Contents
+---------------
.. py:class:: MNISTModelMLP(input_channels=1, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/nebulamodel/index.rst b/_sources/api/nebula/core/models/nebulamodel/index.rst
index 56188e36..6ba07949 100644
--- a/_sources/api/nebula/core/models/nebulamodel/index.rst
+++ b/_sources/api/nebula/core/models/nebulamodel/index.rst
@@ -1,31 +1,30 @@
-:py:mod:`nebula.core.models.nebulamodel`
-========================================
+nebula.core.models.nebulamodel
+==============================
.. py:module:: nebula.core.models.nebulamodel
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.nebulamodel.NebulaModel
-
+Module Contents
+---------------
.. py:class:: NebulaModel(input_channels=1, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`lightning.LightningModule`, :py:obj:`abc.ABC`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: process_metrics(phase, y_pred, y, loss=None)
Calculate and log metrics for the given phase.
@@ -40,6 +39,7 @@ Classes
:type loss: torch.Tensor, optional
+
.. py:method:: log_metrics_end(phase)
Log metrics for the given phase.
@@ -51,6 +51,7 @@ Classes
:type plot_cm: bool
+
.. py:method:: generate_confusion_matrix(phase, print_cm=False, plot_cm=False)
Generate and plot the confusion matrix for the given phase.
@@ -61,23 +62,29 @@ Classes
:param : param plot:
+
.. py:method:: forward(x)
:abstractmethod:
+
Forward pass of the model.
+
.. py:method:: configure_optimizers()
:abstractmethod:
+
Optimizer configuration.
+
.. py:method:: step(batch, batch_idx, phase)
Training/validation/test step.
+
.. py:method:: training_step(batch, batch_idx)
Training step for the model.
@@ -87,6 +94,7 @@ Classes
Returns:
+
.. py:method:: on_train_end()
@@ -102,6 +110,7 @@ Classes
Returns:
+
.. py:method:: on_validation_end()
@@ -117,10 +126,10 @@ Classes
Returns:
+
.. py:method:: on_test_end()
.. py:method:: on_test_epoch_end()
-
diff --git a/_sources/api/nebula/core/models/sentiment140/cnn/index.rst b/_sources/api/nebula/core/models/sentiment140/cnn/index.rst
index 84a2d9ec..f4c4626c 100644
--- a/_sources/api/nebula/core/models/sentiment140/cnn/index.rst
+++ b/_sources/api/nebula/core/models/sentiment140/cnn/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.sentiment140.cnn`
-=============================================
+nebula.core.models.sentiment140.cnn
+===================================
.. py:module:: nebula.core.models.sentiment140.cnn
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.sentiment140.cnn.SentimentModelCNN
-
+Module Contents
+---------------
.. py:class:: SentimentModelCNN(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/sentiment140/index.rst b/_sources/api/nebula/core/models/sentiment140/index.rst
index f1a475ea..88964ca5 100644
--- a/_sources/api/nebula/core/models/sentiment140/index.rst
+++ b/_sources/api/nebula/core/models/sentiment140/index.rst
@@ -1,16 +1,16 @@
-:py:mod:`nebula.core.models.sentiment140`
-=========================================
+nebula.core.models.sentiment140
+===============================
.. py:module:: nebula.core.models.sentiment140
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- cnn/index.rst
- rnn/index.rst
+ /api/nebula/core/models/sentiment140/cnn/index
+ /api/nebula/core/models/sentiment140/rnn/index
diff --git a/_sources/api/nebula/core/models/sentiment140/rnn/index.rst b/_sources/api/nebula/core/models/sentiment140/rnn/index.rst
index 06d0bfa9..d3d1ba99 100644
--- a/_sources/api/nebula/core/models/sentiment140/rnn/index.rst
+++ b/_sources/api/nebula/core/models/sentiment140/rnn/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.sentiment140.rnn`
-=============================================
+nebula.core.models.sentiment140.rnn
+===================================
.. py:module:: nebula.core.models.sentiment140.rnn
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.sentiment140.rnn.SentimentModelRNN
-
+Module Contents
+---------------
.. py:class:: SentimentModelRNN(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/syscall/autoencoder/index.rst b/_sources/api/nebula/core/models/syscall/autoencoder/index.rst
index d66b7397..b44e1003 100644
--- a/_sources/api/nebula/core/models/syscall/autoencoder/index.rst
+++ b/_sources/api/nebula/core/models/syscall/autoencoder/index.rst
@@ -1,31 +1,30 @@
-:py:mod:`nebula.core.models.syscall.autoencoder`
-================================================
+nebula.core.models.syscall.autoencoder
+======================================
.. py:module:: nebula.core.models.syscall.autoencoder
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.syscall.autoencoder.SyscallModelAutoencoder
-
+Module Contents
+---------------
.. py:class:: SyscallModelAutoencoder(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: encode(x)
@@ -37,6 +36,7 @@ Classes
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/syscall/index.rst b/_sources/api/nebula/core/models/syscall/index.rst
index ffa2d66a..6f1001e8 100644
--- a/_sources/api/nebula/core/models/syscall/index.rst
+++ b/_sources/api/nebula/core/models/syscall/index.rst
@@ -1,17 +1,17 @@
-:py:mod:`nebula.core.models.syscall`
-====================================
+nebula.core.models.syscall
+==========================
.. py:module:: nebula.core.models.syscall
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- autoencoder/index.rst
- mlp/index.rst
- svm/index.rst
+ /api/nebula/core/models/syscall/autoencoder/index
+ /api/nebula/core/models/syscall/mlp/index
+ /api/nebula/core/models/syscall/svm/index
diff --git a/_sources/api/nebula/core/models/syscall/mlp/index.rst b/_sources/api/nebula/core/models/syscall/mlp/index.rst
index e2ebde6c..08bffb02 100644
--- a/_sources/api/nebula/core/models/syscall/mlp/index.rst
+++ b/_sources/api/nebula/core/models/syscall/mlp/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.syscall.mlp`
-========================================
+nebula.core.models.syscall.mlp
+==============================
.. py:module:: nebula.core.models.syscall.mlp
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.syscall.mlp.SyscallModelMLP
-
+Module Contents
+---------------
.. py:class:: SyscallModelMLP(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/models/syscall/svm/index.rst b/_sources/api/nebula/core/models/syscall/svm/index.rst
index c85bf20b..62bd8928 100644
--- a/_sources/api/nebula/core/models/syscall/svm/index.rst
+++ b/_sources/api/nebula/core/models/syscall/svm/index.rst
@@ -1,41 +1,42 @@
-:py:mod:`nebula.core.models.syscall.svm`
-========================================
+nebula.core.models.syscall.svm
+==============================
.. py:module:: nebula.core.models.syscall.svm
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.syscall.svm.SyscallModelSGDOneClassSVM
-
+Module Contents
+---------------
.. py:class:: SyscallModelSGDOneClassSVM(input_channels=3, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
+
.. py:method:: hinge_loss(y)
diff --git a/_sources/api/nebula/core/models/wadi/index.rst b/_sources/api/nebula/core/models/wadi/index.rst
index 17839ff5..382e13cb 100644
--- a/_sources/api/nebula/core/models/wadi/index.rst
+++ b/_sources/api/nebula/core/models/wadi/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.models.wadi`
-=================================
+nebula.core.models.wadi
+=======================
.. py:module:: nebula.core.models.wadi
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- mlp/index.rst
+ /api/nebula/core/models/wadi/mlp/index
diff --git a/_sources/api/nebula/core/models/wadi/mlp/index.rst b/_sources/api/nebula/core/models/wadi/mlp/index.rst
index c251f973..8d3d599a 100644
--- a/_sources/api/nebula/core/models/wadi/mlp/index.rst
+++ b/_sources/api/nebula/core/models/wadi/mlp/index.rst
@@ -1,36 +1,36 @@
-:py:mod:`nebula.core.models.wadi.mlp`
-=====================================
+nebula.core.models.wadi.mlp
+===========================
.. py:module:: nebula.core.models.wadi.mlp
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.models.wadi.mlp.WADIModelMLP
-
+Module Contents
+---------------
.. py:class:: WADIModelMLP(input_channels=1, num_classes=10, learning_rate=0.001, metrics=None, confusion_matrix=None, seed=None)
-
Bases: :py:obj:`nebula.core.models.nebulamodel.NebulaModel`
+
Abstract class for the NEBULA model.
This class is an abstract class that defines the interface for the NEBULA model.
+
.. py:method:: forward(x)
Forward pass of the model.
+
.. py:method:: configure_optimizers()
Optimizer configuration.
diff --git a/_sources/api/nebula/core/network/communications/index.rst b/_sources/api/nebula/core/network/communications/index.rst
index 10e9dbe1..a173e24f 100644
--- a/_sources/api/nebula/core/network/communications/index.rst
+++ b/_sources/api/nebula/core/network/communications/index.rst
@@ -1,25 +1,22 @@
-:py:mod:`nebula.core.network.communications`
-============================================
+nebula.core.network.communications
+==================================
.. py:module:: nebula.core.network.communications
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.network.communications.CommunicationsManager
-
+Module Contents
+---------------
.. py:class:: CommunicationsManager(engine)
-
.. py:property:: engine
@@ -48,26 +45,32 @@ Classes
:async:
+
.. py:method:: handle_discovery_message(source, message)
:async:
+
.. py:method:: handle_control_message(source, message)
:async:
+
.. py:method:: handle_federation_message(source, message)
:async:
+
.. py:method:: handle_model_message(source, message)
:async:
+
.. py:method:: handle_connection_message(source, message)
:async:
+
.. py:method:: get_connections_lock()
@@ -84,26 +87,32 @@ Classes
:async:
+
.. py:method:: deploy_network_engine()
:async:
+
.. py:method:: handle_connection_wrapper(reader, writer)
:async:
+
.. py:method:: handle_connection(reader, writer)
:async:
+
.. py:method:: stop()
:async:
+
.. py:method:: run_reconnections()
:async:
+
.. py:method:: verify_connections(neighbors)
@@ -111,10 +120,12 @@ Classes
:async:
+
.. py:method:: deploy_additional_services()
:async:
+
.. py:method:: include_received_message_hash(hash_message)
@@ -122,34 +133,42 @@ Classes
:async:
+
.. py:method:: send_message(dest_addr, message)
:async:
+
.. py:method:: send_model(dest_addr, round, serialized_model, weight=1)
:async:
+
.. py:method:: establish_connection(addr, direct=True, reconnect=False)
:async:
+
.. py:method:: connect(addr, direct=True)
:async:
+
.. py:method:: register()
:async:
+
.. py:method:: wait_for_controller()
:async:
+
.. py:method:: disconnect(dest_addr, mutual_disconnection=True)
:async:
+
.. py:method:: get_all_addrs_current_connections(only_direct=False, only_undirected=False)
@@ -171,4 +190,3 @@ Classes
.. py:method:: get_ready_connections()
-
diff --git a/_sources/api/nebula/core/network/connection/index.rst b/_sources/api/nebula/core/network/connection/index.rst
index 288af349..a4d1b16d 100644
--- a/_sources/api/nebula/core/network/connection/index.rst
+++ b/_sources/api/nebula/core/network/connection/index.rst
@@ -1,28 +1,24 @@
-:py:mod:`nebula.core.network.connection`
-========================================
+nebula.core.network.connection
+==============================
.. py:module:: nebula.core.network.connection
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.network.connection.Connection
-
+Module Contents
+---------------
.. py:class:: Connection(cm, reader, writer, id, host, port, direct=True, active=True, compression='zlib', config=None)
-
.. py:attribute:: DEFAULT_FEDERATED_ROUND
-
.. py:method:: get_addr()
@@ -70,26 +66,32 @@ Classes
:async:
+
.. py:method:: stop()
:async:
+
.. py:method:: compress(data, compression)
:async:
+
.. py:method:: decompress(compressed)
:async:
+
.. py:method:: send(data, pb=True, encoding_type='utf-8', compression='none')
:async:
+
.. py:method:: retrieve_message(message)
:async:
+
.. py:method:: handle_incoming_message()
:async:
diff --git a/_sources/api/nebula/core/network/discoverer/index.rst b/_sources/api/nebula/core/network/discoverer/index.rst
index 037d2cd1..c4defef9 100644
--- a/_sources/api/nebula/core/network/discoverer/index.rst
+++ b/_sources/api/nebula/core/network/discoverer/index.rst
@@ -1,27 +1,25 @@
-:py:mod:`nebula.core.network.discoverer`
-========================================
+nebula.core.network.discoverer
+==============================
.. py:module:: nebula.core.network.discoverer
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.network.discoverer.Discoverer
-
+Module Contents
+---------------
.. py:class:: Discoverer(addr, config, cm)
-
Bases: :py:obj:`threading.Thread`
+
A class that represents a thread of control.
This class can be safely subclassed in a limited fashion. There are two ways
@@ -29,6 +27,7 @@ Classes
by overriding the run() method in a subclass.
+
.. py:method:: run()
Method representing the thread's activity.
@@ -40,6 +39,7 @@ Classes
+
.. py:method:: run_discover()
:async:
diff --git a/_sources/api/nebula/core/network/forwarder/index.rst b/_sources/api/nebula/core/network/forwarder/index.rst
index 976fef02..b4212131 100644
--- a/_sources/api/nebula/core/network/forwarder/index.rst
+++ b/_sources/api/nebula/core/network/forwarder/index.rst
@@ -1,27 +1,25 @@
-:py:mod:`nebula.core.network.forwarder`
-=======================================
+nebula.core.network.forwarder
+=============================
.. py:module:: nebula.core.network.forwarder
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.network.forwarder.Forwarder
-
+Module Contents
+---------------
.. py:class:: Forwarder(config, cm)
-
Bases: :py:obj:`threading.Thread`
+
A class that represents a thread of control.
This class can be safely subclassed in a limited fashion. There are two ways
@@ -29,6 +27,7 @@ Classes
by overriding the run() method in a subclass.
+
.. py:method:: run()
Method representing the thread's activity.
@@ -40,15 +39,17 @@ Classes
+
.. py:method:: run_forwarder()
:async:
+
.. py:method:: process_pending_messages(messages_left)
:async:
- .. py:method:: forward(msg, addr_from)
+ .. py:method:: forward(msg, addr_from)
diff --git a/_sources/api/nebula/core/network/health/index.rst b/_sources/api/nebula/core/network/health/index.rst
index 1ac4278a..9715e7c1 100644
--- a/_sources/api/nebula/core/network/health/index.rst
+++ b/_sources/api/nebula/core/network/health/index.rst
@@ -1,27 +1,25 @@
-:py:mod:`nebula.core.network.health`
-====================================
+nebula.core.network.health
+==========================
.. py:module:: nebula.core.network.health
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.network.health.Health
-
+Module Contents
+---------------
.. py:class:: Health(addr, config, cm)
-
Bases: :py:obj:`threading.Thread`
+
A class that represents a thread of control.
This class can be safely subclassed in a limited fashion. There are two ways
@@ -29,6 +27,7 @@ Classes
by overriding the run() method in a subclass.
+
.. py:method:: run()
Method representing the thread's activity.
@@ -40,14 +39,17 @@ Classes
+
.. py:method:: run_send_alive()
:async:
+
.. py:method:: run_check_alive()
:async:
+
.. py:method:: alive(source)
:async:
diff --git a/_sources/api/nebula/core/network/index.rst b/_sources/api/nebula/core/network/index.rst
index efa305c2..33f2f6da 100644
--- a/_sources/api/nebula/core/network/index.rst
+++ b/_sources/api/nebula/core/network/index.rst
@@ -1,21 +1,21 @@
-:py:mod:`nebula.core.network`
-=============================
+nebula.core.network
+===================
.. py:module:: nebula.core.network
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- communications/index.rst
- connection/index.rst
- discoverer/index.rst
- forwarder/index.rst
- health/index.rst
- messages/index.rst
- propagator/index.rst
+ /api/nebula/core/network/communications/index
+ /api/nebula/core/network/connection/index
+ /api/nebula/core/network/discoverer/index
+ /api/nebula/core/network/forwarder/index
+ /api/nebula/core/network/health/index
+ /api/nebula/core/network/messages/index
+ /api/nebula/core/network/propagator/index
diff --git a/_sources/api/nebula/core/network/messages/index.rst b/_sources/api/nebula/core/network/messages/index.rst
index dd0a4af9..2e75ce22 100644
--- a/_sources/api/nebula/core/network/messages/index.rst
+++ b/_sources/api/nebula/core/network/messages/index.rst
@@ -1,25 +1,22 @@
-:py:mod:`nebula.core.network.messages`
-======================================
+nebula.core.network.messages
+============================
.. py:module:: nebula.core.network.messages
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.network.messages.MessagesManager
-
+Module Contents
+---------------
.. py:class:: MessagesManager(addr, config, cm)
-
.. py:method:: generate_discovery_message(action, latitude=0.0, longitude=0.0)
@@ -38,4 +35,3 @@ Classes
.. py:method:: generate_reputation_message(reputation)
-
diff --git a/_sources/api/nebula/core/network/propagator/index.rst b/_sources/api/nebula/core/network/propagator/index.rst
index ae17f00c..d7f9b027 100644
--- a/_sources/api/nebula/core/network/propagator/index.rst
+++ b/_sources/api/nebula/core/network/propagator/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.core.network.propagator`
-========================================
+nebula.core.network.propagator
+==============================
.. py:module:: nebula.core.network.propagator
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -18,20 +15,23 @@ Classes
nebula.core.network.propagator.Propagator
-
+Module Contents
+---------------
.. py:class:: PropagationStrategy
-
Bases: :py:obj:`abc.ABC`
+
Helper class that provides a standard way to create an ABC using
inheritance.
+
.. py:method:: is_node_eligible(node)
:abstractmethod:
+
.. py:method:: prepare_model_payload(node)
:abstractmethod:
@@ -39,12 +39,13 @@ Classes
.. py:class:: InitialModelPropagation(aggregator, trainer, engine)
-
Bases: :py:obj:`PropagationStrategy`
+
Helper class that provides a standard way to create an ABC using
inheritance.
+
.. py:method:: get_round()
@@ -54,15 +55,15 @@ Classes
.. py:method:: prepare_model_payload(node)
-
.. py:class:: StableModelPropagation(aggregator, trainer, engine)
-
Bases: :py:obj:`PropagationStrategy`
+
Helper class that provides a standard way to create an ABC using
inheritance.
+
.. py:method:: get_round()
@@ -72,10 +73,8 @@ Classes
.. py:method:: prepare_model_payload(node)
-
.. py:class:: Propagator(cm)
-
.. py:method:: start()
@@ -92,6 +91,7 @@ Classes
:async:
+
.. py:method:: propagate_continuously(strategy_id)
:async:
diff --git a/_sources/api/nebula/core/pb/index.rst b/_sources/api/nebula/core/pb/index.rst
index 444879b4..1f8408cf 100644
--- a/_sources/api/nebula/core/pb/index.rst
+++ b/_sources/api/nebula/core/pb/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.core.pb`
-========================
+nebula.core.pb
+==============
.. py:module:: nebula.core.pb
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- nebula_pb2/index.rst
+ /api/nebula/core/pb/nebula_pb2/index
diff --git a/_sources/api/nebula/core/pb/nebula_pb2/index.rst b/_sources/api/nebula/core/pb/nebula_pb2/index.rst
index 323b1bca..93afe087 100644
--- a/_sources/api/nebula/core/pb/nebula_pb2/index.rst
+++ b/_sources/api/nebula/core/pb/nebula_pb2/index.rst
@@ -1,5 +1,5 @@
-:py:mod:`nebula.core.pb.nebula_pb2`
-===================================
+nebula.core.pb.nebula_pb2
+=========================
.. py:module:: nebula.core.pb.nebula_pb2
@@ -9,10 +9,16 @@
+Attributes
+----------
+
+.. autoapisummary::
+
+ nebula.core.pb.nebula_pb2.DESCRIPTOR
+
+
Module Contents
---------------
.. py:data:: DESCRIPTOR
-
-
diff --git a/_sources/api/nebula/core/role/index.rst b/_sources/api/nebula/core/role/index.rst
index ef50a580..4b380baf 100644
--- a/_sources/api/nebula/core/role/index.rst
+++ b/_sources/api/nebula/core/role/index.rst
@@ -1,50 +1,47 @@
-:py:mod:`nebula.core.role`
-==========================
+nebula.core.role
+================
.. py:module:: nebula.core.role
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.role.Role
-
+Module Contents
+---------------
.. py:class:: Role
-
This class defines the participant roles of the platform.
+
.. py:attribute:: TRAINER
:value: 'trainer'
-
+
.. py:attribute:: AGGREGATOR
:value: 'aggregator'
-
+
.. py:attribute:: PROXY
:value: 'proxy'
-
+
.. py:attribute:: IDLE
:value: 'idle'
-
+
.. py:attribute:: SERVER
:value: 'server'
-
diff --git a/_sources/api/nebula/core/training/index.rst b/_sources/api/nebula/core/training/index.rst
index 6f960e75..10fbf8ae 100644
--- a/_sources/api/nebula/core/training/index.rst
+++ b/_sources/api/nebula/core/training/index.rst
@@ -1,17 +1,17 @@
-:py:mod:`nebula.core.training`
-==============================
+nebula.core.training
+====================
.. py:module:: nebula.core.training
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- lightning/index.rst
- scikit/index.rst
- siamese/index.rst
+ /api/nebula/core/training/lightning/index
+ /api/nebula/core/training/scikit/index
+ /api/nebula/core/training/siamese/index
diff --git a/_sources/api/nebula/core/training/lightning/index.rst b/_sources/api/nebula/core/training/lightning/index.rst
index cc04e96a..6406a128 100644
--- a/_sources/api/nebula/core/training/lightning/index.rst
+++ b/_sources/api/nebula/core/training/lightning/index.rst
@@ -1,37 +1,34 @@
-:py:mod:`nebula.core.training.lightning`
-========================================
+nebula.core.training.lightning
+==============================
.. py:module:: nebula.core.training.lightning
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.training.lightning.Lightning
-
+Module Contents
+---------------
.. py:class:: Lightning(model, data, config=None, logger=None)
-
- .. py:property:: logger
-
-
.. py:attribute:: DEFAULT_MODEL_WEIGHT
:value: 1
-
+
.. py:attribute:: BYPASS_MODEL_WEIGHT
:value: 0
-
+
+
+ .. py:property:: logger
+
.. py:method:: get_round()
@@ -54,6 +51,7 @@ Classes
:rtype: str
+
.. py:method:: set_epochs(epochs)
@@ -87,4 +85,3 @@ Classes
.. py:method:: on_learning_cycle_end()
-
diff --git a/_sources/api/nebula/core/training/scikit/index.rst b/_sources/api/nebula/core/training/scikit/index.rst
index 824da309..e8c3f276 100644
--- a/_sources/api/nebula/core/training/scikit/index.rst
+++ b/_sources/api/nebula/core/training/scikit/index.rst
@@ -1,25 +1,22 @@
-:py:mod:`nebula.core.training.scikit`
-=====================================
+nebula.core.training.scikit
+===========================
.. py:module:: nebula.core.training.scikit
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.training.scikit.Scikit
-
+Module Contents
+---------------
.. py:class:: Scikit(model, data, config=None, logger=None)
-
.. py:method:: set_model(model)
@@ -59,4 +56,3 @@ Classes
.. py:method:: finalize_round()
-
diff --git a/_sources/api/nebula/core/training/siamese/index.rst b/_sources/api/nebula/core/training/siamese/index.rst
index e1cdcd14..a5837dd7 100644
--- a/_sources/api/nebula/core/training/siamese/index.rst
+++ b/_sources/api/nebula/core/training/siamese/index.rst
@@ -1,25 +1,22 @@
-:py:mod:`nebula.core.training.siamese`
-======================================
+nebula.core.training.siamese
+============================
.. py:module:: nebula.core.training.siamese
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.training.siamese.Siamese
-
+Module Contents
+---------------
.. py:class:: Siamese(model, data, config=None, logger=None)
-
.. py:property:: logger
@@ -50,6 +47,7 @@ Classes
:rtype: str
+
.. py:method:: set_epochs(epochs)
@@ -74,4 +72,3 @@ Classes
.. py:method:: finalize_round()
-
diff --git a/_sources/api/nebula/core/utils/certificate/index.rst b/_sources/api/nebula/core/utils/certificate/index.rst
index 11933d40..7bd1e0e5 100644
--- a/_sources/api/nebula/core/utils/certificate/index.rst
+++ b/_sources/api/nebula/core/utils/certificate/index.rst
@@ -1,15 +1,19 @@
-:py:mod:`nebula.core.utils.certificate`
-=======================================
+nebula.core.utils.certificate
+=============================
.. py:module:: nebula.core.utils.certificate
-Module Contents
----------------
+Attributes
+----------
+
+.. autoapisummary::
+
+ nebula.core.utils.certificate.current_dir
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -17,22 +21,12 @@ Functions
nebula.core.utils.certificate.generate_certificate
-
-Attributes
-~~~~~~~~~~
-
-.. autoapisummary::
-
- nebula.core.utils.certificate.current_dir
-
+Module Contents
+---------------
.. py:function:: generate_ca_certificate(dir_path)
-
.. py:function:: generate_certificate(dir_path, node_id, ip)
-
.. py:data:: current_dir
-
-
diff --git a/_sources/api/nebula/core/utils/deterministic/index.rst b/_sources/api/nebula/core/utils/deterministic/index.rst
index 3a6631f2..7462d406 100644
--- a/_sources/api/nebula/core/utils/deterministic/index.rst
+++ b/_sources/api/nebula/core/utils/deterministic/index.rst
@@ -1,22 +1,19 @@
-:py:mod:`nebula.core.utils.deterministic`
-=========================================
+nebula.core.utils.deterministic
+===============================
.. py:module:: nebula.core.utils.deterministic
-Module Contents
----------------
-
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
nebula.core.utils.deterministic.enable_deterministic
+Module Contents
+---------------
.. py:function:: enable_deterministic(config)
-
diff --git a/_sources/api/nebula/core/utils/helper/index.rst b/_sources/api/nebula/core/utils/helper/index.rst
index 3880a87c..49ab1c07 100644
--- a/_sources/api/nebula/core/utils/helper/index.rst
+++ b/_sources/api/nebula/core/utils/helper/index.rst
@@ -1,15 +1,11 @@
-:py:mod:`nebula.core.utils.helper`
-==================================
+nebula.core.utils.helper
+========================
.. py:module:: nebula.core.utils.helper
-Module Contents
----------------
-
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -23,28 +19,22 @@ Functions
nebula.core.utils.helper.normalise_layers
+Module Contents
+---------------
.. py:function:: cosine_metric2(model1, model2, similarity = False)
-
.. py:function:: cosine_metric(model1, model2, similarity = False)
-
.. py:function:: euclidean_metric(model1, model2, standardized = False, similarity = False)
-
.. py:function:: minkowski_metric(model1, model2, p, similarity = False)
-
.. py:function:: manhattan_metric(model1, model2, similarity = False)
-
.. py:function:: pearson_correlation_metric(model1, model2, similarity = False)
-
.. py:function:: jaccard_metric(model1, model2, similarity = False)
-
.. py:function:: normalise_layers(untrusted_params, trusted_params)
-
diff --git a/_sources/api/nebula/core/utils/index.rst b/_sources/api/nebula/core/utils/index.rst
index 97864603..a2074d82 100644
--- a/_sources/api/nebula/core/utils/index.rst
+++ b/_sources/api/nebula/core/utils/index.rst
@@ -1,20 +1,20 @@
-:py:mod:`nebula.core.utils`
-===========================
+nebula.core.utils
+=================
.. py:module:: nebula.core.utils
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- certificate/index.rst
- deterministic/index.rst
- helper/index.rst
- locker/index.rst
- nebulalogger/index.rst
- nebulalogger_tensorboard/index.rst
+ /api/nebula/core/utils/certificate/index
+ /api/nebula/core/utils/deterministic/index
+ /api/nebula/core/utils/helper/index
+ /api/nebula/core/utils/locker/index
+ /api/nebula/core/utils/nebulalogger/index
+ /api/nebula/core/utils/nebulalogger_tensorboard/index
diff --git a/_sources/api/nebula/core/utils/locker/index.rst b/_sources/api/nebula/core/utils/locker/index.rst
index 22de1d73..e94050c7 100644
--- a/_sources/api/nebula/core/utils/locker/index.rst
+++ b/_sources/api/nebula/core/utils/locker/index.rst
@@ -1,25 +1,22 @@
-:py:mod:`nebula.core.utils.locker`
-==================================
+nebula.core.utils.locker
+========================
.. py:module:: nebula.core.utils.locker
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.utils.locker.Locker
-
+Module Contents
+---------------
.. py:class:: Locker(name, verbose=True, async_lock=False, *args, **kwargs)
-
.. py:method:: acquire(*args, **kwargs)
@@ -33,6 +30,7 @@ Classes
:async:
+
.. py:method:: release_async(*args, **kwargs)
:async:
diff --git a/_sources/api/nebula/core/utils/nebulalogger/index.rst b/_sources/api/nebula/core/utils/nebulalogger/index.rst
index bb9155dd..7a10288f 100644
--- a/_sources/api/nebula/core/utils/nebulalogger/index.rst
+++ b/_sources/api/nebula/core/utils/nebulalogger/index.rst
@@ -1,27 +1,25 @@
-:py:mod:`nebula.core.utils.nebulalogger`
-========================================
+nebula.core.utils.nebulalogger
+==============================
.. py:module:: nebula.core.utils.nebulalogger
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.utils.nebulalogger.NebulaLogger
-
+Module Contents
+---------------
.. py:class:: NebulaLogger(config, engine, scenario_start_time, *args, **kwargs)
-
Bases: :py:obj:`aim.pytorch_lightning.AimLogger`
+
.. py:method:: finalize(status = '')
@@ -34,4 +32,3 @@ Classes
.. py:method:: log_figure(figure, step=None, name=None)
-
diff --git a/_sources/api/nebula/core/utils/nebulalogger_tensorboard/index.rst b/_sources/api/nebula/core/utils/nebulalogger_tensorboard/index.rst
index 0047be60..da62674e 100644
--- a/_sources/api/nebula/core/utils/nebulalogger_tensorboard/index.rst
+++ b/_sources/api/nebula/core/utils/nebulalogger_tensorboard/index.rst
@@ -1,27 +1,25 @@
-:py:mod:`nebula.core.utils.nebulalogger_tensorboard`
-====================================================
+nebula.core.utils.nebulalogger_tensorboard
+==========================================
.. py:module:: nebula.core.utils.nebulalogger_tensorboard
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
nebula.core.utils.nebulalogger_tensorboard.NebulaTensorBoardLogger
-
+Module Contents
+---------------
.. py:class:: NebulaTensorBoardLogger(scenario_start_time, *args, **kwargs)
-
Bases: :py:obj:`lightning.pytorch.loggers.TensorBoardLogger`
+
.. py:method:: get_step()
@@ -34,4 +32,3 @@ Classes
.. py:method:: log_figure(figure, step=None, name=None)
-
diff --git a/_sources/api/nebula/frontend/app/index.rst b/_sources/api/nebula/frontend/app/index.rst
index 7d40be0b..33e46d5f 100644
--- a/_sources/api/nebula/frontend/app/index.rst
+++ b/_sources/api/nebula/frontend/app/index.rst
@@ -1,14 +1,29 @@
-:py:mod:`nebula.frontend.app`
-=============================
+nebula.frontend.app
+===================
.. py:module:: nebula.frontend.app
-Module Contents
----------------
+Attributes
+----------
+
+.. autoapisummary::
+
+ nebula.frontend.app.settings
+ nebula.frontend.app.app
+ nebula.frontend.app.manager
+ nebula.frontend.app.templates
+ nebula.frontend.app.nodes_registration
+ nebula.frontend.app.scenarios_list_length
+ nebula.frontend.app.scenarios_finished
+ nebula.frontend.app.stop_all_scenarios_event
+ nebula.frontend.app.finish_scenario_event
+ nebula.frontend.app.nodes_finished
+ nebula.frontend.app.parser
+
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -16,9 +31,8 @@ Classes
nebula.frontend.app.ConnectionManager
-
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -68,100 +82,68 @@ Functions
nebula.frontend.app.nebula_dashboard_deployment_run
-
-Attributes
-~~~~~~~~~~
-
-.. autoapisummary::
-
- nebula.frontend.app.settings
- nebula.frontend.app.app
- nebula.frontend.app.manager
- nebula.frontend.app.templates
- nebula.frontend.app.nodes_registration
- nebula.frontend.app.scenarios_list_length
- nebula.frontend.app.scenarios_finished
- nebula.frontend.app.stop_all_scenarios_event
- nebula.frontend.app.finish_scenario_event
- nebula.frontend.app.nodes_finished
- nebula.frontend.app.parser
-
+Module Contents
+---------------
.. py:class:: Settings
-
.. py:attribute:: debug
- :type: bool
+ :type: bool
-
.. py:attribute:: advanced_analytics
- :type: bool
+ :type: bool
-
.. py:attribute:: log_dir
- :type: str
+ :type: str
-
.. py:attribute:: config_dir
- :type: str
+ :type: str
-
.. py:attribute:: cert_dir
- :type: str
+ :type: str
-
.. py:attribute:: root_host_path
- :type: str
+ :type: str
-
.. py:attribute:: config_frontend_dir
- :type: str
+ :type: str
-
.. py:attribute:: statistics_port
- :type: int
+ :type: int
-
.. py:attribute:: secret_key
- :type: str
+ :type: str
-
.. py:attribute:: PERMANENT_SESSION_LIFETIME
- :type: datetime.timedelta
+ :type: datetime.timedelta
-
.. py:attribute:: templates_dir
- :type: str
+ :type: str
:value: 'templates'
-
.. py:data:: settings
-
-
.. py:data:: app
-
-
.. py:class:: ConnectionManager
-
.. py:method:: connect(websocket)
:async:
+
.. py:method:: disconnect(websocket)
@@ -169,6 +151,7 @@ Attributes
:async:
+
.. py:method:: broadcast(message)
:async:
@@ -176,46 +159,34 @@ Attributes
.. py:data:: manager
-
-
.. py:function:: websocket_endpoint(websocket, client_id)
:async:
.. py:data:: templates
-
-
.. py:function:: datetimeformat(value, format='%B %d, %Y %H:%M')
-
.. py:function:: get_session(request)
-
.. py:function:: set_default_user()
-
.. py:function:: startup_event()
:async:
.. py:data:: nodes_registration
-
-
.. py:data:: scenarios_list_length
:value: 0
-
.. py:data:: scenarios_finished
:value: 0
-
.. py:function:: signal_handler(signal, frame)
-
.. py:function:: custom_http_exception_handler(request, exc)
:async:
@@ -274,7 +245,6 @@ Attributes
.. py:function:: update_topology(scenario_name, nodes_list, nodes_config)
-
.. py:function:: nebula_update_node(scenario_name, request, session = Depends(get_session))
:async:
@@ -309,27 +279,22 @@ Attributes
.. py:function:: stop_scenario(scenario_name)
-
.. py:function:: stop_all_scenarios()
-
.. py:function:: nebula_stop_scenario(scenario_name, stop_all, request, session = Depends(get_session))
:async:
.. py:function:: remove_scenario(scenario_name=None)
-
.. py:function:: nebula_remove_scenario(scenario_name, request, session = Depends(get_session))
:async:
.. py:function:: get_tracking_hash_scenario(scenario_name)
-
.. py:function:: zipdir(path, ziph)
-
.. py:function:: nebula_dashboard_download_logs_metrics(scenario_name, request, session = Depends(get_session))
:async:
@@ -350,16 +315,11 @@ Attributes
.. py:data:: stop_all_scenarios_event
-
-
.. py:data:: finish_scenario_event
-
-
.. py:data:: nodes_finished
:value: []
-
.. py:function:: node_stopped(scenario_name, request)
:async:
@@ -367,15 +327,11 @@ Attributes
.. py:function:: run_scenario(scenario_data, role)
-
.. py:function:: run_scenarios(data, role)
-
.. py:function:: nebula_dashboard_deployment_run(request, background_tasks, session = Depends(get_session))
:async:
.. py:data:: parser
-
-
diff --git a/_sources/api/nebula/frontend/config/index.rst b/_sources/api/nebula/frontend/config/index.rst
index b3c49898..ef7285f7 100644
--- a/_sources/api/nebula/frontend/config/index.rst
+++ b/_sources/api/nebula/frontend/config/index.rst
@@ -1,5 +1,5 @@
-:py:mod:`nebula.frontend.config`
-================================
+nebula.frontend.config
+======================
.. py:module:: nebula.frontend.config
diff --git a/_sources/api/nebula/frontend/database/index.rst b/_sources/api/nebula/frontend/database/index.rst
index 335a9005..a19f76dd 100644
--- a/_sources/api/nebula/frontend/database/index.rst
+++ b/_sources/api/nebula/frontend/database/index.rst
@@ -1,15 +1,23 @@
-:py:mod:`nebula.frontend.database`
-==================================
+nebula.frontend.database
+========================
.. py:module:: nebula.frontend.database
-Module Contents
----------------
+Attributes
+----------
+
+.. autoapisummary::
+
+ nebula.frontend.database.user_db_file_location
+ nebula.frontend.database.node_db_file_location
+ nebula.frontend.database.scenario_db_file_location
+ nebula.frontend.database.notes_db_file_location
+ nebula.frontend.database.PRAGMA_SETTINGS
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -44,43 +52,28 @@ Functions
nebula.frontend.database.remove_note
-
-Attributes
-~~~~~~~~~~
-
-.. autoapisummary::
-
- nebula.frontend.database.user_db_file_location
- nebula.frontend.database.node_db_file_location
- nebula.frontend.database.scenario_db_file_location
- nebula.frontend.database.notes_db_file_location
- nebula.frontend.database.PRAGMA_SETTINGS
-
+Module Contents
+---------------
.. py:data:: user_db_file_location
:value: 'databases/users.db'
-
.. py:data:: node_db_file_location
:value: 'databases/nodes.db'
-
.. py:data:: scenario_db_file_location
:value: 'databases/scenarios.db'
-
.. py:data:: notes_db_file_location
:value: 'databases/notes.db'
-
.. py:data:: PRAGMA_SETTINGS
:value: ['PRAGMA journal_mode=WAL;', 'PRAGMA synchronous=NORMAL;', 'PRAGMA journal_size_limit=1048576;',...
-
.. py:function:: setup_database(db_file_location)
:async:
@@ -92,83 +85,57 @@ Attributes
.. py:function:: list_users(all_info=False)
-
.. py:function:: get_user_info(user)
-
.. py:function:: verify(user, password)
-
.. py:function:: delete_user_from_db(user)
-
.. py:function:: add_user(user, password, role)
-
.. py:function:: update_user(user, password, role)
-
.. py:function:: list_nodes(scenario_name=None, sort_by='idx')
-
.. py:function:: list_nodes_by_scenario_name(scenario_name)
-
.. py:function:: update_node_record(node_uid, idx, ip, port, role, neighbors, latitude, longitude, timestamp, federation, federation_round, scenario, run_hash)
:async:
.. py:function:: remove_all_nodes()
-
.. py:function:: remove_nodes_by_scenario_name(scenario_name)
-
.. py:function:: get_run_hashes_scenario(scenario_name)
-
.. py:function:: get_all_scenarios(sort_by='start_time')
-
.. py:function:: get_all_scenarios_and_check_completed(sort_by='start_time')
-
.. py:function:: scenario_update_record(scenario_name, start_time, end_time, title, description, status, network_subnet, model, dataset, rounds, role)
-
.. py:function:: scenario_set_all_status_to_finished()
-
.. py:function:: scenario_set_status_to_finished(scenario_name)
-
.. py:function:: scenario_set_status_to_completed(scenario_name)
-
.. py:function:: get_running_scenario()
-
.. py:function:: get_completed_scenario()
-
.. py:function:: get_scenario_by_name(scenario_name)
-
.. py:function:: remove_scenario_by_name(scenario_name)
-
.. py:function:: check_scenario_federation_completed(scenario_name)
-
.. py:function:: check_scenario_with_role(role, scenario_name)
-
.. py:function:: save_notes(scenario, notes)
-
.. py:function:: get_notes(scenario)
-
.. py:function:: remove_note(scenario)
-
diff --git a/_sources/api/nebula/frontend/databases/index.rst b/_sources/api/nebula/frontend/databases/index.rst
index 371d2cf1..543e91ee 100644
--- a/_sources/api/nebula/frontend/databases/index.rst
+++ b/_sources/api/nebula/frontend/databases/index.rst
@@ -1,5 +1,5 @@
-:py:mod:`nebula.frontend.databases`
-===================================
+nebula.frontend.databases
+=========================
.. py:module:: nebula.frontend.databases
diff --git a/_sources/api/nebula/frontend/index.rst b/_sources/api/nebula/frontend/index.rst
index 888ce424..1d1df6f0 100644
--- a/_sources/api/nebula/frontend/index.rst
+++ b/_sources/api/nebula/frontend/index.rst
@@ -1,26 +1,26 @@
-:py:mod:`nebula.frontend`
-=========================
+nebula.frontend
+===============
.. py:module:: nebula.frontend
Subpackages
-----------
+
.. toctree::
- :titlesonly:
- :maxdepth: 3
+ :maxdepth: 1
- config/index.rst
- databases/index.rst
+ /api/nebula/frontend/config/index
+ /api/nebula/frontend/databases/index
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- app/index.rst
- database/index.rst
+ /api/nebula/frontend/app/index
+ /api/nebula/frontend/database/index
diff --git a/_sources/api/nebula/index.rst b/_sources/api/nebula/index.rst
index ba64342b..8d35c18e 100644
--- a/_sources/api/nebula/index.rst
+++ b/_sources/api/nebula/index.rst
@@ -1,30 +1,30 @@
-:py:mod:`nebula`
-================
+nebula
+======
.. py:module:: nebula
Subpackages
-----------
+
.. toctree::
- :titlesonly:
- :maxdepth: 3
+ :maxdepth: 1
- addons/index.rst
- config/index.rst
- core/index.rst
- frontend/index.rst
- tests/index.rst
+ /api/nebula/addons/index
+ /api/nebula/config/index
+ /api/nebula/core/index
+ /api/nebula/frontend/index
+ /api/nebula/tests/index
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- controller/index.rst
- node/index.rst
- scenarios/index.rst
+ /api/nebula/controller/index
+ /api/nebula/node/index
+ /api/nebula/scenarios/index
diff --git a/_sources/api/nebula/node/index.rst b/_sources/api/nebula/node/index.rst
index 810bb307..b9189f1d 100644
--- a/_sources/api/nebula/node/index.rst
+++ b/_sources/api/nebula/node/index.rst
@@ -1,35 +1,31 @@
-:py:mod:`nebula.node`
-=====================
+nebula.node
+===========
.. py:module:: nebula.node
-Module Contents
----------------
-
-
-Functions
-~~~~~~~~~
+Attributes
+----------
.. autoapisummary::
- nebula.node.main
-
+ nebula.node.loop
-Attributes
-~~~~~~~~~~
+Functions
+---------
.. autoapisummary::
- nebula.node.loop
+ nebula.node.main
+Module Contents
+---------------
+
.. py:function:: main()
:async:
.. py:data:: loop
-
-
diff --git a/_sources/api/nebula/scenarios/index.rst b/_sources/api/nebula/scenarios/index.rst
index 75ca6d5f..58cb7878 100644
--- a/_sources/api/nebula/scenarios/index.rst
+++ b/_sources/api/nebula/scenarios/index.rst
@@ -1,14 +1,11 @@
-:py:mod:`nebula.scenarios`
-==========================
+nebula.scenarios
+================
.. py:module:: nebula.scenarios
-Module Contents
----------------
-
Classes
-~~~~~~~
+-------
.. autoapisummary::
@@ -16,21 +13,23 @@ Classes
nebula.scenarios.ScenarioManagement
-
+Module Contents
+---------------
.. py:class:: Scenario(scenario_title, scenario_description, simulation, federation, topology, nodes, nodes_graph, n_nodes, matrix, dataset, iid, partition_selection, partition_parameter, model, agg_algorithm, rounds, logginglevel, accelerator, network_subnet, network_gateway, epochs, attacks, poisoned_node_percent, poisoned_sample_percent, poisoned_noise_percent, with_reputation, is_dynamic_topology, is_dynamic_aggregation, target_aggregation, random_geo, latitude, longitude, mobility, mobility_type, radius_federation, scheme_mobility, round_frequency, mobile_participants_percent, additional_participants, schema_additional_participants)
-
.. py:method:: attack_node_assign(nodes, federation, attack, poisoned_node_percent, poisoned_sample_percent, poisoned_noise_percent)
Identify which nodes will be attacked
+
.. py:method:: mobility_assign(nodes, mobile_participants_percent)
Assign mobility to nodes
+
.. py:method:: from_dict(data)
:classmethod:
@@ -38,19 +37,21 @@ Classes
.. py:class:: ScenarioManagement(scenario, controller)
-
.. py:method:: stop_blockchain()
:staticmethod:
+
.. py:method:: stop_participants()
:staticmethod:
+
.. py:method:: stop_nodes()
:staticmethod:
+
.. py:method:: load_configurations_and_start_nodes(additional_participants=None, schema_additional_participants=None)
@@ -67,7 +68,7 @@ Classes
:classmethod:
- .. py:method:: scenario_finished(timeout_seconds)
+ .. py:method:: scenario_finished(timeout_seconds)
diff --git a/_sources/api/nebula/tests/index.rst b/_sources/api/nebula/tests/index.rst
index ea0a26cc..dcb7c8cd 100644
--- a/_sources/api/nebula/tests/index.rst
+++ b/_sources/api/nebula/tests/index.rst
@@ -1,15 +1,15 @@
-:py:mod:`nebula.tests`
-======================
+nebula.tests
+============
.. py:module:: nebula.tests
Submodules
----------
+
.. toctree::
- :titlesonly:
:maxdepth: 1
- main/index.rst
+ /api/nebula/tests/main/index
diff --git a/_sources/api/nebula/tests/main/index.rst b/_sources/api/nebula/tests/main/index.rst
index f3a07094..724654e6 100644
--- a/_sources/api/nebula/tests/main/index.rst
+++ b/_sources/api/nebula/tests/main/index.rst
@@ -1,15 +1,19 @@
-:py:mod:`nebula.tests.main`
-===========================
+nebula.tests.main
+=================
.. py:module:: nebula.tests.main
-Module Contents
----------------
+Attributes
+----------
+
+.. autoapisummary::
+
+ nebula.tests.main.TIMEOUT
Functions
-~~~~~~~~~
+---------
.. autoapisummary::
@@ -22,38 +26,24 @@ Functions
nebula.tests.main.run_scenario
-
-Attributes
-~~~~~~~~~~
-
-.. autoapisummary::
-
- nebula.tests.main.TIMEOUT
-
+Module Contents
+---------------
.. py:data:: TIMEOUT
:value: 3600
-
.. py:function:: signal_handler(signal, frame)
-
.. py:function:: create_docker_network()
-
.. py:function:: menu()
-
.. py:function:: check_error_logs(test_name, scenario_name)
-
.. py:function:: load_test(test_path)
-
.. py:function:: run_test(test_path)
-
.. py:function:: run_scenario(scenario)
-
diff --git a/_static/locales/ar/LC_MESSAGES/booktheme.po b/_static/locales/ar/LC_MESSAGES/booktheme.po
index edae2ec4..34d404c6 100644
--- a/_static/locales/ar/LC_MESSAGES/booktheme.po
+++ b/_static/locales/ar/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "طباعة إلى PDF"
+
msgid "Theme by the"
msgstr "موضوع بواسطة"
-msgid "Open an issue"
-msgstr "افتح قضية"
+msgid "Download source file"
+msgstr "تنزيل ملف المصدر"
+
+msgid "open issue"
+msgstr "قضية مفتوحة"
msgid "Contents"
msgstr "محتويات"
+msgid "previous page"
+msgstr "الصفحة السابقة"
+
msgid "Download notebook file"
msgstr "تنزيل ملف دفتر الملاحظات"
-msgid "Sphinx Book Theme"
-msgstr "موضوع كتاب أبو الهول"
-
-msgid "Fullscreen mode"
-msgstr "وضع ملء الشاشة"
-
-msgid "Edit this page"
-msgstr "قم بتحرير هذه الصفحة"
-
-msgid "By"
-msgstr "بواسطة"
-
msgid "Copyright"
msgstr "حقوق النشر"
+msgid "Download this page"
+msgstr "قم بتنزيل هذه الصفحة"
+
msgid "Source repository"
msgstr "مستودع المصدر"
-msgid "previous page"
-msgstr "الصفحة السابقة"
+msgid "By"
+msgstr "بواسطة"
-msgid "next page"
-msgstr "الصفحة التالية"
+msgid "repository"
+msgstr "مخزن"
+
+msgid "Last updated on"
+msgstr "آخر تحديث في"
msgid "Toggle navigation"
msgstr "تبديل التنقل"
-msgid "repository"
-msgstr "مخزن"
+msgid "Sphinx Book Theme"
+msgstr "موضوع كتاب أبو الهول"
msgid "suggest edit"
msgstr "أقترح تحرير"
-msgid "open issue"
-msgstr "قضية مفتوحة"
+msgid "Open an issue"
+msgstr "افتح قضية"
msgid "Launch"
msgstr "إطلاق"
-msgid "Print to PDF"
-msgstr "طباعة إلى PDF"
+msgid "Fullscreen mode"
+msgstr "وضع ملء الشاشة"
+
+msgid "Edit this page"
+msgstr "قم بتحرير هذه الصفحة"
msgid "By the"
msgstr "بواسطة"
-msgid "Last updated on"
-msgstr "آخر تحديث في"
-
-msgid "Download source file"
-msgstr "تنزيل ملف المصدر"
-
-msgid "Download this page"
-msgstr "قم بتنزيل هذه الصفحة"
+msgid "next page"
+msgstr "الصفحة التالية"
diff --git a/_static/locales/bg/LC_MESSAGES/booktheme.po b/_static/locales/bg/LC_MESSAGES/booktheme.po
index 1f363b9d..7420c19e 100644
--- a/_static/locales/bg/LC_MESSAGES/booktheme.po
+++ b/_static/locales/bg/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Печат в PDF"
+
msgid "Theme by the"
msgstr "Тема от"
-msgid "Open an issue"
-msgstr "Отворете проблем"
+msgid "Download source file"
+msgstr "Изтеглете изходния файл"
+
+msgid "open issue"
+msgstr "отворен брой"
msgid "Contents"
msgstr "Съдържание"
+msgid "previous page"
+msgstr "предишна страница"
+
msgid "Download notebook file"
msgstr "Изтеглете файла на бележника"
-msgid "Sphinx Book Theme"
-msgstr "Тема на книгата Sphinx"
-
-msgid "Fullscreen mode"
-msgstr "Режим на цял екран"
-
-msgid "Edit this page"
-msgstr "Редактирайте тази страница"
-
-msgid "By"
-msgstr "От"
-
msgid "Copyright"
msgstr "Авторско право"
+msgid "Download this page"
+msgstr "Изтеглете тази страница"
+
msgid "Source repository"
msgstr "Хранилище на източника"
-msgid "previous page"
-msgstr "предишна страница"
+msgid "By"
+msgstr "От"
-msgid "next page"
-msgstr "Следваща страница"
+msgid "repository"
+msgstr "хранилище"
+
+msgid "Last updated on"
+msgstr "Последна актуализация на"
msgid "Toggle navigation"
msgstr "Превключване на навигацията"
-msgid "repository"
-msgstr "хранилище"
+msgid "Sphinx Book Theme"
+msgstr "Тема на книгата Sphinx"
msgid "suggest edit"
msgstr "предложи редактиране"
-msgid "open issue"
-msgstr "отворен брой"
+msgid "Open an issue"
+msgstr "Отворете проблем"
msgid "Launch"
msgstr "Стартиране"
-msgid "Print to PDF"
-msgstr "Печат в PDF"
+msgid "Fullscreen mode"
+msgstr "Режим на цял екран"
+
+msgid "Edit this page"
+msgstr "Редактирайте тази страница"
msgid "By the"
msgstr "По"
-msgid "Last updated on"
-msgstr "Последна актуализация на"
-
-msgid "Download source file"
-msgstr "Изтеглете изходния файл"
-
-msgid "Download this page"
-msgstr "Изтеглете тази страница"
+msgid "next page"
+msgstr "Следваща страница"
diff --git a/_static/locales/bn/LC_MESSAGES/booktheme.po b/_static/locales/bn/LC_MESSAGES/booktheme.po
index fa543728..63a07c36 100644
--- a/_static/locales/bn/LC_MESSAGES/booktheme.po
+++ b/_static/locales/bn/LC_MESSAGES/booktheme.po
@@ -8,56 +8,56 @@ msgstr ""
"Language: bn\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "পিডিএফ প্রিন্ট করুন"
+
msgid "Theme by the"
msgstr "থিম দ্বারা"
-msgid "Open an issue"
-msgstr "একটি সমস্যা খুলুন"
-
-msgid "Download notebook file"
-msgstr "নোটবুক ফাইল ডাউনলোড করুন"
+msgid "Download source file"
+msgstr "উত্স ফাইল ডাউনলোড করুন"
-msgid "Sphinx Book Theme"
-msgstr "স্পিনিক্স বুক থিম"
+msgid "open issue"
+msgstr "খোলা সমস্যা"
-msgid "Edit this page"
-msgstr "এই পৃষ্ঠাটি সম্পাদনা করুন"
+msgid "previous page"
+msgstr "আগের পৃষ্ঠা"
-msgid "By"
-msgstr "দ্বারা"
+msgid "Download notebook file"
+msgstr "নোটবুক ফাইল ডাউনলোড করুন"
msgid "Copyright"
msgstr "কপিরাইট"
+msgid "Download this page"
+msgstr "এই পৃষ্ঠাটি ডাউনলোড করুন"
+
msgid "Source repository"
msgstr "উত্স সংগ্রহস্থল"
-msgid "previous page"
-msgstr "আগের পৃষ্ঠা"
+msgid "By"
+msgstr "দ্বারা"
-msgid "next page"
-msgstr "পরবর্তী পৃষ্ঠা"
+msgid "Last updated on"
+msgstr "সর্বশেষ আপডেট"
msgid "Toggle navigation"
msgstr "নেভিগেশন টগল করুন"
-msgid "open issue"
-msgstr "খোলা সমস্যা"
+msgid "Sphinx Book Theme"
+msgstr "স্পিনিক্স বুক থিম"
+
+msgid "Open an issue"
+msgstr "একটি সমস্যা খুলুন"
msgid "Launch"
msgstr "শুরু করা"
-msgid "Print to PDF"
-msgstr "পিডিএফ প্রিন্ট করুন"
+msgid "Edit this page"
+msgstr "এই পৃষ্ঠাটি সম্পাদনা করুন"
msgid "By the"
msgstr "দ্বারা"
-msgid "Last updated on"
-msgstr "সর্বশেষ আপডেট"
-
-msgid "Download source file"
-msgstr "উত্স ফাইল ডাউনলোড করুন"
-
-msgid "Download this page"
-msgstr "এই পৃষ্ঠাটি ডাউনলোড করুন"
+msgid "next page"
+msgstr "পরবর্তী পৃষ্ঠা"
diff --git a/_static/locales/ca/LC_MESSAGES/booktheme.po b/_static/locales/ca/LC_MESSAGES/booktheme.po
index 22f1569a..8fb358bf 100644
--- a/_static/locales/ca/LC_MESSAGES/booktheme.po
+++ b/_static/locales/ca/LC_MESSAGES/booktheme.po
@@ -8,59 +8,59 @@ msgstr ""
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Imprimeix a PDF"
+
msgid "Theme by the"
msgstr "Tema del"
-msgid "Open an issue"
-msgstr "Obriu un número"
-
-msgid "Download notebook file"
-msgstr "Descarregar fitxer de quadern"
+msgid "Download source file"
+msgstr "Baixeu el fitxer font"
-msgid "Sphinx Book Theme"
-msgstr "Tema del llibre Esfinx"
+msgid "open issue"
+msgstr "número obert"
-msgid "Edit this page"
-msgstr "Editeu aquesta pàgina"
+msgid "previous page"
+msgstr "Pàgina anterior"
-msgid "By"
-msgstr "Per"
+msgid "Download notebook file"
+msgstr "Descarregar fitxer de quadern"
msgid "Copyright"
msgstr "Copyright"
+msgid "Download this page"
+msgstr "Descarregueu aquesta pàgina"
+
msgid "Source repository"
msgstr "Dipòsit de fonts"
-msgid "previous page"
-msgstr "Pàgina anterior"
+msgid "By"
+msgstr "Per"
-msgid "next page"
-msgstr "pàgina següent"
+msgid "Last updated on"
+msgstr "Darrera actualització el"
msgid "Toggle navigation"
msgstr "Commuta la navegació"
+msgid "Sphinx Book Theme"
+msgstr "Tema del llibre Esfinx"
+
msgid "suggest edit"
msgstr "suggerir edició"
-msgid "open issue"
-msgstr "número obert"
+msgid "Open an issue"
+msgstr "Obriu un número"
msgid "Launch"
msgstr "Llançament"
-msgid "Print to PDF"
-msgstr "Imprimeix a PDF"
+msgid "Edit this page"
+msgstr "Editeu aquesta pàgina"
msgid "By the"
msgstr "Per la"
-msgid "Last updated on"
-msgstr "Darrera actualització el"
-
-msgid "Download source file"
-msgstr "Baixeu el fitxer font"
-
-msgid "Download this page"
-msgstr "Descarregueu aquesta pàgina"
+msgid "next page"
+msgstr "pàgina següent"
diff --git a/_static/locales/cs/LC_MESSAGES/booktheme.po b/_static/locales/cs/LC_MESSAGES/booktheme.po
index afecd9e7..c6ef4690 100644
--- a/_static/locales/cs/LC_MESSAGES/booktheme.po
+++ b/_static/locales/cs/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: cs\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Tisk do PDF"
+
msgid "Theme by the"
msgstr "Téma od"
-msgid "Open an issue"
-msgstr "Otevřete problém"
+msgid "Download source file"
+msgstr "Stáhněte si zdrojový soubor"
+
+msgid "open issue"
+msgstr "otevřené číslo"
msgid "Contents"
msgstr "Obsah"
+msgid "previous page"
+msgstr "předchozí stránka"
+
msgid "Download notebook file"
msgstr "Stáhnout soubor poznámkového bloku"
-msgid "Sphinx Book Theme"
-msgstr "Téma knihy Sfinga"
-
-msgid "Fullscreen mode"
-msgstr "Režim celé obrazovky"
-
-msgid "Edit this page"
-msgstr "Upravit tuto stránku"
-
-msgid "By"
-msgstr "Podle"
-
msgid "Copyright"
msgstr "autorská práva"
+msgid "Download this page"
+msgstr "Stáhněte si tuto stránku"
+
msgid "Source repository"
msgstr "Zdrojové úložiště"
-msgid "previous page"
-msgstr "předchozí stránka"
+msgid "By"
+msgstr "Podle"
-msgid "next page"
-msgstr "další strana"
+msgid "repository"
+msgstr "úložiště"
+
+msgid "Last updated on"
+msgstr "Naposledy aktualizováno"
msgid "Toggle navigation"
msgstr "Přepnout navigaci"
-msgid "repository"
-msgstr "úložiště"
+msgid "Sphinx Book Theme"
+msgstr "Téma knihy Sfinga"
msgid "suggest edit"
msgstr "navrhnout úpravy"
-msgid "open issue"
-msgstr "otevřené číslo"
+msgid "Open an issue"
+msgstr "Otevřete problém"
msgid "Launch"
msgstr "Zahájení"
-msgid "Print to PDF"
-msgstr "Tisk do PDF"
+msgid "Fullscreen mode"
+msgstr "Režim celé obrazovky"
+
+msgid "Edit this page"
+msgstr "Upravit tuto stránku"
msgid "By the"
msgstr "Podle"
-msgid "Last updated on"
-msgstr "Naposledy aktualizováno"
-
-msgid "Download source file"
-msgstr "Stáhněte si zdrojový soubor"
-
-msgid "Download this page"
-msgstr "Stáhněte si tuto stránku"
+msgid "next page"
+msgstr "další strana"
diff --git a/_static/locales/da/LC_MESSAGES/booktheme.po b/_static/locales/da/LC_MESSAGES/booktheme.po
index 649c78a8..306a38e5 100644
--- a/_static/locales/da/LC_MESSAGES/booktheme.po
+++ b/_static/locales/da/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Udskriv til PDF"
+
msgid "Theme by the"
msgstr "Tema af"
-msgid "Open an issue"
-msgstr "Åbn et problem"
+msgid "Download source file"
+msgstr "Download kildefil"
+
+msgid "open issue"
+msgstr "åbent nummer"
msgid "Contents"
msgstr "Indhold"
+msgid "previous page"
+msgstr "forrige side"
+
msgid "Download notebook file"
msgstr "Download notesbog-fil"
-msgid "Sphinx Book Theme"
-msgstr "Sphinx bogtema"
-
-msgid "Fullscreen mode"
-msgstr "Fuldskærmstilstand"
-
-msgid "Edit this page"
-msgstr "Rediger denne side"
-
-msgid "By"
-msgstr "Ved"
-
msgid "Copyright"
msgstr "ophavsret"
+msgid "Download this page"
+msgstr "Download denne side"
+
msgid "Source repository"
msgstr "Kildelager"
-msgid "previous page"
-msgstr "forrige side"
+msgid "By"
+msgstr "Ved"
-msgid "next page"
-msgstr "Næste side"
+msgid "repository"
+msgstr "lager"
+
+msgid "Last updated on"
+msgstr "Sidst opdateret den"
msgid "Toggle navigation"
msgstr "Skift navigation"
-msgid "repository"
-msgstr "lager"
+msgid "Sphinx Book Theme"
+msgstr "Sphinx bogtema"
msgid "suggest edit"
msgstr "foreslå redigering"
-msgid "open issue"
-msgstr "åbent nummer"
+msgid "Open an issue"
+msgstr "Åbn et problem"
msgid "Launch"
msgstr "Start"
-msgid "Print to PDF"
-msgstr "Udskriv til PDF"
+msgid "Fullscreen mode"
+msgstr "Fuldskærmstilstand"
+
+msgid "Edit this page"
+msgstr "Rediger denne side"
msgid "By the"
msgstr "Ved"
-msgid "Last updated on"
-msgstr "Sidst opdateret den"
-
-msgid "Download source file"
-msgstr "Download kildefil"
-
-msgid "Download this page"
-msgstr "Download denne side"
+msgid "next page"
+msgstr "Næste side"
diff --git a/_static/locales/de/LC_MESSAGES/booktheme.po b/_static/locales/de/LC_MESSAGES/booktheme.po
index f51d2ecc..4925360d 100644
--- a/_static/locales/de/LC_MESSAGES/booktheme.po
+++ b/_static/locales/de/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "In PDF drucken"
+
msgid "Theme by the"
msgstr "Thema von der"
-msgid "Open an issue"
-msgstr "Öffnen Sie ein Problem"
+msgid "Download source file"
+msgstr "Quelldatei herunterladen"
+
+msgid "open issue"
+msgstr "offenes Thema"
msgid "Contents"
msgstr "Inhalt"
+msgid "previous page"
+msgstr "vorherige Seite"
+
msgid "Download notebook file"
msgstr "Notebook-Datei herunterladen"
-msgid "Sphinx Book Theme"
-msgstr "Sphinx-Buch-Thema"
-
-msgid "Fullscreen mode"
-msgstr "Vollbildmodus"
-
-msgid "Edit this page"
-msgstr "Bearbeite diese Seite"
-
-msgid "By"
-msgstr "Durch"
-
msgid "Copyright"
msgstr "Urheberrechte ©"
+msgid "Download this page"
+msgstr "Laden Sie diese Seite herunter"
+
msgid "Source repository"
msgstr "Quell-Repository"
-msgid "previous page"
-msgstr "vorherige Seite"
+msgid "By"
+msgstr "Durch"
-msgid "next page"
-msgstr "Nächste Seite"
+msgid "repository"
+msgstr "Repository"
+
+msgid "Last updated on"
+msgstr "Zuletzt aktualisiert am"
msgid "Toggle navigation"
msgstr "Navigation umschalten"
-msgid "repository"
-msgstr "Repository"
+msgid "Sphinx Book Theme"
+msgstr "Sphinx-Buch-Thema"
msgid "suggest edit"
msgstr "vorschlagen zu bearbeiten"
-msgid "open issue"
-msgstr "offenes Thema"
+msgid "Open an issue"
+msgstr "Öffnen Sie ein Problem"
msgid "Launch"
msgstr "Starten"
-msgid "Print to PDF"
-msgstr "In PDF drucken"
+msgid "Fullscreen mode"
+msgstr "Vollbildmodus"
+
+msgid "Edit this page"
+msgstr "Bearbeite diese Seite"
msgid "By the"
msgstr "Bis zum"
-msgid "Last updated on"
-msgstr "Zuletzt aktualisiert am"
-
-msgid "Download source file"
-msgstr "Quelldatei herunterladen"
-
-msgid "Download this page"
-msgstr "Laden Sie diese Seite herunter"
+msgid "next page"
+msgstr "Nächste Seite"
diff --git a/_static/locales/el/LC_MESSAGES/booktheme.po b/_static/locales/el/LC_MESSAGES/booktheme.po
index 8bec7905..3e01acbd 100644
--- a/_static/locales/el/LC_MESSAGES/booktheme.po
+++ b/_static/locales/el/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Εκτύπωση σε PDF"
+
msgid "Theme by the"
msgstr "Θέμα από το"
-msgid "Open an issue"
-msgstr "Ανοίξτε ένα ζήτημα"
+msgid "Download source file"
+msgstr "Λήψη αρχείου προέλευσης"
+
+msgid "open issue"
+msgstr "ανοιχτό ζήτημα"
msgid "Contents"
msgstr "Περιεχόμενα"
+msgid "previous page"
+msgstr "προηγούμενη σελίδα"
+
msgid "Download notebook file"
msgstr "Λήψη αρχείου σημειωματάριου"
-msgid "Sphinx Book Theme"
-msgstr "Θέμα βιβλίου Sphinx"
-
-msgid "Fullscreen mode"
-msgstr "ΛΕΙΤΟΥΡΓΙΑ ΠΛΗΡΟΥΣ ΟΘΟΝΗΣ"
-
-msgid "Edit this page"
-msgstr "Επεξεργαστείτε αυτήν τη σελίδα"
-
-msgid "By"
-msgstr "Με"
-
msgid "Copyright"
msgstr "Πνευματική ιδιοκτησία"
+msgid "Download this page"
+msgstr "Λήψη αυτής της σελίδας"
+
msgid "Source repository"
msgstr "Αποθήκη πηγής"
-msgid "previous page"
-msgstr "προηγούμενη σελίδα"
+msgid "By"
+msgstr "Με"
-msgid "next page"
-msgstr "επόμενη σελίδα"
+msgid "repository"
+msgstr "αποθήκη"
+
+msgid "Last updated on"
+msgstr "Τελευταία ενημέρωση στις"
msgid "Toggle navigation"
msgstr "Εναλλαγή πλοήγησης"
-msgid "repository"
-msgstr "αποθήκη"
+msgid "Sphinx Book Theme"
+msgstr "Θέμα βιβλίου Sphinx"
msgid "suggest edit"
msgstr "προτείνω επεξεργασία"
-msgid "open issue"
-msgstr "ανοιχτό ζήτημα"
+msgid "Open an issue"
+msgstr "Ανοίξτε ένα ζήτημα"
msgid "Launch"
msgstr "Εκτόξευση"
-msgid "Print to PDF"
-msgstr "Εκτύπωση σε PDF"
+msgid "Fullscreen mode"
+msgstr "ΛΕΙΤΟΥΡΓΙΑ ΠΛΗΡΟΥΣ ΟΘΟΝΗΣ"
+
+msgid "Edit this page"
+msgstr "Επεξεργαστείτε αυτήν τη σελίδα"
msgid "By the"
msgstr "Από το"
-msgid "Last updated on"
-msgstr "Τελευταία ενημέρωση στις"
-
-msgid "Download source file"
-msgstr "Λήψη αρχείου προέλευσης"
-
-msgid "Download this page"
-msgstr "Λήψη αυτής της σελίδας"
+msgid "next page"
+msgstr "επόμενη σελίδα"
diff --git a/_static/locales/eo/LC_MESSAGES/booktheme.po b/_static/locales/eo/LC_MESSAGES/booktheme.po
index d72a0481..f7ed2262 100644
--- a/_static/locales/eo/LC_MESSAGES/booktheme.po
+++ b/_static/locales/eo/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Presi al PDF"
+
msgid "Theme by the"
msgstr "Temo de la"
-msgid "Open an issue"
-msgstr "Malfermu numeron"
+msgid "Download source file"
+msgstr "Elŝutu fontodosieron"
+
+msgid "open issue"
+msgstr "malferma numero"
msgid "Contents"
msgstr "Enhavo"
+msgid "previous page"
+msgstr "antaŭa paĝo"
+
msgid "Download notebook file"
msgstr "Elŝutu kajeran dosieron"
-msgid "Sphinx Book Theme"
-msgstr "Sfinksa Libro-Temo"
-
-msgid "Fullscreen mode"
-msgstr "Plenekrana reĝimo"
-
-msgid "Edit this page"
-msgstr "Redaktu ĉi tiun paĝon"
-
-msgid "By"
-msgstr "De"
-
msgid "Copyright"
msgstr "Kopirajto"
+msgid "Download this page"
+msgstr "Elŝutu ĉi tiun paĝon"
+
msgid "Source repository"
msgstr "Fonto-deponejo"
-msgid "previous page"
-msgstr "antaŭa paĝo"
+msgid "By"
+msgstr "De"
-msgid "next page"
-msgstr "sekva paĝo"
+msgid "repository"
+msgstr "deponejo"
+
+msgid "Last updated on"
+msgstr "Laste ĝisdatigita la"
msgid "Toggle navigation"
msgstr "Ŝalti navigadon"
-msgid "repository"
-msgstr "deponejo"
+msgid "Sphinx Book Theme"
+msgstr "Sfinksa Libro-Temo"
msgid "suggest edit"
msgstr "sugesti redaktadon"
-msgid "open issue"
-msgstr "malferma numero"
+msgid "Open an issue"
+msgstr "Malfermu numeron"
msgid "Launch"
msgstr "Lanĉo"
-msgid "Print to PDF"
-msgstr "Presi al PDF"
+msgid "Fullscreen mode"
+msgstr "Plenekrana reĝimo"
+
+msgid "Edit this page"
+msgstr "Redaktu ĉi tiun paĝon"
msgid "By the"
msgstr "Per la"
-msgid "Last updated on"
-msgstr "Laste ĝisdatigita la"
-
-msgid "Download source file"
-msgstr "Elŝutu fontodosieron"
-
-msgid "Download this page"
-msgstr "Elŝutu ĉi tiun paĝon"
+msgid "next page"
+msgstr "sekva paĝo"
diff --git a/_static/locales/es/LC_MESSAGES/booktheme.po b/_static/locales/es/LC_MESSAGES/booktheme.po
index 611834b2..5e0029e5 100644
--- a/_static/locales/es/LC_MESSAGES/booktheme.po
+++ b/_static/locales/es/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Imprimir en PDF"
+
msgid "Theme by the"
msgstr "Tema por el"
-msgid "Open an issue"
-msgstr "Abrir un problema"
+msgid "Download source file"
+msgstr "Descargar archivo fuente"
+
+msgid "open issue"
+msgstr "Tema abierto"
msgid "Contents"
msgstr "Contenido"
+msgid "previous page"
+msgstr "pagina anterior"
+
msgid "Download notebook file"
msgstr "Descargar archivo de cuaderno"
-msgid "Sphinx Book Theme"
-msgstr "Tema del libro de la esfinge"
-
-msgid "Fullscreen mode"
-msgstr "Modo de pantalla completa"
-
-msgid "Edit this page"
-msgstr "Edita esta página"
-
-msgid "By"
-msgstr "Por"
-
msgid "Copyright"
msgstr "Derechos de autor"
+msgid "Download this page"
+msgstr "Descarga esta pagina"
+
msgid "Source repository"
msgstr "Repositorio de origen"
-msgid "previous page"
-msgstr "pagina anterior"
+msgid "By"
+msgstr "Por"
-msgid "next page"
-msgstr "siguiente página"
+msgid "repository"
+msgstr "repositorio"
+
+msgid "Last updated on"
+msgstr "Ultima actualización en"
msgid "Toggle navigation"
msgstr "Navegación de palanca"
-msgid "repository"
-msgstr "repositorio"
+msgid "Sphinx Book Theme"
+msgstr "Tema del libro de la esfinge"
msgid "suggest edit"
msgstr "sugerir editar"
-msgid "open issue"
-msgstr "Tema abierto"
+msgid "Open an issue"
+msgstr "Abrir un problema"
msgid "Launch"
msgstr "Lanzamiento"
-msgid "Print to PDF"
-msgstr "Imprimir en PDF"
+msgid "Fullscreen mode"
+msgstr "Modo de pantalla completa"
+
+msgid "Edit this page"
+msgstr "Edita esta página"
msgid "By the"
msgstr "Por el"
-msgid "Last updated on"
-msgstr "Ultima actualización en"
-
-msgid "Download source file"
-msgstr "Descargar archivo fuente"
-
-msgid "Download this page"
-msgstr "Descarga esta pagina"
+msgid "next page"
+msgstr "siguiente página"
diff --git a/_static/locales/et/LC_MESSAGES/booktheme.po b/_static/locales/et/LC_MESSAGES/booktheme.po
index 345088f0..8680982a 100644
--- a/_static/locales/et/LC_MESSAGES/booktheme.po
+++ b/_static/locales/et/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: et\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Prindi PDF-i"
+
msgid "Theme by the"
msgstr "Teema"
-msgid "Open an issue"
-msgstr "Avage probleem"
+msgid "Download source file"
+msgstr "Laadige alla lähtefail"
+
+msgid "open issue"
+msgstr "avatud küsimus"
msgid "Contents"
msgstr "Sisu"
+msgid "previous page"
+msgstr "eelmine leht"
+
msgid "Download notebook file"
msgstr "Laadige sülearvuti fail alla"
-msgid "Sphinx Book Theme"
-msgstr "Sfinksiraamatu teema"
-
-msgid "Fullscreen mode"
-msgstr "Täisekraanirežiim"
-
-msgid "Edit this page"
-msgstr "Muutke seda lehte"
-
-msgid "By"
-msgstr "Kõrval"
-
msgid "Copyright"
msgstr "Autoriõigus"
+msgid "Download this page"
+msgstr "Laadige see leht alla"
+
msgid "Source repository"
msgstr "Allikahoidla"
-msgid "previous page"
-msgstr "eelmine leht"
+msgid "By"
+msgstr "Kõrval"
-msgid "next page"
-msgstr "järgmine leht"
+msgid "repository"
+msgstr "hoidla"
+
+msgid "Last updated on"
+msgstr "Viimati uuendatud"
msgid "Toggle navigation"
msgstr "Lülita navigeerimine sisse"
-msgid "repository"
-msgstr "hoidla"
+msgid "Sphinx Book Theme"
+msgstr "Sfinksiraamatu teema"
msgid "suggest edit"
msgstr "soovita muuta"
-msgid "open issue"
-msgstr "avatud küsimus"
+msgid "Open an issue"
+msgstr "Avage probleem"
msgid "Launch"
msgstr "Käivitage"
-msgid "Print to PDF"
-msgstr "Prindi PDF-i"
+msgid "Fullscreen mode"
+msgstr "Täisekraanirežiim"
+
+msgid "Edit this page"
+msgstr "Muutke seda lehte"
msgid "By the"
msgstr "Autor"
-msgid "Last updated on"
-msgstr "Viimati uuendatud"
-
-msgid "Download source file"
-msgstr "Laadige alla lähtefail"
-
-msgid "Download this page"
-msgstr "Laadige see leht alla"
+msgid "next page"
+msgstr "järgmine leht"
diff --git a/_static/locales/fi/LC_MESSAGES/booktheme.po b/_static/locales/fi/LC_MESSAGES/booktheme.po
index d97a08dc..34dac218 100644
--- a/_static/locales/fi/LC_MESSAGES/booktheme.po
+++ b/_static/locales/fi/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: fi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Tulosta PDF-tiedostoon"
+
msgid "Theme by the"
msgstr "Teeman tekijä"
-msgid "Open an issue"
-msgstr "Avaa ongelma"
+msgid "Download source file"
+msgstr "Lataa lähdetiedosto"
+
+msgid "open issue"
+msgstr "avoin ongelma"
msgid "Contents"
msgstr "Sisällys"
+msgid "previous page"
+msgstr "Edellinen sivu"
+
msgid "Download notebook file"
msgstr "Lataa muistikirjatiedosto"
-msgid "Sphinx Book Theme"
-msgstr "Sphinx-kirjan teema"
-
-msgid "Fullscreen mode"
-msgstr "Koko näytön tila"
-
-msgid "Edit this page"
-msgstr "Muokkaa tätä sivua"
-
-msgid "By"
-msgstr "Tekijä"
-
msgid "Copyright"
msgstr "Tekijänoikeus"
+msgid "Download this page"
+msgstr "Lataa tämä sivu"
+
msgid "Source repository"
msgstr "Lähteen arkisto"
-msgid "previous page"
-msgstr "Edellinen sivu"
+msgid "By"
+msgstr "Tekijä"
-msgid "next page"
-msgstr "seuraava sivu"
+msgid "repository"
+msgstr "arkisto"
+
+msgid "Last updated on"
+msgstr "Viimeksi päivitetty"
msgid "Toggle navigation"
msgstr "Vaihda navigointia"
-msgid "repository"
-msgstr "arkisto"
+msgid "Sphinx Book Theme"
+msgstr "Sphinx-kirjan teema"
msgid "suggest edit"
msgstr "ehdottaa muokkausta"
-msgid "open issue"
-msgstr "avoin ongelma"
+msgid "Open an issue"
+msgstr "Avaa ongelma"
msgid "Launch"
msgstr "Tuoda markkinoille"
-msgid "Print to PDF"
-msgstr "Tulosta PDF-tiedostoon"
+msgid "Fullscreen mode"
+msgstr "Koko näytön tila"
+
+msgid "Edit this page"
+msgstr "Muokkaa tätä sivua"
msgid "By the"
msgstr "Mukaan"
-msgid "Last updated on"
-msgstr "Viimeksi päivitetty"
-
-msgid "Download source file"
-msgstr "Lataa lähdetiedosto"
-
-msgid "Download this page"
-msgstr "Lataa tämä sivu"
+msgid "next page"
+msgstr "seuraava sivu"
diff --git a/_static/locales/fr/LC_MESSAGES/booktheme.po b/_static/locales/fr/LC_MESSAGES/booktheme.po
index 88f35173..8991a1b8 100644
--- a/_static/locales/fr/LC_MESSAGES/booktheme.po
+++ b/_static/locales/fr/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Imprimer au format PDF"
+
msgid "Theme by the"
msgstr "Thème par le"
-msgid "Open an issue"
-msgstr "Ouvrez un problème"
+msgid "Download source file"
+msgstr "Télécharger le fichier source"
+
+msgid "open issue"
+msgstr "signaler un problème"
msgid "Contents"
msgstr "Contenu"
+msgid "previous page"
+msgstr "page précédente"
+
msgid "Download notebook file"
msgstr "Télécharger le fichier notebook"
-msgid "Sphinx Book Theme"
-msgstr "Thème du livre Sphinx"
-
-msgid "Fullscreen mode"
-msgstr "Mode plein écran"
-
-msgid "Edit this page"
-msgstr "Modifier cette page"
-
-msgid "By"
-msgstr "Par"
-
msgid "Copyright"
msgstr "droits d'auteur"
+msgid "Download this page"
+msgstr "Téléchargez cette page"
+
msgid "Source repository"
msgstr "Dépôt source"
-msgid "previous page"
-msgstr "page précédente"
+msgid "By"
+msgstr "Par"
-msgid "next page"
-msgstr "page suivante"
+msgid "repository"
+msgstr "dépôt"
+
+msgid "Last updated on"
+msgstr "Dernière mise à jour le"
msgid "Toggle navigation"
msgstr "Basculer la navigation"
-msgid "repository"
-msgstr "dépôt"
+msgid "Sphinx Book Theme"
+msgstr "Thème du livre Sphinx"
msgid "suggest edit"
msgstr "suggestion de modification"
-msgid "open issue"
-msgstr "signaler un problème"
+msgid "Open an issue"
+msgstr "Ouvrez un problème"
msgid "Launch"
msgstr "lancement"
-msgid "Print to PDF"
-msgstr "Imprimer au format PDF"
+msgid "Fullscreen mode"
+msgstr "Mode plein écran"
+
+msgid "Edit this page"
+msgstr "Modifier cette page"
msgid "By the"
msgstr "Par le"
-msgid "Last updated on"
-msgstr "Dernière mise à jour le"
-
-msgid "Download source file"
-msgstr "Télécharger le fichier source"
-
-msgid "Download this page"
-msgstr "Téléchargez cette page"
+msgid "next page"
+msgstr "page suivante"
diff --git a/_static/locales/hr/LC_MESSAGES/booktheme.po b/_static/locales/hr/LC_MESSAGES/booktheme.po
index fb9440ac..42c4233d 100644
--- a/_static/locales/hr/LC_MESSAGES/booktheme.po
+++ b/_static/locales/hr/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: hr\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Ispis u PDF"
+
msgid "Theme by the"
msgstr "Tema autora"
-msgid "Open an issue"
-msgstr "Otvorite izdanje"
+msgid "Download source file"
+msgstr "Preuzmi izvornu datoteku"
+
+msgid "open issue"
+msgstr "otvoreno izdanje"
msgid "Contents"
msgstr "Sadržaj"
+msgid "previous page"
+msgstr "Prethodna stranica"
+
msgid "Download notebook file"
msgstr "Preuzmi datoteku bilježnice"
-msgid "Sphinx Book Theme"
-msgstr "Tema knjige Sphinx"
-
-msgid "Fullscreen mode"
-msgstr "Način preko cijelog zaslona"
-
-msgid "Edit this page"
-msgstr "Uredite ovu stranicu"
-
-msgid "By"
-msgstr "Po"
-
msgid "Copyright"
msgstr "Autorska prava"
+msgid "Download this page"
+msgstr "Preuzmite ovu stranicu"
+
msgid "Source repository"
msgstr "Izvorno spremište"
-msgid "previous page"
-msgstr "Prethodna stranica"
+msgid "By"
+msgstr "Po"
-msgid "next page"
-msgstr "sljedeća stranica"
+msgid "repository"
+msgstr "spremište"
+
+msgid "Last updated on"
+msgstr "Posljednje ažuriranje:"
msgid "Toggle navigation"
msgstr "Uključi / isključi navigaciju"
-msgid "repository"
-msgstr "spremište"
+msgid "Sphinx Book Theme"
+msgstr "Tema knjige Sphinx"
msgid "suggest edit"
msgstr "predloži uređivanje"
-msgid "open issue"
-msgstr "otvoreno izdanje"
+msgid "Open an issue"
+msgstr "Otvorite izdanje"
msgid "Launch"
msgstr "Pokrenite"
-msgid "Print to PDF"
-msgstr "Ispis u PDF"
+msgid "Fullscreen mode"
+msgstr "Način preko cijelog zaslona"
+
+msgid "Edit this page"
+msgstr "Uredite ovu stranicu"
msgid "By the"
msgstr "Od strane"
-msgid "Last updated on"
-msgstr "Posljednje ažuriranje:"
-
-msgid "Download source file"
-msgstr "Preuzmi izvornu datoteku"
-
-msgid "Download this page"
-msgstr "Preuzmite ovu stranicu"
+msgid "next page"
+msgstr "sljedeća stranica"
diff --git a/_static/locales/id/LC_MESSAGES/booktheme.po b/_static/locales/id/LC_MESSAGES/booktheme.po
index 9ffb56f7..b8d8d898 100644
--- a/_static/locales/id/LC_MESSAGES/booktheme.po
+++ b/_static/locales/id/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Cetak ke PDF"
+
msgid "Theme by the"
msgstr "Tema oleh"
-msgid "Open an issue"
-msgstr "Buka masalah"
+msgid "Download source file"
+msgstr "Unduh file sumber"
+
+msgid "open issue"
+msgstr "masalah terbuka"
msgid "Contents"
msgstr "Isi"
+msgid "previous page"
+msgstr "halaman sebelumnya"
+
msgid "Download notebook file"
msgstr "Unduh file notebook"
-msgid "Sphinx Book Theme"
-msgstr "Tema Buku Sphinx"
-
-msgid "Fullscreen mode"
-msgstr "Mode layar penuh"
-
-msgid "Edit this page"
-msgstr "Edit halaman ini"
-
-msgid "By"
-msgstr "Oleh"
-
msgid "Copyright"
msgstr "hak cipta"
+msgid "Download this page"
+msgstr "Unduh halaman ini"
+
msgid "Source repository"
msgstr "Repositori sumber"
-msgid "previous page"
-msgstr "halaman sebelumnya"
+msgid "By"
+msgstr "Oleh"
-msgid "next page"
-msgstr "halaman selanjutnya"
+msgid "repository"
+msgstr "gudang"
+
+msgid "Last updated on"
+msgstr "Terakhir diperbarui saat"
msgid "Toggle navigation"
msgstr "Alihkan navigasi"
-msgid "repository"
-msgstr "gudang"
+msgid "Sphinx Book Theme"
+msgstr "Tema Buku Sphinx"
msgid "suggest edit"
msgstr "menyarankan edit"
-msgid "open issue"
-msgstr "masalah terbuka"
+msgid "Open an issue"
+msgstr "Buka masalah"
msgid "Launch"
msgstr "Meluncurkan"
-msgid "Print to PDF"
-msgstr "Cetak ke PDF"
+msgid "Fullscreen mode"
+msgstr "Mode layar penuh"
+
+msgid "Edit this page"
+msgstr "Edit halaman ini"
msgid "By the"
msgstr "Oleh"
-msgid "Last updated on"
-msgstr "Terakhir diperbarui saat"
-
-msgid "Download source file"
-msgstr "Unduh file sumber"
-
-msgid "Download this page"
-msgstr "Unduh halaman ini"
+msgid "next page"
+msgstr "halaman selanjutnya"
diff --git a/_static/locales/it/LC_MESSAGES/booktheme.po b/_static/locales/it/LC_MESSAGES/booktheme.po
index 04308dd2..36fca59f 100644
--- a/_static/locales/it/LC_MESSAGES/booktheme.po
+++ b/_static/locales/it/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Stampa in PDF"
+
msgid "Theme by the"
msgstr "Tema di"
-msgid "Open an issue"
-msgstr "Apri un problema"
+msgid "Download source file"
+msgstr "Scarica il file sorgente"
+
+msgid "open issue"
+msgstr "questione aperta"
msgid "Contents"
msgstr "Contenuti"
+msgid "previous page"
+msgstr "pagina precedente"
+
msgid "Download notebook file"
msgstr "Scarica il file del taccuino"
-msgid "Sphinx Book Theme"
-msgstr "Tema del libro della Sfinge"
-
-msgid "Fullscreen mode"
-msgstr "Modalità schermo intero"
-
-msgid "Edit this page"
-msgstr "Modifica questa pagina"
-
-msgid "By"
-msgstr "Di"
-
msgid "Copyright"
msgstr "Diritto d'autore"
+msgid "Download this page"
+msgstr "Scarica questa pagina"
+
msgid "Source repository"
msgstr "Repository di origine"
-msgid "previous page"
-msgstr "pagina precedente"
+msgid "By"
+msgstr "Di"
-msgid "next page"
-msgstr "pagina successiva"
+msgid "repository"
+msgstr "repository"
+
+msgid "Last updated on"
+msgstr "Ultimo aggiornamento il"
msgid "Toggle navigation"
msgstr "Attiva / disattiva la navigazione"
-msgid "repository"
-msgstr "repository"
+msgid "Sphinx Book Theme"
+msgstr "Tema del libro della Sfinge"
msgid "suggest edit"
msgstr "suggerisci modifica"
-msgid "open issue"
-msgstr "questione aperta"
+msgid "Open an issue"
+msgstr "Apri un problema"
msgid "Launch"
msgstr "Lanciare"
-msgid "Print to PDF"
-msgstr "Stampa in PDF"
+msgid "Fullscreen mode"
+msgstr "Modalità schermo intero"
+
+msgid "Edit this page"
+msgstr "Modifica questa pagina"
msgid "By the"
msgstr "Dal"
-msgid "Last updated on"
-msgstr "Ultimo aggiornamento il"
-
-msgid "Download source file"
-msgstr "Scarica il file sorgente"
-
-msgid "Download this page"
-msgstr "Scarica questa pagina"
+msgid "next page"
+msgstr "pagina successiva"
diff --git a/_static/locales/iw/LC_MESSAGES/booktheme.po b/_static/locales/iw/LC_MESSAGES/booktheme.po
index 4ea190d3..dede9cb0 100644
--- a/_static/locales/iw/LC_MESSAGES/booktheme.po
+++ b/_static/locales/iw/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: iw\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "הדפס לקובץ PDF"
+
msgid "Theme by the"
msgstr "נושא מאת"
-msgid "Open an issue"
-msgstr "פתח גיליון"
+msgid "Download source file"
+msgstr "הורד את קובץ המקור"
+
+msgid "open issue"
+msgstr "בעיה פתוחה"
msgid "Contents"
msgstr "תוכן"
+msgid "previous page"
+msgstr "עמוד קודם"
+
msgid "Download notebook file"
msgstr "הורד קובץ מחברת"
-msgid "Sphinx Book Theme"
-msgstr "נושא ספר ספינקס"
-
-msgid "Fullscreen mode"
-msgstr "מצב מסך מלא"
-
-msgid "Edit this page"
-msgstr "ערוך דף זה"
-
-msgid "By"
-msgstr "על ידי"
-
msgid "Copyright"
msgstr "זכויות יוצרים"
+msgid "Download this page"
+msgstr "הורד דף זה"
+
msgid "Source repository"
msgstr "מאגר המקורות"
-msgid "previous page"
-msgstr "עמוד קודם"
+msgid "By"
+msgstr "על ידי"
-msgid "next page"
-msgstr "עמוד הבא"
+msgid "repository"
+msgstr "מאגר"
+
+msgid "Last updated on"
+msgstr "עודכן לאחרונה ב"
msgid "Toggle navigation"
msgstr "החלף ניווט"
-msgid "repository"
-msgstr "מאגר"
+msgid "Sphinx Book Theme"
+msgstr "נושא ספר ספינקס"
msgid "suggest edit"
msgstr "מציע לערוך"
-msgid "open issue"
-msgstr "בעיה פתוחה"
+msgid "Open an issue"
+msgstr "פתח גיליון"
msgid "Launch"
msgstr "לְהַשִׁיק"
-msgid "Print to PDF"
-msgstr "הדפס לקובץ PDF"
+msgid "Fullscreen mode"
+msgstr "מצב מסך מלא"
+
+msgid "Edit this page"
+msgstr "ערוך דף זה"
msgid "By the"
msgstr "דרך"
-msgid "Last updated on"
-msgstr "עודכן לאחרונה ב"
-
-msgid "Download source file"
-msgstr "הורד את קובץ המקור"
-
-msgid "Download this page"
-msgstr "הורד דף זה"
+msgid "next page"
+msgstr "עמוד הבא"
diff --git a/_static/locales/ja/LC_MESSAGES/booktheme.po b/_static/locales/ja/LC_MESSAGES/booktheme.po
index 77d5a097..2615f0d8 100644
--- a/_static/locales/ja/LC_MESSAGES/booktheme.po
+++ b/_static/locales/ja/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: ja\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "PDFに印刷"
+
msgid "Theme by the"
msgstr "のテーマ"
-msgid "Open an issue"
-msgstr "問題を報告"
+msgid "Download source file"
+msgstr "ソースファイルをダウンロード"
+
+msgid "open issue"
+msgstr "未解決の問題"
msgid "Contents"
msgstr "目次"
+msgid "previous page"
+msgstr "前のページ"
+
msgid "Download notebook file"
msgstr "ノートブックファイルをダウンロード"
-msgid "Sphinx Book Theme"
-msgstr "スフィンクスの本のテーマ"
-
-msgid "Fullscreen mode"
-msgstr "全画面モード"
-
-msgid "Edit this page"
-msgstr "このページを編集"
-
-msgid "By"
-msgstr "著者"
-
msgid "Copyright"
msgstr "Copyright"
+msgid "Download this page"
+msgstr "このページをダウンロード"
+
msgid "Source repository"
msgstr "ソースリポジトリ"
-msgid "previous page"
-msgstr "前のページ"
+msgid "By"
+msgstr "著者"
-msgid "next page"
-msgstr "次のページ"
+msgid "repository"
+msgstr "リポジトリ"
+
+msgid "Last updated on"
+msgstr "最終更新日"
msgid "Toggle navigation"
msgstr "ナビゲーションを切り替え"
-msgid "repository"
-msgstr "リポジトリ"
+msgid "Sphinx Book Theme"
+msgstr "スフィンクスの本のテーマ"
msgid "suggest edit"
msgstr "編集を提案する"
-msgid "open issue"
-msgstr "未解決の問題"
+msgid "Open an issue"
+msgstr "問題を報告"
msgid "Launch"
msgstr "起動"
-msgid "Print to PDF"
-msgstr "PDFに印刷"
+msgid "Fullscreen mode"
+msgstr "全画面モード"
+
+msgid "Edit this page"
+msgstr "このページを編集"
msgid "By the"
msgstr "によって"
-msgid "Last updated on"
-msgstr "最終更新日"
-
-msgid "Download source file"
-msgstr "ソースファイルをダウンロード"
-
-msgid "Download this page"
-msgstr "このページをダウンロード"
+msgid "next page"
+msgstr "次のページ"
diff --git a/_static/locales/ko/LC_MESSAGES/booktheme.po b/_static/locales/ko/LC_MESSAGES/booktheme.po
index 6ee3d781..c9e13a42 100644
--- a/_static/locales/ko/LC_MESSAGES/booktheme.po
+++ b/_static/locales/ko/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: ko\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "PDF로 인쇄"
+
msgid "Theme by the"
msgstr "테마별"
-msgid "Open an issue"
-msgstr "이슈 열기"
+msgid "Download source file"
+msgstr "소스 파일 다운로드"
+
+msgid "open issue"
+msgstr "열린 문제"
msgid "Contents"
msgstr "내용"
+msgid "previous page"
+msgstr "이전 페이지"
+
msgid "Download notebook file"
msgstr "노트북 파일 다운로드"
-msgid "Sphinx Book Theme"
-msgstr "스핑크스 도서 테마"
-
-msgid "Fullscreen mode"
-msgstr "전체 화면으로보기"
-
-msgid "Edit this page"
-msgstr "이 페이지 편집"
-
-msgid "By"
-msgstr "으로"
-
msgid "Copyright"
msgstr "저작권"
+msgid "Download this page"
+msgstr "이 페이지 다운로드"
+
msgid "Source repository"
msgstr "소스 저장소"
-msgid "previous page"
-msgstr "이전 페이지"
+msgid "By"
+msgstr "으로"
-msgid "next page"
-msgstr "다음 페이지"
+msgid "repository"
+msgstr "저장소"
+
+msgid "Last updated on"
+msgstr "마지막 업데이트"
msgid "Toggle navigation"
msgstr "탐색 전환"
-msgid "repository"
-msgstr "저장소"
+msgid "Sphinx Book Theme"
+msgstr "스핑크스 도서 테마"
msgid "suggest edit"
msgstr "편집 제안"
-msgid "open issue"
-msgstr "열린 문제"
+msgid "Open an issue"
+msgstr "이슈 열기"
msgid "Launch"
msgstr "시작하다"
-msgid "Print to PDF"
-msgstr "PDF로 인쇄"
+msgid "Fullscreen mode"
+msgstr "전체 화면으로보기"
+
+msgid "Edit this page"
+msgstr "이 페이지 편집"
msgid "By the"
msgstr "에 의해"
-msgid "Last updated on"
-msgstr "마지막 업데이트"
-
-msgid "Download source file"
-msgstr "소스 파일 다운로드"
-
-msgid "Download this page"
-msgstr "이 페이지 다운로드"
+msgid "next page"
+msgstr "다음 페이지"
diff --git a/_static/locales/lt/LC_MESSAGES/booktheme.po b/_static/locales/lt/LC_MESSAGES/booktheme.po
index 01be2679..35eabd95 100644
--- a/_static/locales/lt/LC_MESSAGES/booktheme.po
+++ b/_static/locales/lt/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: lt\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Spausdinti į PDF"
+
msgid "Theme by the"
msgstr "Tema"
-msgid "Open an issue"
-msgstr "Atidarykite problemą"
+msgid "Download source file"
+msgstr "Atsisiųsti šaltinio failą"
+
+msgid "open issue"
+msgstr "atviras klausimas"
msgid "Contents"
msgstr "Turinys"
+msgid "previous page"
+msgstr "Ankstesnis puslapis"
+
msgid "Download notebook file"
msgstr "Atsisiųsti nešiojamojo kompiuterio failą"
-msgid "Sphinx Book Theme"
-msgstr "Sfinkso knygos tema"
-
-msgid "Fullscreen mode"
-msgstr "Pilno ekrano režimas"
-
-msgid "Edit this page"
-msgstr "Redaguoti šį puslapį"
-
-msgid "By"
-msgstr "Iki"
-
msgid "Copyright"
msgstr "Autorių teisės"
+msgid "Download this page"
+msgstr "Atsisiųskite šį puslapį"
+
msgid "Source repository"
msgstr "Šaltinio saugykla"
-msgid "previous page"
-msgstr "Ankstesnis puslapis"
+msgid "By"
+msgstr "Iki"
-msgid "next page"
-msgstr "Kitas puslapis"
+msgid "repository"
+msgstr "saugykla"
+
+msgid "Last updated on"
+msgstr "Paskutinį kartą atnaujinta"
msgid "Toggle navigation"
msgstr "Perjungti naršymą"
-msgid "repository"
-msgstr "saugykla"
+msgid "Sphinx Book Theme"
+msgstr "Sfinkso knygos tema"
msgid "suggest edit"
msgstr "pasiūlyti redaguoti"
-msgid "open issue"
-msgstr "atviras klausimas"
+msgid "Open an issue"
+msgstr "Atidarykite problemą"
msgid "Launch"
msgstr "Paleiskite"
-msgid "Print to PDF"
-msgstr "Spausdinti į PDF"
+msgid "Fullscreen mode"
+msgstr "Pilno ekrano režimas"
+
+msgid "Edit this page"
+msgstr "Redaguoti šį puslapį"
msgid "By the"
msgstr "Prie"
-msgid "Last updated on"
-msgstr "Paskutinį kartą atnaujinta"
-
-msgid "Download source file"
-msgstr "Atsisiųsti šaltinio failą"
-
-msgid "Download this page"
-msgstr "Atsisiųskite šį puslapį"
+msgid "next page"
+msgstr "Kitas puslapis"
diff --git a/_static/locales/lv/LC_MESSAGES/booktheme.po b/_static/locales/lv/LC_MESSAGES/booktheme.po
index 993a1e41..ee1bd08d 100644
--- a/_static/locales/lv/LC_MESSAGES/booktheme.po
+++ b/_static/locales/lv/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: lv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Drukāt PDF formātā"
+
msgid "Theme by the"
msgstr "Autora tēma"
-msgid "Open an issue"
-msgstr "Atveriet problēmu"
+msgid "Download source file"
+msgstr "Lejupielādēt avota failu"
+
+msgid "open issue"
+msgstr "atklāts jautājums"
msgid "Contents"
msgstr "Saturs"
+msgid "previous page"
+msgstr "iepriekšējā lapa"
+
msgid "Download notebook file"
msgstr "Lejupielādēt piezīmju grāmatiņu"
-msgid "Sphinx Book Theme"
-msgstr "Sfinksa grāmatas tēma"
-
-msgid "Fullscreen mode"
-msgstr "Pilnekrāna režīms"
-
-msgid "Edit this page"
-msgstr "Rediģēt šo lapu"
-
-msgid "By"
-msgstr "Autors"
-
msgid "Copyright"
msgstr "Autortiesības"
+msgid "Download this page"
+msgstr "Lejupielādējiet šo lapu"
+
msgid "Source repository"
msgstr "Avota krātuve"
-msgid "previous page"
-msgstr "iepriekšējā lapa"
+msgid "By"
+msgstr "Autors"
-msgid "next page"
-msgstr "nākamā lapaspuse"
+msgid "repository"
+msgstr "krātuve"
+
+msgid "Last updated on"
+msgstr "Pēdējoreiz atjaunināts"
msgid "Toggle navigation"
msgstr "Pārslēgt navigāciju"
-msgid "repository"
-msgstr "krātuve"
+msgid "Sphinx Book Theme"
+msgstr "Sfinksa grāmatas tēma"
msgid "suggest edit"
msgstr "ieteikt rediģēt"
-msgid "open issue"
-msgstr "atklāts jautājums"
+msgid "Open an issue"
+msgstr "Atveriet problēmu"
msgid "Launch"
msgstr "Uzsākt"
-msgid "Print to PDF"
-msgstr "Drukāt PDF formātā"
+msgid "Fullscreen mode"
+msgstr "Pilnekrāna režīms"
+
+msgid "Edit this page"
+msgstr "Rediģēt šo lapu"
msgid "By the"
msgstr "Ar"
-msgid "Last updated on"
-msgstr "Pēdējoreiz atjaunināts"
-
-msgid "Download source file"
-msgstr "Lejupielādēt avota failu"
-
-msgid "Download this page"
-msgstr "Lejupielādējiet šo lapu"
+msgid "next page"
+msgstr "nākamā lapaspuse"
diff --git a/_static/locales/ml/LC_MESSAGES/booktheme.po b/_static/locales/ml/LC_MESSAGES/booktheme.po
index 81daf7c8..d471277d 100644
--- a/_static/locales/ml/LC_MESSAGES/booktheme.po
+++ b/_static/locales/ml/LC_MESSAGES/booktheme.po
@@ -8,59 +8,59 @@ msgstr ""
"Language: ml\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "PDF- ലേക്ക് പ്രിന്റുചെയ്യുക"
+
msgid "Theme by the"
msgstr "പ്രമേയം"
-msgid "Open an issue"
-msgstr "ഒരു പ്രശ്നം തുറക്കുക"
-
-msgid "Download notebook file"
-msgstr "നോട്ട്ബുക്ക് ഫയൽ ഡൺലോഡ് ചെയ്യുക"
+msgid "Download source file"
+msgstr "ഉറവിട ഫയൽ ഡൗൺലോഡുചെയ്യുക"
-msgid "Sphinx Book Theme"
-msgstr "സ്ഫിങ്ക്സ് പുസ്തക തീം"
+msgid "open issue"
+msgstr "തുറന്ന പ്രശ്നം"
-msgid "Edit this page"
-msgstr "ഈ പേജ് എഡിറ്റുചെയ്യുക"
+msgid "previous page"
+msgstr "മുൻപത്തെ താൾ"
-msgid "By"
-msgstr "എഴുതിയത്"
+msgid "Download notebook file"
+msgstr "നോട്ട്ബുക്ക് ഫയൽ ഡൺലോഡ് ചെയ്യുക"
msgid "Copyright"
msgstr "പകർപ്പവകാശം"
+msgid "Download this page"
+msgstr "ഈ പേജ് ഡൗൺലോഡുചെയ്യുക"
+
msgid "Source repository"
msgstr "ഉറവിട ശേഖരം"
-msgid "previous page"
-msgstr "മുൻപത്തെ താൾ"
+msgid "By"
+msgstr "എഴുതിയത്"
-msgid "next page"
-msgstr "അടുത്ത പേജ്"
+msgid "Last updated on"
+msgstr "അവസാനം അപ്ഡേറ്റുചെയ്തത്"
msgid "Toggle navigation"
msgstr "നാവിഗേഷൻ ടോഗിൾ ചെയ്യുക"
+msgid "Sphinx Book Theme"
+msgstr "സ്ഫിങ്ക്സ് പുസ്തക തീം"
+
msgid "suggest edit"
msgstr "എഡിറ്റുചെയ്യാൻ നിർദ്ദേശിക്കുക"
-msgid "open issue"
-msgstr "തുറന്ന പ്രശ്നം"
+msgid "Open an issue"
+msgstr "ഒരു പ്രശ്നം തുറക്കുക"
msgid "Launch"
msgstr "സമാരംഭിക്കുക"
-msgid "Print to PDF"
-msgstr "PDF- ലേക്ക് പ്രിന്റുചെയ്യുക"
+msgid "Edit this page"
+msgstr "ഈ പേജ് എഡിറ്റുചെയ്യുക"
msgid "By the"
msgstr "എഴുതിയത്"
-msgid "Last updated on"
-msgstr "അവസാനം അപ്ഡേറ്റുചെയ്തത്"
-
-msgid "Download source file"
-msgstr "ഉറവിട ഫയൽ ഡൗൺലോഡുചെയ്യുക"
-
-msgid "Download this page"
-msgstr "ഈ പേജ് ഡൗൺലോഡുചെയ്യുക"
+msgid "next page"
+msgstr "അടുത്ത പേജ്"
diff --git a/_static/locales/mr/LC_MESSAGES/booktheme.po b/_static/locales/mr/LC_MESSAGES/booktheme.po
index fd857bff..f3694acf 100644
--- a/_static/locales/mr/LC_MESSAGES/booktheme.po
+++ b/_static/locales/mr/LC_MESSAGES/booktheme.po
@@ -8,59 +8,59 @@ msgstr ""
"Language: mr\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "पीडीएफवर मुद्रित करा"
+
msgid "Theme by the"
msgstr "द्वारा थीम"
-msgid "Open an issue"
-msgstr "एक मुद्दा उघडा"
-
-msgid "Download notebook file"
-msgstr "नोटबुक फाईल डाउनलोड करा"
+msgid "Download source file"
+msgstr "स्त्रोत फाइल डाउनलोड करा"
-msgid "Sphinx Book Theme"
-msgstr "स्फिंक्स बुक थीम"
+msgid "open issue"
+msgstr "खुला मुद्दा"
-msgid "Edit this page"
-msgstr "हे पृष्ठ संपादित करा"
+msgid "previous page"
+msgstr "मागील पान"
-msgid "By"
-msgstr "द्वारा"
+msgid "Download notebook file"
+msgstr "नोटबुक फाईल डाउनलोड करा"
msgid "Copyright"
msgstr "कॉपीराइट"
+msgid "Download this page"
+msgstr "हे पृष्ठ डाउनलोड करा"
+
msgid "Source repository"
msgstr "स्त्रोत भांडार"
-msgid "previous page"
-msgstr "मागील पान"
+msgid "By"
+msgstr "द्वारा"
-msgid "next page"
-msgstr "पुढील पृष्ठ"
+msgid "Last updated on"
+msgstr "अखेरचे अद्यतनित"
msgid "Toggle navigation"
msgstr "नेव्हिगेशन टॉगल करा"
+msgid "Sphinx Book Theme"
+msgstr "स्फिंक्स बुक थीम"
+
msgid "suggest edit"
msgstr "संपादन सुचवा"
-msgid "open issue"
-msgstr "खुला मुद्दा"
+msgid "Open an issue"
+msgstr "एक मुद्दा उघडा"
msgid "Launch"
msgstr "लाँच करा"
-msgid "Print to PDF"
-msgstr "पीडीएफवर मुद्रित करा"
+msgid "Edit this page"
+msgstr "हे पृष्ठ संपादित करा"
msgid "By the"
msgstr "द्वारा"
-msgid "Last updated on"
-msgstr "अखेरचे अद्यतनित"
-
-msgid "Download source file"
-msgstr "स्त्रोत फाइल डाउनलोड करा"
-
-msgid "Download this page"
-msgstr "हे पृष्ठ डाउनलोड करा"
+msgid "next page"
+msgstr "पुढील पृष्ठ"
diff --git a/_static/locales/ms/LC_MESSAGES/booktheme.po b/_static/locales/ms/LC_MESSAGES/booktheme.po
index b616d70f..65b7c602 100644
--- a/_static/locales/ms/LC_MESSAGES/booktheme.po
+++ b/_static/locales/ms/LC_MESSAGES/booktheme.po
@@ -8,59 +8,59 @@ msgstr ""
"Language: ms\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Cetak ke PDF"
+
msgid "Theme by the"
msgstr "Tema oleh"
-msgid "Open an issue"
-msgstr "Buka masalah"
-
-msgid "Download notebook file"
-msgstr "Muat turun fail buku nota"
+msgid "Download source file"
+msgstr "Muat turun fail sumber"
-msgid "Sphinx Book Theme"
-msgstr "Tema Buku Sphinx"
+msgid "open issue"
+msgstr "isu terbuka"
-msgid "Edit this page"
-msgstr "Edit halaman ini"
+msgid "previous page"
+msgstr "halaman sebelumnya"
-msgid "By"
-msgstr "Oleh"
+msgid "Download notebook file"
+msgstr "Muat turun fail buku nota"
msgid "Copyright"
msgstr "hak cipta"
+msgid "Download this page"
+msgstr "Muat turun halaman ini"
+
msgid "Source repository"
msgstr "Repositori sumber"
-msgid "previous page"
-msgstr "halaman sebelumnya"
+msgid "By"
+msgstr "Oleh"
-msgid "next page"
-msgstr "muka surat seterusnya"
+msgid "Last updated on"
+msgstr "Terakhir dikemas kini pada"
msgid "Toggle navigation"
msgstr "Togol navigasi"
+msgid "Sphinx Book Theme"
+msgstr "Tema Buku Sphinx"
+
msgid "suggest edit"
msgstr "cadangkan edit"
-msgid "open issue"
-msgstr "isu terbuka"
+msgid "Open an issue"
+msgstr "Buka masalah"
msgid "Launch"
msgstr "Lancarkan"
-msgid "Print to PDF"
-msgstr "Cetak ke PDF"
+msgid "Edit this page"
+msgstr "Edit halaman ini"
msgid "By the"
msgstr "Oleh"
-msgid "Last updated on"
-msgstr "Terakhir dikemas kini pada"
-
-msgid "Download source file"
-msgstr "Muat turun fail sumber"
-
-msgid "Download this page"
-msgstr "Muat turun halaman ini"
+msgid "next page"
+msgstr "muka surat seterusnya"
diff --git a/_static/locales/nl/LC_MESSAGES/booktheme.po b/_static/locales/nl/LC_MESSAGES/booktheme.po
index f16f4bcc..71bd1cda 100644
--- a/_static/locales/nl/LC_MESSAGES/booktheme.po
+++ b/_static/locales/nl/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Afdrukken naar pdf"
+
msgid "Theme by the"
msgstr "Thema door de"
-msgid "Open an issue"
-msgstr "Open een probleem"
+msgid "Download source file"
+msgstr "Download het bronbestand"
+
+msgid "open issue"
+msgstr "open probleem"
msgid "Contents"
msgstr "Inhoud"
+msgid "previous page"
+msgstr "vorige pagina"
+
msgid "Download notebook file"
msgstr "Download notebookbestand"
-msgid "Sphinx Book Theme"
-msgstr "Sphinx-boekthema"
-
-msgid "Fullscreen mode"
-msgstr "Volledig scherm"
-
-msgid "Edit this page"
-msgstr "bewerk deze pagina"
-
-msgid "By"
-msgstr "Door"
-
msgid "Copyright"
msgstr "auteursrechten"
+msgid "Download this page"
+msgstr "Download deze pagina"
+
msgid "Source repository"
msgstr "Bronopslagplaats"
-msgid "previous page"
-msgstr "vorige pagina"
+msgid "By"
+msgstr "Door"
-msgid "next page"
-msgstr "volgende bladzijde"
+msgid "repository"
+msgstr "repository"
+
+msgid "Last updated on"
+msgstr "Laatst geupdate op"
msgid "Toggle navigation"
msgstr "Schakel navigatie"
-msgid "repository"
-msgstr "repository"
+msgid "Sphinx Book Theme"
+msgstr "Sphinx-boekthema"
msgid "suggest edit"
msgstr "suggereren bewerken"
-msgid "open issue"
-msgstr "open probleem"
+msgid "Open an issue"
+msgstr "Open een probleem"
msgid "Launch"
msgstr "Lancering"
-msgid "Print to PDF"
-msgstr "Afdrukken naar pdf"
+msgid "Fullscreen mode"
+msgstr "Volledig scherm"
+
+msgid "Edit this page"
+msgstr "bewerk deze pagina"
msgid "By the"
msgstr "Door de"
-msgid "Last updated on"
-msgstr "Laatst geupdate op"
-
-msgid "Download source file"
-msgstr "Download het bronbestand"
-
-msgid "Download this page"
-msgstr "Download deze pagina"
+msgid "next page"
+msgstr "volgende bladzijde"
diff --git a/_static/locales/no/LC_MESSAGES/booktheme.po b/_static/locales/no/LC_MESSAGES/booktheme.po
index b1d304ee..b21346a5 100644
--- a/_static/locales/no/LC_MESSAGES/booktheme.po
+++ b/_static/locales/no/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: no\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Skriv ut til PDF"
+
msgid "Theme by the"
msgstr "Tema av"
-msgid "Open an issue"
-msgstr "Åpne et problem"
+msgid "Download source file"
+msgstr "Last ned kildefilen"
+
+msgid "open issue"
+msgstr "åpent nummer"
msgid "Contents"
msgstr "Innhold"
+msgid "previous page"
+msgstr "forrige side"
+
msgid "Download notebook file"
msgstr "Last ned notatbokfilen"
-msgid "Sphinx Book Theme"
-msgstr "Sphinx boktema"
-
-msgid "Fullscreen mode"
-msgstr "Fullskjerm-modus"
-
-msgid "Edit this page"
-msgstr "Rediger denne siden"
-
-msgid "By"
-msgstr "Av"
-
msgid "Copyright"
msgstr "opphavsrett"
+msgid "Download this page"
+msgstr "Last ned denne siden"
+
msgid "Source repository"
msgstr "Kildedepot"
-msgid "previous page"
-msgstr "forrige side"
+msgid "By"
+msgstr "Av"
-msgid "next page"
-msgstr "neste side"
+msgid "repository"
+msgstr "oppbevaringssted"
+
+msgid "Last updated on"
+msgstr "Sist oppdatert den"
msgid "Toggle navigation"
msgstr "Bytt navigasjon"
-msgid "repository"
-msgstr "oppbevaringssted"
+msgid "Sphinx Book Theme"
+msgstr "Sphinx boktema"
msgid "suggest edit"
msgstr "foreslå redigering"
-msgid "open issue"
-msgstr "åpent nummer"
+msgid "Open an issue"
+msgstr "Åpne et problem"
msgid "Launch"
msgstr "Start"
-msgid "Print to PDF"
-msgstr "Skriv ut til PDF"
+msgid "Fullscreen mode"
+msgstr "Fullskjerm-modus"
+
+msgid "Edit this page"
+msgstr "Rediger denne siden"
msgid "By the"
msgstr "Ved"
-msgid "Last updated on"
-msgstr "Sist oppdatert den"
-
-msgid "Download source file"
-msgstr "Last ned kildefilen"
-
-msgid "Download this page"
-msgstr "Last ned denne siden"
+msgid "next page"
+msgstr "neste side"
diff --git a/_static/locales/pl/LC_MESSAGES/booktheme.po b/_static/locales/pl/LC_MESSAGES/booktheme.po
index 80d2c896..1b7233f4 100644
--- a/_static/locales/pl/LC_MESSAGES/booktheme.po
+++ b/_static/locales/pl/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: pl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Drukuj do PDF"
+
msgid "Theme by the"
msgstr "Motyw autorstwa"
-msgid "Open an issue"
-msgstr "Otwórz problem"
+msgid "Download source file"
+msgstr "Pobierz plik źródłowy"
+
+msgid "open issue"
+msgstr "otwarty problem"
msgid "Contents"
msgstr "Zawartość"
+msgid "previous page"
+msgstr "Poprzednia strona"
+
msgid "Download notebook file"
msgstr "Pobierz plik notatnika"
-msgid "Sphinx Book Theme"
-msgstr "Motyw książki Sphinx"
-
-msgid "Fullscreen mode"
-msgstr "Pełny ekran"
-
-msgid "Edit this page"
-msgstr "Edytuj tę strone"
-
-msgid "By"
-msgstr "Przez"
-
msgid "Copyright"
msgstr "prawa autorskie"
+msgid "Download this page"
+msgstr "Pobierz tę stronę"
+
msgid "Source repository"
msgstr "Repozytorium źródłowe"
-msgid "previous page"
-msgstr "Poprzednia strona"
+msgid "By"
+msgstr "Przez"
-msgid "next page"
-msgstr "Następna strona"
+msgid "repository"
+msgstr "magazyn"
+
+msgid "Last updated on"
+msgstr "Ostatnia aktualizacja"
msgid "Toggle navigation"
msgstr "Przełącz nawigację"
-msgid "repository"
-msgstr "magazyn"
+msgid "Sphinx Book Theme"
+msgstr "Motyw książki Sphinx"
msgid "suggest edit"
msgstr "zaproponuj edycję"
-msgid "open issue"
-msgstr "otwarty problem"
+msgid "Open an issue"
+msgstr "Otwórz problem"
msgid "Launch"
msgstr "Uruchomić"
-msgid "Print to PDF"
-msgstr "Drukuj do PDF"
+msgid "Fullscreen mode"
+msgstr "Pełny ekran"
+
+msgid "Edit this page"
+msgstr "Edytuj tę strone"
msgid "By the"
msgstr "Przez"
-msgid "Last updated on"
-msgstr "Ostatnia aktualizacja"
-
-msgid "Download source file"
-msgstr "Pobierz plik źródłowy"
-
-msgid "Download this page"
-msgstr "Pobierz tę stronę"
+msgid "next page"
+msgstr "Następna strona"
diff --git a/_static/locales/pt/LC_MESSAGES/booktheme.po b/_static/locales/pt/LC_MESSAGES/booktheme.po
index 45ac847f..1b27314d 100644
--- a/_static/locales/pt/LC_MESSAGES/booktheme.po
+++ b/_static/locales/pt/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: pt\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Imprimir em PDF"
+
msgid "Theme by the"
msgstr "Tema por"
-msgid "Open an issue"
-msgstr "Abra um problema"
+msgid "Download source file"
+msgstr "Baixar arquivo fonte"
+
+msgid "open issue"
+msgstr "questão aberta"
msgid "Contents"
msgstr "Conteúdo"
+msgid "previous page"
+msgstr "página anterior"
+
msgid "Download notebook file"
msgstr "Baixar arquivo de notebook"
-msgid "Sphinx Book Theme"
-msgstr "Tema do livro Sphinx"
-
-msgid "Fullscreen mode"
-msgstr "Modo tela cheia"
-
-msgid "Edit this page"
-msgstr "Edite essa página"
-
-msgid "By"
-msgstr "De"
-
msgid "Copyright"
msgstr "direito autoral"
+msgid "Download this page"
+msgstr "Baixe esta página"
+
msgid "Source repository"
msgstr "Repositório fonte"
-msgid "previous page"
-msgstr "página anterior"
+msgid "By"
+msgstr "De"
-msgid "next page"
-msgstr "próxima página"
+msgid "repository"
+msgstr "repositório"
+
+msgid "Last updated on"
+msgstr "Última atualização em"
msgid "Toggle navigation"
msgstr "Alternar de navegação"
-msgid "repository"
-msgstr "repositório"
+msgid "Sphinx Book Theme"
+msgstr "Tema do livro Sphinx"
msgid "suggest edit"
msgstr "sugerir edição"
-msgid "open issue"
-msgstr "questão aberta"
+msgid "Open an issue"
+msgstr "Abra um problema"
msgid "Launch"
msgstr "Lançamento"
-msgid "Print to PDF"
-msgstr "Imprimir em PDF"
+msgid "Fullscreen mode"
+msgstr "Modo tela cheia"
+
+msgid "Edit this page"
+msgstr "Edite essa página"
msgid "By the"
msgstr "Pelo"
-msgid "Last updated on"
-msgstr "Última atualização em"
-
-msgid "Download source file"
-msgstr "Baixar arquivo fonte"
-
-msgid "Download this page"
-msgstr "Baixe esta página"
+msgid "next page"
+msgstr "próxima página"
diff --git a/_static/locales/ro/LC_MESSAGES/booktheme.po b/_static/locales/ro/LC_MESSAGES/booktheme.po
index 532b3b84..1783ad2c 100644
--- a/_static/locales/ro/LC_MESSAGES/booktheme.po
+++ b/_static/locales/ro/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Imprimați în PDF"
+
msgid "Theme by the"
msgstr "Tema de"
-msgid "Open an issue"
-msgstr "Deschideți o problemă"
+msgid "Download source file"
+msgstr "Descărcați fișierul sursă"
+
+msgid "open issue"
+msgstr "problema deschisă"
msgid "Contents"
msgstr "Cuprins"
+msgid "previous page"
+msgstr "pagina anterioară"
+
msgid "Download notebook file"
msgstr "Descărcați fișierul notebook"
-msgid "Sphinx Book Theme"
-msgstr "Tema Sphinx Book"
-
-msgid "Fullscreen mode"
-msgstr "Modul ecran întreg"
-
-msgid "Edit this page"
-msgstr "Editați această pagină"
-
-msgid "By"
-msgstr "De"
-
msgid "Copyright"
msgstr "Drepturi de autor"
+msgid "Download this page"
+msgstr "Descarcă această pagină"
+
msgid "Source repository"
msgstr "Depozit sursă"
-msgid "previous page"
-msgstr "pagina anterioară"
+msgid "By"
+msgstr "De"
-msgid "next page"
-msgstr "pagina următoare"
+msgid "repository"
+msgstr "repertoriu"
+
+msgid "Last updated on"
+msgstr "Ultima actualizare la"
msgid "Toggle navigation"
msgstr "Comutare navigare"
-msgid "repository"
-msgstr "repertoriu"
+msgid "Sphinx Book Theme"
+msgstr "Tema Sphinx Book"
msgid "suggest edit"
msgstr "sugerează editare"
-msgid "open issue"
-msgstr "problema deschisă"
+msgid "Open an issue"
+msgstr "Deschideți o problemă"
msgid "Launch"
msgstr "Lansa"
-msgid "Print to PDF"
-msgstr "Imprimați în PDF"
+msgid "Fullscreen mode"
+msgstr "Modul ecran întreg"
+
+msgid "Edit this page"
+msgstr "Editați această pagină"
msgid "By the"
msgstr "Langa"
-msgid "Last updated on"
-msgstr "Ultima actualizare la"
-
-msgid "Download source file"
-msgstr "Descărcați fișierul sursă"
-
-msgid "Download this page"
-msgstr "Descarcă această pagină"
+msgid "next page"
+msgstr "pagina următoare"
diff --git a/_static/locales/ru/LC_MESSAGES/booktheme.po b/_static/locales/ru/LC_MESSAGES/booktheme.po
index b718b482..b1176b7a 100644
--- a/_static/locales/ru/LC_MESSAGES/booktheme.po
+++ b/_static/locales/ru/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: ru\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Распечатать в PDF"
+
msgid "Theme by the"
msgstr "Тема от"
-msgid "Open an issue"
-msgstr "Открыть вопрос"
+msgid "Download source file"
+msgstr "Скачать исходный файл"
+
+msgid "open issue"
+msgstr "открытый вопрос"
msgid "Contents"
msgstr "Содержание"
+msgid "previous page"
+msgstr "Предыдущая страница"
+
msgid "Download notebook file"
msgstr "Скачать файл записной книжки"
-msgid "Sphinx Book Theme"
-msgstr "Тема книги Сфинкс"
-
-msgid "Fullscreen mode"
-msgstr "Полноэкранный режим"
-
-msgid "Edit this page"
-msgstr "Редактировать эту страницу"
-
-msgid "By"
-msgstr "По"
-
msgid "Copyright"
msgstr "авторское право"
+msgid "Download this page"
+msgstr "Загрузите эту страницу"
+
msgid "Source repository"
msgstr "Исходный репозиторий"
-msgid "previous page"
-msgstr "Предыдущая страница"
+msgid "By"
+msgstr "По"
-msgid "next page"
-msgstr "Следующая страница"
+msgid "repository"
+msgstr "хранилище"
+
+msgid "Last updated on"
+msgstr "Последнее обновление"
msgid "Toggle navigation"
msgstr "Переключить навигацию"
-msgid "repository"
-msgstr "хранилище"
+msgid "Sphinx Book Theme"
+msgstr "Тема книги Сфинкс"
msgid "suggest edit"
msgstr "предложить редактировать"
-msgid "open issue"
-msgstr "открытый вопрос"
+msgid "Open an issue"
+msgstr "Открыть вопрос"
msgid "Launch"
msgstr "Запуск"
-msgid "Print to PDF"
-msgstr "Распечатать в PDF"
+msgid "Fullscreen mode"
+msgstr "Полноэкранный режим"
+
+msgid "Edit this page"
+msgstr "Редактировать эту страницу"
msgid "By the"
msgstr "Посредством"
-msgid "Last updated on"
-msgstr "Последнее обновление"
-
-msgid "Download source file"
-msgstr "Скачать исходный файл"
-
-msgid "Download this page"
-msgstr "Загрузите эту страницу"
+msgid "next page"
+msgstr "Следующая страница"
diff --git a/_static/locales/sk/LC_MESSAGES/booktheme.po b/_static/locales/sk/LC_MESSAGES/booktheme.po
index f6c423b6..65012881 100644
--- a/_static/locales/sk/LC_MESSAGES/booktheme.po
+++ b/_static/locales/sk/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: sk\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Tlač do PDF"
+
msgid "Theme by the"
msgstr "Téma od"
-msgid "Open an issue"
-msgstr "Otvorte problém"
+msgid "Download source file"
+msgstr "Stiahnite si zdrojový súbor"
+
+msgid "open issue"
+msgstr "otvorené vydanie"
msgid "Contents"
msgstr "Obsah"
+msgid "previous page"
+msgstr "predchádzajúca strana"
+
msgid "Download notebook file"
msgstr "Stiahnite si zošit"
-msgid "Sphinx Book Theme"
-msgstr "Téma knihy Sfinga"
-
-msgid "Fullscreen mode"
-msgstr "Režim celej obrazovky"
-
-msgid "Edit this page"
-msgstr "Upraviť túto stránku"
-
-msgid "By"
-msgstr "Autor:"
-
msgid "Copyright"
msgstr "Autorské práva"
+msgid "Download this page"
+msgstr "Stiahnite si túto stránku"
+
msgid "Source repository"
msgstr "Zdrojové úložisko"
-msgid "previous page"
-msgstr "predchádzajúca strana"
+msgid "By"
+msgstr "Autor:"
-msgid "next page"
-msgstr "ďalšia strana"
+msgid "repository"
+msgstr "Úložisko"
+
+msgid "Last updated on"
+msgstr "Posledná aktualizácia dňa"
msgid "Toggle navigation"
msgstr "Prepnúť navigáciu"
-msgid "repository"
-msgstr "Úložisko"
+msgid "Sphinx Book Theme"
+msgstr "Téma knihy Sfinga"
msgid "suggest edit"
msgstr "navrhnúť úpravu"
-msgid "open issue"
-msgstr "otvorené vydanie"
+msgid "Open an issue"
+msgstr "Otvorte problém"
msgid "Launch"
msgstr "Spustiť"
-msgid "Print to PDF"
-msgstr "Tlač do PDF"
+msgid "Fullscreen mode"
+msgstr "Režim celej obrazovky"
+
+msgid "Edit this page"
+msgstr "Upraviť túto stránku"
msgid "By the"
msgstr "Podľa"
-msgid "Last updated on"
-msgstr "Posledná aktualizácia dňa"
-
-msgid "Download source file"
-msgstr "Stiahnite si zdrojový súbor"
-
-msgid "Download this page"
-msgstr "Stiahnite si túto stránku"
+msgid "next page"
+msgstr "ďalšia strana"
diff --git a/_static/locales/sl/LC_MESSAGES/booktheme.po b/_static/locales/sl/LC_MESSAGES/booktheme.po
index 9822dc58..3c7e3a86 100644
--- a/_static/locales/sl/LC_MESSAGES/booktheme.po
+++ b/_static/locales/sl/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: sl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Natisni v PDF"
+
msgid "Theme by the"
msgstr "Tema avtorja"
-msgid "Open an issue"
-msgstr "Odprite številko"
+msgid "Download source file"
+msgstr "Prenesite izvorno datoteko"
+
+msgid "open issue"
+msgstr "odprto vprašanje"
msgid "Contents"
msgstr "Vsebina"
+msgid "previous page"
+msgstr "Prejšnja stran"
+
msgid "Download notebook file"
msgstr "Prenesite datoteko zvezka"
-msgid "Sphinx Book Theme"
-msgstr "Tema knjige Sphinx"
-
-msgid "Fullscreen mode"
-msgstr "Celozaslonski način"
-
-msgid "Edit this page"
-msgstr "Uredite to stran"
-
-msgid "By"
-msgstr "Avtor"
-
msgid "Copyright"
msgstr "avtorske pravice"
+msgid "Download this page"
+msgstr "Prenesite to stran"
+
msgid "Source repository"
msgstr "Izvorno skladišče"
-msgid "previous page"
-msgstr "Prejšnja stran"
+msgid "By"
+msgstr "Avtor"
-msgid "next page"
-msgstr "Naslednja stran"
+msgid "repository"
+msgstr "odlagališče"
+
+msgid "Last updated on"
+msgstr "Nazadnje posodobljeno dne"
msgid "Toggle navigation"
msgstr "Preklopi navigacijo"
-msgid "repository"
-msgstr "odlagališče"
+msgid "Sphinx Book Theme"
+msgstr "Tema knjige Sphinx"
msgid "suggest edit"
msgstr "predlagajte urejanje"
-msgid "open issue"
-msgstr "odprto vprašanje"
+msgid "Open an issue"
+msgstr "Odprite številko"
msgid "Launch"
msgstr "Kosilo"
-msgid "Print to PDF"
-msgstr "Natisni v PDF"
+msgid "Fullscreen mode"
+msgstr "Celozaslonski način"
+
+msgid "Edit this page"
+msgstr "Uredite to stran"
msgid "By the"
msgstr "Avtor"
-msgid "Last updated on"
-msgstr "Nazadnje posodobljeno dne"
-
-msgid "Download source file"
-msgstr "Prenesite izvorno datoteko"
-
-msgid "Download this page"
-msgstr "Prenesite to stran"
+msgid "next page"
+msgstr "Naslednja stran"
diff --git a/_static/locales/sr/LC_MESSAGES/booktheme.po b/_static/locales/sr/LC_MESSAGES/booktheme.po
index e809230c..773b8ada 100644
--- a/_static/locales/sr/LC_MESSAGES/booktheme.po
+++ b/_static/locales/sr/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: sr\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Испис у ПДФ"
+
msgid "Theme by the"
msgstr "Тхеме би"
-msgid "Open an issue"
-msgstr "Отворите издање"
+msgid "Download source file"
+msgstr "Преузми изворну датотеку"
+
+msgid "open issue"
+msgstr "отворено издање"
msgid "Contents"
msgstr "Садржај"
+msgid "previous page"
+msgstr "Претходна страница"
+
msgid "Download notebook file"
msgstr "Преузмите датотеку бележнице"
-msgid "Sphinx Book Theme"
-msgstr "Тема књиге Спхинк"
-
-msgid "Fullscreen mode"
-msgstr "Режим целог екрана"
-
-msgid "Edit this page"
-msgstr "Уредите ову страницу"
-
-msgid "By"
-msgstr "Од стране"
-
msgid "Copyright"
msgstr "Ауторско право"
+msgid "Download this page"
+msgstr "Преузмите ову страницу"
+
msgid "Source repository"
msgstr "Изворно спремиште"
-msgid "previous page"
-msgstr "Претходна страница"
+msgid "By"
+msgstr "Од стране"
-msgid "next page"
-msgstr "Следећа страна"
+msgid "repository"
+msgstr "спремиште"
+
+msgid "Last updated on"
+msgstr "Последње ажурирање"
msgid "Toggle navigation"
msgstr "Укључи / искључи навигацију"
-msgid "repository"
-msgstr "спремиште"
+msgid "Sphinx Book Theme"
+msgstr "Тема књиге Спхинк"
msgid "suggest edit"
msgstr "предложи уређивање"
-msgid "open issue"
-msgstr "отворено издање"
+msgid "Open an issue"
+msgstr "Отворите издање"
msgid "Launch"
msgstr "Лансирање"
-msgid "Print to PDF"
-msgstr "Испис у ПДФ"
+msgid "Fullscreen mode"
+msgstr "Режим целог екрана"
+
+msgid "Edit this page"
+msgstr "Уредите ову страницу"
msgid "By the"
msgstr "Од"
-msgid "Last updated on"
-msgstr "Последње ажурирање"
-
-msgid "Download source file"
-msgstr "Преузми изворну датотеку"
-
-msgid "Download this page"
-msgstr "Преузмите ову страницу"
+msgid "next page"
+msgstr "Следећа страна"
diff --git a/_static/locales/sv/LC_MESSAGES/booktheme.po b/_static/locales/sv/LC_MESSAGES/booktheme.po
index 2421b001..bcac54c0 100644
--- a/_static/locales/sv/LC_MESSAGES/booktheme.po
+++ b/_static/locales/sv/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Skriv ut till PDF"
+
msgid "Theme by the"
msgstr "Tema av"
-msgid "Open an issue"
-msgstr "Öppna en problemrapport"
+msgid "Download source file"
+msgstr "Ladda ner källfil"
+
+msgid "open issue"
+msgstr "öppna problemrapport"
msgid "Contents"
msgstr "Innehåll"
+msgid "previous page"
+msgstr "föregående sida"
+
msgid "Download notebook file"
msgstr "Ladda ner notebook-fil"
-msgid "Sphinx Book Theme"
-msgstr "Sphinx Boktema"
-
-msgid "Fullscreen mode"
-msgstr "Fullskärmsläge"
-
-msgid "Edit this page"
-msgstr "Redigera den här sidan"
-
-msgid "By"
-msgstr "Av"
-
msgid "Copyright"
msgstr "Upphovsrätt"
+msgid "Download this page"
+msgstr "Ladda ner den här sidan"
+
msgid "Source repository"
msgstr "Källkodsrepositorium"
-msgid "previous page"
-msgstr "föregående sida"
+msgid "By"
+msgstr "Av"
-msgid "next page"
-msgstr "nästa sida"
+msgid "repository"
+msgstr "repositorium"
+
+msgid "Last updated on"
+msgstr "Senast uppdaterad den"
msgid "Toggle navigation"
msgstr "Växla navigering"
-msgid "repository"
-msgstr "repositorium"
+msgid "Sphinx Book Theme"
+msgstr "Sphinx Boktema"
msgid "suggest edit"
msgstr "föreslå ändring"
-msgid "open issue"
-msgstr "öppna problemrapport"
+msgid "Open an issue"
+msgstr "Öppna en problemrapport"
msgid "Launch"
msgstr "Öppna"
-msgid "Print to PDF"
-msgstr "Skriv ut till PDF"
+msgid "Fullscreen mode"
+msgstr "Fullskärmsläge"
+
+msgid "Edit this page"
+msgstr "Redigera den här sidan"
msgid "By the"
msgstr "Av den"
-msgid "Last updated on"
-msgstr "Senast uppdaterad den"
-
-msgid "Download source file"
-msgstr "Ladda ner källfil"
-
-msgid "Download this page"
-msgstr "Ladda ner den här sidan"
+msgid "next page"
+msgstr "nästa sida"
diff --git a/_static/locales/ta/LC_MESSAGES/booktheme.po b/_static/locales/ta/LC_MESSAGES/booktheme.po
index 500042f4..b48bdfaf 100644
--- a/_static/locales/ta/LC_MESSAGES/booktheme.po
+++ b/_static/locales/ta/LC_MESSAGES/booktheme.po
@@ -8,59 +8,59 @@ msgstr ""
"Language: ta\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "PDF இல் அச்சிடுக"
+
msgid "Theme by the"
msgstr "வழங்கிய தீம்"
-msgid "Open an issue"
-msgstr "சிக்கலைத் திறக்கவும்"
-
-msgid "Download notebook file"
-msgstr "நோட்புக் கோப்பைப் பதிவிறக்கவும்"
+msgid "Download source file"
+msgstr "மூல கோப்பைப் பதிவிறக்குக"
-msgid "Sphinx Book Theme"
-msgstr "ஸ்பிங்க்ஸ் புத்தக தீம்"
+msgid "open issue"
+msgstr "திறந்த பிரச்சினை"
-msgid "Edit this page"
-msgstr "இந்தப் பக்கத்தைத் திருத்தவும்"
+msgid "previous page"
+msgstr "முந்தைய பக்கம்"
-msgid "By"
-msgstr "வழங்கியவர்"
+msgid "Download notebook file"
+msgstr "நோட்புக் கோப்பைப் பதிவிறக்கவும்"
msgid "Copyright"
msgstr "பதிப்புரிமை"
+msgid "Download this page"
+msgstr "இந்தப் பக்கத்தைப் பதிவிறக்கவும்"
+
msgid "Source repository"
msgstr "மூல களஞ்சியம்"
-msgid "previous page"
-msgstr "முந்தைய பக்கம்"
+msgid "By"
+msgstr "வழங்கியவர்"
-msgid "next page"
-msgstr "அடுத்த பக்கம்"
+msgid "Last updated on"
+msgstr "கடைசியாக புதுப்பிக்கப்பட்டது"
msgid "Toggle navigation"
msgstr "வழிசெலுத்தலை நிலைமாற்று"
+msgid "Sphinx Book Theme"
+msgstr "ஸ்பிங்க்ஸ் புத்தக தீம்"
+
msgid "suggest edit"
msgstr "திருத்த பரிந்துரைக்கவும்"
-msgid "open issue"
-msgstr "திறந்த பிரச்சினை"
+msgid "Open an issue"
+msgstr "சிக்கலைத் திறக்கவும்"
msgid "Launch"
msgstr "தொடங்க"
-msgid "Print to PDF"
-msgstr "PDF இல் அச்சிடுக"
+msgid "Edit this page"
+msgstr "இந்தப் பக்கத்தைத் திருத்தவும்"
msgid "By the"
msgstr "மூலம்"
-msgid "Last updated on"
-msgstr "கடைசியாக புதுப்பிக்கப்பட்டது"
-
-msgid "Download source file"
-msgstr "மூல கோப்பைப் பதிவிறக்குக"
-
-msgid "Download this page"
-msgstr "இந்தப் பக்கத்தைப் பதிவிறக்கவும்"
+msgid "next page"
+msgstr "அடுத்த பக்கம்"
diff --git a/_static/locales/te/LC_MESSAGES/booktheme.po b/_static/locales/te/LC_MESSAGES/booktheme.po
index b1afebba..952278f5 100644
--- a/_static/locales/te/LC_MESSAGES/booktheme.po
+++ b/_static/locales/te/LC_MESSAGES/booktheme.po
@@ -8,59 +8,59 @@ msgstr ""
"Language: te\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "PDF కి ముద్రించండి"
+
msgid "Theme by the"
msgstr "ద్వారా థీమ్"
-msgid "Open an issue"
-msgstr "సమస్యను తెరవండి"
-
-msgid "Download notebook file"
-msgstr "నోట్బుక్ ఫైల్ను డౌన్లోడ్ చేయండి"
+msgid "Download source file"
+msgstr "మూల ఫైల్ను డౌన్లోడ్ చేయండి"
-msgid "Sphinx Book Theme"
-msgstr "సింహిక పుస్తక థీమ్"
+msgid "open issue"
+msgstr "ఓపెన్ ఇష్యూ"
-msgid "Edit this page"
-msgstr "ఈ పేజీని సవరించండి"
+msgid "previous page"
+msgstr "ముందు పేజి"
-msgid "By"
-msgstr "ద్వారా"
+msgid "Download notebook file"
+msgstr "నోట్బుక్ ఫైల్ను డౌన్లోడ్ చేయండి"
msgid "Copyright"
msgstr "కాపీరైట్"
+msgid "Download this page"
+msgstr "ఈ పేజీని డౌన్లోడ్ చేయండి"
+
msgid "Source repository"
msgstr "మూల రిపోజిటరీ"
-msgid "previous page"
-msgstr "ముందు పేజి"
+msgid "By"
+msgstr "ద్వారా"
-msgid "next page"
-msgstr "తరువాతి పేజీ"
+msgid "Last updated on"
+msgstr "చివరిగా నవీకరించబడింది"
msgid "Toggle navigation"
msgstr "నావిగేషన్ను టోగుల్ చేయండి"
+msgid "Sphinx Book Theme"
+msgstr "సింహిక పుస్తక థీమ్"
+
msgid "suggest edit"
msgstr "సవరించమని సూచించండి"
-msgid "open issue"
-msgstr "ఓపెన్ ఇష్యూ"
+msgid "Open an issue"
+msgstr "సమస్యను తెరవండి"
msgid "Launch"
msgstr "ప్రారంభించండి"
-msgid "Print to PDF"
-msgstr "PDF కి ముద్రించండి"
+msgid "Edit this page"
+msgstr "ఈ పేజీని సవరించండి"
msgid "By the"
msgstr "ద్వారా"
-msgid "Last updated on"
-msgstr "చివరిగా నవీకరించబడింది"
-
-msgid "Download source file"
-msgstr "మూల ఫైల్ను డౌన్లోడ్ చేయండి"
-
-msgid "Download this page"
-msgstr "ఈ పేజీని డౌన్లోడ్ చేయండి"
+msgid "next page"
+msgstr "తరువాతి పేజీ"
diff --git a/_static/locales/tg/LC_MESSAGES/booktheme.po b/_static/locales/tg/LC_MESSAGES/booktheme.po
index 29b8237b..c33dc421 100644
--- a/_static/locales/tg/LC_MESSAGES/booktheme.po
+++ b/_static/locales/tg/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: tg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Чоп ба PDF"
+
msgid "Theme by the"
msgstr "Мавзӯъи аз"
-msgid "Open an issue"
-msgstr "Масъаларо кушоед"
+msgid "Download source file"
+msgstr "Файли манбаъро зеркашӣ кунед"
+
+msgid "open issue"
+msgstr "барориши кушод"
msgid "Contents"
msgstr "Мундариҷа"
+msgid "previous page"
+msgstr "саҳифаи қаблӣ"
+
msgid "Download notebook file"
msgstr "Файли дафтарро зеркашӣ кунед"
-msgid "Sphinx Book Theme"
-msgstr "Сфинкс Мавзӯи китоб"
-
-msgid "Fullscreen mode"
-msgstr "Ҳолати экрани пурра"
-
-msgid "Edit this page"
-msgstr "Ин саҳифаро таҳрир кунед"
-
-msgid "By"
-msgstr "Бо"
-
msgid "Copyright"
msgstr "Ҳуқуқи муаллиф"
+msgid "Download this page"
+msgstr "Ин саҳифаро зеркашӣ кунед"
+
msgid "Source repository"
msgstr "Анбори манбаъ"
-msgid "previous page"
-msgstr "саҳифаи қаблӣ"
+msgid "By"
+msgstr "Бо"
-msgid "next page"
-msgstr "саҳифаи оянда"
+msgid "repository"
+msgstr "анбор"
+
+msgid "Last updated on"
+msgstr "Last навсозӣ дар"
msgid "Toggle navigation"
msgstr "Гузаришро иваз кунед"
-msgid "repository"
-msgstr "анбор"
+msgid "Sphinx Book Theme"
+msgstr "Сфинкс Мавзӯи китоб"
msgid "suggest edit"
msgstr "пешниҳод вироиш"
-msgid "open issue"
-msgstr "барориши кушод"
+msgid "Open an issue"
+msgstr "Масъаларо кушоед"
msgid "Launch"
msgstr "Оғоз"
-msgid "Print to PDF"
-msgstr "Чоп ба PDF"
+msgid "Fullscreen mode"
+msgstr "Ҳолати экрани пурра"
+
+msgid "Edit this page"
+msgstr "Ин саҳифаро таҳрир кунед"
msgid "By the"
msgstr "Бо"
-msgid "Last updated on"
-msgstr "Last навсозӣ дар"
-
-msgid "Download source file"
-msgstr "Файли манбаъро зеркашӣ кунед"
-
-msgid "Download this page"
-msgstr "Ин саҳифаро зеркашӣ кунед"
+msgid "next page"
+msgstr "саҳифаи оянда"
diff --git a/_static/locales/th/LC_MESSAGES/booktheme.po b/_static/locales/th/LC_MESSAGES/booktheme.po
index ac65ee05..9d24294a 100644
--- a/_static/locales/th/LC_MESSAGES/booktheme.po
+++ b/_static/locales/th/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: th\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "พิมพ์เป็น PDF"
+
msgid "Theme by the"
msgstr "ธีมโดย"
-msgid "Open an issue"
+msgid "Download source file"
+msgstr "ดาวน์โหลดไฟล์ต้นฉบับ"
+
+msgid "open issue"
msgstr "เปิดปัญหา"
msgid "Contents"
msgstr "สารบัญ"
+msgid "previous page"
+msgstr "หน้าที่แล้ว"
+
msgid "Download notebook file"
msgstr "ดาวน์โหลดไฟล์สมุดบันทึก"
-msgid "Sphinx Book Theme"
-msgstr "ธีมหนังสือสฟิงซ์"
-
-msgid "Fullscreen mode"
-msgstr "โหมดเต็มหน้าจอ"
-
-msgid "Edit this page"
-msgstr "แก้ไขหน้านี้"
-
-msgid "By"
-msgstr "โดย"
-
msgid "Copyright"
msgstr "ลิขสิทธิ์"
+msgid "Download this page"
+msgstr "ดาวน์โหลดหน้านี้"
+
msgid "Source repository"
msgstr "ที่เก็บซอร์ส"
-msgid "previous page"
-msgstr "หน้าที่แล้ว"
+msgid "By"
+msgstr "โดย"
-msgid "next page"
-msgstr "หน้าต่อไป"
+msgid "repository"
+msgstr "ที่เก็บ"
+
+msgid "Last updated on"
+msgstr "ปรับปรุงล่าสุดเมื่อ"
msgid "Toggle navigation"
msgstr "ไม่ต้องสลับช่องทาง"
-msgid "repository"
-msgstr "ที่เก็บ"
+msgid "Sphinx Book Theme"
+msgstr "ธีมหนังสือสฟิงซ์"
msgid "suggest edit"
msgstr "แนะนำแก้ไข"
-msgid "open issue"
+msgid "Open an issue"
msgstr "เปิดปัญหา"
msgid "Launch"
msgstr "เปิด"
-msgid "Print to PDF"
-msgstr "พิมพ์เป็น PDF"
+msgid "Fullscreen mode"
+msgstr "โหมดเต็มหน้าจอ"
+
+msgid "Edit this page"
+msgstr "แก้ไขหน้านี้"
msgid "By the"
msgstr "โดย"
-msgid "Last updated on"
-msgstr "ปรับปรุงล่าสุดเมื่อ"
-
-msgid "Download source file"
-msgstr "ดาวน์โหลดไฟล์ต้นฉบับ"
-
-msgid "Download this page"
-msgstr "ดาวน์โหลดหน้านี้"
+msgid "next page"
+msgstr "หน้าต่อไป"
diff --git a/_static/locales/tl/LC_MESSAGES/booktheme.po b/_static/locales/tl/LC_MESSAGES/booktheme.po
index 662d66ca..20e0d07c 100644
--- a/_static/locales/tl/LC_MESSAGES/booktheme.po
+++ b/_static/locales/tl/LC_MESSAGES/booktheme.po
@@ -8,59 +8,59 @@ msgstr ""
"Language: tl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "I-print sa PDF"
+
msgid "Theme by the"
msgstr "Tema ng"
-msgid "Open an issue"
-msgstr "Magbukas ng isyu"
-
-msgid "Download notebook file"
-msgstr "Mag-download ng file ng notebook"
+msgid "Download source file"
+msgstr "Mag-download ng file ng pinagmulan"
-msgid "Sphinx Book Theme"
-msgstr "Tema ng Sphinx Book"
+msgid "open issue"
+msgstr "bukas na isyu"
-msgid "Edit this page"
-msgstr "I-edit ang pahinang ito"
+msgid "previous page"
+msgstr "Nakaraang pahina"
-msgid "By"
-msgstr "Ni"
+msgid "Download notebook file"
+msgstr "Mag-download ng file ng notebook"
msgid "Copyright"
msgstr "Copyright"
+msgid "Download this page"
+msgstr "I-download ang pahinang ito"
+
msgid "Source repository"
msgstr "Pinagmulan ng imbakan"
-msgid "previous page"
-msgstr "Nakaraang pahina"
+msgid "By"
+msgstr "Ni"
-msgid "next page"
-msgstr "Susunod na pahina"
+msgid "Last updated on"
+msgstr "Huling na-update noong"
msgid "Toggle navigation"
msgstr "I-toggle ang pag-navigate"
+msgid "Sphinx Book Theme"
+msgstr "Tema ng Sphinx Book"
+
msgid "suggest edit"
msgstr "iminumungkahi i-edit"
-msgid "open issue"
-msgstr "bukas na isyu"
+msgid "Open an issue"
+msgstr "Magbukas ng isyu"
msgid "Launch"
msgstr "Ilunsad"
-msgid "Print to PDF"
-msgstr "I-print sa PDF"
+msgid "Edit this page"
+msgstr "I-edit ang pahinang ito"
msgid "By the"
msgstr "Sa pamamagitan ng"
-msgid "Last updated on"
-msgstr "Huling na-update noong"
-
-msgid "Download source file"
-msgstr "Mag-download ng file ng pinagmulan"
-
-msgid "Download this page"
-msgstr "I-download ang pahinang ito"
+msgid "next page"
+msgstr "Susunod na pahina"
diff --git a/_static/locales/tr/LC_MESSAGES/booktheme.po b/_static/locales/tr/LC_MESSAGES/booktheme.po
index d1ae7233..a77eb027 100644
--- a/_static/locales/tr/LC_MESSAGES/booktheme.po
+++ b/_static/locales/tr/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: tr\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "PDF olarak yazdır"
+
msgid "Theme by the"
msgstr "Tarafından tema"
-msgid "Open an issue"
-msgstr "Bir sorunu açın"
+msgid "Download source file"
+msgstr "Kaynak dosyayı indirin"
+
+msgid "open issue"
+msgstr "Açık konu"
msgid "Contents"
msgstr "İçindekiler"
+msgid "previous page"
+msgstr "önceki sayfa"
+
msgid "Download notebook file"
msgstr "Defter dosyasını indirin"
-msgid "Sphinx Book Theme"
-msgstr "Sfenks Kitap Teması"
-
-msgid "Fullscreen mode"
-msgstr "Tam ekran modu"
-
-msgid "Edit this page"
-msgstr "Bu sayfayı düzenle"
-
-msgid "By"
-msgstr "Tarafından"
-
msgid "Copyright"
msgstr "Telif hakkı"
+msgid "Download this page"
+msgstr "Bu sayfayı indirin"
+
msgid "Source repository"
msgstr "Kaynak kod deposu"
-msgid "previous page"
-msgstr "önceki sayfa"
+msgid "By"
+msgstr "Tarafından"
-msgid "next page"
-msgstr "sonraki Sayfa"
+msgid "repository"
+msgstr "depo"
+
+msgid "Last updated on"
+msgstr "Son güncelleme tarihi"
msgid "Toggle navigation"
msgstr "Gezinmeyi değiştir"
-msgid "repository"
-msgstr "depo"
+msgid "Sphinx Book Theme"
+msgstr "Sfenks Kitap Teması"
msgid "suggest edit"
msgstr "düzenleme öner"
-msgid "open issue"
-msgstr "Açık konu"
+msgid "Open an issue"
+msgstr "Bir sorunu açın"
msgid "Launch"
msgstr "Başlatmak"
-msgid "Print to PDF"
-msgstr "PDF olarak yazdır"
+msgid "Fullscreen mode"
+msgstr "Tam ekran modu"
+
+msgid "Edit this page"
+msgstr "Bu sayfayı düzenle"
msgid "By the"
msgstr "Tarafından"
-msgid "Last updated on"
-msgstr "Son güncelleme tarihi"
-
-msgid "Download source file"
-msgstr "Kaynak dosyayı indirin"
-
-msgid "Download this page"
-msgstr "Bu sayfayı indirin"
+msgid "next page"
+msgstr "sonraki Sayfa"
diff --git a/_static/locales/uk/LC_MESSAGES/booktheme.po b/_static/locales/uk/LC_MESSAGES/booktheme.po
index be49ab85..993dd078 100644
--- a/_static/locales/uk/LC_MESSAGES/booktheme.po
+++ b/_static/locales/uk/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: uk\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "Друк у форматі PDF"
+
msgid "Theme by the"
msgstr "Тема від"
-msgid "Open an issue"
-msgstr "Відкрийте випуск"
+msgid "Download source file"
+msgstr "Завантажити вихідний файл"
+
+msgid "open issue"
+msgstr "відкритий випуск"
msgid "Contents"
msgstr "Зміст"
+msgid "previous page"
+msgstr "Попередня сторінка"
+
msgid "Download notebook file"
msgstr "Завантажте файл блокнота"
-msgid "Sphinx Book Theme"
-msgstr "Тема книги \"Сфінкс\""
-
-msgid "Fullscreen mode"
-msgstr "Повноекранний режим"
-
-msgid "Edit this page"
-msgstr "Редагувати цю сторінку"
-
-msgid "By"
-msgstr "Автор"
-
msgid "Copyright"
msgstr "Авторське право"
+msgid "Download this page"
+msgstr "Завантажте цю сторінку"
+
msgid "Source repository"
msgstr "Джерело сховища"
-msgid "previous page"
-msgstr "Попередня сторінка"
+msgid "By"
+msgstr "Автор"
-msgid "next page"
-msgstr "Наступна сторінка"
+msgid "repository"
+msgstr "сховище"
+
+msgid "Last updated on"
+msgstr "Останнє оновлення:"
msgid "Toggle navigation"
msgstr "Переключити навігацію"
-msgid "repository"
-msgstr "сховище"
+msgid "Sphinx Book Theme"
+msgstr "Тема книги \"Сфінкс\""
msgid "suggest edit"
msgstr "запропонувати редагувати"
-msgid "open issue"
-msgstr "відкритий випуск"
+msgid "Open an issue"
+msgstr "Відкрийте випуск"
msgid "Launch"
msgstr "Запуск"
-msgid "Print to PDF"
-msgstr "Друк у форматі PDF"
+msgid "Fullscreen mode"
+msgstr "Повноекранний режим"
+
+msgid "Edit this page"
+msgstr "Редагувати цю сторінку"
msgid "By the"
msgstr "По"
-msgid "Last updated on"
-msgstr "Останнє оновлення:"
-
-msgid "Download source file"
-msgstr "Завантажити вихідний файл"
-
-msgid "Download this page"
-msgstr "Завантажте цю сторінку"
+msgid "next page"
+msgstr "Наступна сторінка"
diff --git a/_static/locales/ur/LC_MESSAGES/booktheme.po b/_static/locales/ur/LC_MESSAGES/booktheme.po
index 94bcab33..2f774267 100644
--- a/_static/locales/ur/LC_MESSAGES/booktheme.po
+++ b/_static/locales/ur/LC_MESSAGES/booktheme.po
@@ -8,59 +8,59 @@ msgstr ""
"Language: ur\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "پی ڈی ایف پرنٹ کریں"
+
msgid "Theme by the"
msgstr "کے ذریعہ تھیم"
-msgid "Open an issue"
-msgstr "ایک مسئلہ کھولیں"
-
-msgid "Download notebook file"
-msgstr "نوٹ بک فائل ڈاؤن لوڈ کریں"
+msgid "Download source file"
+msgstr "سورس فائل ڈاؤن لوڈ کریں"
-msgid "Sphinx Book Theme"
-msgstr "سپنکس بک تھیم"
+msgid "open issue"
+msgstr "کھلا مسئلہ"
-msgid "Edit this page"
-msgstr "اس صفحے میں ترمیم کریں"
+msgid "previous page"
+msgstr "سابقہ صفحہ"
-msgid "By"
-msgstr "بذریعہ"
+msgid "Download notebook file"
+msgstr "نوٹ بک فائل ڈاؤن لوڈ کریں"
msgid "Copyright"
msgstr "کاپی رائٹ"
+msgid "Download this page"
+msgstr "اس صفحے کو ڈاؤن لوڈ کریں"
+
msgid "Source repository"
msgstr "ماخذ ذخیرہ"
-msgid "previous page"
-msgstr "سابقہ صفحہ"
+msgid "By"
+msgstr "بذریعہ"
-msgid "next page"
-msgstr "اگلا صفحہ"
+msgid "Last updated on"
+msgstr "آخری بار تازہ کاری ہوئی"
msgid "Toggle navigation"
msgstr "نیویگیشن ٹوگل کریں"
+msgid "Sphinx Book Theme"
+msgstr "سپنکس بک تھیم"
+
msgid "suggest edit"
msgstr "ترمیم کی تجویز کریں"
-msgid "open issue"
-msgstr "کھلا مسئلہ"
+msgid "Open an issue"
+msgstr "ایک مسئلہ کھولیں"
msgid "Launch"
msgstr "لانچ کریں"
-msgid "Print to PDF"
-msgstr "پی ڈی ایف پرنٹ کریں"
+msgid "Edit this page"
+msgstr "اس صفحے میں ترمیم کریں"
msgid "By the"
msgstr "کی طرف"
-msgid "Last updated on"
-msgstr "آخری بار تازہ کاری ہوئی"
-
-msgid "Download source file"
-msgstr "سورس فائل ڈاؤن لوڈ کریں"
-
-msgid "Download this page"
-msgstr "اس صفحے کو ڈاؤن لوڈ کریں"
+msgid "next page"
+msgstr "اگلا صفحہ"
diff --git a/_static/locales/vi/LC_MESSAGES/booktheme.po b/_static/locales/vi/LC_MESSAGES/booktheme.po
index 116236dc..33159f3e 100644
--- a/_static/locales/vi/LC_MESSAGES/booktheme.po
+++ b/_static/locales/vi/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: vi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "In sang PDF"
+
msgid "Theme by the"
msgstr "Chủ đề của"
-msgid "Open an issue"
-msgstr "Mở một vấn đề"
+msgid "Download source file"
+msgstr "Tải xuống tệp nguồn"
+
+msgid "open issue"
+msgstr "vấn đề mở"
msgid "Contents"
msgstr "Nội dung"
+msgid "previous page"
+msgstr "trang trước"
+
msgid "Download notebook file"
msgstr "Tải xuống tệp sổ tay"
-msgid "Sphinx Book Theme"
-msgstr "Chủ đề sách nhân sư"
-
-msgid "Fullscreen mode"
-msgstr "Chế độ toàn màn hình"
-
-msgid "Edit this page"
-msgstr "chỉnh sửa trang này"
-
-msgid "By"
-msgstr "Bởi"
-
msgid "Copyright"
msgstr "Bản quyền"
+msgid "Download this page"
+msgstr "Tải xuống trang này"
+
msgid "Source repository"
msgstr "Kho nguồn"
-msgid "previous page"
-msgstr "trang trước"
+msgid "By"
+msgstr "Bởi"
-msgid "next page"
-msgstr "Trang tiếp theo"
+msgid "repository"
+msgstr "kho"
+
+msgid "Last updated on"
+msgstr "Cập nhật lần cuối vào"
msgid "Toggle navigation"
msgstr "Chuyển đổi điều hướng thành"
-msgid "repository"
-msgstr "kho"
+msgid "Sphinx Book Theme"
+msgstr "Chủ đề sách nhân sư"
msgid "suggest edit"
msgstr "đề nghị chỉnh sửa"
-msgid "open issue"
-msgstr "vấn đề mở"
+msgid "Open an issue"
+msgstr "Mở một vấn đề"
msgid "Launch"
msgstr "Phóng"
-msgid "Print to PDF"
-msgstr "In sang PDF"
+msgid "Fullscreen mode"
+msgstr "Chế độ toàn màn hình"
+
+msgid "Edit this page"
+msgstr "chỉnh sửa trang này"
msgid "By the"
msgstr "Bằng"
-msgid "Last updated on"
-msgstr "Cập nhật lần cuối vào"
-
-msgid "Download source file"
-msgstr "Tải xuống tệp nguồn"
-
-msgid "Download this page"
-msgstr "Tải xuống trang này"
+msgid "next page"
+msgstr "Trang tiếp theo"
diff --git a/_static/locales/zh_CN/LC_MESSAGES/booktheme.po b/_static/locales/zh_CN/LC_MESSAGES/booktheme.po
index 4f4ab579..2e519ef4 100644
--- a/_static/locales/zh_CN/LC_MESSAGES/booktheme.po
+++ b/_static/locales/zh_CN/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "列印成 PDF"
+
msgid "Theme by the"
msgstr "主题作者:"
-msgid "Open an issue"
+msgid "Download source file"
+msgstr "下载源文件"
+
+msgid "open issue"
msgstr "创建议题"
msgid "Contents"
msgstr "目录"
+msgid "previous page"
+msgstr "上一页"
+
msgid "Download notebook file"
msgstr "下载笔记本文件"
-msgid "Sphinx Book Theme"
-msgstr "Sphinx Book 主题"
-
-msgid "Fullscreen mode"
-msgstr "全屏模式"
-
-msgid "Edit this page"
-msgstr "编辑此页面"
-
-msgid "By"
-msgstr "作者:"
-
msgid "Copyright"
msgstr "版权"
+msgid "Download this page"
+msgstr "下载此页面"
+
msgid "Source repository"
msgstr "源码库"
-msgid "previous page"
-msgstr "上一页"
+msgid "By"
+msgstr "作者:"
-msgid "next page"
-msgstr "下一页"
+msgid "repository"
+msgstr "仓库"
+
+msgid "Last updated on"
+msgstr "上次更新时间:"
msgid "Toggle navigation"
msgstr "显示或隐藏导航栏"
-msgid "repository"
-msgstr "仓库"
+msgid "Sphinx Book Theme"
+msgstr "Sphinx Book 主题"
msgid "suggest edit"
msgstr "提出修改建议"
-msgid "open issue"
+msgid "Open an issue"
msgstr "创建议题"
msgid "Launch"
msgstr "启动"
-msgid "Print to PDF"
-msgstr "列印成 PDF"
+msgid "Fullscreen mode"
+msgstr "全屏模式"
+
+msgid "Edit this page"
+msgstr "编辑此页面"
msgid "By the"
msgstr "作者:"
-msgid "Last updated on"
-msgstr "上次更新时间:"
-
-msgid "Download source file"
-msgstr "下载源文件"
-
-msgid "Download this page"
-msgstr "下载此页面"
+msgid "next page"
+msgstr "下一页"
diff --git a/_static/locales/zh_TW/LC_MESSAGES/booktheme.po b/_static/locales/zh_TW/LC_MESSAGES/booktheme.po
index 42b43b86..beecb076 100644
--- a/_static/locales/zh_TW/LC_MESSAGES/booktheme.po
+++ b/_static/locales/zh_TW/LC_MESSAGES/booktheme.po
@@ -8,68 +8,68 @@ msgstr ""
"Language: zh_TW\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "Print to PDF"
+msgstr "列印成 PDF"
+
msgid "Theme by the"
msgstr "佈景主題作者:"
-msgid "Open an issue"
-msgstr "開啟議題"
+msgid "Download source file"
+msgstr "下載原始檔"
+
+msgid "open issue"
+msgstr "公開的問題"
msgid "Contents"
msgstr "目錄"
+msgid "previous page"
+msgstr "上一頁"
+
msgid "Download notebook file"
msgstr "下載 Notebook 檔案"
-msgid "Sphinx Book Theme"
-msgstr "Sphinx Book 佈景主題"
-
-msgid "Fullscreen mode"
-msgstr "全螢幕模式"
-
-msgid "Edit this page"
-msgstr "編輯此頁面"
-
-msgid "By"
-msgstr "作者:"
-
msgid "Copyright"
msgstr "Copyright"
+msgid "Download this page"
+msgstr "下載此頁面"
+
msgid "Source repository"
msgstr "來源儲存庫"
-msgid "previous page"
-msgstr "上一頁"
+msgid "By"
+msgstr "作者:"
-msgid "next page"
-msgstr "下一頁"
+msgid "repository"
+msgstr "儲存庫"
+
+msgid "Last updated on"
+msgstr "最後更新時間:"
msgid "Toggle navigation"
msgstr "顯示或隱藏導覽列"
-msgid "repository"
-msgstr "儲存庫"
+msgid "Sphinx Book Theme"
+msgstr "Sphinx Book 佈景主題"
msgid "suggest edit"
msgstr "提出修改建議"
-msgid "open issue"
-msgstr "公開的問題"
+msgid "Open an issue"
+msgstr "開啟議題"
msgid "Launch"
msgstr "啟動"
-msgid "Print to PDF"
-msgstr "列印成 PDF"
+msgid "Fullscreen mode"
+msgstr "全螢幕模式"
+
+msgid "Edit this page"
+msgstr "編輯此頁面"
msgid "By the"
msgstr "作者:"
-msgid "Last updated on"
-msgstr "最後更新時間:"
-
-msgid "Download source file"
-msgstr "下載原始檔"
-
-msgid "Download this page"
-msgstr "下載此頁面"
+msgid "next page"
+msgstr "下一頁"
diff --git a/_static/scripts/sphinx-book-theme.js b/_static/scripts/sphinx-book-theme.js
index be9fa44d..481ba0c1 100644
--- a/_static/scripts/sphinx-book-theme.js
+++ b/_static/scripts/sphinx-book-theme.js
@@ -1,2 +1,2 @@
-!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";n.r(t);n.p;var r=e=>{"loading"!=document.readyState?e():document.addEventListener?document.addEventListener("DOMContentLoaded",e):document.attachEvent("onreadystatechange",(function(){"complete"==document.readyState&&e()}))};window.initThebeSBT=()=>{var e=document.querySelector("section h1");e.nextElementSibling.classList.contains("thebe-launch-button")||e.insertAdjacentHTML("afterend"," "),initThebe()},window.toggleFullScreen=()=>{var e=document.fullscreenElement&&null!==document.fullscreenElement||document.webkitFullscreenElement&&null!==document.webkitFullscreenElement;let t=document.documentElement;e?(console.log("[SBT]: Exiting full screen"),document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()):(console.log("[SBT]: Entering full screen"),t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen())},r(()=>{var e=[];let t=new IntersectionObserver((t,n)=>{t.forEach(t=>{if(t.isIntersecting)e.push(t.target);else for(let n=0;n0?document.querySelector("div.bd-sidebar-secondary").classList.add("hide"):document.querySelector("div.bd-sidebar-secondary").classList.remove("hide")},{rootMargin:"0px 0px -33% 0px"});let n=[];["marginnote","sidenote","margin","margin-caption","full-width","sidebar","popout"].forEach(e=>{n.push("."+e,".tag_"+e,"."+e.replace("-","_"),".tag_"+e.replace("-","_"))}),document.querySelectorAll(n.join(", ")).forEach(e=>{t.observe(e)}),new IntersectionObserver((e,t)=>{e[0].boundingClientRect.y<0?document.body.classList.add("scrolled"):document.body.classList.remove("scrolled")}).observe(document.querySelector(".sbt-scroll-pixel-helper"))}),r((function(){var e=[".bd-header-announcement",".bd-header",".bd-header-article",".bd-sidebar-primary",".bd-sidebar-secondary",".bd-footer-article",".bd-footer-content",".bd-footer"].join(",");document.querySelectorAll(e).forEach(e=>{e.classList.add("noprint")})}))}]);
+(()=>{"use strict";var e=e=>{"loading"!=document.readyState?e():document.addEventListener?document.addEventListener("DOMContentLoaded",e):document.attachEvent("onreadystatechange",(function(){"complete"==document.readyState&&e()}))};window.initThebeSBT=()=>{var e=document.querySelector("section h1");e.nextElementSibling.classList.contains("thebe-launch-button")||e.insertAdjacentHTML("afterend"," "),initThebe()},window.toggleFullScreen=()=>{var e=document.fullscreenElement&&null!==document.fullscreenElement||document.webkitFullscreenElement&&null!==document.webkitFullscreenElement;let t=document.documentElement;e?(console.log("[SBT]: Exiting full screen"),document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()):(console.log("[SBT]: Entering full screen"),t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen())},e((()=>{var e=[];let t=new IntersectionObserver(((t,n)=>{t.forEach((t=>{if(t.isIntersecting)e.push(t.target);else for(let n=0;n0?document.querySelector("div.bd-sidebar-secondary").classList.add("hide"):document.querySelector("div.bd-sidebar-secondary").classList.remove("hide")}),{rootMargin:"0px 0px -33% 0px"}),n=[];["marginnote","sidenote","margin","margin-caption","full-width","sidebar","popout"].forEach((e=>{n.push(`.${e}`,`.tag_${e}`,`.${e.replace("-","_")}`,`.tag_${e.replace("-","_")}`)})),document.querySelectorAll(n.join(", ")).forEach((e=>{t.observe(e)})),new IntersectionObserver(((e,t)=>{e[0].boundingClientRect.y<0?document.body.classList.add("scrolled"):document.body.classList.remove("scrolled")})).observe(document.querySelector(".sbt-scroll-pixel-helper"))})),e((function(){var e=[".bd-header-announcement",".bd-header",".bd-header-article",".bd-sidebar-primary",".bd-sidebar-secondary",".bd-footer-article",".bd-footer-content",".bd-footer"].join(",");document.querySelectorAll(e).forEach((e=>{e.classList.add("noprint")}))}))})();
//# sourceMappingURL=sphinx-book-theme.js.map
\ No newline at end of file
diff --git a/_static/scripts/sphinx-book-theme.js.map b/_static/scripts/sphinx-book-theme.js.map
index b8abcf86..2cc145ab 100644
--- a/_static/scripts/sphinx-book-theme.js.map
+++ b/_static/scripts/sphinx-book-theme.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/sphinx_book_theme/assets/styles/index.scss","webpack:///./src/sphinx_book_theme/assets/scripts/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","sbRunWhenDOMLoaded","cb","document","readyState","addEventListener","attachEvent","window","initThebeSBT","title","querySelector","nextElementSibling","classList","contains","insertAdjacentHTML","initThebe","toggleFullScreen","isInFullScreen","fullscreenElement","webkitFullscreenElement","docElm","documentElement","console","log","exitFullscreen","webkitExitFullscreen","requestFullscreen","webkitRequestFullscreen","onScreenItems","tocObserver","IntersectionObserver","entries","observer","forEach","entry","isIntersecting","push","target","ii","length","splice","add","remove","rootMargin","marginSelector","replace","querySelectorAll","join","observe","boundingClientRect","y","body","noPrintSelector"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,G,sEClFtC,QCSXC,EAAsBC,IACG,WAAvBC,SAASC,WACXF,IACSC,SAASE,iBAClBF,SAASE,iBAAiB,mBAAoBH,GAE9CC,SAASG,YAAY,sBAAsB,WACd,YAAvBH,SAASC,YAA0BF,QAoK7CK,OAAOC,aAtCY,KACjB,IAAIC,EAAQN,SAASO,cAAc,cACrBD,EAAME,mBAGPC,UAAUC,SAAS,wBAC9BJ,EAAMK,mBACJ,WACA,iDAIJC,aA2BFR,OAAOS,iBAzJgB,KACrB,IAAIC,EACDd,SAASe,mBAAoD,OAA/Bf,SAASe,mBACvCf,SAASgB,yBAC6B,OAArChB,SAASgB,wBACb,IAAIC,EAASjB,SAASkB,gBACjBJ,GAQHK,QAAQC,IAAI,8BACRpB,SAASqB,eACXrB,SAASqB,iBACArB,SAASsB,sBAClBtB,SAASsB,yBAXXH,QAAQC,IAAI,+BACRH,EAAOM,kBACTN,EAAOM,oBACEN,EAAOO,yBAChBP,EAAOO,4BAmJb1B,EAzHkB,KAChB,IAAI2B,EAAgB,GACpB,IAwCIC,EAAc,IAAIC,qBAxCA,CAACC,EAASC,KAE9BD,EAAQE,QAASC,IACf,GAAIA,EAAMC,eAERP,EAAcQ,KAAKF,EAAMG,aAGzB,IAAK,IAAIC,EAAK,EAAGA,EAAKV,EAAcW,OAAQD,IAC1C,GAAIV,EAAcU,KAAQJ,EAAMG,OAAQ,CACtCT,EAAcY,OAAOF,EAAI,GACzB,SAOJV,EAAcW,OAAS,EACzBpC,SAASO,cAAc,4BAA4BE,UAAU6B,IAAI,QAEjEtC,SACGO,cAAc,4BACdE,UAAU8B,OAAO,SAaV,CAEZC,WAAY,qBAad,IAAIC,EAAiB,GATG,CACtB,aACA,WACA,SACA,iBACA,aACA,UACA,UAGcX,QAASK,IAEvBM,EAAeR,KAEX,IAAIE,EACJ,QAAQA,EACR,IAAIA,EAAGO,QAAQ,IAAK,KACpB,QAAQP,EAAGO,QAAQ,IAAK,QAI9B1C,SAAS2C,iBAAiBF,EAAeG,KAAK,OAAOd,QAASK,IAC5DT,EAAYmB,QAAQV,KAID,IAAIR,qBA1CO,CAACC,EAASC,KAEpCD,EAAQ,GAAGkB,mBAAmBC,EAAI,EACpC/C,SAASgD,KAAKvC,UAAU6B,IAAI,YAE5BtC,SAASgD,KAAKvC,UAAU8B,OAAO,cAsCpBM,QAAQ7C,SAASO,cAAc,+BAmDhDT,GA1BA,WACE,IAAImD,EAAkB,CACpB,0BACA,aACA,qBACA,sBACA,wBACA,qBACA,qBACA,cACAL,KAAK,KACP5C,SAAS2C,iBAAiBM,GAAiBnB,QAASK,IAClDA,EAAG1B,UAAU6B,IAAI","file":"scripts/sphinx-book-theme.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default __webpack_public_path__ + \"styles/sphinx-book-theme.css\";","// Import CSS variables\n// ref: https://css-tricks.com/getting-javascript-to-talk-to-css-and-sass/\nimport \"../styles/index.scss\";\n\n/**\n * A helper function to load scripts when the DOM is loaded.\n * This waits for everything to be on the page first before running, since\n * some functionality doesn't behave properly until everything is ready.\n */\nvar sbRunWhenDOMLoaded = (cb) => {\n if (document.readyState != \"loading\") {\n cb();\n } else if (document.addEventListener) {\n document.addEventListener(\"DOMContentLoaded\", cb);\n } else {\n document.attachEvent(\"onreadystatechange\", function () {\n if (document.readyState == \"complete\") cb();\n });\n }\n};\n\n/**\n * Toggle full-screen with button\n *\n * There are some browser-specific hacks in here:\n * - Safari requires a `webkit` prefix, so this uses conditionals to check for that\n * ref: https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API\n */\nvar toggleFullScreen = () => {\n var isInFullScreen =\n (document.fullscreenElement && document.fullscreenElement !== null) ||\n (document.webkitFullscreenElement &&\n document.webkitFullscreenElement !== null);\n let docElm = document.documentElement;\n if (!isInFullScreen) {\n console.log(\"[SBT]: Entering full screen\");\n if (docElm.requestFullscreen) {\n docElm.requestFullscreen();\n } else if (docElm.webkitRequestFullscreen) {\n docElm.webkitRequestFullscreen();\n }\n } else {\n console.log(\"[SBT]: Exiting full screen\");\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n }\n};\n\n/**\n * Manage scrolling behavior. This is primarily two things:\n *\n * 1. Hide the Table of Contents any time sidebar content is on the screen.\n *\n * This will be triggered any time a sidebar item enters or exits the screen.\n * It adds/removes items from an array if they have entered the screen, and\n * removes them when they exit the screen. It hides the TOC if anything is\n * on-screen.\n *\n * ref: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n *\n * 2. Add a `scrolled` class to to trigger CSS changes.\n */\nvar initTocHide = () => {\n var onScreenItems = [];\n let hideTocCallback = (entries, observer) => {\n // Check whether any sidebar item is displayed\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n // If an element just came on screen, add it our list\n onScreenItems.push(entry.target);\n } else {\n // Otherwise, if it's in our list then remove it\n for (let ii = 0; ii < onScreenItems.length; ii++) {\n if (onScreenItems[ii] === entry.target) {\n onScreenItems.splice(ii, 1);\n break;\n }\n }\n }\n });\n\n // Hide the TOC if any margin content is displayed on the screen\n if (onScreenItems.length > 0) {\n document.querySelector(\"div.bd-sidebar-secondary\").classList.add(\"hide\");\n } else {\n document\n .querySelector(\"div.bd-sidebar-secondary\")\n .classList.remove(\"hide\");\n }\n };\n let manageScrolledClassOnBody = (entries, observer) => {\n // The pixel is at the top, so if we're < 0 that it means we've scrolled\n if (entries[0].boundingClientRect.y < 0) {\n document.body.classList.add(\"scrolled\");\n } else {\n document.body.classList.remove(\"scrolled\");\n }\n };\n\n // Set up the intersection observer to watch all margin content\n let options = {\n // Trigger callback when the top of a margin item is 1/3 up the screen\n rootMargin: \"0px 0px -33% 0px\",\n };\n let tocObserver = new IntersectionObserver(hideTocCallback, options);\n // TODO: deprecate popout after v0.5.0\n const selectorClasses = [\n \"marginnote\",\n \"sidenote\",\n \"margin\",\n \"margin-caption\",\n \"full-width\",\n \"sidebar\",\n \"popout\",\n ];\n let marginSelector = [];\n selectorClasses.forEach((ii) => {\n // Use three permutations of each class name because `tag_` and `_` used to be supported\n marginSelector.push(\n ...[\n `.${ii}`,\n `.tag_${ii}`,\n `.${ii.replace(\"-\", \"_\")}`,\n `.tag_${ii.replace(\"-\", \"_\")}`,\n ],\n );\n });\n document.querySelectorAll(marginSelector.join(\", \")).forEach((ii) => {\n tocObserver.observe(ii);\n });\n\n // Set up the observer to check if we've scrolled from top of page\n let scrollObserver = new IntersectionObserver(manageScrolledClassOnBody);\n scrollObserver.observe(document.querySelector(\".sbt-scroll-pixel-helper\"));\n};\n\n/**\n * Activate Thebe with a custom button click.\n */\nvar initThebeSBT = () => {\n var title = document.querySelector(\"section h1\");\n var sibling = title.nextElementSibling;\n // If the next element after the title isn't a thebe button, add one now.\n // That way it is initiatlized when thebe is first-clicked and isn't re-added after.\n if (!sibling.classList.contains(\"thebe-launch-button\")) {\n title.insertAdjacentHTML(\n \"afterend\",\n \" \",\n );\n }\n // This function is provided by sphinx-thebe\n initThebe();\n};\n\n/**\n * Add no print class to certain DOM elements\n */\n\nfunction addNoPrint() {\n var noPrintSelector = [\n \".bd-header-announcement\",\n \".bd-header\",\n \".bd-header-article\",\n \".bd-sidebar-primary\",\n \".bd-sidebar-secondary\",\n \".bd-footer-article\",\n \".bd-footer-content\",\n \".bd-footer\",\n ].join(\",\");\n document.querySelectorAll(noPrintSelector).forEach((ii) => {\n ii.classList.add(\"noprint\");\n });\n}\n\n/**\n * Set up callback functions for UI click actions\n */\nwindow.initThebeSBT = initThebeSBT;\nwindow.toggleFullScreen = toggleFullScreen;\n\n/**\n * Set up functions to load when the DOM is ready\n */\nsbRunWhenDOMLoaded(initTocHide);\nsbRunWhenDOMLoaded(addNoPrint);\n"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"scripts/sphinx-book-theme.js","mappings":"mBASA,IAAIA,EAAsBC,IACG,WAAvBC,SAASC,WACXF,IACSC,SAASE,iBAClBF,SAASE,iBAAiB,mBAAoBH,GAE9CC,SAASG,YAAY,sBAAsB,WACd,YAAvBH,SAASC,YAA0BF,GACzC,GACF,EAkKFK,OAAOC,aAtCY,KACjB,IAAIC,EAAQN,SAASO,cAAc,cACrBD,EAAME,mBAGPC,UAAUC,SAAS,wBAC9BJ,EAAMK,mBACJ,WACA,iDAIJC,WAAW,EA2BbR,OAAOS,iBAzJgB,KACrB,IAAIC,EACDd,SAASe,mBAAoD,OAA/Bf,SAASe,mBACvCf,SAASgB,yBAC6B,OAArChB,SAASgB,wBACb,IAAIC,EAASjB,SAASkB,gBACjBJ,GAQHK,QAAQC,IAAI,8BACRpB,SAASqB,eACXrB,SAASqB,iBACArB,SAASsB,sBAClBtB,SAASsB,yBAXXH,QAAQC,IAAI,+BACRH,EAAOM,kBACTN,EAAOM,oBACEN,EAAOO,yBAChBP,EAAOO,0BASX,EA0IF1B,GAzHkB,KAChB,IAAI2B,EAAgB,GACpB,IAwCIC,EAAc,IAAIC,sBAxCA,CAACC,EAASC,KAE9BD,EAAQE,SAASC,IACf,GAAIA,EAAMC,eAERP,EAAcQ,KAAKF,EAAMG,aAGzB,IAAK,IAAIC,EAAK,EAAGA,EAAKV,EAAcW,OAAQD,IAC1C,GAAIV,EAAcU,KAAQJ,EAAMG,OAAQ,CACtCT,EAAcY,OAAOF,EAAI,GACzB,KACF,CAEJ,IAIEV,EAAcW,OAAS,EACzBpC,SAASO,cAAc,4BAA4BE,UAAU6B,IAAI,QAEjEtC,SACGO,cAAc,4BACdE,UAAU8B,OAAO,OACtB,GAYY,CAEZC,WAAY,qBAaVC,EAAiB,GATG,CACtB,aACA,WACA,SACA,iBACA,aACA,UACA,UAGcX,SAASK,IAEvBM,EAAeR,KAEX,IAAIE,IACJ,QAAQA,IACR,IAAIA,EAAGO,QAAQ,IAAK,OACpB,QAAQP,EAAGO,QAAQ,IAAK,OAE3B,IAEH1C,SAAS2C,iBAAiBF,EAAeG,KAAK,OAAOd,SAASK,IAC5DT,EAAYmB,QAAQV,EAAG,IAIJ,IAAIR,sBA1CO,CAACC,EAASC,KAEpCD,EAAQ,GAAGkB,mBAAmBC,EAAI,EACpC/C,SAASgD,KAAKvC,UAAU6B,IAAI,YAE5BtC,SAASgD,KAAKvC,UAAU8B,OAAO,WACjC,IAqCaM,QAAQ7C,SAASO,cAAc,4BAA4B,IAmD5ET,GA1BA,WACE,IAAImD,EAAkB,CACpB,0BACA,aACA,qBACA,sBACA,wBACA,qBACA,qBACA,cACAL,KAAK,KACP5C,SAAS2C,iBAAiBM,GAAiBnB,SAASK,IAClDA,EAAG1B,UAAU6B,IAAI,UAAU,GAE/B,G","sources":["webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/scripts/index.js"],"sourcesContent":["// Import CSS variables\n// ref: https://css-tricks.com/getting-javascript-to-talk-to-css-and-sass/\nimport \"../styles/index.scss\";\n\n/**\n * A helper function to load scripts when the DOM is loaded.\n * This waits for everything to be on the page first before running, since\n * some functionality doesn't behave properly until everything is ready.\n */\nvar sbRunWhenDOMLoaded = (cb) => {\n if (document.readyState != \"loading\") {\n cb();\n } else if (document.addEventListener) {\n document.addEventListener(\"DOMContentLoaded\", cb);\n } else {\n document.attachEvent(\"onreadystatechange\", function () {\n if (document.readyState == \"complete\") cb();\n });\n }\n};\n\n/**\n * Toggle full-screen with button\n *\n * There are some browser-specific hacks in here:\n * - Safari requires a `webkit` prefix, so this uses conditionals to check for that\n * ref: https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API\n */\nvar toggleFullScreen = () => {\n var isInFullScreen =\n (document.fullscreenElement && document.fullscreenElement !== null) ||\n (document.webkitFullscreenElement &&\n document.webkitFullscreenElement !== null);\n let docElm = document.documentElement;\n if (!isInFullScreen) {\n console.log(\"[SBT]: Entering full screen\");\n if (docElm.requestFullscreen) {\n docElm.requestFullscreen();\n } else if (docElm.webkitRequestFullscreen) {\n docElm.webkitRequestFullscreen();\n }\n } else {\n console.log(\"[SBT]: Exiting full screen\");\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n }\n};\n\n/**\n * Manage scrolling behavior. This is primarily two things:\n *\n * 1. Hide the Table of Contents any time sidebar content is on the screen.\n *\n * This will be triggered any time a sidebar item enters or exits the screen.\n * It adds/removes items from an array if they have entered the screen, and\n * removes them when they exit the screen. It hides the TOC if anything is\n * on-screen.\n *\n * ref: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n *\n * 2. Add a `scrolled` class to to trigger CSS changes.\n */\nvar initTocHide = () => {\n var onScreenItems = [];\n let hideTocCallback = (entries, observer) => {\n // Check whether any sidebar item is displayed\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n // If an element just came on screen, add it our list\n onScreenItems.push(entry.target);\n } else {\n // Otherwise, if it's in our list then remove it\n for (let ii = 0; ii < onScreenItems.length; ii++) {\n if (onScreenItems[ii] === entry.target) {\n onScreenItems.splice(ii, 1);\n break;\n }\n }\n }\n });\n\n // Hide the TOC if any margin content is displayed on the screen\n if (onScreenItems.length > 0) {\n document.querySelector(\"div.bd-sidebar-secondary\").classList.add(\"hide\");\n } else {\n document\n .querySelector(\"div.bd-sidebar-secondary\")\n .classList.remove(\"hide\");\n }\n };\n let manageScrolledClassOnBody = (entries, observer) => {\n // The pixel is at the top, so if we're < 0 that it means we've scrolled\n if (entries[0].boundingClientRect.y < 0) {\n document.body.classList.add(\"scrolled\");\n } else {\n document.body.classList.remove(\"scrolled\");\n }\n };\n\n // Set up the intersection observer to watch all margin content\n let options = {\n // Trigger callback when the top of a margin item is 1/3 up the screen\n rootMargin: \"0px 0px -33% 0px\",\n };\n let tocObserver = new IntersectionObserver(hideTocCallback, options);\n // TODO: deprecate popout after v0.5.0\n const selectorClasses = [\n \"marginnote\",\n \"sidenote\",\n \"margin\",\n \"margin-caption\",\n \"full-width\",\n \"sidebar\",\n \"popout\",\n ];\n let marginSelector = [];\n selectorClasses.forEach((ii) => {\n // Use three permutations of each class name because `tag_` and `_` used to be supported\n marginSelector.push(\n ...[\n `.${ii}`,\n `.tag_${ii}`,\n `.${ii.replace(\"-\", \"_\")}`,\n `.tag_${ii.replace(\"-\", \"_\")}`,\n ],\n );\n });\n document.querySelectorAll(marginSelector.join(\", \")).forEach((ii) => {\n tocObserver.observe(ii);\n });\n\n // Set up the observer to check if we've scrolled from top of page\n let scrollObserver = new IntersectionObserver(manageScrolledClassOnBody);\n scrollObserver.observe(document.querySelector(\".sbt-scroll-pixel-helper\"));\n};\n\n/**\n * Activate Thebe with a custom button click.\n */\nvar initThebeSBT = () => {\n var title = document.querySelector(\"section h1\");\n var sibling = title.nextElementSibling;\n // If the next element after the title isn't a thebe button, add one now.\n // That way it is initiatlized when thebe is first-clicked and isn't re-added after.\n if (!sibling.classList.contains(\"thebe-launch-button\")) {\n title.insertAdjacentHTML(\n \"afterend\",\n \" \",\n );\n }\n // This function is provided by sphinx-thebe\n initThebe();\n};\n\n/**\n * Add no print class to certain DOM elements\n */\n\nfunction addNoPrint() {\n var noPrintSelector = [\n \".bd-header-announcement\",\n \".bd-header\",\n \".bd-header-article\",\n \".bd-sidebar-primary\",\n \".bd-sidebar-secondary\",\n \".bd-footer-article\",\n \".bd-footer-content\",\n \".bd-footer\",\n ].join(\",\");\n document.querySelectorAll(noPrintSelector).forEach((ii) => {\n ii.classList.add(\"noprint\");\n });\n}\n\n/**\n * Set up callback functions for UI click actions\n */\nwindow.initThebeSBT = initThebeSBT;\nwindow.toggleFullScreen = toggleFullScreen;\n\n/**\n * Set up functions to load when the DOM is ready\n */\nsbRunWhenDOMLoaded(initTocHide);\nsbRunWhenDOMLoaded(addNoPrint);\n"],"names":["sbRunWhenDOMLoaded","cb","document","readyState","addEventListener","attachEvent","window","initThebeSBT","title","querySelector","nextElementSibling","classList","contains","insertAdjacentHTML","initThebe","toggleFullScreen","isInFullScreen","fullscreenElement","webkitFullscreenElement","docElm","documentElement","console","log","exitFullscreen","webkitExitFullscreen","requestFullscreen","webkitRequestFullscreen","onScreenItems","tocObserver","IntersectionObserver","entries","observer","forEach","entry","isIntersecting","push","target","ii","length","splice","add","remove","rootMargin","marginSelector","replace","querySelectorAll","join","observe","boundingClientRect","y","body","noPrintSelector"],"sourceRoot":""}
\ No newline at end of file
diff --git a/_static/searchtools.js b/_static/searchtools.js
index 92da3f8b..b08d58c9 100644
--- a/_static/searchtools.js
+++ b/_static/searchtools.js
@@ -178,7 +178,7 @@ const Search = {
htmlToText: (htmlString, anchor) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
- for (const removalQuery of [".headerlinks", "script", "style"]) {
+ for (const removalQuery of [".headerlink", "script", "style"]) {
htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
}
if (anchor) {
@@ -328,13 +328,14 @@ const Search = {
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
- let score = Math.round(100 * queryLower.length / title.length)
+ const score = Math.round(Scorer.title * queryLower.length / title.length);
+ const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
normalResults.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
- score,
+ score + boost,
filenames[file],
]);
}
diff --git a/_static/styles/sphinx-book-theme.css b/_static/styles/sphinx-book-theme.css
index 56c23f18..5197540c 100644
--- a/_static/styles/sphinx-book-theme.css
+++ b/_static/styles/sphinx-book-theme.css
@@ -5,4 +5,5 @@
*
* This follows the 7-1 pattern described here:
* https://sass-guidelin.es/#architecture
- */html[data-theme=dark],html[data-theme=light]{--pst-font-size-base:none;--pst-color-secondary:#e89217}html[data-theme=light]{--sbt-color-announcement:#616161;--pst-color-primary:#176de8}html[data-theme=dark]{--pst-color-primary:#528fe4;--sbt-color-announcement:#616161;--pst-color-background:#121212}html{scroll-padding-top:4rem}.sbt-scroll-pixel-helper{position:absolute;width:0;height:0;top:0;left:0}.d-n,.onlyprint{display:none}@media print{.onlyprint{display:block!important}}@media print{.noprint{display:none!important}}.bd-article-container h1,.bd-article-container h2,.bd-article-container h3,.bd-article-container h4,.bd-article-container h5,.bd-article-container p.caption{color:var(--pst-color-muted)}.bd-article-container h1,.bd-article-container h2{font-weight:500}a.brackets:before{color:inherit;font-family:inherit;margin-right:0}table{position:relative}@media print{.bd-main .bd-content{margin-left:2rem;height:auto}.bd-main .bd-content #jb-print-docs-body{margin-left:0}.bd-main .bd-content #jb-print-docs-body h1{font-size:3em;text-align:center;margin-bottom:0}.bd-main .bd-content .bd-article{padding-top:0}.bd-main .bd-content .bd-article h1:first-of-type{display:none}.bd-main .bd-content .container{min-width:0!important}.bd-main .bd-content h1{margin-top:1em;margin-bottom:1em}.bd-main .bd-content h1,.bd-main .bd-content h2,.bd-main .bd-content h3,.bd-main .bd-content h4{break-after:avoid;color:#000}.bd-main .bd-content table{break-inside:avoid}.bd-main .bd-content pre{word-wrap:break-word}.bd-main .bd-content a.headerlink{display:none}.bd-main .bd-content aside.margin,.bd-main .bd-content aside.sidebar,.bd-main .bd-content blockquote.epigraph{border:none}.bd-main .bd-content .footer{margin-top:1em}.bd-main .bd-content #jb-print-toc{margin-bottom:1.5rem;margin-left:0}.bd-main .bd-content #jb-print-toc .section-nav{border-left:0!important;list-style-type:disc!important;margin-left:3em!important}.bd-main .bd-content #jb-print-toc .section-nav a{text-decoration:none!important}.bd-main .bd-content #jb-print-toc .section-nav li{display:list-item!important}.bd-main .bd-content #jb-print-toc .section-nav .nav{display:none}.bd-main .bd-footer-content{display:none!important}}.bd-header-announcement{background-color:var(--sbt-color-announcement);color:#fff}.bd-main .bd-content{justify-content:left}.bd-main .bd-content .bd-article-container{padding:0;overflow-x:unset;min-width:0}@media (min-width:1200px){.bd-main .bd-content .bd-article-container{max-width:calc(100% - var(--pst-sidebar-secondary))}}.bd-main .bd-content .bd-article-container .bd-article{padding-right:2rem;padding-left:2rem}@media (max-width:768px){.bd-main .bd-content .bd-article-container .bd-article{padding-right:1rem;padding-left:1rem}}.bd-main .bd-content .bd-article-container details.above-input summary,.bd-main .bd-content .bd-article-container details.below-input summary{border-left:3px solid var(--pst-color-primary)}@media (min-width:768px){label.sidebar-toggle.primary-toggle{display:inline-block}}@media (max-width:768px){label.sidebar-toggle.primary-toggle{margin-bottom:0}}@media (min-width:992px){label.sidebar-toggle.secondary-toggle{display:none}}@media (max-width:768px){label.sidebar-toggle.secondary-toggle{margin-bottom:0}}.bd-header-article{display:flex;align-items:center;position:sticky;top:0;background-color:var(--pst-color-background);transition:left .2s;font-size:.9em;padding:0 1rem;z-index:1020}@media (max-width:768px){.bd-header-article{padding:0 .5rem;height:3.5rem}}.scrolled .bd-header-article{box-shadow:0 6px 6px -6px var(--pst-color-shadow)}.bd-header-article .header-article__inner{padding:0}.bd-header-article .header-article-items{display:flex;align-items:center;height:3rem;width:100%}.bd-header-article .header-article-item{display:flex;align-items:center}.bd-header-article .article-header-buttons{display:flex}.bd-header-article .btn{font-size:1.3rem;color:var(--pst-color-text-muted);border:none;padding:0 .5rem;display:flex;align-items:center}.bd-header-article .btn svg{width:1.3rem}.bd-header-article .btn.show,.bd-header-article .btn:hover{color:var(--pst-color-text-base);border:none}.bd-header-article .btn.show+.dropdown-menu,.bd-header-article .btn:hover+.dropdown-menu{display:block}.bd-header-article .btn:focus{box-shadow:none}.bd-header-article .btn.dropdown-toggle:after{display:none}.bd-header-article div.dropdown{display:flex;align-items:center}.bd-header-article .theme-switch-button{margin:0}.bd-header-article .theme-switch-button button,.bd-header-article .theme-switch-button i,.bd-header-article .theme-switch-button span{padding:0}.bd-header-article .theme-switch-button i,.bd-header-article .theme-switch-button span{transition:color .25s ease-out}.bd-header-article .theme-switch-button:active,.bd-header-article .theme-switch-button:hover{background-color:unset!important}.bd-header-article .theme-switch-button:active i,.bd-header-article .theme-switch-button:active span,.bd-header-article .theme-switch-button:hover i,.bd-header-article .theme-switch-button:hover span{color:var(--pst-color-text-base)}.bd-header-article .dropdown-menu{top:2rem;transform:translateX(-75%);box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;border-color:var(--pst-color-border);background-color:var(--pst-color-background);color:var(--pst-color-text-muted)}.bd-header-article .dropdown-menu:hover{display:block}.bd-header-article .dropdown-menu .dropdown-item{display:inline-flex;align-items:center;padding-left:.5em;font-size:1em}.bd-header-article .dropdown-menu .dropdown-item:hover{text-decoration:none;background-color:initial;color:var(--pst-color-text-base)}.bd-header-article .dropdown-menu .dropdown-item span img{height:1em}.bd-header-article .dropdown-menu .dropdown-item span.btn__icon-container{width:1.7em;align-items:center;display:inline-flex;justify-content:center}.bd-header{position:inherit}.bd-header label.sidebar-toggle{display:none}.bd-sidebar-primary{top:0;max-height:100vh;padding:1rem;transition:margin-left .25s ease 0s,opacity .25s ease 0s,visibility .25s ease 0s}@media (max-width:768px){.bd-sidebar-primary{z-index:1081}}.bd-sidebar-primary .sidebar-primary-items__start{border-top:none}@media (min-width:992px){.bd-sidebar-primary{flex-basis:20%}}@media (min-width:992px){input#__primary:checked~.bd-container .bd-sidebar-primary{margin-left:-20%;visibility:hidden;opacity:0}}.bd-sidebar-secondary{top:0}@media (max-width:992px){.bd-sidebar-secondary{z-index:1081}}.bd-sidebar-secondary .sidebar-secondary-items{padding:0;display:flex;gap:.5rem}.bd-sidebar-secondary .sidebar-secondary-items .sidebar-secondary-item{padding-top:0;padding-bottom:0}.bd-sidebar-secondary .onthispage{height:3rem;min-height:3rem;display:flex;gap:.5rem;align-items:center;margin:0;color:var(--pst-color-muted)}@media (min-width:992px){.bd-sidebar-secondary{background:var(--pst-color-background);height:fit-content;transition:max-height .4s ease;z-index:2;padding:0}.bd-sidebar-secondary .toc-item{border-left-color:var(--pst-color-surface);padding-top:0}.bd-sidebar-secondary .toc-item nav.page-toc{margin-bottom:0;transition:opacity .4s ease}.bd-sidebar-secondary.hide:not(:hover){max-height:3rem;overflow-y:hidden}.scrolled .bd-sidebar-secondary.hide:not(:hover){box-shadow:0 6px 6px -6px rgba(0,0,0,.3)}.bd-sidebar-secondary.hide:not(:hover) .onthispage:after{opacity:1;content:"\f107";font-family:Font Awesome\ 5 Free;font-weight:900;padding-left:.5em;transition:opacity .3s ease}.bd-sidebar-secondary.hide:not(:hover) nav.page-toc{opacity:0}}footer{font-size:var(--sbt-font-size-small-1)}footer.bd-footer-content{display:flex;flex-wrap:wrap;padding:15px;border-top:1px solid #ccc;font-size:87.5%}footer.bd-footer-content .bd-footer-content__inner{padding-left:0}footer.bd-footer-content .bd-footer-content__inner p{margin-bottom:0}.bd-footer-article{padding:0 1rem}@media (max-width:768px){.bd-footer-article{padding:0 .5rem}}#pst-back-to-top{font-size:.8rem}@media (min-width:1200px){#pst-back-to-top{display:none!important}}.bd-sidebar-primary .navbar-icon-links{column-gap:.5rem}.bd-sidebar-primary .navbar-icon-links .nav-link i,.bd-sidebar-primary .navbar-icon-links .nav-link span{font-size:1.2rem}.bd-sidebar-primary .navbar-icon-links .nav-link img{font-size:.8rem}.navbar-brand{height:unset;max-height:unset;flex-direction:column;justify-content:center;gap:.25rem}.navbar-brand:hover{text-decoration:none}.navbar-brand .logo__title{font-size:1.25rem;white-space:normal;text-align:center}.navbar-brand .logo__image{height:unset}.bd-search-container{margin:2em}.bd-search-container #search-results h2:first-child{display:none}.search-button-field{width:100%;font-size:.9rem;display:none}.search-button-field .search-button__kbd-shortcut{margin-left:auto}@media (min-width:992px){.search-button{display:none!important}.search-button-field{display:flex}}div#searchbox{padding-right:2rem;padding-left:2rem}@media (max-width:768px){div#searchbox{padding-right:1rem;padding-left:1rem}}@media (min-width:768px){div#searchbox p.highlight-link{margin-left:0}div#searchbox p.highlight-link a{font-size:1rem}}img{max-width:100%}img.align-center{margin-left:auto;margin-right:auto;display:block}img.align-left{clear:left;float:left;margin-right:1em}img.align-right{clear:right;float:right;margin-left:1em}div.figure{width:100%;margin-bottom:1em;text-align:center}div.figure.align-left{text-align:left}div.figure.align-left p.caption{margin-left:0}div.figure.align-right{text-align:right}div.figure.align-right p.caption{margin-right:0}div.figure p.caption{margin:.5em 10%}div.figure.margin-caption p.caption,div.figure.margin p.caption{margin:.5em 0}div.figure.margin-caption p.caption{text-align:left}div.figure span.caption-number{font-weight:700}div.figure span{font-size:.9rem}label.margin-toggle{margin-bottom:0}label.margin-toggle.marginnote-label{display:none}label.margin-toggle sup{user-select:none}@media (max-width:992px){label.margin-toggle{cursor:pointer;color:#0071bc}label.margin-toggle.marginnote-label{display:inline}label.margin-toggle.marginnote-label:after{content:"\2295"}}input.margin-toggle{display:none}@media (max-width:992px){input.margin-toggle:checked+.marginnote,input.margin-toggle:checked+.sidenote{display:block;float:left;left:1rem;clear:both;width:95%;margin:1rem 2.5%;position:relative}}span.marginnote,span.sidenote{z-index:2;position:relative;width:40%;float:right;background-color:unset;font-size:.9em;margin-left:.5rem;border-left:none}span.marginnote sup,span.sidenote sup{user-select:none}@media (min-width:992px),print{span.marginnote,span.sidenote{width:33%;margin:0 -36% 0 0;clear:right}span.marginnote p.sidebar-title,span.sidenote p.sidebar-title{margin-bottom:-1rem;border-bottom:none;padding-left:0}span.marginnote p.sidebar-title~*,span.sidenote p.sidebar-title~*{padding-left:0;padding-right:0}}@media (max-width:992px){span.marginnote,span.sidenote{display:none}}aside.sidebar .note{margin:1rem;padding:0 0 1rem}aside.sidebar .admonition-title{margin:0 -1rem 0 0}aside.sidebar.margin .sidebar-title:empty{display:none}aside.sidebar.margin .admonition{margin:.5rem;padding-left:0;padding-right:0}aside.sidebar.margin .admonition .admonition-title{margin-left:0;margin-right:0}@media (min-width:992px){aside.sidebar.margin{border:none}aside.sidebar.margin .admonition{margin:1rem 0;padding:0 0 1rem}}.cell.tag_margin,.cell.tag_popout,.margin.docutils.container,aside.margin,div.margin,figure.margin{z-index:2;position:relative;width:40%;float:right;background-color:unset;font-size:.9em;margin-left:.5rem}@media (min-width:992px),print{.cell.tag_margin,.cell.tag_popout,.margin.docutils.container,aside.margin,div.margin,figure.margin{width:33%;margin:0 -36% 0 0;clear:right}.cell.tag_margin p.sidebar-title,.cell.tag_popout p.sidebar-title,.margin.docutils.container p.sidebar-title,aside.margin p.sidebar-title,div.margin p.sidebar-title,figure.margin p.sidebar-title{margin-bottom:-1rem;border-bottom:none;padding-left:0}.cell.tag_margin p.sidebar-title~*,.cell.tag_popout p.sidebar-title~*,.margin.docutils.container p.sidebar-title~*,aside.margin p.sidebar-title~*,div.margin p.sidebar-title~*,figure.margin p.sidebar-title~*{padding-left:0;padding-right:0}}.cell.tag_margin div.cell.tag_margin .cell_output,.cell.tag_popout div.cell.tag_margin .cell_output,.margin.docutils.container div.cell.tag_margin .cell_output,aside.margin div.cell.tag_margin .cell_output,div.margin div.cell.tag_margin .cell_output,figure.margin div.cell.tag_margin .cell_output{padding-left:0}div.figure.margin-caption figcaption,div.figure.margin-caption p.caption,figure.margin-caption figcaption{z-index:2;position:relative;width:40%;float:right;background-color:unset;font-size:.9em;margin-left:.5rem}@media (min-width:992px),print{div.figure.margin-caption figcaption,div.figure.margin-caption p.caption,figure.margin-caption figcaption{width:33%;margin:0 -36% 0 0;clear:right}div.figure.margin-caption figcaption p.sidebar-title,div.figure.margin-caption p.caption p.sidebar-title,figure.margin-caption figcaption p.sidebar-title{margin-bottom:-1rem;border-bottom:none;padding-left:0}div.figure.margin-caption figcaption p.sidebar-title~*,div.figure.margin-caption p.caption p.sidebar-title~*,figure.margin-caption figcaption p.sidebar-title~*{padding-left:0;padding-right:0}}.margin-caption figcaption{text-align:left}div.cell.tag_full-width,div.cell.tag_full_width,div.full-width,div.full_width{z-index:2;position:relative}@media (min-width:992px){div.cell.tag_full-width,div.cell.tag_full_width,div.full-width,div.full_width{max-width:136%;width:136%}}blockquote.epigraph,blockquote.highlights,blockquote.pull-quote{font-size:1.25em;border-left:none;background-color:var(--pst-color-background)}blockquote div>p+p.attribution{font-style:normal;font-size:.9em;text-align:right;color:#6c757d;padding-right:2em}div[class*=highlight-],pre{clear:none}div.cell.tag_output_scroll div.cell_output,div.cell.tag_scroll-input div.cell_input,div.cell.tag_scroll-output div.cell_output{max-height:24em;overflow-y:auto}@media only print{div.utterances,hypothesis-sidebar{display:none}}.thebelab-cell{border:none!important;margin-right:.5em!important}.thebelab-cell .thebelab-input{padding-left:10px!important}.cell.docutils.container{padding-right:0!important}button.thebe-launch-button{height:2.5em;font-size:1em}
\ No newline at end of file
+ */html[data-theme=dark],html[data-theme=light]{--pst-font-size-base:none;--pst-color-secondary:#e89217}html[data-theme=light]{--sbt-color-announcement:#616161;--pst-color-primary:#176de8}html[data-theme=dark]{--pst-color-primary:#528fe4;--sbt-color-announcement:#616161;--pst-color-background:#121212}html{scroll-padding-top:4rem}.sbt-scroll-pixel-helper{height:0;left:0;position:absolute;top:0;width:0}.d-n,.onlyprint{display:none}@media print{.onlyprint{display:block!important}.noprint{display:none!important}}.bd-article-container h1,.bd-article-container h2,.bd-article-container h3,.bd-article-container h4,.bd-article-container h5,.bd-article-container p.caption{color:var(--pst-color-muted)}.bd-article-container h1,.bd-article-container h2{font-weight:500}a.brackets:before{color:inherit;font-family:inherit;margin-right:0}table{position:relative}@media print{.bd-main .bd-content{height:auto;margin-left:2rem}.bd-main .bd-content #jb-print-docs-body{margin-left:0}.bd-main .bd-content #jb-print-docs-body h1{font-size:3em;margin-bottom:0;text-align:center}.bd-main .bd-content .bd-article{padding-top:0}.bd-main .bd-content .bd-article h1:first-of-type{display:none}.bd-main .bd-content .container{min-width:0!important}.bd-main .bd-content h1{margin-bottom:1em;margin-top:1em}.bd-main .bd-content h1,.bd-main .bd-content h2,.bd-main .bd-content h3,.bd-main .bd-content h4{break-after:avoid;color:#000}.bd-main .bd-content table{break-inside:avoid}.bd-main .bd-content pre{word-wrap:break-word}.bd-main .bd-content a.headerlink{display:none}.bd-main .bd-content aside.margin,.bd-main .bd-content aside.sidebar,.bd-main .bd-content blockquote.epigraph{border:none}.bd-main .bd-content .footer{margin-top:1em}.bd-main .bd-content #jb-print-toc{margin-bottom:1.5rem;margin-left:0}.bd-main .bd-content #jb-print-toc .section-nav{border-left:0!important;list-style-type:disc!important;margin-left:3em!important}.bd-main .bd-content #jb-print-toc .section-nav a{text-decoration:none!important}.bd-main .bd-content #jb-print-toc .section-nav li{display:list-item!important}.bd-main .bd-content #jb-print-toc .section-nav .nav{display:none}.bd-main .bd-footer-content{display:none!important}}.bd-header-announcement{background-color:var(--sbt-color-announcement);color:#fff}.bd-main .bd-content{justify-content:left}.bd-main .bd-content .bd-article-container{min-width:0;overflow-x:unset;padding:0}@media(min-width:1200px){.bd-main .bd-content .bd-article-container{max-width:calc(100% - var(--pst-sidebar-secondary))}}.bd-main .bd-content .bd-article-container .bd-article{padding-left:2rem;padding-right:2rem}@media(max-width:768px){.bd-main .bd-content .bd-article-container .bd-article{padding-left:1rem;padding-right:1rem}}.bd-main .bd-content .bd-article-container details.above-input summary,.bd-main .bd-content .bd-article-container details.below-input summary{border-left:3px solid var(--pst-color-primary)}@media(min-width:768px){button.sidebar-toggle.primary-toggle{display:inline-block}}@media(max-width:768px){button.sidebar-toggle.primary-toggle{margin-bottom:0}}@media(min-width:1200px){button.sidebar-toggle.secondary-toggle{display:none}}@media(max-width:768px){button.sidebar-toggle.secondary-toggle{margin-bottom:0}}.bd-header-article{align-items:center;background-color:var(--pst-color-background);display:flex;font-size:.9em;padding:0 1rem;position:sticky;top:0;transition:left .2s;z-index:1020}@media(max-width:768px){.bd-header-article{height:3.5rem;padding:0 .5rem}}.scrolled .bd-header-article{box-shadow:0 6px 6px -6px var(--pst-color-shadow)}.bd-header-article .header-article__inner{padding:0}.bd-header-article .header-article-items{align-items:center;display:flex;height:3rem;width:100%}.bd-header-article .header-article-item{align-items:center;display:flex}.bd-header-article .article-header-buttons{display:flex}.bd-header-article .btn{align-items:center;border:none;color:var(--pst-color-text-muted);display:flex;font-size:1.3rem;padding-left:.5rem;padding-right:.5rem}.bd-header-article .btn svg{width:1.3rem}.bd-header-article .btn.show,.bd-header-article .btn:hover{border:none;color:var(--pst-color-text-base)}.bd-header-article .btn.show+.dropdown-menu,.bd-header-article .btn:hover+.dropdown-menu{display:block}.bd-header-article .btn:focus{box-shadow:none}.bd-header-article .btn.dropdown-toggle:after{display:none}.bd-header-article div.dropdown{align-items:center;display:flex}.bd-header-article .theme-switch-button{margin:0}.bd-header-article .theme-switch-button button,.bd-header-article .theme-switch-button i,.bd-header-article .theme-switch-button span{padding:0}.bd-header-article .theme-switch-button i,.bd-header-article .theme-switch-button span{transition:color .25s ease-out}.bd-header-article .theme-switch-button:active,.bd-header-article .theme-switch-button:hover{background-color:unset!important}.bd-header-article .theme-switch-button:active i,.bd-header-article .theme-switch-button:active span,.bd-header-article .theme-switch-button:hover i,.bd-header-article .theme-switch-button:hover span{color:var(--pst-color-text-base)}.bd-header-article .dropdown-menu{background-color:var(--pst-color-background);border-color:var(--pst-color-border);box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;color:var(--pst-color-text-muted);top:2rem;transform:translateX(-75%)}.bd-header-article .dropdown-menu:hover{display:block}.bd-header-article .dropdown-menu .dropdown-item{align-items:center;display:inline-flex;font-size:1em;padding-left:.5em}.bd-header-article .dropdown-menu .dropdown-item:hover{background-color:initial;color:var(--pst-color-text-base);text-decoration:none}.bd-header-article .dropdown-menu .dropdown-item span img{height:1em}.bd-header-article .dropdown-menu .dropdown-item span.btn__icon-container{align-items:center;display:inline-flex;justify-content:center;width:1.7em}.bd-header{position:inherit}.bd-header button.sidebar-toggle{display:none}.bd-sidebar-primary{max-height:100vh;padding:1rem;top:0;transition:margin-left .25s ease 0s,opacity .25s ease 0s,visibility .25s ease 0s}@media(max-width:768px){.bd-sidebar-primary{z-index:1081}}.bd-sidebar-primary .sidebar-primary-items__start{border-top:none}@media(min-width:992px){.bd-sidebar-primary{flex-basis:20%}input#pst-primary-sidebar-checkbox:checked~.bd-container .bd-sidebar-primary{margin-left:-20%;opacity:0;visibility:hidden}}.bd-sidebar-secondary{top:0}@media(max-width:1200px){.bd-sidebar-secondary{z-index:1081}}.bd-sidebar-secondary .sidebar-secondary-items{display:flex;gap:.5rem;padding:0}.bd-sidebar-secondary .sidebar-secondary-items .sidebar-secondary-item{padding-bottom:0;padding-top:0}.bd-sidebar-secondary .onthispage{align-items:center;color:var(--pst-color-muted);display:flex;gap:.5rem;height:3rem;margin:0;min-height:3rem}@media(min-width:1200px){.bd-sidebar-secondary{background:var(--pst-color-background);height:fit-content;padding:0;transition:max-height .4s ease;z-index:2}.bd-sidebar-secondary .toc-item{border-left-color:var(--pst-color-surface);padding-top:0}.bd-sidebar-secondary .toc-item nav.page-toc{margin-bottom:0;transition:opacity .4s ease}.bd-sidebar-secondary.hide:not(:hover){max-height:3rem;overflow-y:hidden}.scrolled .bd-sidebar-secondary.hide:not(:hover){box-shadow:0 6px 6px -6px rgba(0,0,0,.3)}.bd-sidebar-secondary.hide:not(:hover) .onthispage:after{content:"";font-family:Font Awesome\ 5 Free;font-weight:900;opacity:1;padding-left:.5em;transition:opacity .3s ease}.bd-sidebar-secondary.hide:not(:hover) nav.page-toc{opacity:0}}footer{font-size:var(--sbt-font-size-small-1)}footer.bd-footer-content{border-top:1px solid #ccc;display:flex;flex-wrap:wrap;font-size:87.5%;padding:15px}footer.bd-footer-content .bd-footer-content__inner{padding-left:0}footer.bd-footer-content .bd-footer-content__inner p{margin-bottom:0}.bd-footer-article{padding:0 1rem}@media(max-width:768px){.bd-footer-article{padding:0 .5rem}}#pst-back-to-top{font-size:.8rem}@media(min-width:1200px){#pst-back-to-top{display:none!important}}.bd-sidebar-primary .navbar-icon-links{column-gap:.5rem}.bd-sidebar-primary .navbar-icon-links .nav-link i,.bd-sidebar-primary .navbar-icon-links .nav-link span{font-size:1.2rem}.bd-sidebar-primary .navbar-icon-links .nav-link img{font-size:.8rem}.navbar-brand{flex-direction:column;gap:.25rem;height:unset;justify-content:center;max-height:unset}.navbar-brand:hover{text-decoration:none}.navbar-brand .logo__title{font-size:1.25rem;text-align:center;white-space:normal}.navbar-brand .logo__image{height:unset}.bd-search-container{margin:2em}.bd-search-container #search-results h2:first-child{display:none}.search-button-field{display:none;font-size:.9rem;width:100%}.search-button-field .search-button__kbd-shortcut{margin-left:auto}@media(min-width:992px){.search-button{display:none!important}.search-button-field{display:flex}}div#searchbox{padding-left:2rem;padding-right:2rem}@media(max-width:768px){div#searchbox{padding-left:1rem;padding-right:1rem}}@media(min-width:768px){div#searchbox p.highlight-link{margin-left:0}div#searchbox p.highlight-link a{font-size:1rem}}img{max-width:100%}img.align-center{display:block;margin-left:auto;margin-right:auto}img.align-left{clear:left;float:left;margin-right:1em}img.align-right{clear:right;float:right;margin-left:1em}div.figure{margin-bottom:1em;text-align:center;width:100%}div.figure.align-left{text-align:left}div.figure.align-left p.caption{margin-left:0}div.figure.align-right{text-align:right}div.figure.align-right p.caption{margin-right:0}div.figure p.caption{margin:.5em 10%}div.figure.margin p.caption,div.figure.margin-caption p.caption{margin:.5em 0}div.figure.margin-caption p.caption{text-align:left}div.figure span.caption-number{font-weight:700}div.figure span{font-size:.9rem}label.margin-toggle{margin-bottom:0}label.margin-toggle.marginnote-label{display:none}label.margin-toggle sup{user-select:none}@media(max-width:992px){label.margin-toggle{color:#0071bc;cursor:pointer}label.margin-toggle.marginnote-label{display:inline}label.margin-toggle.marginnote-label:after{content:"⊕"}}input.margin-toggle{display:none}@media(max-width:992px){input.margin-toggle:checked+.marginnote,input.margin-toggle:checked+.sidenote{clear:both;display:block;float:left;left:1rem;margin:1rem 2.5%;position:relative;width:95%}}span.marginnote,span.sidenote{background-color:unset;border-left:none;float:right;font-size:.9em;margin-left:.5rem;position:relative;width:40%;z-index:2}span.marginnote sup,span.sidenote sup{user-select:none}@media(min-width:992px),print{span.marginnote,span.sidenote{clear:right;margin:0 -36% 0 0;width:33%}span.marginnote p.sidebar-title,span.sidenote p.sidebar-title{border-bottom:none;margin-bottom:-1rem;padding-left:0}span.marginnote p.sidebar-title~*,span.sidenote p.sidebar-title~*{padding-left:0;padding-right:0}}@media(max-width:992px){span.marginnote,span.sidenote{display:none}}aside.sidebar .note{margin:1rem;padding:0 0 1rem}aside.sidebar .admonition-title{margin:0 -1rem 0 0}aside.sidebar.margin .sidebar-title:empty{display:none}aside.sidebar.margin .admonition{margin:.5rem;padding-left:0;padding-right:0}aside.sidebar.margin .admonition .admonition-title{margin-left:0;margin-right:0}@media(min-width:992px){aside.sidebar.margin{border:none}aside.sidebar.margin .admonition{margin:1rem 0;padding:0 0 1rem}}.cell.tag_margin,.cell.tag_popout,.margin.docutils.container,aside.margin,div.margin,figure.margin{background-color:unset;float:right;font-size:.9em;margin-left:.5rem;position:relative;width:40%;z-index:2}@media(min-width:992px),print{.cell.tag_margin,.cell.tag_popout,.margin.docutils.container,aside.margin,div.margin,figure.margin{clear:right;margin:0 -36% 0 0;width:33%}.cell.tag_margin p.sidebar-title,.cell.tag_popout p.sidebar-title,.margin.docutils.container p.sidebar-title,aside.margin p.sidebar-title,div.margin p.sidebar-title,figure.margin p.sidebar-title{border-bottom:none;margin-bottom:-1rem;padding-left:0}.cell.tag_margin p.sidebar-title~*,.cell.tag_popout p.sidebar-title~*,.margin.docutils.container p.sidebar-title~*,aside.margin p.sidebar-title~*,div.margin p.sidebar-title~*,figure.margin p.sidebar-title~*{padding-left:0;padding-right:0}}.cell.tag_margin div.cell.tag_margin .cell_output,.cell.tag_popout div.cell.tag_margin .cell_output,.margin.docutils.container div.cell.tag_margin .cell_output,aside.margin div.cell.tag_margin .cell_output,div.margin div.cell.tag_margin .cell_output,figure.margin div.cell.tag_margin .cell_output{padding-left:0}div.figure.margin-caption figcaption,div.figure.margin-caption p.caption,figure.margin-caption figcaption{background-color:unset;float:right;font-size:.9em;margin-left:.5rem;position:relative;width:40%;z-index:2}@media(min-width:992px),print{div.figure.margin-caption figcaption,div.figure.margin-caption p.caption,figure.margin-caption figcaption{clear:right;margin:0 -36% 0 0;width:33%}div.figure.margin-caption figcaption p.sidebar-title,div.figure.margin-caption p.caption p.sidebar-title,figure.margin-caption figcaption p.sidebar-title{border-bottom:none;margin-bottom:-1rem;padding-left:0}div.figure.margin-caption figcaption p.sidebar-title~*,div.figure.margin-caption p.caption p.sidebar-title~*,figure.margin-caption figcaption p.sidebar-title~*{padding-left:0;padding-right:0}}.margin-caption figcaption{text-align:left}div.cell.tag_full-width,div.cell.tag_full_width,div.full-width,div.full_width{position:relative;z-index:2}@media(min-width:992px){div.cell.tag_full-width,div.cell.tag_full_width,div.full-width,div.full_width{max-width:136%;width:136%}}blockquote.epigraph,blockquote.highlights,blockquote.pull-quote{background-color:var(--pst-color-background);border-left:none;font-size:1.25em}blockquote div>p+p.attribution{color:#6c757d;font-size:.9em;font-style:normal;padding-right:2em;text-align:right}div[class*=highlight-],pre{clear:none}div.cell.tag_output_scroll div.cell_output,div.cell.tag_scroll-input div.cell_input,div.cell.tag_scroll-output div.cell_output{max-height:24em;overflow-y:auto}@media only print{div.utterances,hypothesis-sidebar{display:none}}.thebelab-cell{border:none!important;margin-right:.5em!important}.thebelab-cell .thebelab-input{padding-left:10px!important}.cell.docutils.container{padding-right:0!important}button.thebe-launch-button{font-size:1em;height:2.5em}
+/*# sourceMappingURL=sphinx-book-theme.css.map*/
\ No newline at end of file
diff --git a/_static/styles/sphinx-book-theme.css.map b/_static/styles/sphinx-book-theme.css.map
new file mode 100644
index 00000000..be3f1326
--- /dev/null
+++ b/_static/styles/sphinx-book-theme.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"styles/sphinx-book-theme.css","mappings":"AAAA;;;;;;;EAAA,CC0CA,6CAGE,yBAA0B,CAG1B,6BAA8B,CAKhC,uBAEE,gCAAyC,CAEzC,2BAA4B,CAG9B,sBAEE,2BAA4B,CAG5B,gCAAyC,CAEzC,8BAA+B,CChEjC,KAIE,wBAOF,yBAGE,SAEA,MAAK,CAJL,kBAGA,MAFA,OAGA,CAYF,gBACE,aAEA,aAHF,WAII,wBAKJ,SAEI,uBAPA,CC9BF,6JAME,6BAIF,kDAEE,gBAKJ,kBACE,cACA,oBACA,eAGF,MACE,kBC1BF,aAEI,qBAEE,YADA,gBACA,CAEA,yCACE,cAEA,4CACE,cAEA,eAAc,CADd,iBACA,CAIJ,iCACE,cAGA,kDACE,aAKJ,gCACE,sBAIF,wBAEE,kBADA,cACA,CAEF,gGAIE,kBACA,WAGF,2BACE,mBAGF,yBACE,qBAGF,kCACE,aAIF,8GAGE,YAGF,6BACE,eAGF,mCACE,qBACA,cACA,gDACE,wBACA,+BACA,0BACA,kDACE,+BAEF,mDACE,4BAEF,qDACE,aAOR,4BACE,wBC3FN,wBACE,+CACA,WCFF,qBAEE,qBCFF,2CAME,WAAU,CAFV,iBAFA,SAIA,CAEA,yBARF,2CAUI,qDAGF,uDAEE,kBADA,kBACA,CACA,wBAHF,uDAKI,kBADA,kBACA,EAKF,8IACE,+CCNJ,wBADF,qCAEI,sBAEF,wBAJF,qCAKI,iBAMF,yBADF,uCAEI,cAEF,wBAJF,uCAKI,iBAKJ,mBAEE,mBAGA,6CAJA,aAMA,eACA,eALA,gBACA,MAEA,oBAQA,YPjCc,CO6Bd,wBAVF,mBA5BI,cAwCA,iBAOF,6BACE,kDAIF,0CACE,UAIF,yCAEE,mBADA,aAEA,WP1CoB,CO2CpB,WAIF,wCAEE,mBADA,YACA,CAOF,2CACE,aAIF,wBAUE,mBANA,YADA,kCAMA,aAPA,iBAGA,mBACA,mBAIA,CAGA,4BACE,aAIF,2DAGE,YADA,gCACA,CACA,yFACE,cAGJ,8BACE,gBAKA,8CACE,aAMN,gCAEE,mBADA,YACA,CAGF,wCAEE,SAGA,sIAGE,UAIF,uFAEE,+BAEF,6FAEE,iCACA,wMAEE,iCAMN,kCAaE,6CADA,qCCvJF,+FACE,CDwJA,kCAPA,SACA,0BAMA,CAZA,wCACE,cAaF,iDAEE,mBADA,oBAYA,cAVA,iBAUA,CAPA,uDAEE,yBACA,iCAFA,oBAEA,CAOF,0DACE,WAGF,0EAEE,mBACA,oBACA,uBAHA,WAGA,CEvMR,WAEE,iBAIA,iCACE,aCHJ,oBAGE,iBAGA,aAJA,MAOA,gFACE,CAIF,wBAdF,oBAgBI,cAIF,kDACE,gBAIF,wBAzBF,oBA0BI,cVF+B,CUUjC,6EAGE,iBAEA,SAAQ,CADR,iBACA,CVf+B,CWxBnC,sBAEE,MAEA,yBAJF,sBAMI,cAIF,+CAEE,aACA,UAFA,SAEA,CAGA,uEAEE,gBAAe,CADf,aACA,CAKJ,kCAKE,mBAEA,6BAJA,aACA,UAHA,WXDoB,CWMpB,SAJA,eAKA,CAIF,yBAlCF,sBAmCI,uCACA,mBAOA,SAAQ,CANR,+BAGA,SAGA,CAGA,gCAEE,2CAEA,cAGA,6CAEE,gBAGA,4BAMJ,uCAEE,eX3CkB,CW4ClB,kBAGA,iDACE,yCAIF,yDAEE,YACA,iCACA,gBAHA,UAIA,kBACA,4BAIF,oDACE,WCvFR,OACE,uCACA,yBAIE,0BAHA,aACA,eAGA,gBAFA,YZ6BoB,CY1BpB,mDACE,eACA,qDACE,gBCdR,mBACE,eACA,wBAFF,mBAII,iBCJJ,iBASE,gBALA,yBAJF,iBAKI,wBCDF,uCACE,iBAIE,yGAEE,iBAIF,qDACE,gBChBR,cAKE,sBAEA,WANA,aAKA,uBAJA,gBAKA,CAGA,oBACE,qBAEF,2BACE,kBAEA,kBADA,kBACA,CAGF,2BACE,aCnBJ,qBACE,WAGE,oDACE,aAMN,qBAIE,aAFA,gBADA,UAGA,CAEA,kDACE,iBAKJ,wBACE,eACE,uBAGF,qBACE,cAMJ,cAEE,kBADA,kBACA,CACA,wBAHF,cAKI,kBADA,kBACA,EAKA,wBAFF,+BAGI,cACA,iCACE,gBChDR,IACE,eAEA,iBAGE,cAFA,iBACA,iBACA,CAGF,eACE,WACA,WACA,iBAGF,gBACE,YACA,YACA,gBAKJ,WAEE,kBACA,kBAFA,UAEA,CAEA,sBACE,gBACA,gCACE,cAGJ,uBACE,iBACA,iCACE,eAIJ,qBACE,gBAKA,gEACE,cAIJ,oCACE,gBAGF,+BACE,gBAGF,gBACE,gBCHJ,oBACE,gBACA,qCACE,aAEF,wBACE,iBAEF,wBARF,oBAUI,cADA,cACA,CACA,qCACE,eACA,2CACE,aAMR,oBACE,aACA,wBACE,8EAKE,WAHA,cACA,WACA,UAGA,iBACA,kBAFA,SAEA,EAKN,8BAlEE,uBA0EA,iBA3EA,YAEA,eACA,kBAmEA,kBAvEA,UAsEA,SAMA,CAJA,sCACE,iBAlEF,8BA6DF,8BAxDI,YAHA,kBADA,SAIA,CAEA,8DAEE,mBADA,oBAEA,eAGA,kEACE,eACA,iBAuDN,wBATF,8BAUI,cAKF,oBAEE,YACA,iBAGF,gCACE,mBAWF,0CACE,aAMF,iCACE,aACA,eACA,gBAGA,mDACE,cACA,eAIJ,wBAtBF,qBAwBI,YAGA,iCACE,cACA,kBAKN,mGAlIE,uBADA,YAEA,eACA,kBAuIA,kBA3IA,UA0IA,SAtIA,CAGA,8BA6HF,mGAxHI,YAHA,kBADA,SAIA,CAEA,mMAEE,mBADA,oBAEA,eAGA,+MACE,eACA,iBAyHN,ySACE,eAKJ,0GAnJE,uBADA,YAEA,eACA,kBAqJA,kBAzJA,UAwJA,SApJA,CAGA,8BA8IF,0GAzII,YAHA,kBADA,SAIA,CAEA,0JAEE,mBADA,oBAEA,eAGA,gKACE,eACA,iBAwIR,2BACE,gBAUF,8EAKE,kBADA,SACA,CACA,wBANF,8EAOI,cATsB,CAUtB,UAVsB,EC7LxB,gEAKE,6CADA,iBADA,gBAEA,CAGF,+BAIE,cAFA,eADA,kBAIA,kBAFA,gBAEA,CCjBJ,2BAEE,WCIF,+HACE,gBACA,gBCFF,kBACE,kCAEE,cCNJ,eACE,sBACA,4BAGF,+BACE,4BAGF,yBACE,0BAGF,2BAEE,cADA,YACA","sources":["webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/index.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/abstracts/_variables.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/base/_base.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/base/_typography.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/base/_print.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/sections/_announcement.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/sections/_article.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/sections/_article-container.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/sections/_header-article.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/abstracts/_mixins.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/sections/_header-primary.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/sections/_sidebar-primary.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/sections/_sidebar-secondary.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/sections/_footer-content.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/sections/_footer-article.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/components/_back-to-top.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/components/_icon-links.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/components/_logo.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/components/_search.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/content/_images.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/content/_margin.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/content/_quotes.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/content/_code.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/content/_notebooks.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/extensions/_comments.scss","webpack://sphinx_book_theme/./src/sphinx_book_theme/assets/styles/extensions/_thebe.scss"],"sourcesContent":["/*! sphinx-book-theme CSS\n * BSD 3-Clause License\n * Copyright (c) 2020, EBP\n * All rights reserved.\n *\n * This follows the 7-1 pattern described here:\n * https://sass-guidelin.es/#architecture\n */\n// Variables and re-usable SCSS functions\n@import \"abstracts/mixins\";\n@import \"abstracts/variables\";\n\n// Basic styling applied throughout site\n@import \"base/base\";\n@import \"base/typography\";\n@import \"base/print\";\n\n// Major theme layout, skeleton, and whitespace\n@import \"sections/announcement\";\n@import \"sections/article\";\n@import \"sections/article-container\";\n@import \"sections/header-article\";\n@import \"sections/header-primary\";\n@import \"sections/sidebar-primary\";\n@import \"sections/sidebar-secondary\";\n@import \"sections/footer-content\";\n@import \"sections/footer-article\";\n\n// Re-usable components across the theme\n@import \"components/back-to-top\";\n@import \"components/icon-links\";\n@import \"components/logo\";\n@import \"components/search\";\n\n// Content blocks in standard Sphinx\n@import \"content/images\";\n@import \"content/margin\";\n@import \"content/quotes\";\n@import \"content/code\";\n@import \"content/notebooks\";\n\n// Content blocks from Sphinx extensions\n\n@import \"extensions/comments\";\n@import \"extensions/thebe\";\n","/*********************************************\n* Variables *\n*********************************************/\n// Breakpoints from Bootstrap: https://getbootstrap.com/docs/5.0/layout/breakpoints/\n$breakpoint-xxl: 1200px;\n$breakpoint-xl: 1200px;\n$breakpoint-lg: 992px;\n$breakpoint-md: 768px;\n$breakpoint-sm: 576px;\n\n// A few semantic z-indices\n$zindex-bottom: 1;\n$zindex-middle: 2;\n$zindex-top: 3;\n\n// Semantic Z-index from bootstrap. Copied here so we can re-use if needed.\n// ref: https://getbootstrap.com/docs/5.0/layout/z-index/\n$zindex-dropdown: 1000;\n$zindex-sticky: 1020;\n$zindex-fixed: 1030;\n$zindex-modal-backdrop: 1040;\n$zindex-offcanvas: 1050;\n$zindex-modal: 1060;\n$zindex-popover: 1070;\n$zindex-tooltip: 1080;\n\n// Spacing\n$header-article-height: 3rem;\n$sidebar-primary-width-widescreen: 20%;\n$toc-width-mobile: 75%;\n\n// Consistent styling for page elements\n$box-border-radius: 0.4em;\n\n$animation-time: 0.25s;\n\n// Font sizes\n$sbt-font-size-small-1: 87.5%;\n\n/**\n * Variables that aren't impacted by light/dark\n */\nhtml[data-theme=\"light\"],\nhtml[data-theme=\"dark\"] {\n // Over-ride the pydata theme so that readers can use their system base\n --pst-font-size-base: none;\n // Default secondary color (has enough contrast on both light/dark so\n // no need to special case.\n --pst-color-secondary: #e89217;\n}\n\n// Overrides for pydata sphinx theme.\n// See https://github.com/pydata/pydata-sphinx-theme/blob/master/pydata_sphinx_theme/static/css/theme.css\nhtml[data-theme=\"light\"] {\n // Announcement\n --sbt-color-announcement: rgb(97, 97, 97);\n // Default primary color (need to adjust on dark theme due to bad contrast)\n --pst-color-primary: #176de8;\n}\n\nhtml[data-theme=\"dark\"] {\n // Slightly lighten these colors to make them stand out more on dark\n --pst-color-primary: #528fe4;\n\n // Over-ride the purple announcement color\n --sbt-color-announcement: rgb(97, 97, 97);\n // Desaturate the background\n --pst-color-background: #121212;\n}\n","/**\n * General structural things\n */\nhtml {\n // The PyData theme value for this is based on `header-height` variable.\n // We set the variable to 0 and have our own $article-header-height SCSS variable.\n // So here we follow the same pattern but now using our variable.\n scroll-padding-top: $header-article-height + 1rem;\n}\n\n/**\n* Utility classes used in a few places\n*/\n// For the helper pixel that we can watch to decide whether we've scrolled\n.sbt-scroll-pixel-helper {\n position: absolute;\n width: 0px;\n height: 0px;\n top: 0;\n left: 0;\n}\n\n// We define our own display-none class since bootstrap uses !important and we want to be able to over-ride\n.d-n {\n display: none;\n}\n\n/**\n * Printing behavior\n */\n// Only display upon printing\n.onlyprint {\n display: none;\n\n @media print {\n display: block !important;\n }\n}\n\n// Prevent an item from being printed\n.noprint {\n @media print {\n display: none !important;\n }\n}\n","/*********************************************\n* Basic text formatting and content structure *\n*********************************************/\n\n.bd-article-container {\n h1,\n h2,\n h3,\n h4,\n h5,\n p.caption {\n color: var(--pst-color-muted);\n }\n\n // Top two headers are slightly bolder\n h1,\n h2 {\n font-weight: 500;\n }\n}\n\n// counteracting pydata style on a::before, for citation style\na.brackets::before {\n color: inherit;\n font-family: inherit;\n margin-right: 0rem;\n}\n\ntable {\n position: relative;\n}\n","/*********************************************\n* Print-specific CSS *\n*********************************************/\n@media print {\n .bd-main {\n .bd-content {\n margin-left: 2rem;\n height: auto;\n // Structural elements\n #jb-print-docs-body {\n margin-left: 0rem;\n\n h1 {\n font-size: 3em;\n text-align: center;\n margin-bottom: 0;\n }\n }\n // Main content adjustments\n .bd-article {\n padding-top: 0;\n\n // The first H1 is the title, we've already displayed above\n h1:first-of-type {\n display: none;\n }\n }\n\n // HACK: Without this, some code cells take the whole width\n .container {\n min-width: 0% !important;\n }\n\n // Content\n h1 {\n margin-top: 1em;\n margin-bottom: 1em;\n }\n h1,\n h2,\n h3,\n h4 {\n break-after: avoid;\n color: black;\n }\n\n table {\n break-inside: avoid;\n }\n\n pre {\n word-wrap: break-word;\n }\n\n a.headerlink {\n display: none;\n }\n\n // Remove borders to save some ink\n blockquote.epigraph,\n aside.margin,\n aside.sidebar {\n border: none;\n }\n\n .footer {\n margin-top: 1em;\n }\n // Print-only table of contents\n #jb-print-toc {\n margin-bottom: 1.5rem;\n margin-left: 0rem;\n .section-nav {\n border-left: 0px !important;\n list-style-type: disc !important;\n margin-left: 3em !important;\n a {\n text-decoration: none !important;\n }\n li {\n display: list-item !important;\n }\n .nav {\n display: none;\n }\n }\n }\n }\n\n // Hide the footer on printing\n .bd-footer-content {\n display: none !important;\n }\n }\n}\n",".bd-header-announcement {\n background-color: var(--sbt-color-announcement);\n color: #fff;\n}\n",".bd-main .bd-content {\n // make article container left aligned in absence of sidebar\n justify-content: left;\n}\n",".bd-main .bd-content .bd-article-container {\n // Re-adjust padding defaults to be flush on the top and right\n padding: 0rem;\n // Unset overflow x so that sticky: top works for the article header\n overflow-x: unset;\n // prevent from overflowing the flex container\n min-width: 0;\n\n @media (min-width: $breakpoint-xl) {\n // keep article at reasonable width in absence of sidebar\n max-width: calc(100% - var(--pst-sidebar-secondary));\n }\n\n .bd-article {\n padding-right: 2rem;\n padding-left: 2rem;\n @media (max-width: $breakpoint-md) {\n padding-right: 1rem;\n padding-left: 1rem;\n }\n }\n details.above-input,\n details.below-input {\n summary {\n border-left: 3px solid var(--pst-color-primary);\n }\n }\n}\n","/*********************************************\n* Top Bar *\n*********************************************/\n/**\n * Mixin:\n * Header behavior on mobile\n */\n@mixin header-height-mobile {\n @media (max-width: $breakpoint-md) {\n height: $header-article-height + 0.5rem;\n }\n}\n\n/**\n * Sidebar toggle over-rides for PST\n */\n// Primary toggle is always visible\nbutton.sidebar-toggle.primary-toggle {\n @media (min-width: $breakpoint-md) {\n display: inline-block;\n }\n @media (max-width: $breakpoint-md) {\n margin-bottom: 0px;\n }\n}\n\n// Secondary toggle mimics behavior of \"persistent header\" div of PST\nbutton.sidebar-toggle.secondary-toggle {\n @media (min-width: $breakpoint-xl) {\n display: none;\n }\n @media (max-width: $breakpoint-md) {\n margin-bottom: 0px;\n }\n}\n\n// Wrapper container\n.bd-header-article {\n display: flex;\n align-items: center;\n position: sticky;\n top: 0;\n background-color: var(--pst-color-background);\n transition: left 0.2s;\n font-size: 0.9em;\n padding: 0 1rem;\n\n @media (max-width: $breakpoint-md) {\n // Give mobile view a bit more space for text\n padding: 0 0.5rem;\n }\n z-index: $zindex-sticky;\n\n @include header-height-mobile;\n\n // The box shadow that shows up when you've scrolled past the top\n .scrolled & {\n box-shadow: 0 6px 6px -6px var(--pst-color-shadow);\n }\n\n // Remove inner padding so that spacing of buttons is a bit tighter\n .header-article__inner {\n padding: 0;\n }\n\n // Inner container with items in it\n .header-article-items {\n display: flex;\n align-items: center;\n height: $header-article-height;\n width: 100%;\n }\n\n // Contains the individual item components so we want it centered\n .header-article-item {\n display: flex;\n align-items: center;\n }\n\n /**\n * Buttons in the header\n */\n // A series of buttons we special-case in the theme\n .article-header-buttons {\n display: flex;\n }\n\n // Generic button styles\n .btn {\n // Basic button size\n font-size: 1.3rem;\n color: var(--pst-color-text-muted);\n border: none;\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n\n // Make sure anything inside is aligned vertically\n display: flex;\n align-items: center;\n\n // Fix width of buttons so they're all the same\n svg {\n width: 1.3rem;\n }\n\n // Hover / active behavior\n &.show,\n &:hover {\n color: var(--pst-color-text-base);\n border: none;\n & + .dropdown-menu {\n display: block;\n }\n }\n &:focus {\n box-shadow: none;\n }\n\n &.dropdown-toggle {\n // Hide the bootstrap caret\n &:after {\n display: none;\n }\n }\n }\n\n // Vertically align dropdown buttons\n div.dropdown {\n display: flex;\n align-items: center;\n }\n\n .theme-switch-button {\n // Removing some special-casing that was needed in PST\n margin: 0;\n\n // Remove extra padding since it is already there between sidebar items\n span,\n i,\n button {\n padding: 0;\n }\n\n // No background on hover. Need important to over-ride the PST which uses it too.\n span,\n i {\n transition: color $animation-time ease-out;\n }\n &:active,\n &:hover {\n background-color: unset !important;\n span,\n i {\n color: var(--pst-color-text-base);\n }\n }\n }\n\n // The menu that is normally hidden until you hover\n .dropdown-menu {\n // Hidden unless we are hovering\n &:hover {\n display: block;\n }\n\n // Positioning and layout of dropdown items to be standardized\n top: 2rem;\n transform: translateX(-75%);\n @include pst-box-shadow;\n\n // Color and shadowing\n border-color: var(--pst-color-border);\n background-color: var(--pst-color-background);\n color: var(--pst-color-text-muted);\n\n .dropdown-item {\n display: inline-flex;\n align-items: center;\n padding-left: 0.5em;\n\n // To prevent link underline from showing up\n &:hover {\n text-decoration: none;\n background-color: initial;\n color: var(--pst-color-text-base);\n }\n\n // Slightly smaller font for everything\n font-size: 1em;\n\n // Image icons should be the same height as icons\n span img {\n height: 1em;\n }\n\n span.btn__icon-container {\n width: 1.7em;\n align-items: center;\n display: inline-flex;\n justify-content: center;\n }\n }\n }\n}\n","/*********************************************\n* SASS Mixins\n*********************************************/\n/**\n* Hide the scrollbar until the element is hovered, so keep the page clean\n* Use this sparingly because it's not a great UX pattern.\n*/\n@mixin scrollbar-on-hover() {\n &:not(:hover) {\n &::-webkit-scrollbar-thumb {\n visibility: hidden;\n }\n }\n}\n\n/**\n * The PyData Sphinx Theme box shadow rule\n * Copied here in csae we need to re-use.\n*/\n@mixin pst-box-shadow() {\n box-shadow:\n 0 0.2rem 0.5rem var(--pst-color-shadow),\n 0 0 0.0625rem var(--pst-color-shadow) !important;\n}\n",".bd-header {\n // Turn off sticky positioning so that it scrolls\n position: inherit;\n\n // Turn these off because we'll show it in the article header\n // The primary sidebar toggle\n button.sidebar-toggle {\n display: none;\n }\n}\n","/*********************************************\n* Left Nav Bar *\n*********************************************/\n\n.bd-sidebar-primary {\n // So that it sticks to the top of the page instead of the header height\n top: 0;\n max-height: 100vh;\n\n // Tighter padding so the spacing is more equal\n padding: 1rem;\n\n // Draw open/close animation\n transition:\n margin-left $animation-time ease 0s,\n opacity $animation-time ease 0s,\n visibility $animation-time ease 0s;\n\n @media (max-width: $breakpoint-md) {\n // So that tooltips don't overlap\n z-index: $zindex-tooltip + 1;\n }\n\n // Remove the top border since there's often no header items above\n .sidebar-primary-items__start {\n border-top: none;\n }\n\n // On wide screens we have a smaller sidebar width than PST\n @media (min-width: $breakpoint-lg) {\n flex-basis: $sidebar-primary-width-widescreen;\n }\n}\n\n// Default visibility for left sidebar is the reverse of what it is on mobile.\n// It is shown by default, and hidden with a click.\n// Mobile behavior is defined in the pydata sphinx theme\n@media (min-width: $breakpoint-lg) {\n input#pst-primary-sidebar-checkbox:checked\n ~ .bd-container\n .bd-sidebar-primary {\n margin-left: -$sidebar-primary-width-widescreen;\n visibility: hidden;\n opacity: 0;\n }\n}\n","/*********************************************\n* Table of Contents (right nav bar) *\n*********************************************/\n\n.bd-sidebar-secondary {\n // So that it sticks to the top of the page instead of the header height\n top: 0;\n\n @media (max-width: $breakpoint-xl) {\n // So that tooltips don't overlap\n z-index: $zindex-tooltip + 1;\n }\n\n // So that we can center the TOC button with the article header buttons\n .sidebar-secondary-items {\n padding: 0;\n display: flex;\n gap: 0.5rem;\n\n // Remove the manual padding since we'll use `gap`\n .sidebar-secondary-item {\n padding-top: 0;\n padding-bottom: 0;\n }\n }\n\n // The 'on this page' title div should take up the full header\n .onthispage {\n height: $header-article-height;\n min-height: $header-article-height;\n display: flex;\n gap: 0.5rem;\n align-items: center;\n margin: 0;\n color: var(--pst-color-muted);\n }\n\n // Wide screen behavior\n @media (min-width: $breakpoint-xl) {\n background: var(--pst-color-background);\n height: fit-content;\n transition: max-height 0.4s ease;\n\n // To make sure it shows above the page content\n z-index: $zindex-middle;\n\n // Remove padding so that it's flush on the top and left\n padding: 0;\n\n // This is the container div for the secondary sidebar nav\n .toc-item {\n // Border is a bit less prominent\n border-left-color: var(--pst-color-surface);\n // Flush with the top so that we can fix the height of the toc header div\n padding-top: 0;\n\n // The table of contents after the title div\n nav.page-toc {\n // Remove extra margin the PST adds for other sidebar items\n margin-bottom: 0;\n\n // Items after \"on this page' should fade in and out\n transition: opacity 0.4s ease;\n }\n }\n\n // Rules for when sidebar is hidden\n // the `not:hover` means that hovering over the sidebar will show it again.\n &.hide:not(:hover) {\n // Cap the height, and remove the scrollbar\n max-height: $header-article-height;\n overflow-y: hidden;\n\n // Shadow matches what we have in the article header\n .scrolled & {\n box-shadow: 0 6px 6px -6px rgba(0, 0, 0, 0.3);\n }\n\n // Show a down carot\n .onthispage:after {\n opacity: 1;\n content: \"\\f107\";\n font-family: \"Font Awesome 5 Free\";\n font-weight: 900;\n padding-left: 0.5em;\n transition: opacity 0.3s ease;\n }\n\n // The page-toc list is hidden\n nav.page-toc {\n opacity: 0;\n }\n }\n }\n}\n","/*********************************************\n* Footer - content *\n*********************************************/\nfooter {\n font-size: var(--sbt-font-size-small-1);\n &.bd-footer-content {\n display: flex;\n flex-wrap: wrap;\n padding: 15px;\n border-top: 1px solid #ccc;\n font-size: $sbt-font-size-small-1;\n .bd-footer-content__inner {\n padding-left: 0px;\n p {\n margin-bottom: 0px;\n }\n }\n }\n}\n",".bd-footer-article {\n padding: 0rem 1rem;\n @media (max-width: $breakpoint-md) {\n // More room for text on mobile\n padding: 0rem 0.5rem;\n }\n}\n","#pst-back-to-top {\n // We should only display the back-to-top button when the TOC is not available.\n // AKA, on narrow-ish screens.\n // This over-rides a PST default\n @media (min-width: $breakpoint-xl) {\n display: none !important;\n }\n\n // Reduce size to be slightly less intrusive on the page\n font-size: 0.8rem;\n}\n","/**\n * Icon links design for the primary sidebar, where it defaults in this theme.\n */\n.bd-sidebar-primary {\n .navbar-icon-links {\n column-gap: 0.5rem;\n\n .nav-link {\n // There are few kinds of elements that can be icon links and each is different\n i,\n span {\n font-size: 1.2rem;\n }\n\n // Images usually fill more vertical space so we make them a bit smaller\n img {\n font-size: 0.8rem;\n }\n }\n }\n}\n",".navbar-brand {\n height: unset;\n max-height: unset;\n\n // Auto-center the image and title and make items vertical\n flex-direction: column;\n justify-content: center;\n gap: 0.25rem;\n\n // To prevent site text from having underlines\n &:hover {\n text-decoration: none;\n }\n .logo__title {\n font-size: 1.25rem;\n white-space: normal;\n text-align: center;\n }\n // Prevent images from stretching vertically\n .logo__image {\n height: unset;\n }\n}\n","// Clean up the search page so that it has less unnecessary text\n.bd-search-container {\n margin: 2em;\n\n #search-results {\n h2:first-child {\n display: none;\n }\n }\n}\n\n// Sidebar search button field\n.search-button-field {\n width: 100%;\n font-size: 0.9rem;\n // Hide by default and we'll add a rule to show it on wide sreen below\n display: none;\n\n .search-button__kbd-shortcut {\n margin-left: auto;\n }\n}\n\n// Rules to switch off visibility of the field button and the header button\n@media (min-width: $breakpoint-lg) {\n .search-button {\n display: none !important;\n }\n\n .search-button-field {\n display: flex;\n }\n}\n\n// The \"clear search results\" button\n// Make it line up with our content better\ndiv#searchbox {\n padding-right: 2rem;\n padding-left: 2rem;\n @media (max-width: $breakpoint-md) {\n padding-right: 1rem;\n padding-left: 1rem;\n }\n\n p.highlight-link {\n // Remove the extra margin that is added\n @media (min-width: $breakpoint-md) {\n margin-left: 0;\n a {\n font-size: 1rem;\n }\n }\n }\n}\n","// Images\nimg {\n max-width: 100%;\n\n &.align-center {\n margin-left: auto;\n margin-right: auto;\n display: block;\n }\n\n &.align-left {\n clear: left;\n float: left;\n margin-right: 1em;\n }\n\n &.align-right {\n clear: right;\n float: right;\n margin-left: 1em;\n }\n}\n\n// Figures\ndiv.figure {\n width: 100%;\n margin-bottom: 1em;\n text-align: center;\n\n &.align-left {\n text-align: left;\n p.caption {\n margin-left: 0;\n }\n }\n &.align-right {\n text-align: right;\n p.caption {\n margin-right: 0;\n }\n }\n\n p.caption {\n margin: 0.5em 10%;\n }\n\n &.margin,\n &.margin-caption {\n p.caption {\n margin: 0.5em 0;\n }\n }\n\n &.margin-caption p.caption {\n text-align: left;\n }\n\n span.caption-number {\n font-weight: bold;\n }\n\n span {\n font-size: 0.9rem;\n }\n}\n","/**\n * Margin content\n * This is the area to the right of the main content\n * normally covered by the in-page table of contents\n * but if `.margin` classes are present, it shows up to the right in the margin\n * and the in-page TOC is hidden.\n * On narrow screens, margin content behaves like a sidebar\n */\n\n/**\n * Variables for calculating margin widths\n */\n// We want our margin content to be 1/3 the width of the main page content\n// after factoring in a small margin\n$margin-width-relative-to-content: 36%;\n$margin-gutter: 3%;\n$margin-width-width-gutter: $margin-width-relative-to-content - $margin-gutter;\n\n// re-subtract the gutter width because we want it to leave a white-space\n// This is how much to offset the margin content.\n$margin-offset: -$margin-width-relative-to-content;\n\n/**\n * This mixin will cause something to \"pop out\" to the margin on wide screens\n */\n@mixin margin-content() {\n // On narrow screens this is the width of margin content\n width: 40%;\n float: right;\n background-color: unset;\n font-size: 0.9em;\n margin-left: 0.5rem;\n\n // Wide screens and printing should force margin behavior\n @media (min-width: $breakpoint-lg), print {\n width: $margin-width-width-gutter;\n margin: 0 $margin-offset 0 0;\n\n // Prevent sequential margin content from overlapping\n clear: right;\n\n p.sidebar-title {\n margin-bottom: -1rem;\n border-bottom: none;\n padding-left: 0px;\n\n // Content of admonitions has fewer horizontal white space to save space\n ~ * {\n padding-left: 0px;\n padding-right: 0px;\n }\n }\n }\n}\n\n/**\n * Sidenotes and marginnotes\n * over-rides the \"footnote\" behavior to pop out to the margin instead.\n */\nlabel.margin-toggle {\n margin-bottom: 0em;\n &.marginnote-label {\n display: none;\n }\n sup {\n user-select: none;\n }\n @media (max-width: $breakpoint-lg) {\n cursor: pointer;\n color: rgb(0, 113, 188);\n &.marginnote-label {\n display: inline;\n &:after {\n content: \"\\2295\";\n }\n }\n }\n}\n\ninput.margin-toggle {\n display: none;\n @media (max-width: $breakpoint-lg) {\n &:checked + .sidenote,\n &:checked + .marginnote {\n display: block;\n float: left;\n left: 1rem;\n clear: both;\n width: 95%;\n margin: 1rem 2.5%;\n position: relative;\n }\n }\n}\n\nspan.sidenote,\nspan.marginnote {\n z-index: $zindex-middle;\n position: relative;\n sup {\n user-select: none;\n }\n @include margin-content();\n border-left: none;\n @media (max-width: $breakpoint-lg) {\n display: none;\n }\n}\n\naside.sidebar {\n .note {\n // styling for notes inside sidebars\n margin: 1rem;\n padding: 0rem 0rem 1rem 0rem;\n }\n // The titles sticking\n .admonition-title {\n margin: 0rem -1rem 0rem 0rem;\n }\n}\n\n/**\n * Sidebar content in the margin.\n * This will be added by the `margin` directive or the `sidebar` directive\n */\naside.sidebar.margin {\n // Margin content can have an empty title so this prevents an empty title block\n // from showing up on mobile\n .sidebar-title:empty {\n display: none;\n }\n\n // On narrow screens padding is added to all sidebar content\n // This replaces padding w/ margin for admonitions because padding is used\n // for the title background color\n .admonition {\n margin: 0.5rem;\n padding-left: 0;\n padding-right: 0;\n\n // Remove the title margin so it\n .admonition-title {\n margin-left: 0;\n margin-right: 0;\n }\n }\n\n @media (min-width: $breakpoint-lg) {\n // No border for margin sidebars on wide screen\n border: none;\n\n // Admonitions don't need the extra whitespace in the margin\n .admonition {\n margin: 1rem 0rem;\n padding: 0rem 0rem 1rem 0rem;\n }\n }\n}\n\ndiv.margin,\nfigure.margin,\naside.margin,\n.margin.docutils.container,\n.cell.tag_popout,\n.cell.tag_margin {\n z-index: $zindex-middle;\n position: relative;\n @include margin-content();\n\n // Make cell outputs take up more space if they're in the margin\n div.cell.tag_margin .cell_output {\n padding-left: 0;\n }\n}\n\n// A few permutations because docutils 0.18 switched to semantic tags\ndiv.figure.margin-caption p.caption,\ndiv.figure.margin-caption figcaption,\nfigure.margin-caption figcaption {\n z-index: $zindex-middle;\n position: relative;\n @include margin-content();\n}\n\n// Margin captions\n.margin-caption figcaption {\n text-align: left;\n}\n\n/**\n * Full width content\n */\n\n// Grow 100% by the ratio of the margin to the content width.\n$content-fullwidth-width: 100% + $margin-width-relative-to-content;\n\ndiv.cell.tag_full-width,\ndiv.cell.tag_full_width,\ndiv.full_width,\ndiv.full-width {\n z-index: $zindex-middle;\n position: relative;\n @media (min-width: $breakpoint-lg) {\n max-width: $content-fullwidth-width;\n width: $content-fullwidth-width;\n }\n}\n","/**\n * Epigraphs and other \"special\" quote blocks\n */\n\nblockquote {\n &.pull-quote,\n &.epigraph,\n &.highlights {\n font-size: 1.25em;\n border-left: none;\n background-color: var(--pst-color-background);\n }\n\n div > p + p.attribution {\n font-style: normal;\n font-size: 0.9em;\n text-align: right;\n color: #6c757d;\n padding-right: 2em;\n }\n}\n","// Over-ride Sphinx default so that content fills whitespace w/ margin content\npre,\ndiv[class*=\"highlight-\"] {\n clear: none;\n}\n","// MyST-NB and Jupyter Notebooks\ndiv.cell.tag_output_scroll div.cell_output,\ndiv.cell.tag_scroll-output div.cell_output {\n max-height: 24em;\n overflow-y: auto;\n}\n\ndiv.cell.tag_scroll-input div.cell_input {\n max-height: 24em;\n overflow-y: auto;\n}\n","/**\n * Comment JavaScript libraries\n * Libraries supported here are:\n * - Hypothes.is : https://web.hypothes.is/\n * - Utteranc.es : https://utteranc.es/\n */\n// In general we want to hide any comment libraries on print\n@media only print {\n hypothesis-sidebar,\n div.utterances {\n display: none;\n }\n}\n","/*********************************************\n* Thebe *\n* ref: https://github.com/executablebooks/thebe\n*********************************************/\n.thebelab-cell {\n border: none !important;\n margin-right: 0.5em !important;\n}\n\n.thebelab-cell .thebelab-input {\n padding-left: 10px !important;\n}\n\n.cell.docutils.container {\n padding-right: 0px !important;\n}\n\nbutton.thebe-launch-button {\n height: 2.5em;\n font-size: 1em;\n}\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/api/index.html b/api/index.html
index 4bf5a521..c01c12c8 100644
--- a/api/index.html
+++ b/api/index.html
@@ -29,7 +29,7 @@
-
+
@@ -41,10 +41,11 @@
-
+
+
@@ -158,7 +159,54 @@
Contents:
Installation
-API Reference
@@ -190,9 +238,9 @@
@@ -330,6 +378,219 @@ API Reference
API Reference
This page contains auto-generated API reference documentation .
+
+
+
+
diff --git a/api/nebula/addons/attacks/attacks/index.html b/api/nebula/addons/attacks/attacks/index.html
index 167753c8..e5b7f9d4 100644
--- a/api/nebula/addons/attacks/attacks/index.html
+++ b/api/nebula/addons/attacks/attacks/index.html
@@ -29,7 +29,7 @@
-
+
@@ -41,10 +41,12 @@
-
+
+
+
@@ -155,9 +157,56 @@
@@ -323,30 +372,28 @@ Contents