commit de85615e7410be5566cc4db6106d753d5966b1cc Author: philipp-horstenkamp Date: Tue Jun 20 13:48:13 2023 +0000 deploy: c2952ce52edd40580d7e7f3eadd53392e3140498 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/doctrees/Pflichtenheft.doctree b/doctrees/Pflichtenheft.doctree new file mode 100644 index 0000000..13ed80b Binary files /dev/null and b/doctrees/Pflichtenheft.doctree differ diff --git a/doctrees/aki_prj23_transparenzregister.black_test.doctree b/doctrees/aki_prj23_transparenzregister.black_test.doctree new file mode 100644 index 0000000..cf207ed Binary files /dev/null and b/doctrees/aki_prj23_transparenzregister.black_test.doctree differ diff --git a/doctrees/aki_prj23_transparenzregister.doctree b/doctrees/aki_prj23_transparenzregister.doctree new file mode 100644 index 0000000..4d3148d Binary files /dev/null and b/doctrees/aki_prj23_transparenzregister.doctree differ diff --git a/doctrees/aki_prj23_transparenzregister.flake8_test.doctree b/doctrees/aki_prj23_transparenzregister.flake8_test.doctree new file mode 100644 index 0000000..2b0c18c Binary files /dev/null and b/doctrees/aki_prj23_transparenzregister.flake8_test.doctree differ diff --git a/doctrees/environment.pickle b/doctrees/environment.pickle new file mode 100644 index 0000000..bad2f18 Binary files /dev/null and b/doctrees/environment.pickle differ diff --git a/doctrees/index.doctree b/doctrees/index.doctree new file mode 100644 index 0000000..66f0066 Binary files /dev/null and b/doctrees/index.doctree differ diff --git a/doctrees/meeting-notes/Meeting_2023-03-30.doctree b/doctrees/meeting-notes/Meeting_2023-03-30.doctree new file mode 100644 index 0000000..81c473e Binary files /dev/null and b/doctrees/meeting-notes/Meeting_2023-03-30.doctree differ diff --git a/doctrees/meeting-notes/Meeting_2023-04-13.doctree b/doctrees/meeting-notes/Meeting_2023-04-13.doctree new file mode 100644 index 0000000..caf2b59 Binary files /dev/null and b/doctrees/meeting-notes/Meeting_2023-04-13.doctree differ diff --git a/doctrees/meeting-notes/Meeting_2023-05-04.doctree b/doctrees/meeting-notes/Meeting_2023-05-04.doctree new file mode 100644 index 0000000..27401fd Binary files /dev/null and b/doctrees/meeting-notes/Meeting_2023-05-04.doctree differ diff --git a/doctrees/meeting-notes/Meeting_2023-05-11.doctree b/doctrees/meeting-notes/Meeting_2023-05-11.doctree new file mode 100644 index 0000000..4050322 Binary files /dev/null and b/doctrees/meeting-notes/Meeting_2023-05-11.doctree differ diff --git a/doctrees/meeting-notes/Meeting_2023_05-25.doctree b/doctrees/meeting-notes/Meeting_2023_05-25.doctree new file mode 100644 index 0000000..3538c5a Binary files /dev/null and b/doctrees/meeting-notes/Meeting_2023_05-25.doctree differ diff --git a/doctrees/modules.doctree b/doctrees/modules.doctree new file mode 100644 index 0000000..3ba2131 Binary files /dev/null and b/doctrees/modules.doctree differ diff --git a/doctrees/research/RE_Vom-Problem-zur-Loesung.doctree b/doctrees/research/RE_Vom-Problem-zur-Loesung.doctree new file mode 100644 index 0000000..bac4999 Binary files /dev/null and b/doctrees/research/RE_Vom-Problem-zur-Loesung.doctree differ diff --git a/doctrees/research/Timeseries/Overview.doctree b/doctrees/research/Timeseries/Overview.doctree new file mode 100644 index 0000000..75c52e7 Binary files /dev/null and b/doctrees/research/Timeseries/Overview.doctree differ diff --git a/doctrees/research/data_and_metrics.doctree b/doctrees/research/data_and_metrics.doctree new file mode 100644 index 0000000..1f27785 Binary files /dev/null and b/doctrees/research/data_and_metrics.doctree differ diff --git a/doctrees/research/news_apis.doctree b/doctrees/research/news_apis.doctree new file mode 100644 index 0000000..b3ec206 Binary files /dev/null and b/doctrees/research/news_apis.doctree differ diff --git a/doctrees/research/resarch-central.doctree b/doctrees/research/resarch-central.doctree new file mode 100644 index 0000000..1c4dbff Binary files /dev/null and b/doctrees/research/resarch-central.doctree differ diff --git a/doctrees/seminararbeiten/3_Datenspeicherung.doctree b/doctrees/seminararbeiten/3_Datenspeicherung.doctree new file mode 100644 index 0000000..5801fb4 Binary files /dev/null and b/doctrees/seminararbeiten/3_Datenspeicherung.doctree differ diff --git a/doctrees/seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.doctree b/doctrees/seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.doctree new file mode 100644 index 0000000..b215dc0 Binary files /dev/null and b/doctrees/seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.doctree differ diff --git a/doctrees/seminararbeiten/Abstract_Data_Extraction.doctree b/doctrees/seminararbeiten/Abstract_Data_Extraction.doctree new file mode 100644 index 0000000..5b80e97 Binary files /dev/null and b/doctrees/seminararbeiten/Abstract_Data_Extraction.doctree differ diff --git a/doctrees/seminararbeiten/Abstract_Datenvisualisierung.doctree b/doctrees/seminararbeiten/Abstract_Datenvisualisierung.doctree new file mode 100644 index 0000000..c928054 Binary files /dev/null and b/doctrees/seminararbeiten/Abstract_Datenvisualisierung.doctree differ diff --git a/doctrees/seminararbeiten/Datenvisualisierung/Übersicht.doctree b/doctrees/seminararbeiten/Datenvisualisierung/Übersicht.doctree new file mode 100644 index 0000000..b661fd7 Binary files /dev/null and b/doctrees/seminararbeiten/Datenvisualisierung/Übersicht.doctree differ diff --git a/doctrees/seminararbeiten/project-organisation-and-dev-ops.doctree b/doctrees/seminararbeiten/project-organisation-and-dev-ops.doctree new file mode 100644 index 0000000..1d4c993 Binary files /dev/null and b/doctrees/seminararbeiten/project-organisation-and-dev-ops.doctree differ diff --git a/doctrees/seminararbeiten/verflechtungsanalyse.doctree b/doctrees/seminararbeiten/verflechtungsanalyse.doctree new file mode 100644 index 0000000..305a719 Binary files /dev/null and b/doctrees/seminararbeiten/verflechtungsanalyse.doctree differ diff --git a/doctrees/templates/meeting_notes_template.doctree b/doctrees/templates/meeting_notes_template.doctree new file mode 100644 index 0000000..c86f91e Binary files /dev/null and b/doctrees/templates/meeting_notes_template.doctree differ diff --git a/doctrees/timeline.doctree b/doctrees/timeline.doctree new file mode 100644 index 0000000..0dfd578 Binary files /dev/null and b/doctrees/timeline.doctree differ diff --git a/html/.buildinfo b/html/.buildinfo new file mode 100644 index 0000000..7ab52b1 --- /dev/null +++ b/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: ec21fcfe6fbedb4bdf44a3664b1f7df5 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/html/Pflichtenheft.html b/html/Pflichtenheft.html new file mode 100644 index 0000000..4ee5dbe --- /dev/null +++ b/html/Pflichtenheft.html @@ -0,0 +1,418 @@ + + + + + + + Pflichtenheft: Kapitalgesellschaften referenzregister — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Pflichtenheft: Kapitalgesellschaften referenzregister

+

Version 0.1 Erstellt am 07.04.2023

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Autoren

Matrikelnummer

Kim Mesewinkel

000

Tristan Nolde

000

Sebastian Zelenie

000

Philip Horstenkamp

000

Sascha Zhu

000

Tim Ronneburg

000

+
+

Historie der Dokumentenversion

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Version

Datum

Autor

Änderungsgrund / Bemerkung

0.1

07.04.2023

Tim Ronneburg

Initiales aufsetzen des Pflichtenhefts

0.2

000

000

1.0

000

+
+
+

Inhaltsverzeichnis

+

Historie der Dokumentenversion +Inhaltsverzeichnis

+
    +
  1. Einleitung

    +
      +
    1. allgemeines

    2. +
    3. Ziel und Zweck des Dokuments

    4. +
    5. Ausgangssituation

    6. +
    7. Projektbezug

    8. +
    9. Abkürzungen

    10. +
    11. Schnittstellen/ Bezug zu anderen Dokumenten

    12. +
    +
  2. +
  3. Konzept und Rahmenbedingungen

    +
      +
    1. Ziele des Anbieters

    2. +
    3. Ziele und Nutzen des Anwenders

    4. +
    5. Benutzer / Zielgruppen

    6. +
    7. Systemvoraussetzungen (Optional)

    8. +
    9. Ressourcen (Optional)

    10. +
    +
  4. +
  5. Funktionale Anforderungen

    +
      +
    1. F100

    2. +
    +
  6. +
  7. Nicht-Funktionale Anforderungen

    +
      +
    1. N100

    2. +
    +
  8. +
  9. Anforderungsverfolgung zu den Spezifikationen

  10. +
  11. Abnahmekriterien und Vorgehen zur Ausgangsprüfung

  12. +
  13. Lieferumfang

  14. +
  15. Anhang / Ressourcen

  16. +
+
+
+

Einleitung

+
+

Allgemeines

+
+
+

Ziel und Zweck des Dokuments

+
+
+

Ausgangssituation

+
+
+

Projektbezug

+
+
+

Abkürzungen

+
+
+

Schnittstellen/ Bezug zu anderen Dokumenten

+

Test

+
+
+
+

Konzept und Rahmenbedingungen

+
+

Ziele des Anbieters

+
+
+

Ziele und Nutzen des Anwenders

+
+
+

Benutzer / Zielgruppen

+
+
+

Systemvoraussetzungen (Optional)

+
+
+

Ressourcen (Optional)

+
+
+
+

Funktionale Anforderungen

+
+

Muss Ziele

+
+
+

F100

+

Die Software berechnet und veranschaulicht folgende Unternehmenskennzahlen:

+
    +
  • Umsatz

  • +
  • Gewinn

  • +
  • Bilanzsumme

  • +
  • Eigenkapital (Eigenkapitalquote)

  • +
  • Vorstand / Geschäftsführung

  • +
  • Aufsichtsrat / Beirat

  • +
  • Wirtschaftsprüfer

  • +
  • Besitzverhältnisse

  • +
+
+
+

F110

+

Das System muss, neben den Kennzahlen von F100, die Metriken aus dem Anhang “data_and_metrics.md” je nach Datenlage für die Unternehmen berechnen und anzeigen.

+
+
+

F120

+

Die Software muss eine Suche nach Unternehmen und Personen anbieten die zu einer Detailansicht führt mit den in F100 genannten Kennzahlen.

+
+
+

Soll Ziele

+
+
+

F200

+

Die Software veranschaulicht die Konzernstruktur (Mutterkonzern <-> Tochterfirmen). Diese sollen durch ein Netz transparent dargestellt werden.

+
+
+

F210

+

Die Software zeigt die Beziehungen von Unternehmen untereinander und mit den Wirtschaftsprüfern auf. Diese sollen durch ein Netz transparent dargestellt werden.

+
+
+

F220

+

Die Software soll bewerten ob die Berichtserstattung der letzten 7 Tage eher Positiv oder Negativ zu dem Unternehmen war. Dabei sind häufige Vorstandswechsel negativ und Zielerreichungen positiv.

+
+
+
+

Nicht-Funktionale Anforderungen

+
+

Muss Ziele

+
+
+

N100

+

Das System muss die 1000 größten deutschen und europäischen Unternehmen beinhalten. Diese werden anhand der Kennzahlen

+
    +
  • Umsatz

  • +
  • +
  • +
+

bewertet und bemessen.

+
+
+

Soll Ziele

+
+
+

N200

+

Das System ist 24/7 über das Internet für jede Person mit Internetzugang erreichbar.

+
+
+

N210

+

Das System soll eine Verfügbarkeit von 99 % erreichen, mit maximal 10 Ausfällen pro Jahr.

+
+
+

Kann Ziele

+
+
+

N300

+

Das System kann möglichst über einen Disaster Recovery Schutz verfügen und in einem zweiten, 250 KM vom Hauptrechenzentrum entfernten Rechenzentrum die Systeme und Daten spiegeln.

+
+
+

N310

+

Das System kann möglichst skalierbar sein, sodass auch eine Nutzerzahl von 1000 Benutzern die Software nutzen können.

+
+
+
+

Anforderungsverfolgung zu den Spezifikationen

+
+
+

Abnahmekriterien und Vorgehen zur Ausgangsprüfung

+
+
+

Lieferumfang

+
+
+

Anhang / Ressourcen

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/_sources/Pflichtenheft.md.txt b/html/_sources/Pflichtenheft.md.txt new file mode 100644 index 0000000..5150f20 --- /dev/null +++ b/html/_sources/Pflichtenheft.md.txt @@ -0,0 +1,147 @@ +# Pflichtenheft: Kapitalgesellschaften referenzregister + +Version 0.1 Erstellt am 07.04.2023 + +| Autoren | Matrikelnummer | +|--------------------|----------------| +| Kim Mesewinkel | 000 | +| Tristan Nolde | 000 | +| Sebastian Zelenie | 000 | +| Philip Horstenkamp | 000 | +| Sascha Zhu | 000 | +| Tim Ronneburg | 000 | + + + + +## Historie der Dokumentenversion + +| Version | Datum | Autor | Änderungsgrund / Bemerkung | +|-----------|------------|---------------|----------------------------------------| +| 0.1 | 07.04.2023 | Tim Ronneburg | Initiales aufsetzen des Pflichtenhefts | +| 0.2 | 000 | | | +| ... | 000 | | | +| 1.0 | 000 | | | + +## Inhaltsverzeichnis +[Historie der Dokumentenversion](#historie) +[Inhaltsverzeichnis](#inhaltsverzeichnis) +1. [Einleitung](#einleitung) + 1. [allgemeines](#allgemeines) + 1. [Ziel und Zweck des Dokuments](#ziel/zweck) + 1. [Ausgangssituation](#ausgangssituation) + 1. [Projektbezug](#projektbezug) + 1. [Abkürzungen](#abkürzungen) + 1. [Schnittstellen/ Bezug zu anderen Dokumenten](#schnittstellen) +1. [Konzept und Rahmenbedingungen](#konzept_und_rahmenbedingung) + 1. [Ziele des Anbieters](#ziele_anbieter) + 1. [Ziele und Nutzen des Anwenders](#ziele_anwender) + 1. [Benutzer / Zielgruppen](#benutzer/zielgruppen) + 1. [Systemvoraussetzungen (Optional)](#systemvoraussetzungen) + 1. [Ressourcen (Optional)](#ressourcen) +1. [Funktionale Anforderungen](#f_anforderung) + 1. [F100](#f100) +1. [Nicht-Funktionale Anforderungen](#nf_anforderung) + 1. [N100](#n100) +1. [Anforderungsverfolgung zu den Spezifikationen](#verfolgung_spezifikation) +1. [Abnahmekriterien und Vorgehen zur Ausgangsprüfung](#abnahmekriterien) +1. [Lieferumfang](#lieferumfang) +1. [Anhang / Ressourcen](#anhang/ressourcen) + + +## Einleitung + +### Allgemeines + +### Ziel und Zweck des Dokuments + +### Ausgangssituation + +### Projektbezug + +### Abkürzungen + +### Schnittstellen/ Bezug zu anderen Dokumenten +Test + +## Konzept und Rahmenbedingungen + +### Ziele des Anbieters + +### Ziele und Nutzen des Anwenders + +### Benutzer / Zielgruppen + +### Systemvoraussetzungen (Optional) + +### Ressourcen (Optional) + + + +## Funktionale Anforderungen + +### **Muss Ziele** + +### F100 +Die Software berechnet und veranschaulicht folgende Unternehmenskennzahlen: +- Umsatz +- Gewinn +- Bilanzsumme +- Eigenkapital (Eigenkapitalquote) +- Vorstand / Geschäftsführung +- Aufsichtsrat / Beirat +- Wirtschaftsprüfer +- Besitzverhältnisse + +### F110 +Das System muss, neben den Kennzahlen von F100, die Metriken aus dem Anhang "data_and_metrics.md" je nach Datenlage für die Unternehmen berechnen und anzeigen. + +### F120 +Die Software muss eine Suche nach Unternehmen und Personen anbieten die zu einer Detailansicht führt mit den in F100 genannten Kennzahlen. + +### **Soll Ziele** + +### F200 +Die Software veranschaulicht die Konzernstruktur (Mutterkonzern <-> Tochterfirmen). Diese sollen durch ein Netz transparent dargestellt werden. + +### F210 +Die Software zeigt die Beziehungen von Unternehmen untereinander und mit den Wirtschaftsprüfern auf. Diese sollen durch ein Netz transparent dargestellt werden. + +### F220 +Die Software soll bewerten ob die Berichtserstattung der letzten 7 Tage eher Positiv oder Negativ zu dem Unternehmen war. Dabei sind häufige Vorstandswechsel negativ und Zielerreichungen positiv. + +## Nicht-Funktionale Anforderungen + +### **Muss Ziele** + +### N100 +Das System muss die 1000 größten deutschen und europäischen Unternehmen beinhalten. Diese werden anhand der Kennzahlen +- Umsatz +- +- +bewertet und bemessen. + +### **Soll Ziele** + +### N200 +Das System ist 24/7 über das Internet für jede Person mit Internetzugang erreichbar. + +### N210 +Das System soll eine Verfügbarkeit von 99 % erreichen, mit maximal 10 Ausfällen pro Jahr. + +### **Kann Ziele** + +### N300 +Das System kann möglichst über einen Disaster Recovery Schutz verfügen und in einem zweiten, 250 KM vom Hauptrechenzentrum entfernten Rechenzentrum die Systeme und Daten spiegeln. + +### N310 +Das System kann möglichst skalierbar sein, sodass auch eine Nutzerzahl von 1000 Benutzern die Software nutzen können. + + +## Anforderungsverfolgung zu den Spezifikationen + +## Abnahmekriterien und Vorgehen zur Ausgangsprüfung + +## Lieferumfang + +## Anhang / Ressourcen diff --git a/html/_sources/aki_prj23_transparenzregister.black_test.rst.txt b/html/_sources/aki_prj23_transparenzregister.black_test.rst.txt new file mode 100644 index 0000000..b6be985 --- /dev/null +++ b/html/_sources/aki_prj23_transparenzregister.black_test.rst.txt @@ -0,0 +1,8 @@ +aki\_prj23\_transparenzregister.black\_test module +================================================== + +.. automodule:: aki_prj23_transparenzregister.black_test + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/html/_sources/aki_prj23_transparenzregister.flake8_test.rst.txt b/html/_sources/aki_prj23_transparenzregister.flake8_test.rst.txt new file mode 100644 index 0000000..820d8ce --- /dev/null +++ b/html/_sources/aki_prj23_transparenzregister.flake8_test.rst.txt @@ -0,0 +1,8 @@ +aki\_prj23\_transparenzregister.flake8\_test module +=================================================== + +.. automodule:: aki_prj23_transparenzregister.flake8_test + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/html/_sources/aki_prj23_transparenzregister.rst.txt b/html/_sources/aki_prj23_transparenzregister.rst.txt new file mode 100644 index 0000000..a409efa --- /dev/null +++ b/html/_sources/aki_prj23_transparenzregister.rst.txt @@ -0,0 +1,20 @@ +aki\_prj23\_transparenzregister package +======================================= + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + aki_prj23_transparenzregister.black_test + aki_prj23_transparenzregister.flake8_test + +Module contents +--------------- + +.. automodule:: aki_prj23_transparenzregister + :members: + :undoc-members: + :show-inheritance: + :private-members: diff --git a/html/_sources/index.rst.txt b/html/_sources/index.rst.txt new file mode 100644 index 0000000..4942bba --- /dev/null +++ b/html/_sources/index.rst.txt @@ -0,0 +1,46 @@ +.. Your Package Name documentation master file, created by Sphinx + +Transparenzregister Documentation +================================= +This is the documentation for the AKI project group on the german transparenzregister and an Analysis there of. + +.. toctree:: + :maxdepth: 3 + :caption: Project planing + + Pflichtenheft + timeline.md + +.. toctree:: + :glob: + :maxdepth: 1 + :caption: Meeting Notes: + + meeting-notes/* + +.. toctree:: + :glob: + :maxdepth: 3 + :caption: Research + + research/* + research/*.ipynb + +.. toctree:: + :glob: + :maxdepth: 0 + :caption: Modules + + modules + +.. automodule:: aki_prj23_transparenzregister + :members: + :undoc-members: + :show-inheritance: + :inherited-members: + :autodoc_member_order: + +Indices and tables +================== +* :ref:`genindex` +* :ref:`modindex` diff --git a/html/_sources/meeting-notes/Meeting_2023-03-30.md.txt b/html/_sources/meeting-notes/Meeting_2023-03-30.md.txt new file mode 100644 index 0000000..da548da --- /dev/null +++ b/html/_sources/meeting-notes/Meeting_2023-03-30.md.txt @@ -0,0 +1,62 @@ +# Weekly *1*: 30.03.2023 + +## Teilnehmer +- Prof. Arinir +- Tristan Nolde +- Tim Ronneburg +- Philipp Horstenkamp +- Kim Mesewinkel-Risse +- Sascha Zhu +- Sebastian Zeleny (Protokollant) + +## Themen +- **Inhalt des Project Proposals:** + - Mit welchen Metriken können Unternehmen bewertet werden? + - Was sind Kennzahlen von Kapitalgesellschaften? + - Welche Daten werden benötigt? + - Woher erhält man benötigte Daten? (Amtsgerichte --> Insolvenzen, Börsenkurse, Aktienkurse, RSS-Feeds von/zu Unternehmen) + - Wie werden die Daten verarbeitet? + - Wie können die Daten bzw. Ergebnisse präsentiert werden? + - Verflechtungen zwischen Unternehmen: Geschäftsführer, Wirtschaftsprüfer + +- **Anforderungen an Projektdurchführung:** + - Backlog für Ideen und Aufgaben + - Meeting-Notes mit besprochenen Themen, Entscheidungen, Terminen und Action-List (Wer arbeitet an welcher Aufgabe?) + - Projektdurchführung so formal wie möglich, d.h. + - Beschreibung des Systemkontexts: Interaktion mit der Umgebung + - Datenmodell: schematische Darstellung der Datenflüsse + - Lasten- / Pflichtenheft mit Kategorisierung + - Vorschlag Frontend von Prof. Arinir: D3.js + +- **Bewertung des Projekts:** + - Es muss erkennbar sein, wer welche Aufgabe bearbeitet hat + - Jeder Teilnehmer soll die Aufgaben der anderen Teilnehmer kennen und ein Verständnis für diese haben (kein tiefes Domänenwissen!) + - Gesamtplanung und Dokumentation sind Teil das Ergebnis, nicht nur die technische Umsetzung + - Bewertungsschlüssel: + +| Gewichtung | Aufgabe | +|--------------|---------------------------------------------| +| 20% | Vortrag Seminararbeit | +| 20% | Präsentation | +| 30% | Implementierung | +| 20% | Finaler Bericht (~15 Seiten pro Teilnehmer) | +| 10% | Abschlusspräsentation | + +- **Organisatorisches:** + - Regeltermin alle 14 Tage mit allen Projektteilnehmern, beginnend am 30.03.2023: Dieser Termin soll für Sprint Planning und Review mit Prof. Arinir genutzt werden. + - Was ist die Erwartungshaltung des Product Owners? + - Welche Themen/Aufgaben werden bearbeitet? + - Was ist das Ziel für das nächste Review? + - Projektbearbeitung/Dokumentation mit Github + - Bereitstellung des Github-Repos über FH + +## Abgeleitete Action Items + +| Action Item | Verantwortlicher | Deadline | +|-----------------------------------------------------------------------------------------|--------------------|----------------------------------| +| Welche Anforderungen / Erwartungen stellen wir inhaltlich und technisch an das Projekt? | alle | nächstes Weekly/work in progress | +| Erarbeiten von Arbeitspaketen/Aufgaben aus Anforderungen | alle | nächstes Weekly/work in progress | +| Welche Metriken sind notwendig? | alle | nächstes Weekly/work in progress | +| Recherche zu Datenquellen | alle | nächstes Weekly/work in progress | +| Definition von Meilensteinen | alle | nächstes Weekly | +| Erstellung eines (groben) Zeitplans | alle | nächstes Weekly | diff --git a/html/_sources/meeting-notes/Meeting_2023-04-13.md.txt b/html/_sources/meeting-notes/Meeting_2023-04-13.md.txt new file mode 100644 index 0000000..135d149 --- /dev/null +++ b/html/_sources/meeting-notes/Meeting_2023-04-13.md.txt @@ -0,0 +1,57 @@ +# Weekly *2*: 13.04.2023 + +## Teilnehmer +- Prof. Arinir +- Tristan Nolde +- Tim Ronneburg (Protokollant) +- Philipp Horstenkamp +- Kim Mesewinkel-Risse +- Sascha Zhu +- Sebastian Zeleny + +## Themen + +- **Seminarthemen:** + - Themen die im Zuge der Implementierung erarbeitet werden + - Themen: + - Textmining (Ontologien) + - Semantische Suche + - Anmeldungsformular: + - Jeder sendet das Formular selbst an Herrn Arinir + - Projektauftakt: 30.03.2023 + - Enddatum: 15.02.2024 + - Titel: Transparanzregister Kapitalgeselschaften +- **Vorstellung der Ergebnisse des letzten Sprints:** + - Erstellung des GitHubs Projekts + - Anlegen eines Protokolltemplates + - Interne Meetings jeden Donnerstag + - Timeline erstellt mit Mermaid.js in Markdown (Sebastian) + - Recherche zum Datenschutz / Urheberrecht: Welche Daten aus den Datenbanken dürfen offline oder online benutzt werden. (Sascha) + - Für die eigene Forschung: 75 % der Daten dürfen genutzt werden + - 15 % Wenn es an Dritte weitergeleitet werden + - Wenn wir die Ergebnisse veröffentlichen müssen die Vorgaben der Datenbanken beachten + - Hinweis von Herrn Arinir: Das ist als Vorschungsprojekt zu sehen + - Die Ergebnisse werden nicht veröffentlicht + - nur die Vorgehensweise wird als Paper veröffentlicht + - Recherche zu Unternehmenskennzahlen (Kim) + - Hinweis: Für Tendenzanalysen sollen zeitliche Veränderungen erfasst werden (Timescale Datenbank) + - Vierteljährliche Daten reichen aus + - Recherche zu den verfügbaren Datengrundlagen (Phillip und Tristan) + - Anlegen eines Pflichtenhefts mit den Anforderungen an das Projekt (Tim) +- **Organisatorisches:** + - Es muss noch ein Projekt angelegt werden für das GitHub Repository mit einem Board zur Projektorganisation + - Im Meeting erledigt +- **Recherche:** + - Nicht nur auf Kennzahlen eingehen, sondern auch auf die Berichterstattung eingehen + - Dazu sollen die Technologieauswahl recherchiert werden (Trendanalyse von Nachrichten, Finanztreff, Twitter etc.) + +## Abgeleitete Action Items + +| Action Item | Verantwortlicher | Deadline | +|-------------|------------------|-----------------| +| Rechechieren welche Nachrichtenquellen (Aktuelle und "Alte" Nachrichten) genutzt werden können | Sascha und Tim | 27.04.2023 | +| Recherchieren welche Technologien zur Auswertung der Nachrichtenqullen genutzt werden können (z.b. Sentiment Analyse) | Philipp und Kim | 27.04.2023 | +| Beschäftigen mit Historien (Timescale Datenbank) | Tristan und Sebastian | 27.04.2023 | +| Festlegen von Kriterien wann ein Artikel positiv oder negativ zu bewerten ist | Sascha | Ende offen | +| Abgabe des Anmeldeformulars zum Projekt | alle | 20.04.2023 | +| Liste mit geeignetetn Metriken | Herr Arinir | 27.04.2023 | diff --git a/html/_sources/meeting-notes/Meeting_2023-05-04.md.txt b/html/_sources/meeting-notes/Meeting_2023-05-04.md.txt new file mode 100644 index 0000000..1507959 --- /dev/null +++ b/html/_sources/meeting-notes/Meeting_2023-05-04.md.txt @@ -0,0 +1,54 @@ +# Weekly *3*: 04.05.2023 + +## Teilnehmer +- Prof. Arinir +- Tristan Nolde +- Tim Ronneburg +- Phillip Horstenkamp +- Kim Mesewinkel-Risse +- Sascha Zhu +- Sebastian Zeleny + +## Themen + +### Organisatorische Absprachen: + +Gelten die Seminarthemen als Zwischenprüfung? In welcher Form? +- Herr Giefers hat Seminarthemen im Vorfeld definiert, in unserer Gruppe gab es eine offene Einarbeitung in die Forschungs- und Entwicklungsarbeit +- Geplanter Umfang: Seminararbeit 15-20 Seiten (Rücksprache mit Herrn Giefers und Herrn Gawron durch Herrn Arinir, Feedback beim nächsten Termin) und Vortrag mit Folien oder anderen Quellen (z.B. Quellcode) ca. 15-20 Minuten im Rahmen eines JF Termins (keine Vorstellung im Plenum) +- Die Seminararbeiten werden benotet (20% der Endnote), die Ausarbeitung und der Vortrag zählen dabei zu jeweils 50% + + +Wie lautet der zeitliche Rahmen? +- Keine feste Deadline vorgegeben, Absprache innerhalb der Projektgruppe ausreichend +- Vortrag: Einigung auf zwei Termine Ende Juni/Anfang Juli -> Thema 1-3 am 22.06.2023 und Thema 4-6 am 06.07.2023 +- Seminararbeit: Abgabe voraussichtlich Ende des Sommersemesters, potentiell auch zu einem späteren Zeitpunkt möglich + + +Welche Themenbereiche sollen behandelt werden? +- Die erste kurze Beschreibung der 6 Themenbereiche/Domänen wurde durch Herrn Arinir als positiv befunden +- Zur Eingrenzung der Themen und für ein konkreteres Feedback soll für jeden Themenbereich beim nächsten JF am 11.05.2023 ein Abstract vorgestellt werden +- Grundsätzlich sollen die Themen nicht zu oberflächlich behandelt werden, sondern explizit auf Techniken zur Umsetzung eingegangen werden + + +Einigung auf Änderungen im Bereich Projektorganisation: +- Aufnahme des zeitlichen Ablaufs der Tickets in die Meeting Notes -> Screenshot des Projects in Protokoll mit aufnehmen +- Start-, Enddaten und Labels der Tickets besser pflegen + + +Sonstiges: +- Urlaubszeiten Herr Prof. Arinir: 17.07.-01.08.2023 + + + +## Abgeleitete Action Items + +| Action Item | Verantwortlicher | Deadline | +|-------------|------------------|-----------------| +| Abstract pro Thema | Alle | nächstes Weekly | +| Folienvorlage für den Seminarvortrag | Alle | nächstes Weekly | +| Rückmeldung zum Umfang der Seminararbeit | Prof. Arinir | nächstes Weekly | + + +## Aktueller Projektstand +![alt text](https://github.com/fhswf/aki_prj23_transparenzregister/blob/meeting_notes_2023-05-04/documentations/meeting-notes/images/Project_2023-05-04.PNG) diff --git a/html/_sources/meeting-notes/Meeting_2023-05-11.md.txt b/html/_sources/meeting-notes/Meeting_2023-05-11.md.txt new file mode 100644 index 0000000..8a2eeee --- /dev/null +++ b/html/_sources/meeting-notes/Meeting_2023-05-11.md.txt @@ -0,0 +1,117 @@ +# Weekly *4*: 11.05.2023 + +## Teilnehmer +- Prof. Arinir +- Tristan Nolde +- Tim Ronneburg +- Phillip Horstenkamp +- Kim Mesewinkel-Risse +- Sascha Zhu +- Sebastian Zeleny + +## Themen + +### Organisatorische Absprachen zum Umfang und Inhalt der Seminararbeit: + +- Herr Arinir wird sich nochmal wegen des Umfangs der Seminararbeit bei unserer Gruppe melden +- In der Seminarbeit sollen Anforderungen und Lösungsskizzen für das Projekt "Transparenzregister" dargestellt werden. +- Die Seminarabeit soll aus einem theoretischen Teil und einem praktischen Teil, in dem der praktische Nutzen für das Projekt "Transparenzregister" erörtert wird, bestehen; ob das Verhältnis zwischen dem theoretischen und praktischen Teil bei 50:50 oder 40:60 liegt, darüber können die Verfaser der Seminararbeit selbst entscheiden +- Der Fokus der Seminarbeit soll stets danach ausgerichtet werden, wie die entsprechenden Aspekte bzw. die entsprechenden Technologien für das Projekt "Transparenzregister" genutzt werden können. + + + +### Vorstellung des Abstracts der Seminararbeit zu "Dev Ops" (Philipp Horstenkamp): + +Abstract siehe Datei in github. + +Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: + +- Eine sehr straffe Pipeline, die für Seriensoftware in Ordnung wäre, könnte uns für unser Projekt zu sehr „fesseln“ bzw. einschränken. +- Es wäre zu überlegen, ob die Software-Entwicklung, wie diese früher ablief, mit der Software-Entwicklung von heute (u.a. mit den Automatisierungsmöglichkeiten von heute) gegenübergestellt werden soll, um daraus zunächst eine Strategie für unser Projekt zu entwickeln, bevor man sich vertieft mit DevOps beschäftigt +- Die Verwendung von CI/CD (Continuous Integration/Continuous Delivery)-Pipelines für KI-Projekte wäre ein interessantes Thema. + + + +### Vorstellung des Abstracts der Seminararbeit zu "Automatisierte Datenextraktion aus Internetquellen als Grundlage für die Analyse von Kapitalgesellschaften" (Tristan Nolde): + +Abstract siehe Datei in github. + +Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: + +- Pros und Cons von WebScraping gegenüber RSS-Feeds und gegenüber der API-Lösung sollen dargestellt werden +- Die Quelle E-Mail-Newsletter (z.B. vom Handelsblatt) könnte ebenfalls interessant sein, jedoch muss hierfür möglicherweise ein separater E-Mail-Account erstellt werden, was eher aufwändig ist +- Es wäre eventuell zu prüfen, ob auch Daten aus LinkedIn API, XING oder Facebook extrahiert werden könnten. + + + +### Vorstellung des Abstracts der Seminararbeit zu "Datenspeicherung" (Sebastian Zeleny): + +Abstract siehe Datei in github. + +Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: + +- Bei der Wahl der Datenbank müssen verschiedene Anforderungen berücksichtigt werden, mit hohem Abstimmungsbedarf zwischen den Topics "Datenextraktion" und "Datenvisualisierung" + +- Herr Prof. Arinir fragte noch, ob wir das Thema "relationale Datenbanken" als Modul behandelt haben. Dies wurde bejaht, insbesondere SQL Datenbanken und SQL queries waren Gegenstand des Moduls "Datenbankprogrammierung" + + + +### Vorstellung des Abstracts der Seminararbeit zu "Verpflechtungsanalyse" (Tim Ronneburg): + +Abstract siehe Datei in github. + +Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: + +- Beim Social Graph wäre zu überlegen, nicht nur Beziehungen zwischen Unternehmen via Personen (z.B. Wirtschaftsprüfer), sondern auch Beziehungen zwischen Unternehmen via Kooperationspartner (Stiftungen, Unis, Forschungsinstitute) bzw. Eigentums-, Kunden- und Lieferbeziehungen darzustellen + +- Beim Social Graph wäre zu überlegen, ob man nach Art der Beziehung filtern könnte + + + +### Vorstellung des Abstracts der Seminararbeit zu "Text Mining" (Sascha Zhu): + +Abstract siehe Datei in github. + +Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: + +- Bei den Sentiment-Analyse-Tools wie FinBERT oder VADER wäre stets eine maschinelle Übersetzung der deutschen Nachrichtentexte ins Englische erforderlich, da FinBERT oder VADER keine deutschen Texte erkennen können +- Die Generierung von Ontologien ist zu komplex und soll nicht Gegenstand der Projektarbeit sein +- Bei der semantischen Textanalyse wäre empfehlenswert, dass dies über "Einzel-Personen" ausgeführt wird (das wäre dann ein Punkt im Graphen) +- Das Thema "Named Entity Recognition" wird für die Projektarbeit eine hohe Bedeutung haben + + + +### Vorstellung des Abstracts der Seminararbeit zu "Datenvisualisierung" (Kim Mesewinkel-Risse): + +Abstract siehe Datei in github. + +Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: + +- Bei der Datenvisualisierung wäre zu überlegen, dass man sich nur auf Python-Bibliotheken beschränkt +- Die Datenabfrage könnte über SQL oder Spark laufen, eine Schnittstelle zwischen dem Speicher und dem Front-End wird benötigt +- Zwischen Daten und der Datenvisualisierung werden eventuell Zwischen-Caches benötigt +- Bezüglich der Frage nach der „Middleware“: Wenn Plotly oder Plotly Dash verwendet wird, wird keine Middleware benötigt, da dies schon eingebaut ist. + + + +### Feedback von Herrn Prof. Arinir: + +- Es scheint noch kein Gesamtkonzept für das Gewerk vorzuliegen. +- Wir sollten uns die Frage stellen: Was soll am Ende für "ein brauchbares Stück Software" herauskommen, damit der Anwender mit der Vielzahl von Informationen und Funktionen zurechtkommt. +- Eine Lösungsskizze muss definiert werden, wobei ein Pflichtenheft jetzt noch nicht erforderlich ist +- Es sollen zunächst einige GUI-Designs (mit einem Muster-Datensatz) entwickelt werden. +- Pros und Cons zwischen einem Wasserfallmodell (Pflichtenheft mit bis zu 1000 Seiten) und der agilen Modellierung sollen berücksichtigt werden. +- Wie sollen die Verflechtungen eingebaut werden? +- Wie sollen die Daten persistiert werden? +- Es wäre empfehlenswert, mit irgendetwas (d.h. einer kleinen Lösung) anzufangen, dann das Ergebnis anzuschauen, und diese kontinuierlich zu verbessern. + + + +## Abgeleitete Action Items + +| Action Item | Verantwortlicher | Deadline | +|--------------------------------------------|------------------|-------------------| +| GUI Designs | Alle | nächstes Weekly | +| Rückmeldung zum Umfang der Seminararbeit | Prof. Arinir | nächstes Weekly | + +## Aktueller Projektstand diff --git a/html/_sources/meeting-notes/Meeting_2023_05-25.md.txt b/html/_sources/meeting-notes/Meeting_2023_05-25.md.txt new file mode 100644 index 0000000..d04f602 --- /dev/null +++ b/html/_sources/meeting-notes/Meeting_2023_05-25.md.txt @@ -0,0 +1,33 @@ +# Weekly *5*: 25.05.2023 + +## Teilnehmer +- Prof. Arinir +- Tristan Nolde +- Tim Ronneburg +- Philipp Horstenkamp +- Kim Mesewinkel-Risse +- Sascha Zhu +- Sebastian Zeleny + +## Themen + +- Nächster Termin am 08.06.2023 ist Fronleichnam => Verschoben auf 09.06.2023 09:00 +- Sebastian präsentiert das Miro Bord mit den Wireframediagrammen. [Siehe Anlage]() +- Philipp präsentiert den Sozial graph +- Sebastian präsentiert die Unternehmensdetails in sicht auf die Kennzahlen +- Sebastian dankt Kim für das Überarbeiten der Graphen im Farbschema +- Sebastian zeigt die anderen Übersichten + - Sascha weist darauf hin das zusätzlich noch das Quellmaterial für die Stimmungen mit angezeigt werden sollen. + - Die Form ist bisher noch unklar. + +- Arinir: Auch indirekte verpflächtungen für N sprünge sollen bei den Details angezeigt werden und einen wert für den Einfluss von personen und Firmen sein. + - Zähle die Personenverbindungen juristisch/Natürlich getrennt nach den schichten der Indirektion. Interessant wäre eine auftrennung der natürlichen und Jiristischen personen in der Zählung + - Ranking der Personen nach Anzahl der Verbindungen + +- Die Frage wie wir zeitliche veränderungen im sozial graph bewerten sollen kam auf. Wurde aber noch nicht abschließend beantwortet. + +## Abgeleitete Action Items + +| Action Item | Verantwortlicher | Deadline | +|------------------------------------------|------------------|-----------------| +| Erster entwurf der Seminarpräsentationen | Alle | nächstes Weekly | diff --git a/html/_sources/modules.rst.txt b/html/_sources/modules.rst.txt new file mode 100644 index 0000000..6b4c41d --- /dev/null +++ b/html/_sources/modules.rst.txt @@ -0,0 +1,7 @@ +aki_prj23_transparenzregister +============================= + +.. toctree:: + :maxdepth: 4 + + aki_prj23_transparenzregister diff --git a/html/_sources/research/RE_Vom-Problem-zur-Loesung.md.txt b/html/_sources/research/RE_Vom-Problem-zur-Loesung.md.txt new file mode 100644 index 0000000..0ebd5a2 --- /dev/null +++ b/html/_sources/research/RE_Vom-Problem-zur-Loesung.md.txt @@ -0,0 +1,40 @@ +# Von der Problemstellung zum Lösungskonzept +Um ein Softwaresystem für das Transparenzregister implementieren zu können, ist es notwendig Anforderungen zu formulieren. Diese legen die Eigenschaften der Software fest und werden benötigt, um die fachliche und technische Lösung zu modellieren / entwerfen und ein Produkt zu implementieren. + +Zu Beginn sind die Anforderungen wenig eingeschränkt ("Benötigt wird eine Möglichkeit Daten zu speichern."), im Verlauf der Modellierung wird der Lösungsraum eingeschränkt ("Es bietet sich eine Datenbanklösung oder Dateiablage an.") und abschließend auf eine zu implementierende Lösung festgelegt ("Die Software verwendet ein relationales Modell unter Verwendung einer SQLite Datenbank."). + +## Requirements Engineering Transparenzregister +Unser Weg zum Pflichtenheft und zur Spezifikation der Systemanforderungen ist folgend dargestellt. +Von unspezifizierten Anforderungen werden wir immer konkreter und beantworten iterativ die Fragen *Was ist das Problem/Anforderung?* und *Wie lösen wir das Problem/Anforderung?*. + +### 1. Anforderungen aus Projektvorstellung + +- Entwicklung einer Software zur Darstellung von Unternehmenskennzahlen und Verbindungen. +- Ermittlung der 100 größten deutschen und europäischen Unternehmen +- Auswahl geeigneter Metriken +- Auswahl geeigneter Quellen +- Die erhobenen Daten müssen visualisiert werden (evtl. durch ein Netz, wenn es Verbindungen sind) +- Die erhobenen Daten müssen nach Unternehmen und Personen durchsuchbar sein. + +### 2. Identifikation von Anforderungen innerhalb der Gruppe + +- Es werden Datenquellen benötigt, um Unternehmenskennzahlen ermitteln zu können. +- Es werden Datenquellen benötigt, um über die öffentliche Darstellung der Unternehmen zu erfahren. +- Es werden Werkzeuge benötigt, um Sentimentanalyse über Unternehmen durchzuführen. +- Die rechtmäßige Verwendung der Daten muss geklärt werden. +- Die ermittelten Daten müssen gespeichert werden. +- Es werden Werkzeuge benötigt, um Text Mining zu betreiben. + +### 3. Identifikation von Domänen zur Lösungsfindung +Aus den Anforderungen der Projektvorstellung und der Projektgruppe wurden sechs Domänen identifiziert, welche benötigt werden, um ein Softwaresystem für Transparenzregister zu erarbeiten. +Um das benötigte Domänenwissen zu vertiefen, bearbeitet jedes Mitglied ein Cluster. + +### 4. technische/fachliche Lösungen +Mit dem Domänenwissen können technische und fachliche Lösungen definiert werden ("Zur Datenspeicherung von Unternehmenskennzahlen ist *xy* notwendig, weil *abc*.") und erste Modelle (z.B. GUI-Modell) erstellt werden. + +### 5. Priorisierung von Anforderungen +Die Gruppe diskutiert die Anforderungen und legt eine Priorisierung fest. + +### 6. Pflichtenheft +Das Team legt sich mit dem Pflichtenheft auf einen definierten Umfang und konkrete Inhalte der Lösung fest. Es wird in *Muss-* und *Kann-*Anforderungen unterschieden. +Das Pflichtenheft ist das **Project Proposal**. \ No newline at end of file diff --git a/html/_sources/research/Timeseries/Overview.md.txt b/html/_sources/research/Timeseries/Overview.md.txt new file mode 100644 index 0000000..336e5d3 --- /dev/null +++ b/html/_sources/research/Timeseries/Overview.md.txt @@ -0,0 +1,62 @@ +# Timeseries (deutsch: Zeitreihen) im Kontext des Transparenzregisters Kapitalgesellschaften + +## Leitfragen +1. Was zeichnet Timeseries Daten aus? +2. Wie werden Timeseries effizient gespeichert? +3. Welche Daten sind für den vorstehenden Use Case relevant und wie werden diese möglichts optimal (gemäß Software Qualitätskriterien wie Skalierbarkeit u.ä.) modelliert? +4. Passt die Struktur und Handhabung von Timeseries Daten auf den Use Case? +5. Wo können die benötigten Daten abgerufen werden? +6. Wie könnte ein beispielhafter Datensatz (ggf. in Form eines Pandas DataFrames) aussehen? + +## Timeseries +Hinter Timeseries (oder Zeitreihen) verbergen sich Datenpunkte meistens numerischer Natur aber auch andere Datentypen sind möglich, die Werte einer Kennzahl oder Entität entlang der Zeit-Achse darstellen. Nennenswerte Beispiele sind die Herzfrequenz eines Menschen sowie Aktienkurse börsennotierter Unternehmen. Es wird generell zwischen `Metriken` (engl.: Metrics; bei regelmäßigem Intervall) und `Ereignissen` (engl.: Events; bei unregelmäßigen Intervallen) unterschieden. + +--vgl. [influxdata - What is time series data?](https://www.influxdata.com/what-is-time-series-data/) + +Einige zentrale Eigenschaften von Daten, die als Zeitreihen modelliert werden, sind: +1. `Unveränderbarkeit` (engl.: Immutability): + Da Zeitreihen in der Regel in zeitlicher Reihenfolge aufgenommen werden, werden sie normalerweise lediglich an die bestehende Reihe angehangen und nachträglich nicht mehr angepasst. Der entscheidende Identifikator des Datensatzes besteht dabei aus dem Zeitstempel (engl.: Timestamp) sowie der zugeordneten Entität (z.B. einem Sensor). Andere Features, die als Primärschlüssel fungieren können, sind nicht vorgesehen. +2. `Lebensdauer` (engl.: Retention policy): + Da Zeitreihen in hoher Frequenz geschrieben aber mit höherem Alter seltener gelesen werden, ist es üblich alte Daten zu löschen bzw. aggregiert zu speichern, um langfristig Speicher zu sparen. +3. `Aggregation` (engl.: Aggregation): + In den meisten Use Cases werden nicht alle Daten gleichzeitig oder nur einzelne Datensätze sondern Werte eines definierten Zeitraumes abgefragt und häufig aggregiert (z.B. als Summe oder Durchschnitt) zurückgegeben. +4. `Hohes Schreib- zu Lese-Verhältnis` (engl.: High write/read ratio): + Timeseries Daten werden in der Regel in hoher Frequenz (kurzen Intervallen) geschrieben jedoch nur gelegentlich bzw. wie in Punkt 3 angemerkt aggregiert abgerufen, so dass schreibende Zugriffe zur Datenbank die lesenden an Volumen übertreffen. + +-- vgl. [TDengine - Characteristics of Time-Series Data](https://tdengine.com/tsdb/characteristics-of-time-series-data/) + +## Modellierung relevanter Kennzahlen + +### Ist die Timeseries Modellierung für den Use Case geeignet? +Die im Rahmen der vorher durchgeführten Analyse von für den Use Case [relevanten Unternehmenskennzahlen](../data_and_metrics.md) zeichnen sich durch ein Merkmal aus: sie basieren auf einer jährlich bis maximal jedes Quartal aufgestellten Kennzahl wie den Gewinn oder Umsatz des Unternehmens. Daraus resultiert eine für Zeitreihen geringe Datenfrequenz - üblich sind hier minütlich bis unter sekündlich geschriebene Daten. + +Des Weiteren ist jeder Datensatz nicht nur an die Zeit-Achse sondern eine weitere Entität wie einen Quartals oder Jahresabschluss gebunden. Dies spiegelt nicht nur in der Berechnung der Kennzahl für ein einzelnes Unternehmen sondern auch den Vergleich zwischen Mehreren wieder: Hier ist es möglich, dass Unternehmen ihre Ergebnisse zu unterschiedlichen Zeiten aber den selben Ereignissen veröffentlichen. Immerhin ist es realistisch, dass ein Unternehmen seinen Jahresabschluss deutlich früher als ein anderes der Öffentlichkeit zur Verfügung stellt. So eine Abfrage ließe sich zwar durchaus über die Einführung einer zeitlichen Einschränkung filtern, jedoch ist auch hier die Verknüpfung zu einem Jahres- oder Quartalsabschluss von höherem Interesse. + +In Folge dessen eignet sich eine Zeitreihen basierte Modellierung nicht für die zentralen Unternehmenskennzahlen. + +Für die Speicherung und Verwaltung von Aktienkursen börsennotierter Unternehmen - folglich nicht aller Kapitalgesellschaften, die im Use Case behandelt werden - bietet sich der Einsatz einer Timeseries Datenbank jedoch durchaus an, da Daten hier nicht nur in sehr hoher Frequenz geschrieben sondern auch im bekannten Muster abgefragt werden. Demzufolge mag sich eine Modellierung auf Basis der `Polyglot persistence` (Verwendung verschiedener Datenspeicherungs Technologien) auf Gesamtsicht eignen, so dass Kennzahlen sowie Stammdaten von Unternehmen in einer relationalen DB gespeichert und abhängig ihrer Unternehmensform mit Aktiekursen aus einer Timeseries DB angereichert werden. + +Dieser Ansatz wäre nicht nur für diese Anforderung lohnenswert, sondern kann auch die effiziente Speicherung der Unternehmensverflechtungen vereinfachen, da für diesen Anwendungszweck eine Graphen-Datenbank ins Spiel gebracht werden könnte, die die Relationen zwischen Unternehmen und Unternehmen leicht traversierbar speichert. Es ist daher auch abzuwägen, ob diese nicht auch die Aufgaben des relationalen Modells übernehmen könnte, um die Fülle anforderungsspezifischen DB Technologien zu reduzieren, um auch so die Komplexität des Gesamtsystem gering zu halten. + +Um einen geeigneten Zugang zu den Daten von extern (z.B. der Datenvisualisierungs-Schicht in Form einer Web App) zu ermöglichen, ist der Einsatz von `GraphQL` sinnvoll. Dies ermöglicht dem Client die gesamte Datenbasis zu durchforsten und den benötigten Datenbestand abzufragen. Der ``GraphQL`` Server kann dabei durch seine `Resolver` Struktur problemlos mehrere Datenquellen (siehe oben angesprochene `Polyglot Persistence`) kombinieren. + +### Überblick über Datenrelationen + +```mermaid + +erDiagram + Kapitalgesellschaft ||--o{ Jahresabschluss : veroeffentlicht + Wirtschaftspruefer ||--o{ Jahresabschluss : prueft + Jahresabschluss ||--o{ Metriken : beinhaltet + Kapitalgesellschaft ||--o{ Branche : operiert_in + Person ||--o{ Vorstand : agiert_als + Person ||--o{ Wirtschaftspruefer : agiert_als + Vorstand ||--o{ Kapitalgesellschaft: leitet + + Kapitalgesellschaft { + } + Branche { + } + Jahresabschluss { + } +``` diff --git a/html/_sources/research/data_and_metrics.md.txt b/html/_sources/research/data_and_metrics.md.txt new file mode 100644 index 0000000..dbbeb46 --- /dev/null +++ b/html/_sources/research/data_and_metrics.md.txt @@ -0,0 +1,190 @@ +# Daten und Kennzahlen von Unternehmen + + +## Basisdaten der Firma +* Name +* Sitz +* Rechtsform bzw. Art der Kapitalgesellschaft (AG, KGaA, GmbH, UG) +* Branche +* Gründungsdatum + + +## Personen +* Gesellschafter/innen (Verteilung der Anteile, Höhe der Anteile) +* Geschäftsführung bzw. Vorstand (Vorsitzende/r, Stellvertretung, weitere) +* Aufsichtsrat (Vorsitzende/r, Stellvertretung, weitere) +* Wirtschaftsprüfung (Unternehmen, verantwortliche/r Wirtschaftsprüfer/in) + +Im Fall von realen Personen könnte die eindeutige Identifikation schwierig sein. Hier wären neben dem Nachnamen auch der Vorname wünschenswert. + + +## Bewertung der Größe der Kapitalgesellschaft +*Nach HGB §267: https://www.gesetze-im-internet.de/hgb/__267.html* +* Durchschnittliche Mitarbeiterzahl (Anzahl beschäftigte Arbeitnehmer am 31.03., 30.06., 30.09., 31.12.) +* Bilanzsumme bzw. Gesamtkapital +* Umsatz bzw. Umsatzerlöse + + +## Kennzahlen bei Aktiengesellschaften +*Angelehnt an https://www.tagesschau.de/wirtschaft/boersenkurse/ und https://boerse.de* +* ISIN (International Securities Identification Number) +* WKN (Wertpapierkennnummer) +* Aktienkurs +* Währung +* Gewinn je Aktie +* Dividende +* Dividendenrendite +* Ausschüttungsquote = Dividende je Aktie / Gewinn je Aktie * 100 +* Marketkapitalisierung = Anzahl Anteilsscheine * Aktienkurs +* Kurs-Gewinn-Verhältnis (KGV) = Aktienkurs / Gewinn pro Aktie +* Kurs-Umsatz-Verhältnis (KUV) = Marktkapitalisierung / Umsatz +* Kurs-Gewinn-Wachstumsverhältnis (PEG) = KGV / erwarteter Gewinnwachstum im kommenden Geschäftsjahr + + +## Mögliche Kennzahlen zur Unternehmensbewertung +*Handbuch Aktien- und Unternehmensbewertung - Peter Seppelfricke* + +### Erfolgskennzahlen +* Umsatz +* Gewinn bzw. Jahresüberschuss +* Gewinn vor Steuern (EBT) +* Gewinn vor Steuern und Zinsen (EBIT/Betriebsergebnis): Bei Gesamtkostenverfahren Summe 1-8, bei Umsatzkostenverfahren Summe 1-7 + +### Finanzkennzahlen +* Eigenkapitalquote = Eigenkapital / Gesamtkapital * 100 +* Fremdkapitalquote = Fremdkapital / Gesamtkapital * 100 +* Verschuldungsgrad = Fremdkapital / Eigenkapital * 100 + +### Rentabilitätskennzahlen +* Eigenkapitalrentabilität = Jahresüberschuss / Eigenkapital * 100 +* Return on Investment (ROI) = Gewinn / Gesamtkapital +* Umsatzrentabilität = Gewinn / Umsatz * 100 + +### _Nichtfinanzielle Kennzahlen_ +* _CO2-Emissionen_ +* _Unfallrate_ + + +## Gewünschte Kennzahlen +*E-Mail vom 13.04.2023* +* Umsatz +* EBIT +* EBIT Marge +* Bilanzsumme +* Eigenkapitalanteil (Eigenkapital / Bilanzsumme) +* Fremdkapitalanteil (Fremdkapital / Bilanzsumme) +* Verschuldungsgrad (Fremdkapital / Eigenkapital) +* Eigenkapitalrentabilität (EBIT/Eigenkapital) +* Umschlaghäufigkeit des Gesamtkapitals (Umsatz / Bilanzsumme) + +## Kurzdefinitionen +### Umsatz (Erlös) +*https://www.lexoffice.de/lexikon/umsatz/* +* Wert aller Produkte und Dienstleistungen, die in einem bestimmten Zeitraum abgesetzt wurden +* Muss in der GuV ausgewiesen werden +* Berechnung: Bruttoumsatz = Verkaufspreis (pro Stück) x abgesetzte Menge, Nettoumsatz = Bruttoumsatz - Erlösschmälerungen (z.B. Rabatte, Boni, Skonti) - Umsatzsteuer + +### EBIT (Earnings Before Interest and Taxes/Gewinn vor Zinsen und Steuern/Betriebsergebnis/Operativer Gewinn) +*https://www.bwl-lexikon.de/wiki/ebit/* +* Kennzahl, die den Unternehmensgewinn angibt, der aus der gewöhnlichen Geschäftstätigkeit entsteht +* Stellt das operative Ergebnis eines Unternehmens dar +* Gibt Auskunft über die Effizienz und die Ertragskraft eines Unternehmens +* Berechnung: Jahresüberschuss/-fehlbetrag + Steueraufwand - Steuerertrag + außerordentlicher Aufwand - außerordentlicher Ertrag + Finanzaufwand - Finanzertrag = EBIT + +### EBIT-Marge +*https://www.bwl-lexikon.de/wiki/ebit-marge/* +* Eignet sich zum Vergleich von verschiedenen Unternehmen, zur Messung der operativen Veränderung und gibt Rückschlüsse auf die zukünftige Rentabilität +* Verhältnis von EBIT und Umsatz +* Eine EBIT-Marge in Höhe von 10% und mehr ist als positiv zu bewerten +* Berechnung: EBIT-Marge = EBIT / Umsatz + +### Bilanzsumme (Gesamtvermögen/Gesamtkapital) +*https://www.bwl-lexikon.de/wiki/bilanzsumme/* +* Summe des Vermögens bzw. der Aktiva und des Kapitals bzw. der Passiva eines Unternehmens +* Kriterium für die Größe von Kapitalgesellschaften +* Aktiva = Anlagevermögen + Umlaufvermögen +* Passiva = Eigenkapital + Rückstellungen + Verbindlichkeiten +* Liefert Anhaltspunkte dafür, ob und wie schnell ein Unternehmen wächst + +### Eigenkapitalquote +*https://www.bwl-lexikon.de/wiki/eigenkapitalquote/* +* Informiert über die Kapitalstruktur eines Unternehmens +* Geht aus der Bilanz eines Unternehmens vor +* Je größer der Abstand zwischen eigenen und fremden Mittel, umso freier kann die Unternehmensleitung agieren +* Je höher die Quote, desto unabhängiger ist das Unternehmen von Fremdkapitalgebern +* Berechnung: Eigenkapital / Gesamtkapital + +### Fremdkapitalquote +*https://www.bwl-lexikon.de/wiki/fremdkapitalquote/* +* Anteil des Fremdkapitals am gesamten Kapital +* Anzeichen für die Zahlungsfähigkeit eines Unternehmens +* Je höher die Quote, desto abhängiger ist das Unternehmen von Fremdkapitalgebern, die Kreditwürdigkeit sinkt +* Berechnung: Fremdkapital / Gesamtkapital + +### Verschuldungsgrad +*https://www.bwl-lexikon.de/wiki/verschuldungsgrad/* +* Informiert über die wirtschaftliche Stabilität eines Unternehmens +* Bei einem hohen Verschuldungsgrad wird mehr Fremdkapital in einem Unternehmen eingesetzt, die Gefahr der Insolvenz steigt +* Bei einem niedrigen Verschuldungsgrad ist die Eigenkapitalfinanzierung höher +* Berechnung: Fremdkapital / Eigenkapital + +### Eigenkapitalrentabilität (Return on Equity ROE) +*https://www.bwl-lexikon.de/wiki/eigenkapitalrentabilitaet/* +* Informiert über die Wirtschaftlichkeit des Unternehmens und die Sinnhaftigkeit des Kapitaleinsatzes +* Misst die Ertragskraft des Unternehmens +* Gewünschte Höhe der Eigenkapitalrentabilität differiert je nach Branche +* Eine doppelt so hohe Eigenkapitalrendite wie der durchschnittliche Zins gilt als wünschenswert +* Ist der Kapitalzins höher, sollten Unternehmen das Kapital aus dem Kapitalmarkt anlegen +* Berechnung: Gewinn bzw. Jahresüberschuss / Eigenkapital + +### Gesamtkapitalumschlag (Kapitalumschlag/Umschlagshäufigkeit) +*https://www.bwl-lexikon.de/wiki/kapitalumschlag/* +* Verhältnis vom Umsatz zum Eigen- oder Gesamtkapital +* Legt fest, wie viel Umsatz mit dem vorhandenen Kapital eines Unternehmens erwirtschaftet werden kann +* Gibt an, wie oft das eingesetzte Kapital durch die Umsatzerlöse zurück in das Unternehmen gelangt ist (desto häufiger, desto besser) +* Berechnung: Umsatz / Bilanzsumme bzw. Gesamtkapital + +### Umsatzrentabilität (Umsatzrendite/Umsatzmarge/Nettomarge) +*https://www.bwl-lexikon.de/wiki/umsatzrentabilitaet/* +* Verhältnis von Gewinn und Umsatz +* Betrag, den ein Unternehme pro Euro Umsatz erwirtschaftet +* Eine steigende Umsatzrendite deutet darauf hin, dass die Produktivität des Unternehmens steigt +* Bildet die Effiziens eines Unternehmens ab +* Eine Umsatzrentabilität in Höhe von 5% und mehr gilt als Richtwert +* Berechnung: Gewinn / Umsatz + +### Gesamtkapitalrentabilität (Return on Investment ROI, Kapitalrendite) +*https://www.bwl-lexikon.de/wiki/gesamtkapitalrentabilitaet/* +* Relation zwischen dem investierten Kapital und dem Gewinn +* Beurteilungsmaßstad für die Rentabilität +* Positiver ROI ist für ein Unternehmen vorteilhaft +* Berechnung: Umsatzrentabilität x Kapitalumschlag + +# Fazit +Insgesamt sollen folgende Größen bzw. Kennzahlen betrachtet werden: +* Unternehmensgröße +* Umsatz +* EBIT +* EBIT-Marge +* Bilanzsumme +* Eigenkapitalquote +* Fremdkapitalquote +* Verschuldungsgrad +* Eigenkapitalrentabilität +* Umsatzrentabilität +* Gesamtkapitalrentabilität +* Gesamtkapitalumschlag + + +Dazu werden folgende Daten benötigt: +* Umsatz +* Bilanzsumme +* EBIT +* Eigenkapital +* Fremdkapital +* Gewinn +* Durchschnittliche Mitarbeiterzahl + +Vergleichsmöglichkeiten: +* Zeitvergleich: Vergleich der ermittelten Kennzahlen in verschiedenen Perioden, mit Hilfe von Zeitvergleichen über längere Zeiträume lassen sich Trends oder Zyklen erkennen +* Betriebsvergleich: Gegenüberstellung der Kennzahlen von Unternehmen der gleichen Branche oder Vergleich der Werte eines Unternehmens mit dem Branchendurchschnitt diff --git a/html/_sources/research/news_apis.md.txt b/html/_sources/research/news_apis.md.txt new file mode 100644 index 0000000..dcc86e0 --- /dev/null +++ b/html/_sources/research/news_apis.md.txt @@ -0,0 +1,74 @@ +# Nachrichtenquellen + +## **Twitter API v2** + +### **Access Levels** +**Free:** +- 1,500 Tweets per months +- 1 AppID +- Login with Twitter + +**Basic:** +- 100 per month + +**Enterprise:** +- Monthly subscribtion tiers + +Postman Besipiele: https://developer.twitter.com/en/docs/tutorials/postman-getting-started + +Getting started: https://github.com/twitterdev + + + +## **NewsAPI** +- Developer ist kostenlos +- 24 Stunden verspätet sind die Artikel erreichabr +- Bis zu einem Monat alte Artikel abrufbar +- 100 Anfragen pro Tag +- CORS geht nur für local host +- Hat extra einen Punkt für deutsche Nachrichten: https://newsapi.org/s/germany-news-api + + +Benötigt einen Account um einen API Key zu generieren. +Doku: https://newsapi.org/docs/get-started + +**Hinweis**: *Bietet die Möglichkeit nach Artikel mit einem bestimmten Wort zu suchen* + +## **Bloomberg API** +- Link: https://www.bloomberg.com/professional/support/api-library/ +- generell kostenlos, bei starker Nutzung muss ein Preis angefragt werden +- sehr gut für Marktanalysen geeignet + + +## **New York Times API** +- die ersten 1000 Anfragen pro Tag sind kostenlos +- 11 verschiedene APIs + + +## **PressePortal** +Bietet eine API zur DPA Gruppe an. Eher schlecht beschrieben und der API-Key muss via Email beantragt werden, bietet aber potentiell Zugriff auf deutsche Nachrichten. + +Demo: https://api.presseportal.de/v2/demo/index.htx?mod=section_all&newsroom=&office=&city=&keyword=&topic=&police_officetype=&police_federalstate=&media=dokument&limit=&language=de&companyinfo=6344 + +API-Key Anfragen: https://api.presseportal.de/ + + +## **Tagesschau API 2.0** +https://tagesschau.api.bund.dev/ + +## **Yahoo finance API** +https://financeapi.net/ + +## **Google News API** +- deprecated +- kostenlos +- gut dokumentiert + + +## **Sonstiges** +Bing News API, ESPN, Guardian API, BBC News API Yahoo News API und Financial Times fallen raus, da diese immer mit kosten verbunden sind oder sich nur mit Sport oder Kommentare befassen. + +- "Die Zeit" hatte mal eine API die abgeschaltet wurde. + + +-> RSS Feeds Irgendwie abgreifen \ No newline at end of file diff --git a/html/_sources/research/resarch-central.md.txt b/html/_sources/research/resarch-central.md.txt new file mode 100644 index 0000000..14f1753 --- /dev/null +++ b/html/_sources/research/resarch-central.md.txt @@ -0,0 +1,12 @@ +# Research Central + + +## Sentiment Analysis + +### FinBert + +FinBert is a specialised sentiment Analysis for Financial Data. +Sadly it isn't a very good model, and it does not work at all for texts in german. + +Experiments can be found here: +* [FinBert Jupyter](../../Jupyter/AI-models/"Sentiment Analysis"/FinBert.ipynb) diff --git a/html/_sources/seminararbeiten/3_Datenspeicherung.md.txt b/html/_sources/seminararbeiten/3_Datenspeicherung.md.txt new file mode 100644 index 0000000..1f76b94 --- /dev/null +++ b/html/_sources/seminararbeiten/3_Datenspeicherung.md.txt @@ -0,0 +1,68 @@ +# Aufgabe: Inhaltliche Skizze für die Seminararbeit zur Thematik Datenspeicherung + +# 1. Allgemeine Anforderungen an Datenbank +- **Speicherung** von strukturierten Daten, wie Kennzahlen, Stammdaten +- **Skalierbarkeit:** Datenbank sollte skalierbar sein, um zukünftige Daten weiterhin zu speichern und weitere Unternehmen hinzuzufügen +- **Sicherheit:** Die Datenbank muss Funktionen unterstützen, um die Datenvor unbefugtem Zugriff zu schützen. +- **Datensicherung- und Wiederherstellung: ** Die Datenbank muss Funktionen zur Sicherung und Wiederherstellung unterstützen. +- **Leistung:** Die Performance der Datenbank ist eher zweitrangig, da die Abfrage nicht hochdynamisch sein muss. Ausserdem werden nicht viele Anfragen erwartet. +- **Integration:** Die Datenbank muss sich in ein Python Framework einbinden lassen und mit dem bevorzugten Frontend Daten austauschen können. + +# 2. Datenarten +Welche Daten erwarten wir im Projekt? \ +Cluster, wie z.B. Stammdaten, Stimmungsdaten, Social Graph, Zeitseriendaten/Historien + +> Abstimmung mit den Bereichen Textmining und Datenbeschaffung über verwendete Daten und Formulierung von Anforderungen an Daten. + +## 2.1 strukturierte Daten +Was sind strukturierte Daten? + +## 2.2 unstrukturierte Daten +Was sind unstrukturierte Daten? + +> Definiere eine Anforderung an die Struktur der Daten. + +# 3. Arten von Datenbanken +## 3.1 Relational +Was ist eine reltionale Datenbank? +Wie werden Daten gespeichert? +Beispiel für relationale Datenbank + +## 3.2 Graph +Was ist eine Graph Datenbank? +Wie werden Daten gespeichert? +Beispiel für Graph Datenbank + +## 3.3 Zeitserien +Was ist eine Zeitserien Datenbank? +Wie werden Daten gespeichert? +Beispiel für Zeitserien Datenbank + +> Kurzvorstellung von Datenbanksystemen + +# 4. DBS Transparenzregister +## 4.1 relationales Datenbankmodell + +> Modell zur Abbildung der Relationen im Projekt Transparenzregister + +## 4.2 verteilte Datenbank oder ein System +Ein DBS: Wenn nur ein Datenbanksystem verwendet wird, muss nur ein System gepflegt und integriert werden. + - Vorteil: einfache Verwaltung und schnelle Abfrage von Datenbeziehungen + +verteiltes System: spezialisierte Datenbank für jeden Datenytp, wie z.B. Zeitseriendaten oder Graph Daten + +> Definiere eine Empfehlung/Anforderung für das Projekt Transparenzregister. + +## 4.3 Analyse zur Auswahl eines Datenbanksystems +Was sollte bei der Auswahl eines Datenbanksystems beachtet werden? + +> Empfehlungen für DBS-Auswahl + +## 4.4 Anbindung an Front- und Backend +Wie kann das DBS an das Front- und Backend angebunden werden? +> Jupyter Notebook mit Beispiel + +## 4.5 Abfragen in der Datenbank +Wie können Unternehmensdaten abgefragt werden? +Wie können Verflechtungen abgefragt werden? +> Jupyter Notebook mit Beispiel \ No newline at end of file diff --git a/html/_sources/seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.md.txt b/html/_sources/seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.md.txt new file mode 100644 index 0000000..f95640d --- /dev/null +++ b/html/_sources/seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.md.txt @@ -0,0 +1,45 @@ +**Abstract/Planung der Seminararbeit zu "Text Mining"** + +**Sascha Zhu** + +**10.05.2023** + + + +Gliederung + +1. Einleitung und Begriffsbestimmung + +2. Text Mining Prozess + +3. Verwendung von NLP-Methoden für das Text Mining + + 3.1 Morphologische Textanalyse + + 3.2 Syntaktische Textanalyse + + 3.3 Semantische Textanalyse + +4. Ontologien und Text Mining + + 4.1 Verwendung von Ontologien als Grundlage der Textanalyse + + 4.2 Generierung von Ontologien mittels Text Mining ("ontology generation"/"ontology learning" ) + +5. Sentiment-Analyse als Teilgebiet des Text Minings + +6. Zusammenfassung und Ausblick + + + +Die Seminararbeit zu "Text Mining" soll in die oben genannten sechs Abschnitte gegliedert werden. + +Nach einer Einleitung, in der der Begriff "Text Mining" näher definiert wird und gegenüber "Data Mining" und "Computational Linguistics" abgegrenzt wird, folgt der zweite Abschnitt zum Text Mining Prozess, der nach Hippner u. Rentzmann (2006) in die folgenden sechs Schritte eingeteilt wird: (a) Aufgabendefinition; (b) Dokumentenselektion; (c) Dokumentenaufbereitung; (d) Untersuchung mit Text-Mining-Methoden; (e) Interpretation und Evaluation; (f) Anwendung der Ergebnisse. + +Im darauffolgenden dritten Abschnitt zur Verwendung von NLP-Methoden für das Text Mining werden die drei Phasen des Natural Language Processings (NLP), d.h. die morphologische, syntaktische und semantische Textanalyse, näher dargestellt, wobei der Schwerpunkt auf die semantische Analysetechniken wie z.B. "Word Sense Disambiguation" (WSD) und "Named Entity Recognition" (NED) liegen soll. + +Der vierte Abschnitt soll sich dem Thema "Ontologien und Text Mining" widmen. Einerseits können Ontologien, die domänenspezifisches Wissen abbilden, als Grundlage für NLP-Methoden dienen, um etwa die semantische Textanalyse zu verbessern. Andererseits können mittels Text Mining automatisch bzw. semi-automatisch Ontologien als Repräsentation der Text-Mining-Ergebnisse erstellt werden ("ontology generation"/"ontology learning"). + +Im vorletzten, fünften Analyse soll die Sentiment-Analyse als Teilgebiet des Text Mining durchleuchtet werden. Dieser Abschnitt soll den Schwerpunkt der gesamten Seminararbeit darstellen. Die Methodik, Funktionsweise, Varianten und Use Cases der Sentiment Analyse sollen anhand ausgewählter Beispiele erläutert werden. Zudem sollen auch bekannte Sentiment-Analyse-Tools wie z.B. FinBERT, VADER, SentiWS etc. näher beschrieben werden. + +Am Ende der Seminararbeit soll der sechste Abschnitt eine Zusammenfassung liefern und einen Ausblick darüber geben, in welche Richtung die zukünftige Entwicklung auf dem Gebiet des Text Minings gehen wird. \ No newline at end of file diff --git a/html/_sources/seminararbeiten/Abstract_Data_Extraction.md.txt b/html/_sources/seminararbeiten/Abstract_Data_Extraction.md.txt new file mode 100644 index 0000000..c3008d0 --- /dev/null +++ b/html/_sources/seminararbeiten/Abstract_Data_Extraction.md.txt @@ -0,0 +1,35 @@ +--- +title: "Automatisierte Daten Extraktion aus Internetquellen als Grundlage für die Analyse von Kapitalgesellschaften" +author: "Nolde, Tristan Norbert" +date: "2023-05-06" +--- + +# Abstract: Automatisierte Daten Extraktion aus Internetquellen als Grundlage für die Analyse von Kapitalgesellschaften + +## Gliederung +1. Einleitung (Zielsetzung/Problemstellung, Vorgehen) +2. Web Scraping/Crawling + 1. Definition und Theorie + 2. Technologien + 3. Umsetzung +3. RSS Feeds + 1. Definition und Theorie + 2. Technologien + 3. Umsetzung +4. APIs + 1. Definition und Theorie + 2. Technologien + 3. Umsetzung +5. Rechtliche Rahmenbedingungen +6. Vergleich der Lösungsansätze +7. Zusammenfassung + +## Inhalt + +In Zeiten von Big Data und AI stellen Daten und ihre Verfügbarkeit zunehmend eines der wichtigsten Wirtschaftsgüter dar. Als solches können sie auch eingesetzt werden, um Kapitalgesellschaften (eine Subklasse von Unternehmen) anhand verschiedener Kennzahlen wie der Mitarbeiterzahl oder dem Jahresgewinn zu analysieren. Obwohl solche Daten zu Genüge in Zeitungsartikeln, Newslettern oder dedizierten Aktienanalysen zu finden sind, so gestaltet sich eine automatisierte Extraktion dieser Daten aufgrund verschiedener Formate sowie weiterer Restriktionen schwierig. + +Daher sollen im Rahmen dieser Seminararbeit verschiedene Wege betrachtet werden, die eben diese Daten erheben und zur Verfügung stellen können. Zu den nennenswerten Quellen gehören: Der Bundesanzeiger, RSS Feeds, Nachrichten APIs. Ziel ist es, aus diesen Quellen wertvolle Informationen bezogen auf den wirtschaftlichen Erfolg einer Kapitalgesellschaft sowie aktueller Nachrichten zu extrahieren und in ein einheitliches Format zu überführen. + +Neben des technischen Einsatzes von Web Scraping/Crawling, um Informationen aus Webseiten zu gewinnen, sowie des Abfragens verfügbarer APIs soll auch der rechltiche Aspekt dieser Vorgehens Berücksichtigung finden, um die Rechtmäßigkeit zu bewerten. + +Abschließend wird der Einsatz der verschiedenen Technologien an den Faktoren: Flexibilität, Simplizität, Verfügbarkeit und Rechtmäßigkeit, ein Fazit gezogen sowie ein Ausblick des weiteren Einsatzes gegeben. diff --git a/html/_sources/seminararbeiten/Abstract_Datenvisualisierung.md.txt b/html/_sources/seminararbeiten/Abstract_Datenvisualisierung.md.txt new file mode 100644 index 0000000..d109797 --- /dev/null +++ b/html/_sources/seminararbeiten/Abstract_Datenvisualisierung.md.txt @@ -0,0 +1,47 @@ +# Seminarthema: Datenvisualisierung + +## Geplanter Inhalt: +- Einführung +- Best Practice für Datenvisualisierung +- Vorstellung verschiedener Diagrammarten +- Welche Diagrammarten eignen sich für unsere drei Anwendungsbereiche Time Series Daten, Netzwerke und Stimmungen? +- Betrachtung verschiedener Bibliotheken (z.B. D3Blocks, pyvis, plotly) + - Zweck der Bibliothek, unterstützte Visualisierungen, Vor- und Nachteile + - Minimalbeispiele +- Anwendung auf unser Projekt: + - Vergleich der Bibliotheken mit Blick auf unsere drei Anwendungsbereiche + - Welche Daten werden für die einzelnen Diagramme gebraucht? + - Welche Ideen/Anforderungen ergeben sich an die anderen Themenbereiche? +- Fazit und Handlungsempfehlung + - Welche Diagramme und welche Bibliotheken eignen sich für uns? + +## Abstract: + +In dieser Seminararbeit geht es um die Visualisierung von Daten in Python. Im Fokus steht die Anwendung auf die drei Themenbereiche, die im Projekt "Transparenzregister" behandelt werden: Time Series Daten, Soziale Netzwerke und Stimmungen. Nach einer Einführung in das Thema werden Best Practices für die Datenvisualisierung vorgestellt und verschiedene Diagrammarten präsentiert. Anschließend wird diskutiert, welche Diagramme für die genannten Anwendungsbereiche am besten geeignet sind. + +Im zweiten Abschnitt werden verschiedene Python Bibliotheken vorgestellt und anhand von Minimalbeispielen betrachtet. Dabei wird analysiert, welche Bibliotheken die gewünschten Diagramme für unsere Anwendungsbereiche am besten darstellen und welche Daten für die Erstellung der verschiedenen Diagramme benötigt werden. Es werden zudem Ideen und Anforderungen an die anderen Themenbereiche aufgezeigt. + +Im letzten Abschnitt der Arbeit wird ein Fazit gezogen und eine Handlungsempfehlung gegeben. Insgesamt soll die Arbeit einen Einblick in die Welt der Datenvisualisierung in Python geben und unserem Projekt helfen, die richtigen Entscheidungen bei der Wahl der Diagrammarten und Bibliotheken zu treffen. + +## Erste Sammlung von Referenzen: +Bibliotheken/Tools: +- D3Blocks: [Documentation](https://d3blocks.github.io/d3blocks/pages/html/index.html), [Medium Blog](https://towardsdatascience.com/d3blocks-the-python-library-to-create-interactive-and-standalone-d3js-charts-3dda98ce97d4) +- pyvis: [Documentation](https://pyvis.readthedocs.io/en/latest/tutorial.html) +- networkx: [Documentation](https://networkx.org/documentation/stable/auto_examples/index.html), [Example](https://www.kirenz.com/post/2019-08-13-network_analysis/) +- plotly: [Documentation](https://plotly.com/python/#animations) + +Netzwerke: +- Zentralitätsmaße: [Medium Blog](https://towardsdatascience.com/social-network-analysis-from-theory-to-applications-with-python-d12e9a34c2c7) +- Visualisierungsideen: [Medium Blog](https://towardsdatascience.com/visualizing-networks-in-python-d70f4cbeb259) + +Kennzahlen: +- Visualisierungsideem: [Towards AI](https://towardsai.net/p/l/time-series-data-visualization-in-python) + +Best Practice: +- [Science Direct](https://www.sciencedirect.com/science/article/pii/S2666389920301896) +- [Toptal](https://www.toptal.com/designers/data-visualization/data-visualization-best-practices) + + + + + diff --git a/html/_sources/seminararbeiten/Datenvisualisierung/Übersicht.md.txt b/html/_sources/seminararbeiten/Datenvisualisierung/Übersicht.md.txt new file mode 100644 index 0000000..1ef320d --- /dev/null +++ b/html/_sources/seminararbeiten/Datenvisualisierung/Übersicht.md.txt @@ -0,0 +1,4 @@ +# Themen in der Seminararbeit zum Thema Datenvisualisierung + +## Python Bibliotheken +- networkx und pyvis diff --git a/html/_sources/seminararbeiten/project-organisation-and-dev-ops.md.txt b/html/_sources/seminararbeiten/project-organisation-and-dev-ops.md.txt new file mode 100644 index 0000000..f576da4 --- /dev/null +++ b/html/_sources/seminararbeiten/project-organisation-and-dev-ops.md.txt @@ -0,0 +1,21 @@ +# Dev Ops + +## Roadmap + +My plan for this coursework is to explore the dev ops thema and how it applies to the AI theme and this project in specific. + +There are the following things in the theme of dev ops I want to explore: + +1. Python dependency management via poetry +2. Write a documentation around pre-commit hooks and how they can be used for this project with arguments for and against each of the hooks. +3. Add a GitHub Runner on my own hardware to the repository and build a pipline with GitHub actions. + - Add linter (black, flake8, pylint, mypy, bandit, pip-audit) + - Testing setup in the pipline via pytest + - Explore the ability of GitHub to summaries the linting and testing results. + - Add SonarQube to the project if the test and lint summaries in GitHub does not suffice. + - Build the artifacts. Something like python wheels, Docker container and deployment files. + - Startup to new build and see if it crashes in the first 60s if a framework is shown. + - Build the documentation via sphinx for this project via the pipline. +4. How to deploy the collection of Docker containers via docker-compose and/or kubernetes. +5. Evaluate the use of dependabot to upgrade the poetry dependency groups. +6. Steadily grow the build pipline as the application grows. diff --git a/html/_sources/seminararbeiten/verflechtungsanalyse.md.txt b/html/_sources/seminararbeiten/verflechtungsanalyse.md.txt new file mode 100644 index 0000000..211c04e --- /dev/null +++ b/html/_sources/seminararbeiten/verflechtungsanalyse.md.txt @@ -0,0 +1,48 @@ +# Verflechtungsanalyse + +## Entwurf des Inhaltsverzeichnis + Stichpunkte + +1 Einleitung + +1.1 Problemstellung + +1.2 Zielsetzung und Aufbau der Arbeit + +2 Graphentheorie + +2.1 Begriffliche Definition + +2.2 Sociometry +- sociometry: quantitatives Methode um soziale Beziehungen zu messen. + +2.3 Sociogram/ Social Graph +- Ist ein graph der ein Soziales netzwerk darstellt +- Basiert auf der Graphentheorie +- Wurde offiziell Sociogram genannt +- von facebook in der F8 2007 vorgestellt + +2.4 Social Network Analysis (SNA) + +- Social Network Analysis (SNA): Untersuchen von Sozialen Strukturen anhand von Netzwerken und Graphtheorie. + +3 Ein Social Graph für das Transparentsregister + +3.5 Handlungsempfehlung + +4 Zusammenfassung + +4.1 Kritische Reflexion + +4.2 Fazit + +4.3 Ausblick + +## Abstract + +In der Seminararbeit zum Thema: "Verpflechtungsanalyse der Unternehmen und Personen im Transparenzregister" soll einerseits die Theorie für die Analyse von Verflechtungen vermittelt sowie anhand des Projektess aufgezeigt werden wie diese angewendet werden kann. + +Als Fundament dient die Graphentheorie, welche Grundlegen für die Analyse von Netzstrukturen ist. Zunächst werden die wichtigsten Begriffe definiert und es wird eine Einführung ins Thema der Graphentheorie mit Beispielen und Erläuterung gegeben. Darauffolgend wird tiefer in das Thema eingetaucht und sich mit dem Bereich Sociogram/ Social Graph auseinandergesetzt. Ein Sociogram ist ein Model eines Netzwerks von sozialen Verbindungen die durch einen Graphen repräsentiert werden. Diese Idee wurde 2007 von Facebook als Social Graph in der F8 vorgestellt. Diese Art von Graph basiert auf der Graphentheorie. Die stärken dieses Graphen liegen in der Veranschaulichung der sozialen Verflechtungen. Daher wird der Social Graph für die Analyse der Verflechtungen innerhalb des Transparenzregisters genutzt. + +Im Hauptteil der Seminararbeit wird aufgezeigt wie der Social Graph auf das Transparenzregister angewendet werden könnte. Es wird gezeigt welche Komponenten gebildet werden müssten und wie die Daten aufbereitet werden um einen Social graph bauen zu können. Des Weiteren wird auf die Formel und Algorithmen eingegangen die zur Erstellung des Graphen nötig sind. Dabei orientiert sich die Arbeit an Beispielen um die Theorie nachvollziebar zu vermitteln. Dieser Abschnitt wird mit einer Handlungsempfehlung für das Projekt abgeschlossen. + +Abgeschlossen wird das Werk mit einer kritischen Reflexion, gefolgt von einem Fazit und einem Ausblick. \ No newline at end of file diff --git a/html/_sources/templates/meeting_notes_template.md.txt b/html/_sources/templates/meeting_notes_template.md.txt new file mode 100644 index 0000000..da255ed --- /dev/null +++ b/html/_sources/templates/meeting_notes_template.md.txt @@ -0,0 +1,21 @@ +# Weekly *X*: DD.MM.YYYY + +## Teilnehmer +- Prof. Arinir +- Tristan Nolde +- Tim Ronneburg +- Phillip Horstenkamp +- Kim Mesewinkel-Risse +- Sascha Zhu +- Sebastian Zeleny + +## Themen + +- ABC: + - ... + +## Abgeleitete Action Items + +| Action Item | Verantwortlicher | Deadline | +|-------------|------------------|-----------------| +| Beispiel | Max Mustermann | nächstes Weekly | diff --git a/html/_sources/timeline.md.txt b/html/_sources/timeline.md.txt new file mode 100644 index 0000000..02aaca5 --- /dev/null +++ b/html/_sources/timeline.md.txt @@ -0,0 +1,71 @@ +# Timeline +```{mermaid} + + gantt + + title Timeline PG Transparenzregister + dateFormat YYYY-MM-DD + section Organisation + Kennenlernen des Projektteams : done, a1, 2023-03-30, 1d + Erstellen des Organigramms : done, after a1 , 1d + GitHub : done, 2023-04-06, 7d + Zeitplanung SoSe : active , 2023-04-06, 7d + + section Dokumentation + Meeting Notes: active, 2023-03-30, 10w + Seminarthemen: active, 2023-04-13, 8w + Lastenheft: active, 2023-04-06, 5w + Pflichtenheft: milestone, 2023-05-11 + Reserve: crit, 2023-06-08, 1w + + + section Meeting + Weekly 1 : done, 2023-03-30, 0.5h + Statustermin 1 : done ,2023-03-30 , 1h + Weekly 2 : done, 2023-04-06, 2h + + Statustermin 2 : active, 2023-04-13, 1h + Weekly 3 : active, 2023-04-13, 0.5h + Weekly 4 : active, 2023-04-20, 2h + + Weekly 5 : active, 2023-04-27, 0.5h + Statustermin 3 : active, 2023-04-27, 1h + + Weekly 6 : active, 2023-05-04, 2h + + Weekly 7 : active, 2023-05-11, 0.5h + Statustermin 4 : active, 2023-05-11, 1h + + Weekly 8 : active, 2023-05-18, 2h + Weekly 9 : active, 2023-05-25, 0.9h + Statustermin 5 : active, 2023-05-25, 1h + + Weekly 10 : active, 2023-06-01, 2h + Weekly 11 : active, 2023-06-01, 0.9h + Statustermin 6 : active, 2023-06-08, 1h + + section Recherche + Unternehmensformen : active, 2023-04-06, 14d + Kennzahlen : active, 2023-04-10, 14d + Datenquellen : active, 2023-04-10, 14d + rechtliche Verwendbarkeit: active, 2023-04-06, 18d + Verwendete Metriken, Datenquellen, Rechtmäßigkeit: milestone, 2023-04-24 + Reserve: crit, 2023-04-24, 3d + + section Definition + fachl. Aufgabe : active, 2023-04-27, 1d + techn. Aufgabe : active, 2023-04-27, 1d + Funktionelle Anf. : active, 2023-04-27, 7d + Qualitative Anf. : active, 2023-04-27, 7d + Modell: active, 2023-05-04, 7d + Hierarchie: active, 2023-05-04, 7d + Definition der Anforderungen : milestone, 2023-05-11 + Reserve: crit, 2023-05-11, 1w + + section Proof of concept + Project Proposal : active, 2023-05-18, 10d + Vorstellung Project Proposal: milestone, 2023-05-28 + Implementierung des Proposals: active, 2023-05-25, 14d + Vorstellung Proof of Concept: milestone, 2023-06-08 + Reserve: crit, 2023-06-08, 1w +``` diff --git a/html/_static/_sphinx_javascript_frameworks_compat.js b/html/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000..8141580 --- /dev/null +++ b/html/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/html/_static/basic.css b/html/_static/basic.css new file mode 100644 index 0000000..7577acb --- /dev/null +++ b/html/_static/basic.css @@ -0,0 +1,903 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/html/_static/check-solid.svg b/html/_static/check-solid.svg new file mode 100644 index 0000000..92fad4b --- /dev/null +++ b/html/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/html/_static/clipboard.min.js b/html/_static/clipboard.min.js new file mode 100644 index 0000000..54b3c46 --- /dev/null +++ b/html/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/html/_static/copybutton.css b/html/_static/copybutton.css new file mode 100644 index 0000000..f1916ec --- /dev/null +++ b/html/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/html/_static/copybutton.js b/html/_static/copybutton.js new file mode 100644 index 0000000..2ea7ff3 --- /dev/null +++ b/html/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/html/_static/copybutton_funcs.js b/html/_static/copybutton_funcs.js new file mode 100644 index 0000000..dbe1aaa --- /dev/null +++ b/html/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/html/_static/css/badge_only.css b/html/_static/css/badge_only.css new file mode 100644 index 0000000..c718cee --- /dev/null +++ b/html/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/html/_static/css/fonts/Roboto-Slab-Bold.woff b/html/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000..6cb6000 Binary files /dev/null and b/html/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/html/_static/css/fonts/Roboto-Slab-Bold.woff2 b/html/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 0000000..7059e23 Binary files /dev/null and b/html/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/html/_static/css/fonts/Roboto-Slab-Regular.woff b/html/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000..f815f63 Binary files /dev/null and b/html/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/html/_static/css/fonts/Roboto-Slab-Regular.woff2 b/html/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 0000000..f2c76e5 Binary files /dev/null and b/html/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/html/_static/css/fonts/fontawesome-webfont.eot b/html/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/html/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/html/_static/css/fonts/fontawesome-webfont.svg b/html/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/html/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/html/_static/css/fonts/fontawesome-webfont.ttf b/html/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/html/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/html/_static/css/fonts/fontawesome-webfont.woff b/html/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/html/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/html/_static/css/fonts/fontawesome-webfont.woff2 b/html/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/html/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/html/_static/css/fonts/lato-bold-italic.woff b/html/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 0000000..88ad05b Binary files /dev/null and b/html/_static/css/fonts/lato-bold-italic.woff differ diff --git a/html/_static/css/fonts/lato-bold-italic.woff2 b/html/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000..c4e3d80 Binary files /dev/null and b/html/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/html/_static/css/fonts/lato-bold.woff b/html/_static/css/fonts/lato-bold.woff new file mode 100644 index 0000000..c6dff51 Binary files /dev/null and b/html/_static/css/fonts/lato-bold.woff differ diff --git a/html/_static/css/fonts/lato-bold.woff2 b/html/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000..bb19504 Binary files /dev/null and b/html/_static/css/fonts/lato-bold.woff2 differ diff --git a/html/_static/css/fonts/lato-normal-italic.woff b/html/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 0000000..76114bc Binary files /dev/null and b/html/_static/css/fonts/lato-normal-italic.woff differ diff --git a/html/_static/css/fonts/lato-normal-italic.woff2 b/html/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 0000000..3404f37 Binary files /dev/null and b/html/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/html/_static/css/fonts/lato-normal.woff b/html/_static/css/fonts/lato-normal.woff new file mode 100644 index 0000000..ae1307f Binary files /dev/null and b/html/_static/css/fonts/lato-normal.woff differ diff --git a/html/_static/css/fonts/lato-normal.woff2 b/html/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 0000000..3bf9843 Binary files /dev/null and b/html/_static/css/fonts/lato-normal.woff2 differ diff --git a/html/_static/css/theme.css b/html/_static/css/theme.css new file mode 100644 index 0000000..19a446a --- /dev/null +++ b/html/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/html/_static/doctools.js b/html/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/html/_static/documentation_options.js b/html/_static/documentation_options.js new file mode 100644 index 0000000..e49ed18 --- /dev/null +++ b/html/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '0.1.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/html/_static/file.png b/html/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/html/_static/file.png differ diff --git a/html/_static/jquery.js b/html/_static/jquery.js new file mode 100644 index 0000000..c4c6022 --- /dev/null +++ b/html/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/html/_static/js/html5shiv.min.js b/html/_static/js/html5shiv.min.js new file mode 100644 index 0000000..cd1c674 --- /dev/null +++ b/html/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/html/_static/js/theme.js b/html/_static/js/theme.js new file mode 100644 index 0000000..1fddb6e --- /dev/null +++ b/html/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/html/_static/minus.png b/html/_static/minus.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/html/_static/minus.png differ diff --git a/html/_static/plus.png b/html/_static/plus.png new file mode 100644 index 0000000..7107cec Binary files /dev/null and b/html/_static/plus.png differ diff --git a/html/_static/pygments.css b/html/_static/pygments.css new file mode 100644 index 0000000..08bec68 --- /dev/null +++ b/html/_static/pygments.css @@ -0,0 +1,74 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/html/_static/searchtools.js b/html/_static/searchtools.js new file mode 100644 index 0000000..97d56a7 --- /dev/null +++ b/html/_static/searchtools.js @@ -0,0 +1,566 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/html/_static/sphinx_highlight.js b/html/_static/sphinx_highlight.js new file mode 100644 index 0000000..aae669d --- /dev/null +++ b/html/_static/sphinx_highlight.js @@ -0,0 +1,144 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(SphinxHighlight.highlightSearchWords); +_ready(SphinxHighlight.initEscapeListener); diff --git a/html/aki_prj23_transparenzregister.black_test.html b/html/aki_prj23_transparenzregister.black_test.html new file mode 100644 index 0000000..55ea091 --- /dev/null +++ b/html/aki_prj23_transparenzregister.black_test.html @@ -0,0 +1,149 @@ + + + + + + + aki_prj23_transparenzregister.black_test module — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

aki_prj23_transparenzregister.black_test module

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/aki_prj23_transparenzregister.flake8_test.html b/html/aki_prj23_transparenzregister.flake8_test.html new file mode 100644 index 0000000..52ecea9 --- /dev/null +++ b/html/aki_prj23_transparenzregister.flake8_test.html @@ -0,0 +1,147 @@ + + + + + + + aki_prj23_transparenzregister.flake8_test module — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

aki_prj23_transparenzregister.flake8_test module

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/aki_prj23_transparenzregister.html b/html/aki_prj23_transparenzregister.html new file mode 100644 index 0000000..a98461a --- /dev/null +++ b/html/aki_prj23_transparenzregister.html @@ -0,0 +1,162 @@ + + + + + + + aki_prj23_transparenzregister package — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

aki_prj23_transparenzregister package

+
+

Submodules

+ +
+
+

Module contents

+

A project analysing the german transparenzregister and other data sources.

+

to find shared business interests and shared personal and other links for lots of companies

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/genindex.html b/html/genindex.html new file mode 100644 index 0000000..3148e64 --- /dev/null +++ b/html/genindex.html @@ -0,0 +1,173 @@ + + + + + + Index — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ A + | M + +
+

A

+ + + +
    +
  • + aki_prj23_transparenzregister + +
  • +
    +
  • + aki_prj23_transparenzregister.black_test + +
  • +
+ +

M

+ + +
+ + + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..1322bca --- /dev/null +++ b/html/index.html @@ -0,0 +1,292 @@ + + + + + + + Transparenzregister Documentation — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Transparenzregister Documentation

+

This is the documentation for the AKI project group on the german transparenzregister and an Analysis there of.

+ + + + +
+
+

Indices and tables

+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/meeting-notes/Meeting_2023-03-30.html b/html/meeting-notes/Meeting_2023-03-30.html new file mode 100644 index 0000000..8d42fcb --- /dev/null +++ b/html/meeting-notes/Meeting_2023-03-30.html @@ -0,0 +1,273 @@ + + + + + + + Weekly 1: 30.03.2023 — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Weekly 1: 30.03.2023

+
+

Teilnehmer

+
    +
  • Prof. Arinir

  • +
  • Tristan Nolde

  • +
  • Tim Ronneburg

  • +
  • Philipp Horstenkamp

  • +
  • Kim Mesewinkel-Risse

  • +
  • Sascha Zhu

  • +
  • Sebastian Zeleny (Protokollant)

  • +
+
+
+

Themen

+
    +
  • Inhalt des Project Proposals:

    +
      +
    • Mit welchen Metriken können Unternehmen bewertet werden?

    • +
    • Was sind Kennzahlen von Kapitalgesellschaften?

    • +
    • Welche Daten werden benötigt?

    • +
    • Woher erhält man benötigte Daten? (Amtsgerichte –> Insolvenzen, Börsenkurse, Aktienkurse, RSS-Feeds von/zu Unternehmen)

    • +
    • Wie werden die Daten verarbeitet?

    • +
    • Wie können die Daten bzw. Ergebnisse präsentiert werden?

    • +
    • Verflechtungen zwischen Unternehmen: Geschäftsführer, Wirtschaftsprüfer

    • +
    +
  • +
  • Anforderungen an Projektdurchführung:

    +
      +
    • Backlog für Ideen und Aufgaben

      +
        +
      • Meeting-Notes mit besprochenen Themen, Entscheidungen, Terminen und Action-List (Wer arbeitet an welcher Aufgabe?)

      • +
      • Projektdurchführung so formal wie möglich, d.h.

        +
          +
        • Beschreibung des Systemkontexts: Interaktion mit der Umgebung

          +
            +
          • Datenmodell: schematische Darstellung der Datenflüsse

          • +
          • Lasten- / Pflichtenheft mit Kategorisierung

          • +
          +
        • +
        +
      • +
      +
    • +
    • Vorschlag Frontend von Prof. Arinir: D3.js

    • +
    +
  • +
  • Bewertung des Projekts:

    +
      +
    • Es muss erkennbar sein, wer welche Aufgabe bearbeitet hat

    • +
    • Jeder Teilnehmer soll die Aufgaben der anderen Teilnehmer kennen und ein Verständnis für diese haben (kein tiefes Domänenwissen!)

    • +
    • Gesamtplanung und Dokumentation sind Teil das Ergebnis, nicht nur die technische Umsetzung

    • +
    • Bewertungsschlüssel:

    • +
    +
  • +
+ + + + + + + + + + + + + + + + + + + + + + + +

Gewichtung

Aufgabe

20%

Vortrag Seminararbeit

20%

Präsentation

30%

Implementierung

20%

Finaler Bericht (~15 Seiten pro Teilnehmer)

10%

Abschlusspräsentation

+
    +
  • Organisatorisches:

    +
      +
    • Regeltermin alle 14 Tage mit allen Projektteilnehmern, beginnend am 30.03.2023: Dieser Termin soll für Sprint Planning und Review mit Prof. Arinir genutzt werden.

    • +
    • Was ist die Erwartungshaltung des Product Owners?

      +
        +
      • Welche Themen/Aufgaben werden bearbeitet?

      • +
      • Was ist das Ziel für das nächste Review?

      • +
      +
    • +
    • Projektbearbeitung/Dokumentation mit Github

    • +
    • Bereitstellung des Github-Repos über FH

    • +
    +
  • +
+
+
+

Abgeleitete Action Items

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Action Item

Verantwortlicher

Deadline

Welche Anforderungen / Erwartungen stellen wir inhaltlich und technisch an das Projekt?

alle

nächstes Weekly/work in progress

Erarbeiten von Arbeitspaketen/Aufgaben aus Anforderungen

alle

nächstes Weekly/work in progress

Welche Metriken sind notwendig?

alle

nächstes Weekly/work in progress

Recherche zu Datenquellen

alle

nächstes Weekly/work in progress

Definition von Meilensteinen

alle

nächstes Weekly

Erstellung eines (groben) Zeitplans

alle

nächstes Weekly

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/meeting-notes/Meeting_2023-04-13.html b/html/meeting-notes/Meeting_2023-04-13.html new file mode 100644 index 0000000..6544155 --- /dev/null +++ b/html/meeting-notes/Meeting_2023-04-13.html @@ -0,0 +1,261 @@ + + + + + + + Weekly 2: 13.04.2023 — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Weekly 2: 13.04.2023

+
+

Teilnehmer

+
    +
  • Prof. Arinir

  • +
  • Tristan Nolde

  • +
  • Tim Ronneburg (Protokollant)

  • +
  • Philipp Horstenkamp

  • +
  • Kim Mesewinkel-Risse

  • +
  • Sascha Zhu

  • +
  • Sebastian Zeleny

  • +
+
+
+

Themen

+
    +
  • Seminarthemen:

    +
      +
    • Themen die im Zuge der Implementierung erarbeitet werden

    • +
    • Themen:

      +
        +
      • Textmining (Ontologien)

      • +
      • Semantische Suche

      • +
      +
    • +
    • Anmeldungsformular:

      +
        +
      • Jeder sendet das Formular selbst an Herrn Arinir

      • +
      • Projektauftakt: 30.03.2023

      • +
      • Enddatum: 15.02.2024

      • +
      • Titel: Transparanzregister Kapitalgeselschaften

      • +
      +
    • +
    +
  • +
  • Vorstellung der Ergebnisse des letzten Sprints:

    +
      +
    • Erstellung des GitHubs Projekts

    • +
    • Anlegen eines Protokolltemplates

    • +
    • Interne Meetings jeden Donnerstag

    • +
    • Timeline erstellt mit Mermaid.js in Markdown (Sebastian)

    • +
    • Recherche zum Datenschutz / Urheberrecht: Welche Daten aus den Datenbanken dürfen offline oder online benutzt werden. (Sascha)

      +
        +
      • Für die eigene Forschung: 75 % der Daten dürfen genutzt werden

        +
          +
        • 15 % Wenn es an Dritte weitergeleitet werden

        • +
        +
      • +
      • Wenn wir die Ergebnisse veröffentlichen müssen die Vorgaben der Datenbanken beachten

      • +
      • Hinweis von Herrn Arinir: Das ist als Vorschungsprojekt zu sehen

        +
          +
        • Die Ergebnisse werden nicht veröffentlicht

        • +
        • nur die Vorgehensweise wird als Paper veröffentlicht

        • +
        +
      • +
      +
    • +
    • Recherche zu Unternehmenskennzahlen (Kim)

      +
        +
      • Hinweis: Für Tendenzanalysen sollen zeitliche Veränderungen erfasst werden (Timescale Datenbank)

      • +
      • Vierteljährliche Daten reichen aus

      • +
      +
    • +
    • Recherche zu den verfügbaren Datengrundlagen (Phillip und Tristan)

    • +
    • Anlegen eines Pflichtenhefts mit den Anforderungen an das Projekt (Tim)

    • +
    +
  • +
  • Organisatorisches:

    +
      +
    • Es muss noch ein Projekt angelegt werden für das GitHub Repository mit einem Board zur Projektorganisation

      +
        +
      • Im Meeting erledigt

      • +
      +
    • +
    +
  • +
  • Recherche:

    +
      +
    • Nicht nur auf Kennzahlen eingehen, sondern auch auf die Berichterstattung eingehen

    • +
    • Dazu sollen die Technologieauswahl recherchiert werden (Trendanalyse von Nachrichten, Finanztreff, Twitter etc.)

    • +
    +
  • +
+
+
+

Abgeleitete Action Items

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Action Item

Verantwortlicher

Deadline

Rechechieren welche Nachrichtenquellen (Aktuelle und “Alte” Nachrichten) genutzt werden können

Sascha und Tim

27.04.2023

Recherchieren welche Technologien zur Auswertung der Nachrichtenqullen genutzt werden können (z.b. Sentiment Analyse)

Philipp und Kim

27.04.2023

Beschäftigen mit Historien (Timescale Datenbank)

Tristan und Sebastian

27.04.2023

Festlegen von Kriterien wann ein Artikel positiv oder negativ zu bewerten ist

Sascha

Ende offen

Abgabe des Anmeldeformulars zum Projekt

alle

20.04.2023

Liste mit geeignetetn Metriken

Herr Arinir

27.04.2023

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/meeting-notes/Meeting_2023-05-04.html b/html/meeting-notes/Meeting_2023-05-04.html new file mode 100644 index 0000000..af294bb --- /dev/null +++ b/html/meeting-notes/Meeting_2023-05-04.html @@ -0,0 +1,219 @@ + + + + + + + Weekly 3: 04.05.2023 — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Weekly 3: 04.05.2023

+
+

Teilnehmer

+
    +
  • Prof. Arinir

  • +
  • Tristan Nolde

  • +
  • Tim Ronneburg

  • +
  • Phillip Horstenkamp

  • +
  • Kim Mesewinkel-Risse

  • +
  • Sascha Zhu

  • +
  • Sebastian Zeleny

  • +
+
+
+

Themen

+
+

Organisatorische Absprachen:

+

Gelten die Seminarthemen als Zwischenprüfung? In welcher Form?

+
    +
  • Herr Giefers hat Seminarthemen im Vorfeld definiert, in unserer Gruppe gab es eine offene Einarbeitung in die Forschungs- und Entwicklungsarbeit

  • +
  • Geplanter Umfang: Seminararbeit 15-20 Seiten (Rücksprache mit Herrn Giefers und Herrn Gawron durch Herrn Arinir, Feedback beim nächsten Termin) und Vortrag mit Folien oder anderen Quellen (z.B. Quellcode) ca. 15-20 Minuten im Rahmen eines JF Termins (keine Vorstellung im Plenum)

  • +
  • Die Seminararbeiten werden benotet (20% der Endnote), die Ausarbeitung und der Vortrag zählen dabei zu jeweils 50%

  • +
+

Wie lautet der zeitliche Rahmen?

+
    +
  • Keine feste Deadline vorgegeben, Absprache innerhalb der Projektgruppe ausreichend

  • +
  • Vortrag: Einigung auf zwei Termine Ende Juni/Anfang Juli -> Thema 1-3 am 22.06.2023 und Thema 4-6 am 06.07.2023

  • +
  • Seminararbeit: Abgabe voraussichtlich Ende des Sommersemesters, potentiell auch zu einem späteren Zeitpunkt möglich

  • +
+

Welche Themenbereiche sollen behandelt werden?

+
    +
  • Die erste kurze Beschreibung der 6 Themenbereiche/Domänen wurde durch Herrn Arinir als positiv befunden

  • +
  • Zur Eingrenzung der Themen und für ein konkreteres Feedback soll für jeden Themenbereich beim nächsten JF am 11.05.2023 ein Abstract vorgestellt werden

  • +
  • Grundsätzlich sollen die Themen nicht zu oberflächlich behandelt werden, sondern explizit auf Techniken zur Umsetzung eingegangen werden

  • +
+

Einigung auf Änderungen im Bereich Projektorganisation:

+
    +
  • Aufnahme des zeitlichen Ablaufs der Tickets in die Meeting Notes -> Screenshot des Projects in Protokoll mit aufnehmen

  • +
  • Start-, Enddaten und Labels der Tickets besser pflegen

  • +
+

Sonstiges:

+
    +
  • Urlaubszeiten Herr Prof. Arinir: 17.07.-01.08.2023

  • +
+
+
+
+

Abgeleitete Action Items

+ + + + + + + + + + + + + + + + + + + + + +

Action Item

Verantwortlicher

Deadline

Abstract pro Thema

Alle

nächstes Weekly

Folienvorlage für den Seminarvortrag

Alle

nächstes Weekly

Rückmeldung zum Umfang der Seminararbeit

Prof. Arinir

nächstes Weekly

+
+
+

Aktueller Projektstand

+

alt text

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/meeting-notes/Meeting_2023-05-11.html b/html/meeting-notes/Meeting_2023-05-11.html new file mode 100644 index 0000000..fe016ea --- /dev/null +++ b/html/meeting-notes/Meeting_2023-05-11.html @@ -0,0 +1,273 @@ + + + + + + + Weekly 4: 11.05.2023 — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Weekly 4: 11.05.2023

+
+

Teilnehmer

+
    +
  • Prof. Arinir

  • +
  • Tristan Nolde

  • +
  • Tim Ronneburg

  • +
  • Phillip Horstenkamp

  • +
  • Kim Mesewinkel-Risse

  • +
  • Sascha Zhu

  • +
  • Sebastian Zeleny

  • +
+
+
+

Themen

+
+

Organisatorische Absprachen zum Umfang und Inhalt der Seminararbeit:

+
    +
  • Herr Arinir wird sich nochmal wegen des Umfangs der Seminararbeit bei unserer Gruppe melden

  • +
  • In der Seminarbeit sollen Anforderungen und Lösungsskizzen für das Projekt “Transparenzregister” dargestellt werden.

  • +
  • Die Seminarabeit soll aus einem theoretischen Teil und einem praktischen Teil, in dem der praktische Nutzen für das Projekt “Transparenzregister” erörtert wird, bestehen; ob das Verhältnis zwischen dem theoretischen und praktischen Teil bei 50:50 oder 40:60 liegt, darüber können die Verfaser der Seminararbeit selbst entscheiden

  • +
  • Der Fokus der Seminarbeit soll stets danach ausgerichtet werden, wie die entsprechenden Aspekte bzw. die entsprechenden Technologien für das Projekt “Transparenzregister” genutzt werden können.

  • +
+
+
+

Vorstellung des Abstracts der Seminararbeit zu “Dev Ops” (Philipp Horstenkamp):

+

Abstract siehe Datei in github.

+

Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert:

+
    +
  • Eine sehr straffe Pipeline, die für Seriensoftware in Ordnung wäre, könnte uns für unser Projekt zu sehr „fesseln“ bzw. einschränken.

  • +
  • Es wäre zu überlegen, ob die Software-Entwicklung, wie diese früher ablief, mit der Software-Entwicklung von heute (u.a. mit den Automatisierungsmöglichkeiten von heute) gegenübergestellt werden soll, um daraus zunächst eine Strategie für unser Projekt zu entwickeln, bevor man sich vertieft mit DevOps beschäftigt

  • +
  • Die Verwendung von CI/CD (Continuous Integration/Continuous Delivery)-Pipelines für KI-Projekte wäre ein interessantes Thema.

  • +
+
+
+

Vorstellung des Abstracts der Seminararbeit zu “Automatisierte Datenextraktion aus Internetquellen als Grundlage für die Analyse von Kapitalgesellschaften” (Tristan Nolde):

+

Abstract siehe Datei in github.

+

Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert:

+
    +
  • Pros und Cons von WebScraping gegenüber RSS-Feeds und gegenüber der API-Lösung sollen dargestellt werden

  • +
  • Die Quelle E-Mail-Newsletter (z.B. vom Handelsblatt) könnte ebenfalls interessant sein, jedoch muss hierfür möglicherweise ein separater E-Mail-Account erstellt werden, was eher aufwändig ist

  • +
  • Es wäre eventuell zu prüfen, ob auch Daten aus LinkedIn API, XING oder Facebook extrahiert werden könnten.

  • +
+
+
+

Vorstellung des Abstracts der Seminararbeit zu “Datenspeicherung” (Sebastian Zeleny):

+

Abstract siehe Datei in github.

+

Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert:

+
    +
  • Bei der Wahl der Datenbank müssen verschiedene Anforderungen berücksichtigt werden, mit hohem Abstimmungsbedarf zwischen den Topics “Datenextraktion” und “Datenvisualisierung”

  • +
  • Herr Prof. Arinir fragte noch, ob wir das Thema “relationale Datenbanken” als Modul behandelt haben. Dies wurde bejaht, insbesondere SQL Datenbanken und SQL queries waren Gegenstand des Moduls “Datenbankprogrammierung”

  • +
+
+
+

Vorstellung des Abstracts der Seminararbeit zu “Verpflechtungsanalyse” (Tim Ronneburg):

+

Abstract siehe Datei in github.

+

Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert:

+
    +
  • Beim Social Graph wäre zu überlegen, nicht nur Beziehungen zwischen Unternehmen via Personen (z.B. Wirtschaftsprüfer), sondern auch Beziehungen zwischen Unternehmen via Kooperationspartner (Stiftungen, Unis, Forschungsinstitute) bzw. Eigentums-, Kunden- und Lieferbeziehungen darzustellen

  • +
  • Beim Social Graph wäre zu überlegen, ob man nach Art der Beziehung filtern könnte

  • +
+
+
+

Vorstellung des Abstracts der Seminararbeit zu “Text Mining” (Sascha Zhu):

+

Abstract siehe Datei in github.

+

Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert:

+
    +
  • Bei den Sentiment-Analyse-Tools wie FinBERT oder VADER wäre stets eine maschinelle Übersetzung der deutschen Nachrichtentexte ins Englische erforderlich, da FinBERT oder VADER keine deutschen Texte erkennen können

  • +
  • Die Generierung von Ontologien ist zu komplex und soll nicht Gegenstand der Projektarbeit sein

  • +
  • Bei der semantischen Textanalyse wäre empfehlenswert, dass dies über “Einzel-Personen” ausgeführt wird (das wäre dann ein Punkt im Graphen)

  • +
  • Das Thema “Named Entity Recognition” wird für die Projektarbeit eine hohe Bedeutung haben

  • +
+
+
+

Vorstellung des Abstracts der Seminararbeit zu “Datenvisualisierung” (Kim Mesewinkel-Risse):

+

Abstract siehe Datei in github.

+

Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert:

+
    +
  • Bei der Datenvisualisierung wäre zu überlegen, dass man sich nur auf Python-Bibliotheken beschränkt

  • +
  • Die Datenabfrage könnte über SQL oder Spark laufen, eine Schnittstelle zwischen dem Speicher und dem Front-End wird benötigt

  • +
  • Zwischen Daten und der Datenvisualisierung werden eventuell Zwischen-Caches benötigt

  • +
  • Bezüglich der Frage nach der „Middleware“: Wenn Plotly oder Plotly Dash verwendet wird, wird keine Middleware benötigt, da dies schon eingebaut ist.

  • +
+
+
+

Feedback von Herrn Prof. Arinir:

+
    +
  • Es scheint noch kein Gesamtkonzept für das Gewerk vorzuliegen.

  • +
  • Wir sollten uns die Frage stellen: Was soll am Ende für “ein brauchbares Stück Software” herauskommen, damit der Anwender mit der Vielzahl von Informationen und Funktionen zurechtkommt.

  • +
  • Eine Lösungsskizze muss definiert werden, wobei ein Pflichtenheft jetzt noch nicht erforderlich ist

  • +
  • Es sollen zunächst einige GUI-Designs (mit einem Muster-Datensatz) entwickelt werden.

  • +
  • Pros und Cons zwischen einem Wasserfallmodell (Pflichtenheft mit bis zu 1000 Seiten) und der agilen Modellierung sollen berücksichtigt werden.

  • +
  • Wie sollen die Verflechtungen eingebaut werden?

  • +
  • Wie sollen die Daten persistiert werden?

  • +
  • Es wäre empfehlenswert, mit irgendetwas (d.h. einer kleinen Lösung) anzufangen, dann das Ergebnis anzuschauen, und diese kontinuierlich zu verbessern.

  • +
+
+
+
+

Abgeleitete Action Items

+ + + + + + + + + + + + + + + + + +

Action Item

Verantwortlicher

Deadline

GUI Designs

Alle

nächstes Weekly

Rückmeldung zum Umfang der Seminararbeit

Prof. Arinir

nächstes Weekly

+
+
+

Aktueller Projektstand

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/meeting-notes/Meeting_2023_05-25.html b/html/meeting-notes/Meeting_2023_05-25.html new file mode 100644 index 0000000..22c4bd4 --- /dev/null +++ b/html/meeting-notes/Meeting_2023_05-25.html @@ -0,0 +1,193 @@ + + + + + + + Weekly 5: 25.05.2023 — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Weekly 5: 25.05.2023

+
+

Teilnehmer

+
    +
  • Prof. Arinir

  • +
  • Tristan Nolde

  • +
  • Tim Ronneburg

  • +
  • Philipp Horstenkamp

  • +
  • Kim Mesewinkel-Risse

  • +
  • Sascha Zhu

  • +
  • Sebastian Zeleny

  • +
+
+
+

Themen

+
    +
  • Nächster Termin am 08.06.2023 ist Fronleichnam => Verschoben auf 09.06.2023 09:00

  • +
  • Sebastian präsentiert das Miro Bord mit den Wireframediagrammen. Siehe Anlage

  • +
  • Philipp präsentiert den Sozial graph

  • +
  • Sebastian präsentiert die Unternehmensdetails in sicht auf die Kennzahlen

  • +
  • Sebastian dankt Kim für das Überarbeiten der Graphen im Farbschema

  • +
  • Sebastian zeigt die anderen Übersichten

    +
      +
    • Sascha weist darauf hin das zusätzlich noch das Quellmaterial für die Stimmungen mit angezeigt werden sollen.

    • +
    • Die Form ist bisher noch unklar.

    • +
    +
  • +
  • Arinir: Auch indirekte verpflächtungen für N sprünge sollen bei den Details angezeigt werden und einen wert für den Einfluss von personen und Firmen sein.

    +
      +
    • Zähle die Personenverbindungen juristisch/Natürlich getrennt nach den schichten der Indirektion. Interessant wäre eine auftrennung der natürlichen und Jiristischen personen in der Zählung

    • +
    • Ranking der Personen nach Anzahl der Verbindungen

    • +
    +
  • +
  • Die Frage wie wir zeitliche veränderungen im sozial graph bewerten sollen kam auf. Wurde aber noch nicht abschließend beantwortet.

  • +
+
+
+

Abgeleitete Action Items

+ + + + + + + + + + + + + +

Action Item

Verantwortlicher

Deadline

Erster entwurf der Seminarpräsentationen

Alle

nächstes Weekly

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/modules.html b/html/modules.html new file mode 100644 index 0000000..970c7dd --- /dev/null +++ b/html/modules.html @@ -0,0 +1,152 @@ + + + + + + + aki_prj23_transparenzregister — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/html/objects.inv b/html/objects.inv new file mode 100644 index 0000000..15b5d1f Binary files /dev/null and b/html/objects.inv differ diff --git a/html/py-modindex.html b/html/py-modindex.html new file mode 100644 index 0000000..bc1f254 --- /dev/null +++ b/html/py-modindex.html @@ -0,0 +1,154 @@ + + + + + + Python Module Index — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ a +
+ + + + + + + + + + +
 
+ a
+ aki_prj23_transparenzregister +
    + aki_prj23_transparenzregister.black_test +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/research/RE_Vom-Problem-zur-Loesung.html b/html/research/RE_Vom-Problem-zur-Loesung.html new file mode 100644 index 0000000..b350171 --- /dev/null +++ b/html/research/RE_Vom-Problem-zur-Loesung.html @@ -0,0 +1,194 @@ + + + + + + + Von der Problemstellung zum Lösungskonzept — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Von der Problemstellung zum Lösungskonzept

+

Um ein Softwaresystem für das Transparenzregister implementieren zu können, ist es notwendig Anforderungen zu formulieren. Diese legen die Eigenschaften der Software fest und werden benötigt, um die fachliche und technische Lösung zu modellieren / entwerfen und ein Produkt zu implementieren.

+

Zu Beginn sind die Anforderungen wenig eingeschränkt (“Benötigt wird eine Möglichkeit Daten zu speichern.”), im Verlauf der Modellierung wird der Lösungsraum eingeschränkt (“Es bietet sich eine Datenbanklösung oder Dateiablage an.”) und abschließend auf eine zu implementierende Lösung festgelegt (“Die Software verwendet ein relationales Modell unter Verwendung einer SQLite Datenbank.”).

+
+

Requirements Engineering Transparenzregister

+

Unser Weg zum Pflichtenheft und zur Spezifikation der Systemanforderungen ist folgend dargestellt. +Von unspezifizierten Anforderungen werden wir immer konkreter und beantworten iterativ die Fragen Was ist das Problem/Anforderung? und Wie lösen wir das Problem/Anforderung?.

+
+

1. Anforderungen aus Projektvorstellung

+
    +
  • Entwicklung einer Software zur Darstellung von Unternehmenskennzahlen und Verbindungen.

  • +
  • Ermittlung der 100 größten deutschen und europäischen Unternehmen

  • +
  • Auswahl geeigneter Metriken

  • +
  • Auswahl geeigneter Quellen

  • +
  • Die erhobenen Daten müssen visualisiert werden (evtl. durch ein Netz, wenn es Verbindungen sind)

  • +
  • Die erhobenen Daten müssen nach Unternehmen und Personen durchsuchbar sein.

  • +
+
+
+

2. Identifikation von Anforderungen innerhalb der Gruppe

+
    +
  • Es werden Datenquellen benötigt, um Unternehmenskennzahlen ermitteln zu können.

  • +
  • Es werden Datenquellen benötigt, um über die öffentliche Darstellung der Unternehmen zu erfahren.

  • +
  • Es werden Werkzeuge benötigt, um Sentimentanalyse über Unternehmen durchzuführen.

  • +
  • Die rechtmäßige Verwendung der Daten muss geklärt werden.

  • +
  • Die ermittelten Daten müssen gespeichert werden.

  • +
  • Es werden Werkzeuge benötigt, um Text Mining zu betreiben.

  • +
+
+
+

3. Identifikation von Domänen zur Lösungsfindung

+

Aus den Anforderungen der Projektvorstellung und der Projektgruppe wurden sechs Domänen identifiziert, welche benötigt werden, um ein Softwaresystem für Transparenzregister zu erarbeiten. +Um das benötigte Domänenwissen zu vertiefen, bearbeitet jedes Mitglied ein Cluster.

+
+
+

4. technische/fachliche Lösungen

+

Mit dem Domänenwissen können technische und fachliche Lösungen definiert werden (“Zur Datenspeicherung von Unternehmenskennzahlen ist xy notwendig, weil abc.”) und erste Modelle (z.B. GUI-Modell) erstellt werden.

+
+
+

5. Priorisierung von Anforderungen

+

Die Gruppe diskutiert die Anforderungen und legt eine Priorisierung fest.

+
+
+

6. Pflichtenheft

+

Das Team legt sich mit dem Pflichtenheft auf einen definierten Umfang und konkrete Inhalte der Lösung fest. Es wird in Muss- und *Kann-*Anforderungen unterschieden. +Das Pflichtenheft ist das Project Proposal.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/research/Timeseries/Overview.html b/html/research/Timeseries/Overview.html new file mode 100644 index 0000000..5ce1ae6 --- /dev/null +++ b/html/research/Timeseries/Overview.html @@ -0,0 +1,192 @@ + + + + + + + Timeseries (deutsch: Zeitreihen) im Kontext des Transparenzregisters Kapitalgesellschaften — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + View page source +
  • +
+
+
+
+
+ +
+

Timeseries (deutsch: Zeitreihen) im Kontext des Transparenzregisters Kapitalgesellschaften

+
+

Leitfragen

+
    +
  1. Was zeichnet Timeseries Daten aus?

  2. +
  3. Wie werden Timeseries effizient gespeichert?

  4. +
  5. Welche Daten sind für den vorstehenden Use Case relevant und wie werden diese möglichts optimal (gemäß Software Qualitätskriterien wie Skalierbarkeit u.ä.) modelliert?

  6. +
  7. Passt die Struktur und Handhabung von Timeseries Daten auf den Use Case?

  8. +
  9. Wo können die benötigten Daten abgerufen werden?

  10. +
  11. Wie könnte ein beispielhafter Datensatz (ggf. in Form eines Pandas DataFrames) aussehen?

  12. +
+
+
+

Timeseries

+

Hinter Timeseries (oder Zeitreihen) verbergen sich Datenpunkte meistens numerischer Natur aber auch andere Datentypen sind möglich, die Werte einer Kennzahl oder Entität entlang der Zeit-Achse darstellen. Nennenswerte Beispiele sind die Herzfrequenz eines Menschen sowie Aktienkurse börsennotierter Unternehmen. Es wird generell zwischen Metriken (engl.: Metrics; bei regelmäßigem Intervall) und Ereignissen (engl.: Events; bei unregelmäßigen Intervallen) unterschieden.

+

vgl. influxdata - What is time series data?

+

Einige zentrale Eigenschaften von Daten, die als Zeitreihen modelliert werden, sind:

+
    +
  1. Unveränderbarkeit (engl.: Immutability): +Da Zeitreihen in der Regel in zeitlicher Reihenfolge aufgenommen werden, werden sie normalerweise lediglich an die bestehende Reihe angehangen und nachträglich nicht mehr angepasst. Der entscheidende Identifikator des Datensatzes besteht dabei aus dem Zeitstempel (engl.: Timestamp) sowie der zugeordneten Entität (z.B. einem Sensor). Andere Features, die als Primärschlüssel fungieren können, sind nicht vorgesehen.

  2. +
  3. Lebensdauer (engl.: Retention policy): +Da Zeitreihen in hoher Frequenz geschrieben aber mit höherem Alter seltener gelesen werden, ist es üblich alte Daten zu löschen bzw. aggregiert zu speichern, um langfristig Speicher zu sparen.

  4. +
  5. Aggregation (engl.: Aggregation): +In den meisten Use Cases werden nicht alle Daten gleichzeitig oder nur einzelne Datensätze sondern Werte eines definierten Zeitraumes abgefragt und häufig aggregiert (z.B. als Summe oder Durchschnitt) zurückgegeben.

  6. +
  7. Hohes Schreib- zu Lese-Verhältnis (engl.: High write/read ratio): +Timeseries Daten werden in der Regel in hoher Frequenz (kurzen Intervallen) geschrieben jedoch nur gelegentlich bzw. wie in Punkt 3 angemerkt aggregiert abgerufen, so dass schreibende Zugriffe zur Datenbank die lesenden an Volumen übertreffen.

  8. +
+

– vgl. TDengine - Characteristics of Time-Series Data

+
+
+

Modellierung relevanter Kennzahlen

+
+

Ist die Timeseries Modellierung für den Use Case geeignet?

+

Die im Rahmen der vorher durchgeführten Analyse von für den Use Case relevanten Unternehmenskennzahlen zeichnen sich durch ein Merkmal aus: sie basieren auf einer jährlich bis maximal jedes Quartal aufgestellten Kennzahl wie den Gewinn oder Umsatz des Unternehmens. Daraus resultiert eine für Zeitreihen geringe Datenfrequenz - üblich sind hier minütlich bis unter sekündlich geschriebene Daten.

+

Des Weiteren ist jeder Datensatz nicht nur an die Zeit-Achse sondern eine weitere Entität wie einen Quartals oder Jahresabschluss gebunden. Dies spiegelt nicht nur in der Berechnung der Kennzahl für ein einzelnes Unternehmen sondern auch den Vergleich zwischen Mehreren wieder: Hier ist es möglich, dass Unternehmen ihre Ergebnisse zu unterschiedlichen Zeiten aber den selben Ereignissen veröffentlichen. Immerhin ist es realistisch, dass ein Unternehmen seinen Jahresabschluss deutlich früher als ein anderes der Öffentlichkeit zur Verfügung stellt. So eine Abfrage ließe sich zwar durchaus über die Einführung einer zeitlichen Einschränkung filtern, jedoch ist auch hier die Verknüpfung zu einem Jahres- oder Quartalsabschluss von höherem Interesse.

+

In Folge dessen eignet sich eine Zeitreihen basierte Modellierung nicht für die zentralen Unternehmenskennzahlen.

+

Für die Speicherung und Verwaltung von Aktienkursen börsennotierter Unternehmen - folglich nicht aller Kapitalgesellschaften, die im Use Case behandelt werden - bietet sich der Einsatz einer Timeseries Datenbank jedoch durchaus an, da Daten hier nicht nur in sehr hoher Frequenz geschrieben sondern auch im bekannten Muster abgefragt werden. Demzufolge mag sich eine Modellierung auf Basis der Polyglot persistence (Verwendung verschiedener Datenspeicherungs Technologien) auf Gesamtsicht eignen, so dass Kennzahlen sowie Stammdaten von Unternehmen in einer relationalen DB gespeichert und abhängig ihrer Unternehmensform mit Aktiekursen aus einer Timeseries DB angereichert werden.

+

Dieser Ansatz wäre nicht nur für diese Anforderung lohnenswert, sondern kann auch die effiziente Speicherung der Unternehmensverflechtungen vereinfachen, da für diesen Anwendungszweck eine Graphen-Datenbank ins Spiel gebracht werden könnte, die die Relationen zwischen Unternehmen und Unternehmen leicht traversierbar speichert. Es ist daher auch abzuwägen, ob diese nicht auch die Aufgaben des relationalen Modells übernehmen könnte, um die Fülle anforderungsspezifischen DB Technologien zu reduzieren, um auch so die Komplexität des Gesamtsystem gering zu halten.

+

Um einen geeigneten Zugang zu den Daten von extern (z.B. der Datenvisualisierungs-Schicht in Form einer Web App) zu ermöglichen, ist der Einsatz von GraphQL sinnvoll. Dies ermöglicht dem Client die gesamte Datenbasis zu durchforsten und den benötigten Datenbestand abzufragen. Der GraphQL Server kann dabei durch seine Resolver Struktur problemlos mehrere Datenquellen (siehe oben angesprochene Polyglot Persistence) kombinieren.

+
+
+

Überblick über Datenrelationen

+

+erDiagram
+    Kapitalgesellschaft ||--o{ Jahresabschluss : veroeffentlicht
+    Wirtschaftspruefer ||--o{ Jahresabschluss : prueft
+    Jahresabschluss ||--o{ Metriken : beinhaltet
+    Kapitalgesellschaft ||--o{ Branche : operiert_in
+    Person ||--o{ Vorstand : agiert_als
+    Person ||--o{ Wirtschaftspruefer : agiert_als
+    Vorstand ||--o{ Kapitalgesellschaft: leitet
+
+    Kapitalgesellschaft {
+    }
+    Branche {
+    }
+    Jahresabschluss {
+    }
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/research/data_and_metrics.html b/html/research/data_and_metrics.html new file mode 100644 index 0000000..62bef6f --- /dev/null +++ b/html/research/data_and_metrics.html @@ -0,0 +1,413 @@ + + + + + + + Daten und Kennzahlen von Unternehmen — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Daten und Kennzahlen von Unternehmen

+
+

Basisdaten der Firma

+
    +
  • Name

  • +
  • Sitz

  • +
  • Rechtsform bzw. Art der Kapitalgesellschaft (AG, KGaA, GmbH, UG)

  • +
  • Branche

  • +
  • Gründungsdatum

  • +
+
+
+

Personen

+
    +
  • Gesellschafter/innen (Verteilung der Anteile, Höhe der Anteile)

  • +
  • Geschäftsführung bzw. Vorstand (Vorsitzende/r, Stellvertretung, weitere)

  • +
  • Aufsichtsrat (Vorsitzende/r, Stellvertretung, weitere)

  • +
  • Wirtschaftsprüfung (Unternehmen, verantwortliche/r Wirtschaftsprüfer/in)

  • +
+

Im Fall von realen Personen könnte die eindeutige Identifikation schwierig sein. Hier wären neben dem Nachnamen auch der Vorname wünschenswert.

+
+
+

Bewertung der Größe der Kapitalgesellschaft

+

Nach HGB §267: https://www.gesetze-im-internet.de/hgb/__267.html

+
    +
  • Durchschnittliche Mitarbeiterzahl (Anzahl beschäftigte Arbeitnehmer am 31.03., 30.06., 30.09., 31.12.)

  • +
  • Bilanzsumme bzw. Gesamtkapital

  • +
  • Umsatz bzw. Umsatzerlöse

  • +
+
+
+

Kennzahlen bei Aktiengesellschaften

+

Angelehnt an https://www.tagesschau.de/wirtschaft/boersenkurse/ und https://boerse.de

+
    +
  • ISIN (International Securities Identification Number)

  • +
  • WKN (Wertpapierkennnummer)

  • +
  • Aktienkurs

  • +
  • Währung

  • +
  • Gewinn je Aktie

  • +
  • Dividende

  • +
  • Dividendenrendite

  • +
  • Ausschüttungsquote = Dividende je Aktie / Gewinn je Aktie * 100

  • +
  • Marketkapitalisierung = Anzahl Anteilsscheine * Aktienkurs

  • +
  • Kurs-Gewinn-Verhältnis (KGV) = Aktienkurs / Gewinn pro Aktie

  • +
  • Kurs-Umsatz-Verhältnis (KUV) = Marktkapitalisierung / Umsatz

  • +
  • Kurs-Gewinn-Wachstumsverhältnis (PEG) = KGV / erwarteter Gewinnwachstum im kommenden Geschäftsjahr

  • +
+
+
+

Mögliche Kennzahlen zur Unternehmensbewertung

+

Handbuch Aktien- und Unternehmensbewertung - Peter Seppelfricke

+
+

Erfolgskennzahlen

+
    +
  • Umsatz

  • +
  • Gewinn bzw. Jahresüberschuss

  • +
  • Gewinn vor Steuern (EBT)

  • +
  • Gewinn vor Steuern und Zinsen (EBIT/Betriebsergebnis): Bei Gesamtkostenverfahren Summe 1-8, bei Umsatzkostenverfahren Summe 1-7

  • +
+
+
+

Finanzkennzahlen

+
    +
  • Eigenkapitalquote = Eigenkapital / Gesamtkapital * 100

  • +
  • Fremdkapitalquote = Fremdkapital / Gesamtkapital * 100

  • +
  • Verschuldungsgrad = Fremdkapital / Eigenkapital * 100

  • +
+
+
+

Rentabilitätskennzahlen

+
    +
  • Eigenkapitalrentabilität = Jahresüberschuss / Eigenkapital * 100

  • +
  • Return on Investment (ROI) = Gewinn / Gesamtkapital

  • +
  • Umsatzrentabilität = Gewinn / Umsatz * 100

  • +
+
+
+

Nichtfinanzielle Kennzahlen

+
    +
  • CO2-Emissionen

  • +
  • Unfallrate

  • +
+
+
+
+

Gewünschte Kennzahlen

+

E-Mail vom 13.04.2023

+
    +
  • Umsatz

  • +
  • EBIT

  • +
  • EBIT Marge

  • +
  • Bilanzsumme

  • +
  • Eigenkapitalanteil (Eigenkapital / Bilanzsumme)

  • +
  • Fremdkapitalanteil (Fremdkapital / Bilanzsumme)

  • +
  • Verschuldungsgrad (Fremdkapital / Eigenkapital)

  • +
  • Eigenkapitalrentabilität (EBIT/Eigenkapital)

  • +
  • Umschlaghäufigkeit des Gesamtkapitals (Umsatz / Bilanzsumme)

  • +
+
+
+

Kurzdefinitionen

+
+

Umsatz (Erlös)

+

https://www.lexoffice.de/lexikon/umsatz/

+
    +
  • Wert aller Produkte und Dienstleistungen, die in einem bestimmten Zeitraum abgesetzt wurden

  • +
  • Muss in der GuV ausgewiesen werden

  • +
  • Berechnung: Bruttoumsatz = Verkaufspreis (pro Stück) x abgesetzte Menge, Nettoumsatz = Bruttoumsatz - Erlösschmälerungen (z.B. Rabatte, Boni, Skonti) - Umsatzsteuer

  • +
+
+
+

EBIT (Earnings Before Interest and Taxes/Gewinn vor Zinsen und Steuern/Betriebsergebnis/Operativer Gewinn)

+

https://www.bwl-lexikon.de/wiki/ebit/

+
    +
  • Kennzahl, die den Unternehmensgewinn angibt, der aus der gewöhnlichen Geschäftstätigkeit entsteht

  • +
  • Stellt das operative Ergebnis eines Unternehmens dar

  • +
  • Gibt Auskunft über die Effizienz und die Ertragskraft eines Unternehmens

  • +
  • Berechnung: Jahresüberschuss/-fehlbetrag + Steueraufwand - Steuerertrag + außerordentlicher Aufwand - außerordentlicher Ertrag + Finanzaufwand - Finanzertrag = EBIT

  • +
+
+
+

EBIT-Marge

+

https://www.bwl-lexikon.de/wiki/ebit-marge/

+
    +
  • Eignet sich zum Vergleich von verschiedenen Unternehmen, zur Messung der operativen Veränderung und gibt Rückschlüsse auf die zukünftige Rentabilität

  • +
  • Verhältnis von EBIT und Umsatz

  • +
  • Eine EBIT-Marge in Höhe von 10% und mehr ist als positiv zu bewerten

  • +
  • Berechnung: EBIT-Marge = EBIT / Umsatz

  • +
+
+
+

Bilanzsumme (Gesamtvermögen/Gesamtkapital)

+

https://www.bwl-lexikon.de/wiki/bilanzsumme/

+
    +
  • Summe des Vermögens bzw. der Aktiva und des Kapitals bzw. der Passiva eines Unternehmens

  • +
  • Kriterium für die Größe von Kapitalgesellschaften

  • +
  • Aktiva = Anlagevermögen + Umlaufvermögen

  • +
  • Passiva = Eigenkapital + Rückstellungen + Verbindlichkeiten

  • +
  • Liefert Anhaltspunkte dafür, ob und wie schnell ein Unternehmen wächst

  • +
+
+
+

Eigenkapitalquote

+

https://www.bwl-lexikon.de/wiki/eigenkapitalquote/

+
    +
  • Informiert über die Kapitalstruktur eines Unternehmens

  • +
  • Geht aus der Bilanz eines Unternehmens vor

  • +
  • Je größer der Abstand zwischen eigenen und fremden Mittel, umso freier kann die Unternehmensleitung agieren

  • +
  • Je höher die Quote, desto unabhängiger ist das Unternehmen von Fremdkapitalgebern

  • +
  • Berechnung: Eigenkapital / Gesamtkapital

  • +
+
+
+

Fremdkapitalquote

+

https://www.bwl-lexikon.de/wiki/fremdkapitalquote/

+
    +
  • Anteil des Fremdkapitals am gesamten Kapital

  • +
  • Anzeichen für die Zahlungsfähigkeit eines Unternehmens

  • +
  • Je höher die Quote, desto abhängiger ist das Unternehmen von Fremdkapitalgebern, die Kreditwürdigkeit sinkt

  • +
  • Berechnung: Fremdkapital / Gesamtkapital

  • +
+
+
+

Verschuldungsgrad

+

https://www.bwl-lexikon.de/wiki/verschuldungsgrad/

+
    +
  • Informiert über die wirtschaftliche Stabilität eines Unternehmens

  • +
  • Bei einem hohen Verschuldungsgrad wird mehr Fremdkapital in einem Unternehmen eingesetzt, die Gefahr der Insolvenz steigt

  • +
  • Bei einem niedrigen Verschuldungsgrad ist die Eigenkapitalfinanzierung höher

  • +
  • Berechnung: Fremdkapital / Eigenkapital

  • +
+
+
+

Eigenkapitalrentabilität (Return on Equity ROE)

+

https://www.bwl-lexikon.de/wiki/eigenkapitalrentabilitaet/

+
    +
  • Informiert über die Wirtschaftlichkeit des Unternehmens und die Sinnhaftigkeit des Kapitaleinsatzes

  • +
  • Misst die Ertragskraft des Unternehmens

  • +
  • Gewünschte Höhe der Eigenkapitalrentabilität differiert je nach Branche

  • +
  • Eine doppelt so hohe Eigenkapitalrendite wie der durchschnittliche Zins gilt als wünschenswert

  • +
  • Ist der Kapitalzins höher, sollten Unternehmen das Kapital aus dem Kapitalmarkt anlegen

  • +
  • Berechnung: Gewinn bzw. Jahresüberschuss / Eigenkapital

  • +
+
+
+

Gesamtkapitalumschlag (Kapitalumschlag/Umschlagshäufigkeit)

+

https://www.bwl-lexikon.de/wiki/kapitalumschlag/

+
    +
  • Verhältnis vom Umsatz zum Eigen- oder Gesamtkapital

  • +
  • Legt fest, wie viel Umsatz mit dem vorhandenen Kapital eines Unternehmens erwirtschaftet werden kann

  • +
  • Gibt an, wie oft das eingesetzte Kapital durch die Umsatzerlöse zurück in das Unternehmen gelangt ist (desto häufiger, desto besser)

  • +
  • Berechnung: Umsatz / Bilanzsumme bzw. Gesamtkapital

  • +
+
+
+

Umsatzrentabilität (Umsatzrendite/Umsatzmarge/Nettomarge)

+

https://www.bwl-lexikon.de/wiki/umsatzrentabilitaet/

+
    +
  • Verhältnis von Gewinn und Umsatz

  • +
  • Betrag, den ein Unternehme pro Euro Umsatz erwirtschaftet

  • +
  • Eine steigende Umsatzrendite deutet darauf hin, dass die Produktivität des Unternehmens steigt

  • +
  • Bildet die Effiziens eines Unternehmens ab

  • +
  • Eine Umsatzrentabilität in Höhe von 5% und mehr gilt als Richtwert

  • +
  • Berechnung: Gewinn / Umsatz

  • +
+
+
+

Gesamtkapitalrentabilität (Return on Investment ROI, Kapitalrendite)

+

https://www.bwl-lexikon.de/wiki/gesamtkapitalrentabilitaet/

+
    +
  • Relation zwischen dem investierten Kapital und dem Gewinn

  • +
  • Beurteilungsmaßstad für die Rentabilität

  • +
  • Positiver ROI ist für ein Unternehmen vorteilhaft

  • +
  • Berechnung: Umsatzrentabilität x Kapitalumschlag

  • +
+
+
+
+
+

Fazit

+

Insgesamt sollen folgende Größen bzw. Kennzahlen betrachtet werden:

+
    +
  • Unternehmensgröße

  • +
  • Umsatz

  • +
  • EBIT

  • +
  • EBIT-Marge

  • +
  • Bilanzsumme

  • +
  • Eigenkapitalquote

  • +
  • Fremdkapitalquote

  • +
  • Verschuldungsgrad

  • +
  • Eigenkapitalrentabilität

  • +
  • Umsatzrentabilität

  • +
  • Gesamtkapitalrentabilität

  • +
  • Gesamtkapitalumschlag

  • +
+

Dazu werden folgende Daten benötigt:

+
    +
  • Umsatz

  • +
  • Bilanzsumme

  • +
  • EBIT

  • +
  • Eigenkapital

  • +
  • Fremdkapital

  • +
  • Gewinn

  • +
  • Durchschnittliche Mitarbeiterzahl

  • +
+

Vergleichsmöglichkeiten:

+
    +
  • Zeitvergleich: Vergleich der ermittelten Kennzahlen in verschiedenen Perioden, mit Hilfe von Zeitvergleichen über längere Zeiträume lassen sich Trends oder Zyklen erkennen

  • +
  • Betriebsvergleich: Gegenüberstellung der Kennzahlen von Unternehmen der gleichen Branche oder Vergleich der Werte eines Unternehmens mit dem Branchendurchschnitt

  • +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/research/news_apis.html b/html/research/news_apis.html new file mode 100644 index 0000000..18d0fd7 --- /dev/null +++ b/html/research/news_apis.html @@ -0,0 +1,231 @@ + + + + + + + Nachrichtenquellen — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Nachrichtenquellen

+
+

Twitter API v2

+
+

Access Levels

+

Free:

+
    +
  • 1,500 Tweets per months

  • +
  • 1 AppID

  • +
  • Login with Twitter

  • +
+

Basic:

+
    +
  • 100 per month

  • +
+

Enterprise:

+
    +
  • Monthly subscribtion tiers

  • +
+

Postman Besipiele: https://developer.twitter.com/en/docs/tutorials/postman-getting-started

+

Getting started: https://github.com/twitterdev

+
+
+
+

NewsAPI

+
    +
  • Developer ist kostenlos

  • +
  • 24 Stunden verspätet sind die Artikel erreichabr

  • +
  • Bis zu einem Monat alte Artikel abrufbar

  • +
  • 100 Anfragen pro Tag

  • +
  • CORS geht nur für local host

  • +
  • Hat extra einen Punkt für deutsche Nachrichten: https://newsapi.org/s/germany-news-api

  • +
+

Benötigt einen Account um einen API Key zu generieren. +Doku: https://newsapi.org/docs/get-started

+

Hinweis: Bietet die Möglichkeit nach Artikel mit einem bestimmten Wort zu suchen

+
+
+

Bloomberg API

+
    +
  • Link: https://www.bloomberg.com/professional/support/api-library/

  • +
  • generell kostenlos, bei starker Nutzung muss ein Preis angefragt werden

  • +
  • sehr gut für Marktanalysen geeignet

  • +
+
+
+

New York Times API

+
    +
  • die ersten 1000 Anfragen pro Tag sind kostenlos

  • +
  • 11 verschiedene APIs

  • +
+
+
+

PressePortal

+

Bietet eine API zur DPA Gruppe an. Eher schlecht beschrieben und der API-Key muss via Email beantragt werden, bietet aber potentiell Zugriff auf deutsche Nachrichten.

+

Demo: https://api.presseportal.de/v2/demo/index.htx?mod=section_all&newsroom=&office=&city=&keyword=&topic=&police_officetype=&police_federalstate=&media=dokument&limit=&language=de&companyinfo=6344

+

API-Key Anfragen: https://api.presseportal.de/

+
+
+

Tagesschau API 2.0

+

https://tagesschau.api.bund.dev/

+
+
+

Yahoo finance API

+

https://financeapi.net/

+
+
+

Google News API

+
    +
  • deprecated

  • +
  • kostenlos

  • +
  • gut dokumentiert

  • +
+
+
+

Sonstiges

+

Bing News API, ESPN, Guardian API, BBC News API Yahoo News API und Financial Times fallen raus, da diese immer mit kosten verbunden sind oder sich nur mit Sport oder Kommentare befassen.

+
    +
  • “Die Zeit” hatte mal eine API die abgeschaltet wurde.

  • +
+

-> RSS Feeds Irgendwie abgreifen

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/research/resarch-central.html b/html/research/resarch-central.html new file mode 100644 index 0000000..1ea97ca --- /dev/null +++ b/html/research/resarch-central.html @@ -0,0 +1,154 @@ + + + + + + + Research Central — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Research Central

+
+

Sentiment Analysis

+
+

FinBert

+

FinBert is a specialised sentiment Analysis for Financial Data. +Sadly it isn’t a very good model, and it does not work at all for texts in german.

+

Experiments can be found here:

+
    +
  • [FinBert Jupyter](../../Jupyter/AI-models/”Sentiment Analysis”/FinBert.ipynb)

  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/search.html b/html/search.html new file mode 100644 index 0000000..3d54d43 --- /dev/null +++ b/html/search.html @@ -0,0 +1,149 @@ + + + + + + Search — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/html/searchindex.js b/html/searchindex.js new file mode 100644 index 0000000..ad9199a --- /dev/null +++ b/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["Pflichtenheft", "aki_prj23_transparenzregister", "aki_prj23_transparenzregister.black_test", "aki_prj23_transparenzregister.flake8_test", "index", "meeting-notes/Meeting_2023-03-30", "meeting-notes/Meeting_2023-04-13", "meeting-notes/Meeting_2023-05-04", "meeting-notes/Meeting_2023-05-11", "meeting-notes/Meeting_2023_05-25", "modules", "research/RE_Vom-Problem-zur-Loesung", "research/Timeseries/Overview", "research/data_and_metrics", "research/news_apis", "research/resarch-central", "seminararbeiten/3_Datenspeicherung", "seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu", "seminararbeiten/Abstract_Data_Extraction", "seminararbeiten/Abstract_Datenvisualisierung", "seminararbeiten/Datenvisualisierung/\u00dcbersicht", "seminararbeiten/project-organisation-and-dev-ops", "seminararbeiten/verflechtungsanalyse", "templates/meeting_notes_template", "timeline"], "filenames": ["Pflichtenheft.md", "aki_prj23_transparenzregister.rst", "aki_prj23_transparenzregister.black_test.rst", "aki_prj23_transparenzregister.flake8_test.rst", "index.rst", "meeting-notes/Meeting_2023-03-30.md", "meeting-notes/Meeting_2023-04-13.md", "meeting-notes/Meeting_2023-05-04.md", "meeting-notes/Meeting_2023-05-11.md", "meeting-notes/Meeting_2023_05-25.md", "modules.rst", "research/RE_Vom-Problem-zur-Loesung.md", "research/Timeseries/Overview.md", "research/data_and_metrics.md", "research/news_apis.md", "research/resarch-central.md", "seminararbeiten/3_Datenspeicherung.md", "seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.md", "seminararbeiten/Abstract_Data_Extraction.md", "seminararbeiten/Abstract_Datenvisualisierung.md", "seminararbeiten/Datenvisualisierung/\u00dcbersicht.md", "seminararbeiten/project-organisation-and-dev-ops.md", "seminararbeiten/verflechtungsanalyse.md", "templates/meeting_notes_template.md", "timeline.md"], "titles": ["Pflichtenheft: Kapitalgesellschaften referenzregister", "aki_prj23_transparenzregister package", "aki_prj23_transparenzregister.black_test module", "aki_prj23_transparenzregister.flake8_test module", "Transparenzregister Documentation", "Weekly 1: 30.03.2023", "Weekly 2: 13.04.2023", "Weekly 3: 04.05.2023", "Weekly 4: 11.05.2023", "Weekly 5: 25.05.2023", "aki_prj23_transparenzregister", "Von der Problemstellung zum L\u00f6sungskonzept", "Timeseries (deutsch: Zeitreihen) im Kontext des Transparenzregisters Kapitalgesellschaften", "Daten und Kennzahlen von Unternehmen", "Nachrichtenquellen", "Research Central", "Aufgabe: Inhaltliche Skizze f\u00fcr die Seminararbeit zur Thematik Datenspeicherung", "<no title>", "Abstract: Automatisierte Daten Extraktion aus Internetquellen als Grundlage f\u00fcr die Analyse von Kapitalgesellschaften", "Seminarthema: Datenvisualisierung", "Themen in der Seminararbeit zum Thema Datenvisualisierung", "Dev Ops", "Verflechtungsanalyse", "Weekly X: DD.MM.YYYY", "Timeline"], "terms": {"version": 0, "0": [0, 4], "1": [0, 4, 7, 13, 14, 17, 22], "erstellt": [0, 6, 8, 11, 17], "am": [0, 5, 7, 8, 9, 13, 17, 19], "07": [0, 7], "04": [0, 4, 13], "2023": [0, 4, 13, 17], "autoren": 0, "matrikelnumm": 0, "kim": [0, 5, 6, 7, 9, 23], "mesewinkel": [0, 5, 6, 7, 9, 23], "000": 0, "tristan": [0, 5, 6, 7, 9, 23], "nold": [0, 5, 6, 7, 9, 23], "sebastian": [0, 5, 6, 7, 9, 23], "zeleni": [0, 5, 6, 7, 9, 23], "philip": 0, "horstenkamp": [0, 5, 6, 7, 9, 23], "sascha": [0, 5, 6, 7, 9, 17, 23], "zhu": [0, 5, 6, 7, 9, 17, 23], "tim": [0, 5, 6, 7, 9, 23], "ronneburg": [0, 5, 6, 7, 9, 23], "datum": 0, "autor": 0, "\u00e4nderungsgrund": 0, "bemerkung": 0, "initial": 0, "aufsetzen": 0, "2": [0, 4, 13, 17, 22], "test": [0, 21], "die": [0, 5, 6, 7, 9, 11, 13, 14, 17, 19, 22], "softwar": [0, 8, 11, 12], "berechnet": 0, "veranschaulicht": 0, "folgend": [0, 8, 11, 13], "unternehmenskennzahlen": [0, 6, 11, 12], "umsatz": [0, 4, 12], "gewinn": [0, 4, 12], "bilanzsumm": [0, 4], "eigenkapit": [0, 13], "eigenkapitalquot": [0, 4], "vorstand": [0, 12, 13], "gesch\u00e4ftsf\u00fchrung": [0, 13], "aufsichtsrat": [0, 13], "beirat": 0, "wirtschaftspr\u00fcf": [0, 5, 8, 13], "besitzverh\u00e4ltniss": 0, "da": [0, 5, 6, 8, 9, 11, 12, 13, 14, 16, 17, 19, 22], "system": 0, "neben": [0, 13, 18], "kennzahlen": [0, 4, 5, 6, 9, 16, 18, 19], "von": [0, 4, 5, 6, 9, 12, 17, 22], "metriken": [0, 5, 6, 11, 12], "au": [0, 4, 5, 6, 12, 13], "dem": [0, 8, 11, 12, 13, 16, 17, 18, 22], "data_and_metr": 0, "md": 0, "je": [0, 13], "nach": [0, 8, 9, 11, 13, 14, 17, 19], "datenlag": 0, "f\u00fcr": [0, 5, 6, 7, 9, 11, 13, 14, 17, 19, 22], "unternehmen": [0, 4, 5, 8, 11, 12, 16, 18, 22], "berechnen": 0, "anzeigen": 0, "ein": [0, 5, 6, 7, 8, 9, 11, 12, 13, 14, 17, 18, 19, 22], "Suche": [0, 6], "personen": [0, 4, 8, 9, 11, 22], "anbieten": 0, "einer": [0, 8, 11, 12, 17, 18, 19, 22], "detailansicht": 0, "f\u00fchrt": 0, "mit": [0, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 19, 22], "genannten": [0, 17, 19], "konzernstruktur": 0, "mutterkonzern": 0, "tochterfirmen": 0, "dies": [0, 5, 8, 11, 12, 14, 18, 22], "sollen": [0, 6, 7, 8, 9, 13, 17, 18], "durch": [0, 7, 11, 12, 13, 22], "netz": [0, 11], "transpar": 0, "dargestellt": [0, 8, 11, 17], "werden": [0, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 22], "zeigt": [0, 9], "beziehungen": [0, 8, 22], "untereinand": 0, "wirtschaftspr\u00fcfern": 0, "auf": [0, 6, 7, 8, 9, 11, 12, 13, 14, 17, 18, 19, 22], "bewerten": [0, 6, 9, 13, 18], "ob": [0, 8, 12, 13], "berichtserstattung": 0, "letzten": [0, 6, 19], "7": [0, 13], "tage": [0, 5], "eher": [0, 8, 14, 16], "positiv": [0, 6, 7, 13], "oder": [0, 6, 7, 8, 11, 12, 13, 14, 18], "negativ": [0, 6], "war": 0, "dabei": [0, 7, 12, 19, 22], "sind": [0, 5, 11, 12, 14, 16, 18, 19, 22], "h\u00e4ufig": [0, 12, 13], "vorstandswechsel": 0, "zielerreichungen": 0, "1000": [0, 8, 14], "gr\u00f6\u00dften": [0, 11], "deutschen": [0, 8, 11], "europ\u00e4ischen": [0, 11], "beinhalten": 0, "anhand": [0, 17, 18, 19, 22], "bewertet": [0, 5], "bemessen": 0, "ist": [0, 5, 6, 8, 9, 11, 13, 14, 16, 18, 22], "24": [0, 14], "\u00fcber": [0, 5, 8, 11, 13, 16], "internet": [0, 13], "jede": [0, 11, 12], "person": [0, 1, 12], "internetzugang": 0, "erreichbar": 0, "verf\u00fcgbarkeit": [0, 18], "99": 0, "erreichen": 0, "maxim": [0, 12], "10": [0, 5, 13, 17], "ausf\u00e4llen": 0, "pro": [0, 5, 7, 8, 13, 14], "jahr": [0, 12], "m\u00f6glichst": 0, "einen": [0, 9, 11, 12, 14, 17, 19, 22], "disast": 0, "recoveri": 0, "schutz": 0, "verf\u00fcgen": 0, "einem": [0, 6, 7, 8, 12, 13, 14, 22], "zweiten": [0, 19], "250": 0, "km": 0, "vom": [0, 8, 13], "hauptrechenzentrum": 0, "entfernten": 0, "rechenzentrum": 0, "daten": [0, 4, 5, 6, 8, 11, 12, 19, 22], "spiegeln": 0, "skalierbar": [0, 16], "sein": [0, 5, 8, 9, 11, 12, 13, 16], "sodass": 0, "auch": [0, 6, 7, 8, 9, 12, 13, 17, 18], "nutzerzahl": 0, "benutzern": 0, "k\u00f6nnen": [0, 5, 6, 8, 11, 12, 16, 17, 18, 22], "black_test": [1, 4, 10], "flake8_test": [1, 4, 10], "A": 1, "project": [1, 5, 7, 11, 21], "analys": [1, 6, 12, 17, 22], "german": [1, 4, 15], "transparenzregist": [1, 8, 19, 22], "other": 1, "data": [1, 12, 15, 17, 18], "sourc": 1, "find": 1, "share": 1, "busi": 1, "interest": [1, 4], "link": [1, 14], "lot": 1, "compani": 1, "thi": [4, 21], "i": [4, 12, 15, 21], "aki": 4, "group": [4, 21], "an": [4, 5, 6, 11, 12, 13, 14, 18, 19, 22], "analysi": [4, 22], "pflichtenheft": [4, 5, 6, 8], "kapitalgesellschaften": [4, 5, 13], "referenzregist": 4, "histori": 4, "der": [4, 5, 6, 7, 9, 12, 14, 17, 18, 19, 22], "dokumentenvers": 4, "inhaltsverzeichni": 4, "einleitung": [4, 17, 18, 22], "allgemein": 4, "ziel": [4, 5, 18], "und": [4, 5, 6, 7, 9, 11, 12, 14, 17, 18, 19, 20, 22], "zweck": [4, 19], "de": [4, 5, 6, 7, 13, 14, 17, 18], "dokument": [4, 5, 14], "ausgangssitu": 4, "projektbezug": 4, "abk\u00fcrzungen": 4, "schnittstellen": 4, "bezug": 4, "zu": [4, 5, 6, 7, 11, 12, 13, 14, 16, 17, 18, 19, 22], "anderen": [4, 5, 7, 9, 19], "dokumenten": 4, "konzept": 4, "rahmenbedingungen": [4, 18], "anbiet": 4, "nutzen": [4, 8], "anwend": [4, 8], "benutz": 4, "zielgruppen": 4, "systemvoraussetzungen": 4, "option": 4, "ressourcen": 4, "funktional": 4, "anforderungen": [4, 5, 6, 8, 19], "muss": [4, 5, 6, 8, 11, 13, 14, 16], "f100": 4, "f110": 4, "f120": 4, "soll": [4, 5, 7, 8, 17, 18, 19, 22], "f200": 4, "f210": 4, "f220": 4, "nicht": [4, 5, 6, 7, 8, 9, 12, 16], "n100": 4, "n200": 4, "n210": 4, "kann": [4, 11, 12, 13, 16, 22], "n300": 4, "n310": 4, "anforderungsverfolgung": 4, "den": [4, 6, 7, 8, 9, 11, 13, 16, 17, 18], "spezifikationen": 4, "abnahmekriterien": 4, "vorgehen": [4, 18], "zur": [4, 6, 7, 12, 14, 17, 18, 22], "ausgangspr\u00fcfung": 4, "lieferumfang": 4, "anhang": 4, "timelin": [4, 6], "weekli": 4, "30": [4, 6, 13], "03": [4, 6, 13], "13": [4, 13], "3": [4, 12, 17, 22], "05": [4, 17], "4": [4, 7, 17, 22], "11": [4, 7, 14], "5": [4, 13, 22], "25": 4, "problemstellung": [4, 18, 22], "zum": [4, 6, 7, 13, 17, 22], "l\u00f6sungskonzept": 4, "requir": 4, "engin": 4, "projektvorstellung": 4, "identifik": [4, 12, 13], "innerhalb": [4, 7, 22], "grupp": [4, 7, 8, 14], "dom\u00e4nen": [4, 7], "l\u00f6sungsfindung": 4, "technisch": [4, 5], "fachlich": 4, "l\u00f6sungen": 4, "priorisierung": 4, "6": [4, 7], "basisdaten": 4, "firma": 4, "bewertung": [4, 5], "gr\u00f6\u00dfe": 4, "kapitalgesellschaft": [4, 12, 18], "bei": [4, 8, 9, 12, 14, 16, 19], "aktiengesellschaften": 4, "m\u00f6glich": [4, 5, 7, 12], "unternehmensbewertung": 4, "erfolgskennzahlen": 4, "finanzkennzahlen": 4, "rentabilit\u00e4tskennzahlen": 4, "nichtfinanziel": 4, "gew\u00fcnscht": 4, "kurzdefinitionen": 4, "erl\u00f6": 4, "ebit": 4, "earn": 4, "befor": 4, "tax": 4, "vor": [4, 19], "zinsen": 4, "steuern": 4, "betriebsergebni": 4, "operativ": 4, "marg": 4, "gesamtverm\u00f6gen": 4, "gesamtkapit": 4, "fremdkapitalquot": 4, "verschuldungsgrad": 4, "eigenkapitalrentabilit\u00e4t": 4, "return": 4, "equiti": 4, "roe": 4, "gesamtkapitalumschlag": 4, "kapitalumschlag": 4, "umschlagsh\u00e4ufigkeit": 4, "umsatzrentabilit\u00e4t": 4, "umsatzrendit": 4, "umsatzmarg": 4, "nettomarg": 4, "gesamtkapitalrentabilit\u00e4t": 4, "invest": 4, "roi": 4, "kapitalrendit": 4, "fazit": [4, 18, 19, 22], "nachrichtenquellen": [4, 6], "twitter": [4, 6], "api": [4, 8, 18], "v2": 4, "access": 4, "level": 4, "newsapi": 4, "bloomberg": 4, "new": [4, 21], "york": 4, "time": [4, 12, 19], "presseport": 4, "tagesschau": [4, 13], "yahoo": 4, "financ": 4, "googl": 4, "sonstig": [4, 7], "central": 4, "sentiment": [4, 6, 8, 17], "finbert": [4, 8, 17], "aki_prj23_transparenzregist": 4, "packag": [4, 10], "submodul": [4, 10], "content": [4, 10], "index": [4, 14], "prof": [5, 6, 7, 9, 23], "arinir": [5, 6, 7, 9, 23], "philipp": [5, 6, 9], "riss": [5, 6, 7, 9, 23], "protokol": [5, 6, 7], "inhalt": [5, 11], "propos": [5, 11], "welchen": 5, "wa": [5, 8, 11, 12, 16], "welch": [5, 6, 7, 11, 12, 16, 17, 19, 22], "ben\u00f6tigt": [5, 8, 11, 13, 14, 19], "woher": 5, "erh\u00e4lt": 5, "man": [5, 8], "amtsgericht": 5, "insolvenzen": 5, "b\u00f6rsenkurs": 5, "aktienkurs": [5, 12], "rss": [5, 8, 14, 18], "feed": [5, 8, 14, 18], "wie": [5, 7, 8, 9, 11, 12, 13, 16, 17, 18, 22], "verarbeitet": 5, "bzw": [5, 8, 12, 13, 17], "ergebniss": [5, 6, 12, 17], "pr\u00e4sentiert": [5, 9, 19], "verflechtungen": [5, 8, 16, 22], "zwischen": [5, 8, 12, 13], "gesch\u00e4ftsf\u00fchrer": 5, "projektdurchf\u00fchrung": 5, "backlog": 5, "ideen": [5, 19], "aufgaben": [5, 12], "meet": [5, 6, 7], "note": [5, 7], "besprochenen": 5, "entscheidungen": [5, 19], "terminen": 5, "list": [5, 6], "wer": 5, "arbeitet": 5, "welcher": [5, 7], "aufgab": 5, "so": [5, 12, 13, 18], "formal": 5, "d": [5, 8, 17], "h": [5, 8, 17], "beschreibung": [5, 7], "systemkontext": 5, "interakt": 5, "umgebung": 5, "datenmodel": 5, "schematisch": 5, "darstellung": [5, 11], "datenfl\u00fcss": 5, "lasten": 5, "kategorisierung": 5, "vorschlag": 5, "frontend": [5, 16], "d3": 5, "j": [5, 6], "projekt": [5, 6, 8, 16, 19, 22], "e": [5, 6, 7, 8, 11, 12, 13, 17, 18, 19, 22], "erkennbar": 5, "bearbeitet": [5, 11], "hat": [5, 7, 14], "jeder": [5, 6, 12], "kennen": 5, "verst\u00e4ndni": 5, "haben": [5, 8], "kein": [5, 7, 8], "tief": 5, "dom\u00e4nenwissen": [5, 11], "gesamtplanung": 5, "teil": [5, 8], "ergebni": [5, 8, 13], "nur": [5, 6, 8, 12, 14, 16], "umsetzung": [5, 7, 18], "bewertungsschl\u00fcssel": 5, "gewichtung": 5, "20": [5, 6, 7], "vortrag": [5, 7], "seminararbeit": [5, 7, 17, 18, 19, 22], "pr\u00e4sentat": 5, "implementierung": [5, 6], "final": 5, "bericht": 5, "15": [5, 6, 7], "seiten": [5, 7, 8], "abschlusspr\u00e4sent": 5, "organisatorisch": [5, 6], "regeltermin": 5, "all": [5, 6, 7, 8, 9, 12, 15], "14": 5, "allen": 5, "projektteilnehmern": 5, "beginnend": 5, "dieser": [5, 12, 17, 18, 19, 22], "termin": [5, 7, 9], "sprint": [5, 6], "plan": [5, 21], "review": 5, "genutzt": [5, 6, 8, 22], "erwartungshaltung": 5, "product": 5, "owner": 5, "n\u00e4chste": [5, 7, 8, 9, 23], "projektbearbeitung": 5, "github": [5, 6, 8, 14, 21], "bereitstellung": 5, "repo": 5, "fh": 5, "verantwortlich": [5, 6, 7, 8, 9, 13, 23], "deadlin": [5, 6, 7, 8, 9, 23], "erwartungen": 5, "stellen": [5, 8, 18], "wir": [5, 6, 8, 9, 11, 16], "inhaltlich": 5, "work": [5, 15], "progress": 5, "erarbeiten": [5, 11], "arbeitspaketen": 5, "notwendig": [5, 11], "recherch": [5, 6], "datenquellen": [5, 11, 12], "definit": [5, 18, 22], "meilensteinen": 5, "erstellung": [5, 6, 19, 22], "groben": 5, "zeitplan": 5, "seminarthemen": [6, 7], "im": [6, 7, 8, 9, 11, 13, 16, 17, 18, 19, 22], "zuge": 6, "erarbeitet": 6, "textmin": [6, 16], "ontologien": [6, 8, 17], "semantisch": [6, 17], "anmeldungsformular": 6, "sendet": 6, "formular": 6, "selbst": [6, 8], "herrn": [6, 7], "projektauftakt": 6, "enddatum": 6, "02": 6, "2024": 6, "titel": 6, "transparanzregist": 6, "kapitalgeselschaften": 6, "vorstellung": [6, 7, 19], "anlegen": [6, 13], "protokolltempl": 6, "intern": [6, 13], "jeden": [6, 7, 16], "donnerstag": 6, "mermaid": 6, "markdown": 6, "datenschutz": 6, "urheberrecht": 6, "datenbanken": [6, 8], "d\u00fcrfen": 6, "offlin": 6, "onlin": 6, "benutzt": 6, "eigen": [6, 13], "forschung": [6, 7], "75": 6, "wenn": [6, 8, 11, 16], "dritt": 6, "weitergeleitet": 6, "ver\u00f6ffentlichen": [6, 12], "m\u00fcssen": [6, 8, 11], "vorgaben": 6, "beachten": 6, "hinwei": [6, 14], "al": [6, 7, 12, 13, 17, 22], "vorschungsprojekt": 6, "sehen": 6, "ver\u00f6ffentlicht": 6, "vorgehensweis": 6, "wird": [6, 8, 11, 12, 13, 16, 17, 18, 19, 22], "paper": 6, "tendenzanalysen": 6, "zeitlich": [6, 7, 9, 12], "ver\u00e4nderungen": [6, 9], "erfasst": 6, "timescal": 6, "datenbank": [6, 8, 11, 12], "viertelj\u00e4hrlich": 6, "reichen": 6, "verf\u00fcgbaren": 6, "datengrundlagen": 6, "phillip": [6, 7, 8, 23], "noch": [6, 8, 9], "angelegt": 6, "repositori": [6, 21], "board": 6, "projektorganis": [6, 7], "erledigt": 6, "eingehen": 6, "sondern": [6, 7, 8, 12], "berichterstattung": 6, "dazu": [6, 13], "technologieauswahl": 6, "recherchiert": 6, "trendanalys": 6, "nachrichten": [6, 14, 18], "finanztreff": 6, "etc": [6, 17], "rechechieren": 6, "aktuel": [6, 18], "alt": [6, 12, 14], "27": 6, "recherchieren": 6, "technologien": [6, 8, 12, 18], "auswertung": 6, "nachrichtenqullen": 6, "z": [6, 7, 8, 11, 12, 13, 16, 17, 19], "b": [6, 7, 8, 11, 12, 13, 16, 17, 19], "besch\u00e4ftigen": 6, "historien": [6, 16], "festlegen": 6, "kriterien": 6, "wann": 6, "artikel": [6, 14], "end": [6, 7, 8, 17], "offen": [6, 7], "abgab": [6, 7], "anmeldeformular": 6, "geeignetetn": 6, "herr": [6, 7, 8], "gelten": 7, "zwischenpr\u00fcfung": 7, "In": [7, 8, 12, 18, 19, 22], "form": [7, 9, 12], "giefer": 7, "vorfeld": 7, "definiert": [7, 8, 11, 17, 22], "unser": [7, 8, 11, 19], "gab": 7, "einarbeitung": 7, "entwicklungsarbeit": 7, "geplant": 7, "umfang": [7, 11], "r\u00fccksprach": 7, "gawron": 7, "feedback": 7, "beim": [7, 8], "n\u00e4chsten": 7, "folien": 7, "quellen": [7, 11, 18], "quellcod": 7, "ca": 7, "minuten": 7, "rahmen": [7, 12, 18], "jf": 7, "plenum": 7, "seminararbeiten": 7, "benotet": 7, "endnot": 7, "ausarbeitung": 7, "z\u00e4hlen": 7, "jeweil": 7, "50": [7, 8], "lautet": 7, "fest": [7, 11, 13], "vorgegeben": 7, "absprach": 7, "projektgrupp": [7, 11], "ausreichend": 7, "einigung": 7, "zwei": 7, "juni": 7, "anfang": 7, "juli": 7, "thema": [7, 8, 17, 19, 21, 22], "22": 7, "06": [7, 9, 13], "voraussichtlich": 7, "sommersemest": 7, "potentiel": [7, 14], "sp\u00e4teren": 7, "zeitpunkt": 7, "themenbereich": [7, 19], "behandelt": [7, 8, 12, 19], "erst": [7, 11], "kurz": 7, "wurd": [7, 8, 9, 14, 22], "befunden": 7, "eingrenzung": 7, "konkreter": 7, "abstract": [7, 17], "vorgestellt": [7, 19, 22], "grunds\u00e4tzlich": 7, "oberfl\u00e4chlich": 7, "explizit": 7, "techniken": 7, "eingegangen": [7, 22], "\u00e4nderungen": 7, "bereich": [7, 22], "aufnahm": 7, "zeitlichen": [7, 12], "ablauf": 7, "ticket": 7, "screenshot": 7, "aufnehmen": 7, "start": [7, 14], "enddaten": 7, "label": 7, "besser": [7, 13], "pflegen": 7, "urlaubszeiten": 7, "17": 7, "01": 7, "08": [7, 9], "folienvorlag": 7, "seminarvortrag": 7, "r\u00fcckmeldung": [7, 8], "sich": [8, 11, 12, 13, 14, 16, 17, 18, 19, 22], "nochmal": 8, "wegen": 8, "melden": 8, "seminarbeit": 8, "l\u00f6sungsskizzen": 8, "seminarabeit": 8, "theoretischen": 8, "praktischen": 8, "praktisch": 8, "er\u00f6rtert": 8, "bestehen": 8, "verh\u00e4ltni": [8, 12, 13], "40": 8, "60": [8, 21], "liegt": 8, "dar\u00fcber": [8, 17], "verfas": 8, "entscheiden": 8, "foku": [8, 19], "stet": 8, "danach": 8, "ausgerichtet": 8, "entsprechenden": 8, "aspekt": [8, 18], "sieh": [8, 9, 12], "datei": 8, "punkt": [8, 12, 14], "wurden": [8, 11, 13], "diskutiert": [8, 11, 19], "sehr": [8, 12, 14], "straff": 8, "pipelin": 8, "seriensoftwar": 8, "ordnung": 8, "w\u00e4re": [8, 9, 12], "k\u00f6nnte": [8, 12, 13, 22], "un": [8, 19], "fesseln": 8, "einschr\u00e4nken": 8, "\u00fcberlegen": 8, "entwicklung": [8, 11, 17], "fr\u00fcher": [8, 12], "ablief": 8, "heut": 8, "u": [8, 12, 17], "automatisierungsm\u00f6glichkeiten": 8, "gegen\u00fcbergestellt": 8, "um": [8, 11, 12, 14, 16, 17, 18, 19, 22], "darau": [8, 12], "zun\u00e4chst": [8, 22], "strategi": 8, "entwickeln": 8, "bevor": 8, "vertieft": 8, "devop": 8, "besch\u00e4ftigt": [8, 13], "verwendung": [8, 11, 12, 17], "ci": 8, "cd": 8, "continu": 8, "integr": [8, 16], "deliveri": 8, "ki": 8, "interessant": 8, "con": 8, "webscrap": 8, "gegen\u00fcb": [8, 17], "l\u00f6sung": [8, 11], "quell": 8, "mail": [8, 13], "newslett": 8, "handelsblatt": 8, "ebenfal": 8, "interess": [8, 9, 12], "jedoch": [8, 12], "hierf\u00fcr": 8, "m\u00f6glicherweis": 8, "separat": 8, "account": [8, 14], "aufw\u00e4ndig": 8, "eventuel": 8, "pr\u00fcfen": 8, "linkedin": 8, "xing": 8, "facebook": [8, 22], "extrahiert": 8, "k\u00f6nnten": 8, "wahl": [8, 19], "verschieden": [8, 12, 14, 18, 19], "ber\u00fccksichtigt": 8, "hohem": 8, "abstimmungsbedarf": 8, "topic": [8, 14], "fragt": 8, "relational": [8, 11], "modul": [8, 10], "di": [8, 12], "bejaht": 8, "insbesonder": 8, "sql": 8, "queri": 8, "waren": 8, "gegenstand": 8, "datenbankprogrammierung": 8, "social": [8, 16, 22], "graph": [8, 9, 22], "via": [8, 14, 21], "kooperationspartn": 8, "stiftungen": 8, "uni": 8, "forschungsinstitut": 8, "eigentum": 8, "kunden": 8, "lieferbeziehungen": 8, "darzustellen": 8, "art": [8, 13, 22], "beziehung": 8, "filtern": [8, 12], "tool": [8, 17, 19], "vader": [8, 17], "maschinel": 8, "\u00fcbersetzung": 8, "nachrichtentext": 8, "ins": [8, 12, 22], "englisch": 8, "erforderlich": 8, "erkennen": [8, 13], "generierung": [8, 17], "komplex": 8, "projektarbeit": 8, "semantischen": 8, "textanalys": [8, 17], "empfehlenswert": 8, "dass": [8, 12, 13], "einzel": 8, "ausgef\u00fchrt": 8, "dann": 8, "graphen": [8, 9, 12, 22], "name": [8, 13, 17], "entiti": [8, 17], "recognit": [8, 17], "hohe": [8, 12, 13], "bedeutung": 8, "python": [8, 16, 19, 21], "bibliotheken": [8, 19], "beschr\u00e4nkt": 8, "datenabfrag": 8, "spark": 8, "laufen": 8, "schnittstel": 8, "speicher": [8, 12], "front": 8, "cach": 8, "bez\u00fcglich": 8, "frage": [8, 9], "middlewar": 8, "plotli": [8, 19], "dash": 8, "verwendet": [8, 11, 16], "schon": 8, "eingebaut": 8, "scheint": 8, "gesamtkonzept": 8, "gewerk": 8, "vorzuliegen": 8, "sollten": [8, 13], "brauchbar": 8, "st\u00fcck": [8, 13], "herauskommen": 8, "damit": 8, "vielzahl": 8, "informationen": [8, 18], "funktionen": [8, 16], "zurechtkommt": 8, "l\u00f6sungsskizz": 8, "wobei": [8, 17], "jetzt": 8, "einig": [8, 12], "gui": [8, 11], "design": 8, "muster": [8, 12], "datensatz": [8, 12], "entwickelt": 8, "wasserfallmodel": 8, "bi": [8, 12, 14], "agilen": 8, "modellierung": [8, 11], "persistiert": 8, "irgendetwa": 8, "kleinen": 8, "anzufangen": 8, "anzuschauen": 8, "kontinuierlich": 8, "verbessern": [8, 17], "n\u00e4chster": 9, "fronleichnam": 9, "verschoben": 9, "09": [9, 13], "00": 9, "miro": 9, "bord": 9, "wireframediagrammen": 9, "anlag": 9, "sozial": [9, 19, 22], "unternehmensdetail": 9, "sicht": 9, "dankt": 9, "\u00fcberarbeiten": 9, "farbschema": 9, "\u00fcbersichten": 9, "weist": 9, "darauf": [9, 13], "hin": [9, 13], "zus\u00e4tzlich": 9, "quellmateri": 9, "stimmungen": [9, 19], "angezeigt": 9, "bisher": 9, "unklar": 9, "indirekt": 9, "verpfl\u00e4chtungen": 9, "n": 9, "spr\u00fcnge": 9, "detail": 9, "wert": [9, 12, 13], "einfluss": 9, "firmen": 9, "z\u00e4hle": 9, "personenverbindungen": 9, "juristisch": 9, "nat\u00fcrlich": 9, "getrennt": 9, "schichten": 9, "auftrennung": 9, "nat\u00fcrlichen": 9, "jiristischen": 9, "z\u00e4hlung": 9, "rank": 9, "anzahl": [9, 13], "verbindungen": [9, 11, 22], "kam": 9, "aber": [9, 12, 14], "abschlie\u00dfend": [9, 11, 18], "beantwortet": 9, "erster": 9, "entwurf": 9, "seminarpr\u00e4sentationen": 9, "softwaresystem": 11, "implementieren": 11, "formulieren": 11, "legen": 11, "eigenschaften": [11, 12], "modellieren": 11, "entwerfen": 11, "produkt": [11, 13], "beginn": 11, "wenig": 11, "eingeschr\u00e4nkt": 11, "m\u00f6glichkeit": [11, 14], "speichern": [11, 12, 16], "verlauf": 11, "l\u00f6sungsraum": 11, "bietet": [11, 12, 14], "datenbankl\u00f6sung": 11, "dateiablag": 11, "implementierend": 11, "festgelegt": 11, "model": [11, 12, 15, 16, 22], "unter": [11, 12], "sqlite": 11, "weg": 11, "spezifik": 11, "systemanforderungen": 11, "unspezifizierten": 11, "immer": [11, 14], "konkret": 11, "beantworten": 11, "iterativ": 11, "fragen": 11, "problem": 11, "anforderung": [11, 12, 16], "l\u00f6sen": 11, "ermittlung": 11, "100": [11, 13, 14], "auswahl": 11, "geeignet": [11, 14, 19], "erhobenen": 11, "visualisiert": 11, "evtl": 11, "durchsuchbar": 11, "ermitteln": 11, "\u00f6ffentlich": 11, "erfahren": 11, "werkzeug": 11, "sentimentanalys": 11, "durchzuf\u00fchren": 11, "rechtm\u00e4\u00dfig": 11, "gekl\u00e4rt": 11, "ermittelten": [11, 13], "gespeichert": [11, 12, 16], "text": [11, 15, 17], "mine": [11, 17], "betreiben": 11, "sech": [11, 17], "identifiziert": 11, "vertiefen": 11, "mitgli": 11, "cluster": [11, 16], "datenspeicherung": [11, 12], "xy": 11, "weil": 11, "abc": [11, 23], "legt": [11, 13], "team": 11, "definierten": [11, 12], "unterschieden": [11, 12], "zeichnet": 12, "effizi": 12, "vorstehenden": 12, "relev": 12, "m\u00f6glicht": 12, "optim": 12, "gem\u00e4\u00df": 12, "qualit\u00e4tskriterien": 12, "skalierbarkeit": [12, 16], "\u00e4": 12, "modelliert": 12, "passt": 12, "struktur": [12, 16], "handhabung": 12, "wo": 12, "ben\u00f6tigten": 12, "abgerufen": 12, "beispielhaft": 12, "ggf": 12, "panda": 12, "datafram": 12, "aussehen": 12, "hinter": 12, "verbergen": 12, "datenpunkt": 12, "meisten": 12, "numerisch": 12, "natur": [12, 17], "ander": 12, "datentypen": 12, "kennzahl": [12, 13], "entit\u00e4t": 12, "entlang": 12, "zeit": [12, 14], "achs": 12, "darstellen": [12, 17, 19], "nennenswert": 12, "beispiel": [12, 16, 17, 23], "herzfrequenz": 12, "menschen": 12, "sowi": [12, 18, 22], "b\u00f6rsennotiert": 12, "generel": [12, 14], "engl": 12, "metric": 12, "regelm\u00e4\u00dfigem": 12, "interval": 12, "ereignissen": 12, "event": 12, "unregelm\u00e4\u00dfigen": 12, "intervallen": 12, "vgl": 12, "influxdata": 12, "what": 12, "seri": [12, 19], "zentral": 12, "unver\u00e4nderbarkeit": 12, "immut": 12, "regel": 12, "reihenfolg": 12, "aufgenommen": 12, "sie": [12, 18], "normalerweis": 12, "lediglich": 12, "bestehend": 12, "reih": 12, "angehangen": 12, "nachtr\u00e4glich": 12, "mehr": [12, 13], "angepasst": 12, "entscheidend": 12, "besteht": 12, "zeitstempel": 12, "timestamp": 12, "zugeordneten": 12, "sensor": 12, "featur": 12, "prim\u00e4rschl\u00fcssel": 12, "fungieren": 12, "vorgesehen": 12, "lebensdau": 12, "retent": 12, "polici": 12, "hoher": 12, "frequenz": 12, "geschrieben": 12, "h\u00f6herem": 12, "alter": 12, "selten": 12, "gelesen": 12, "\u00fcblich": 12, "l\u00f6schen": 12, "aggregiert": 12, "langfristig": 12, "sparen": 12, "aggreg": 12, "gleichzeitig": 12, "einzeln": 12, "datens\u00e4tz": 12, "zeitraum": [12, 13], "abgefragt": [12, 16], "summ": [12, 13], "durchschnitt": 12, "zur\u00fcckgegeben": 12, "schreib": 12, "lese": 12, "high": 12, "write": [12, 21], "read": 12, "ratio": 12, "kurzen": 12, "gelegentlich": 12, "angemerkt": 12, "schreibend": 12, "zugriff": [12, 14, 16], "lesenden": 12, "volumen": 12, "\u00fcbertreffen": 12, "tdengin": 12, "characterist": 12, "vorher": 12, "durchgef\u00fchrten": 12, "relevanten": 12, "zeichnen": 12, "merkmal": 12, "basieren": 12, "j\u00e4hrlich": 12, "quartal": 12, "aufgestellten": 12, "resultiert": 12, "gering": 12, "datenfrequenz": 12, "hier": [12, 13], "min\u00fctlich": 12, "sek\u00fcndlich": 12, "weiteren": [12, 18, 22], "weiter": [12, 13, 16, 18], "jahresabschluss": 12, "gebunden": 12, "spiegelt": 12, "berechnung": [12, 13], "vergleich": [12, 13, 18, 19], "mehreren": 12, "wieder": 12, "ihr": [12, 18], "unterschiedlichen": 12, "zeiten": [12, 18], "selben": 12, "immerhin": 12, "realistisch": 12, "seinen": 12, "deutlich": 12, "\u00f6ffentlichkeit": 12, "verf\u00fcgung": [12, 18], "stellt": [12, 13], "abfrag": [12, 16], "lie\u00df": 12, "zwar": 12, "durchau": 12, "einf\u00fchrung": [12, 19, 22], "einschr\u00e4nkung": 12, "verkn\u00fcpfung": 12, "quartalsabschluss": 12, "folg": 12, "dessen": 12, "eignet": [12, 13], "basiert": [12, 22], "zentralen": 12, "speicherung": [12, 16], "verwaltung": [12, 16], "aktienkursen": 12, "folglich": 12, "aller": [12, 13], "einsatz": [12, 18], "bekannten": 12, "demzufolg": 12, "mag": 12, "basi": 12, "polyglot": 12, "persist": 12, "gesamtsicht": 12, "eignen": [12, 19], "stammdaten": [12, 16], "relationalen": 12, "db": 12, "abh\u00e4ngig": [12, 13], "ihrer": 12, "unternehmensform": 12, "aktiekursen": 12, "angereichert": 12, "ansatz": 12, "lohnenswert": 12, "effizient": 12, "unternehmensverflechtungen": 12, "vereinfachen": 12, "diesen": [12, 18], "anwendungszweck": 12, "spiel": 12, "gebracht": 12, "relationen": [12, 16], "leicht": 12, "traversierbar": 12, "speichert": 12, "daher": [12, 18, 22], "abzuw\u00e4gen": 12, "\u00fcbernehmen": 12, "f\u00fclle": 12, "anforderungsspezifischen": 12, "reduzieren": 12, "komplexit\u00e4t": 12, "gesamtsystem": 12, "gere": 12, "halten": 12, "geeigneten": 12, "zugang": 12, "extern": 12, "datenvisualisierung": 12, "schicht": 12, "web": [12, 18], "app": 12, "erm\u00f6glichen": 12, "graphql": 12, "sinnvol": 12, "erm\u00f6glicht": 12, "client": 12, "gesamt": 12, "datenbasi": 12, "durchforsten": 12, "datenbestand": 12, "abzufragen": 12, "server": 12, "resolv": 12, "problemlo": 12, "mehrer": 12, "oben": [12, 17], "angesprochen": 12, "kombinieren": 12, "erdiagram": 12, "o": 12, "veroeffentlicht": 12, "wirtschaftspruef": 12, "prueft": 12, "beinhaltet": 12, "branch": [12, 13], "operiert_in": 12, "agiert_": 12, "leitet": 12, "sitz": 13, "rechtsform": 13, "ag": 13, "kgaa": 13, "gmbh": 13, "ug": 13, "gr\u00fcndungsdatum": 13, "gesellschaft": 13, "innen": 13, "verteilung": 13, "anteil": 13, "h\u00f6he": 13, "vorsitzend": 13, "r": 13, "stellvertretung": 13, "wirtschaftspr\u00fcfung": 13, "fall": 13, "realen": 13, "eindeutig": 13, "schwierig": [13, 18], "w\u00e4ren": 13, "nachnamen": 13, "vornam": 13, "w\u00fcnschenswert": 13, "hgb": 13, "267": 13, "http": [13, 14], "www": [13, 14], "gesetz": 13, "__267": 13, "html": 13, "durchschnittlich": 13, "mitarbeiterzahl": [13, 18], "arbeitnehm": 13, "31": 13, "12": 13, "umsatzerl\u00f6s": 13, "angelehnt": 13, "wirtschaft": 13, "boersenkurs": 13, "boers": 13, "isin": 13, "secur": 13, "identif": 13, "number": 13, "wkn": 13, "wertpapierkennnumm": 13, "aktienkur": 13, "w\u00e4hrung": 13, "akti": 13, "dividend": 13, "dividendenrendit": 13, "aussch\u00fcttungsquot": 13, "marketkapitalisierung": 13, "anteilsschein": 13, "kur": 13, "kgv": 13, "kuv": 13, "marktkapitalisierung": 13, "wachstumsverh\u00e4ltni": 13, "peg": 13, "erwartet": [13, 16], "gewinnwachstum": 13, "kommenden": 13, "gesch\u00e4ftsjahr": 13, "handbuch": 13, "aktien": 13, "peter": 13, "seppelfrick": 13, "jahres\u00fcberschuss": 13, "ebt": 13, "gesamtkostenverfahren": 13, "8": 13, "umsatzkostenverfahren": 13, "fremdkapit": 13, "co": 13, "emissionen": 13, "unfallr": 13, "eigenkapitalanteil": 13, "fremdkapitalanteil": 13, "umschlagh\u00e4ufigkeit": 13, "lexoffic": 13, "lexikon": 13, "dienstleistungen": 13, "bestimmten": [13, 14], "abgesetzt": 13, "guv": 13, "ausgewiesen": 13, "bruttoumsatz": 13, "verkaufsprei": 13, "x": 13, "meng": 13, "nettoumsatz": 13, "erl\u00f6sschm\u00e4lerungen": 13, "rabatt": 13, "boni": 13, "skonti": 13, "umsatzsteu": 13, "bwl": 13, "wiki": 13, "unternehmensgewinn": 13, "angibt": 13, "gew\u00f6hnlichen": 13, "gesch\u00e4ftst\u00e4tigkeit": 13, "entsteht": 13, "oper": 13, "dar": [13, 18], "gibt": 13, "auskunft": 13, "effizienz": 13, "ertragskraft": 13, "fehlbetrag": 13, "steueraufwand": 13, "steuerertrag": 13, "au\u00dferordentlich": 13, "aufwand": 13, "ertrag": 13, "finanzaufwand": 13, "finanzertrag": 13, "verschiedenen": [13, 18, 19], "messung": 13, "operativen": 13, "ver\u00e4nderung": 13, "r\u00fcckschl\u00fcsse": 13, "zuk\u00fcnftig": [13, 16, 17], "rentabilit\u00e4t": 13, "verm\u00f6gen": 13, "aktiva": 13, "kapit": 13, "passiva": 13, "kriterium": 13, "anlageverm\u00f6gen": 13, "umlaufverm\u00f6gen": 13, "r\u00fcckstellungen": 13, "verbindlichkeiten": 13, "liefert": 13, "anhaltspunkt": 13, "daf\u00fcr": 13, "schnell": [13, 16], "w\u00e4chst": 13, "informiert": 13, "kapitalstruktur": 13, "geht": [13, 14, 19], "bilanz": 13, "gr\u00f6\u00dfer": 13, "abstand": 13, "eigenen": 13, "fremden": 13, "mittel": [13, 17], "umso": 13, "freier": 13, "unternehmensleitung": 13, "agieren": 13, "h\u00f6her": 13, "quot": 13, "desto": 13, "unabh\u00e4ngig": 13, "fremdkapitalgebern": 13, "gesamten": [13, 17], "anzeichen": 13, "zahlungsf\u00e4higkeit": 13, "kreditw\u00fcrdigkeit": 13, "sinkt": 13, "wirtschaftlich": 13, "stabilit\u00e4t": 13, "hohen": 13, "eingesetzt": [13, 18], "gefahr": 13, "insolvenz": 13, "steigt": 13, "niedrigen": 13, "eigenkapitalfinanzierung": 13, "eigenkapitalrentabilitaet": 13, "wirtschaftlichkeit": 13, "sinnhaftigkeit": 13, "kapitaleinsatz": 13, "misst": 13, "differiert": 13, "doppelt": 13, "eigenkapitalrendit": 13, "zin": 13, "gilt": 13, "kapitalzin": 13, "kapitalmarkt": 13, "viel": [13, 16], "vorhandenen": 13, "erwirtschaftet": 13, "oft": 13, "zur\u00fcck": 13, "gelangt": 13, "umsatzrentabilitaet": 13, "betrag": 13, "unternehm": 13, "euro": 13, "steigend": 13, "deutet": 13, "produktivit\u00e4t": 13, "bildet": 13, "effizien": 13, "ab": 13, "richtwert": 13, "gesamtkapitalrentabilitaet": 13, "relat": 13, "investierten": 13, "beurteilungsma\u00dfstad": 13, "vorteilhaft": 13, "insgesamt": [13, 19], "gr\u00f6\u00dfen": 13, "betrachtet": [13, 18, 19], "unternehmensgr\u00f6\u00df": 13, "vergleichsm\u00f6glichkeiten": 13, "zeitvergleich": 13, "perioden": 13, "hilf": 13, "zeitvergleichen": 13, "l\u00e4ngere": 13, "zeitr\u00e4um": 13, "lassen": [13, 16], "trend": 13, "zyklen": 13, "betriebsvergleich": 13, "gegen\u00fcberstellung": 13, "gleichen": 13, "branchendurchschnitt": 13, "free": 14, "500": 14, "tweet": 14, "per": 14, "month": 14, "appid": 14, "login": 14, "basic": 14, "enterpris": 14, "monthli": 14, "subscribt": 14, "tier": 14, "postman": 14, "besipiel": 14, "develop": 14, "com": 14, "en": 14, "doc": 14, "tutori": 14, "get": 14, "twitterdev": 14, "kostenlo": 14, "stunden": 14, "versp\u00e4tet": 14, "erreichabr": 14, "monat": 14, "abrufbar": 14, "anfragen": [14, 16], "tag": 14, "cor": 14, "local": 14, "host": 14, "extra": 14, "deutsch": 14, "org": 14, "": 14, "germani": 14, "kei": 14, "generieren": 14, "doku": 14, "wort": 14, "suchen": 14, "profession": 14, "support": 14, "librari": 14, "starker": 14, "nutzung": 14, "prei": 14, "angefragt": 14, "gut": 14, "marktanalysen": 14, "ersten": 14, "dpa": 14, "schlecht": 14, "beschrieben": [14, 17], "email": 14, "beantragt": 14, "demo": 14, "htx": 14, "mod": 14, "section_al": 14, "newsroom": 14, "offic": 14, "citi": 14, "keyword": 14, "police_officetyp": 14, "police_federalst": 14, "media": 14, "limit": 14, "languag": [14, 17], "companyinfo": 14, "6344": 14, "bund": 14, "dev": 14, "financeapi": 14, "net": 14, "deprec": 14, "dokumentiert": 14, "bing": 14, "espn": 14, "guardian": 14, "bbc": 14, "financi": [14, 15], "fallen": 14, "rau": 14, "kosten": 14, "verbunden": 14, "sport": 14, "kommentar": 14, "befassen": 14, "hatt": 14, "mal": 14, "abgeschaltet": 14, "irgendwi": 14, "abgreifen": 14, "specialis": 15, "sadli": 15, "isn": 15, "t": 15, "veri": 15, "good": 15, "doe": [15, 21], "experi": 15, "can": [15, 21], "found": 15, "here": 15, "jupyt": [15, 16], "ai": [15, 18, 19, 21], "ipynb": 15, "strukturierten": 16, "sollt": 16, "weiterhin": 16, "hinzuzuf\u00fcgen": 16, "sicherheit": 16, "unterst\u00fctzen": 16, "datenvor": 16, "unbefugtem": 16, "sch\u00fctzen": 16, "datensicherung": 16, "wiederherstellung": 16, "sicherung": 16, "leistung": 16, "perform": 16, "zweitrangig": 16, "hochdynamisch": 16, "ausserdem": 16, "framework": [16, 21], "einbinden": 16, "bevorzugten": 16, "austauschen": 16, "erwarten": 16, "stimmungsdaten": 16, "zeitseriendaten": 16, "abstimmung": 16, "bereichen": 16, "datenbeschaffung": 16, "formulierung": 16, "definier": 16, "reltional": 16, "kurzvorstellung": 16, "datenbanksystemen": 16, "abbildung": 16, "gepflegt": 16, "integriert": 16, "vorteil": 16, "einfach": 16, "datenbeziehungen": 16, "spezialisiert": 16, "datenytp": 16, "empfehlung": 16, "beachtet": 16, "empfehlungen": 16, "angebunden": 16, "notebook": 16, "unternehmensdaten": 16, "planung": 17, "gliederung": 17, "begriffsbestimmung": 17, "prozess": 17, "nlp": 17, "methoden": 17, "morphologisch": 17, "syntaktisch": 17, "grundlag": 17, "ontologi": 17, "gener": 17, "learn": 17, "teilgebiet": 17, "zusammenfassung": [17, 18, 22], "ausblick": [17, 18, 22], "abschnitt": [17, 19, 22], "gegliedert": 17, "begriff": [17, 22], "n\u00e4her": 17, "comput": 17, "linguist": 17, "abgegrenzt": 17, "folgt": 17, "zweit": 17, "hippner": 17, "rentzmann": 17, "2006": 17, "folgenden": 17, "schritt": 17, "eingeteilt": 17, "aufgabendefinit": 17, "dokumentenselekt": 17, "c": 17, "dokumentenaufbereitung": 17, "untersuchung": 17, "interpret": 17, "evalu": [17, 21], "f": 17, "anwendung": [17, 19], "darauffolgenden": 17, "dritten": 17, "drei": [17, 19], "phasen": 17, "process": 17, "schwerpunkt": 17, "analysetechniken": 17, "word": 17, "sens": 17, "disambigu": 17, "wsd": 17, "ned": 17, "liegen": [17, 22], "viert": 17, "widmen": 17, "einerseit": [17, 22], "dom\u00e4nenspezifisch": 17, "wissen": 17, "abbilden": 17, "dienen": 17, "etwa": 17, "andererseit": 17, "automatisch": 17, "semi": 17, "repr\u00e4sent": 17, "vorletzten": 17, "f\u00fcnften": 17, "durchleuchtet": 17, "methodik": 17, "funktionsweis": 17, "varianten": 17, "us": [17, 21], "case": 17, "ausgew\u00e4hlt": 17, "erl\u00e4utert": 17, "zudem": [17, 19], "bekannt": 17, "sentiw": 17, "sechst": 17, "liefern": 17, "geben": [17, 19], "richtung": 17, "gebiet": 17, "gehen": 17, "zielsetzung": [18, 22], "scrape": 18, "crawl": 18, "theori": [18, 22], "rechtlich": 18, "l\u00f6sungsans\u00e4tz": 18, "big": 18, "zunehmend": 18, "wichtigsten": [18, 22], "wirtschaftsg\u00fct": 18, "solch": 18, "subklass": 18, "jahresgewinn": 18, "analysieren": 18, "obwohl": 18, "gen\u00fcg": 18, "zeitungsartikeln": 18, "newslettern": 18, "dedizierten": 18, "aktienanalysen": 18, "finden": 18, "gestaltet": 18, "aufgrund": 18, "format": 18, "restriktionen": 18, "wege": 18, "eben": 18, "erheben": 18, "nennenswerten": 18, "geh\u00f6ren": 18, "bundesanzeig": 18, "wertvol": 18, "bezogen": 18, "wirtschaftlichen": 18, "erfolg": 18, "extrahieren": 18, "einheitlich": 18, "\u00fcberf\u00fchren": 18, "technischen": 18, "webseiten": 18, "gewinnen": 18, "abfragen": 18, "verf\u00fcgbar": 18, "rechltich": 18, "ber\u00fccksichtigung": 18, "rechtm\u00e4\u00dfigkeit": 18, "faktoren": 18, "flexibilit\u00e4t": 18, "simplizit\u00e4t": 18, "gezogen": [18, 19], "gegeben": [18, 19, 22], "best": 19, "practic": 19, "diagrammarten": 19, "anwendungsbereich": 19, "netzwerk": [19, 22], "betrachtung": 19, "d3block": 19, "pyvi": [19, 20], "bibliothek": 19, "unterst\u00fctzt": 19, "visualisierungen": 19, "nachteil": 19, "minimalbeispiel": 19, "blick": 19, "einzelnen": 19, "diagramm": 19, "gebraucht": 19, "ergeben": 19, "handlungsempfehlung": [19, 22], "visualisierung": 19, "steht": 19, "anschlie\u00dfend": 19, "besten": 19, "minimalbeispielen": 19, "analysiert": 19, "gew\u00fcnschten": 19, "aufgezeigt": [19, 22], "arbeit": [19, 22], "einblick": 19, "welt": 19, "unserem": 19, "helfen": 19, "richtigen": 19, "treffen": 19, "document": [19, 21], "medium": 19, "blog": 19, "networkx": [19, 20], "exampl": 19, "zentralit\u00e4tsma\u00df": 19, "visualisierungsideen": 19, "visualisierungsideem": 19, "toward": 19, "scienc": 19, "direct": 19, "toptal": 19, "my": 21, "coursework": 21, "explor": 21, "how": 21, "appli": 21, "theme": 21, "specif": 21, "There": 21, "ar": 21, "follow": 21, "thing": 21, "want": 21, "depend": 21, "manag": 21, "poetri": 21, "around": 21, "pre": 21, "commit": 21, "hook": 21, "thei": 21, "argument": 21, "against": 21, "each": 21, "add": 21, "runner": 21, "own": 21, "hardwar": 21, "build": 21, "piplin": 21, "action": 21, "linter": 21, "black": 21, "flake8": 21, "pylint": 21, "mypi": 21, "bandit": 21, "pip": 21, "audit": 21, "setup": 21, "pytest": 21, "abil": 21, "summari": 21, "lint": 21, "result": 21, "sonarqub": 21, "suffic": 21, "artifact": 21, "someth": 21, "like": 21, "wheel": 21, "docker": 21, "contain": 21, "deploy": 21, "file": 21, "startup": 21, "see": 21, "crash": 21, "first": 21, "shown": 21, "sphinx": 21, "deploi": 21, "collect": 21, "compos": 21, "kubernet": 21, "dependabot": 21, "upgrad": 21, "steadili": 21, "grow": 21, "applic": 21, "aufbau": 22, "graphentheori": 22, "begrifflich": 22, "sociometri": 22, "quantit": 22, "method": 22, "messen": 22, "sociogram": 22, "darstellt": 22, "offiziel": 22, "genannt": 22, "f8": 22, "2007": 22, "network": 22, "sna": 22, "untersuchen": 22, "sozialen": 22, "strukturen": 22, "netzwerken": 22, "graphtheori": 22, "transparentsregist": 22, "kritisch": 22, "reflexion": 22, "verpflechtungsanalys": 22, "vermittelt": 22, "projektess": 22, "angewendet": 22, "fundament": 22, "dient": 22, "grundlegen": 22, "netzstrukturen": 22, "beispielen": 22, "erl\u00e4uterung": 22, "darauffolgend": 22, "tiefer": 22, "eingetaucht": 22, "auseinandergesetzt": 22, "repr\u00e4sentiert": 22, "ide": 22, "st\u00e4rken": 22, "veranschaulichung": 22, "hauptteil": 22, "gezeigt": 22, "komponenten": 22, "gebildet": 22, "m\u00fcssten": 22, "aufbereitet": 22, "bauen": 22, "formel": 22, "algorithmen": 22, "n\u00f6tig": 22, "orientiert": 22, "nachvollziebar": 22, "vermitteln": 22, "abgeschlossen": 22, "werk": 22, "kritischen": 22, "gefolgt": 22, "max": 23, "mustermann": 23}, "objects": {"": [[1, 0, 0, "-", "aki_prj23_transparenzregister"]], "aki_prj23_transparenzregister": [[2, 0, 0, "-", "black_test"]]}, "objtypes": {"0": "py:module"}, "objnames": {"0": ["py", "module", "Python module"]}, "titleterms": {"pflichtenheft": [0, 11], "kapitalgesellschaften": [0, 8, 12, 18], "referenzregist": 0, "histori": 0, "der": [0, 8, 11, 13, 16, 20], "dokumentenvers": 0, "name": 0, "inhaltsverzeichni": [0, 22], "einleitung": 0, "allgemein": [0, 16], "ziel": 0, "und": [0, 8, 13, 16], "zweck": 0, "de": [0, 8, 12, 22], "dokument": 0, "ausgangssitu": 0, "projektbezug": 0, "abk\u00fcrzungen": 0, "schnittstellen": 0, "bezug": 0, "zu": [0, 8], "anderen": 0, "dokumenten": 0, "konzept": 0, "rahmenbedingungen": 0, "konzept_und_rahmenbedingung": 0, "anbiet": 0, "ziele_anbiet": 0, "nutzen": 0, "anwend": 0, "ziele_anwend": 0, "benutz": 0, "zielgruppen": 0, "systemvoraussetzungen": 0, "option": 0, "ressourcen": 0, "funktional": 0, "anforderungen": [0, 11, 16], "f_anforderung": 0, "muss": 0, "f100": 0, "f110": 0, "f120": 0, "soll": 0, "f200": 0, "f210": 0, "f220": 0, "nicht": 0, "nf_anforderung": 0, "n100": 0, "n200": 0, "n210": 0, "kann": 0, "n300": 0, "n310": 0, "anforderungsverfolgung": 0, "den": [0, 12], "spezifikationen": 0, "verfolgung_spezifik": 0, "abnahmekriterien": 0, "vorgehen": 0, "zur": [0, 11, 13, 16], "ausgangspr\u00fcfung": 0, "lieferumfang": 0, "anhang": 0, "aki_prj23_transparenzregist": [1, 2, 3, 10], "packag": 1, "submodul": 1, "modul": [1, 2, 3, 4], "content": 1, "black_test": 2, "flake8_test": 3, "transparenzregist": [4, 11, 12, 16], "document": 4, "project": 4, "plane": 4, "meet": 4, "note": 4, "research": [4, 15], "indic": 4, "tabl": 4, "weekli": [5, 6, 7, 8, 9, 23], "1": [5, 11, 16], "30": 5, "03": 5, "2023": [5, 6, 7, 8, 9], "teilnehm": [5, 6, 7, 8, 9, 23], "themen": [5, 6, 7, 8, 9, 20, 23], "abgeleitet": [5, 6, 7, 8, 9, 23], "action": [5, 6, 7, 8, 9, 23], "item": [5, 6, 7, 8, 9, 23], "2": [6, 11, 14, 16], "13": 6, "04": [6, 7], "3": [7, 11, 16], "05": [7, 8, 9], "organisatorisch": [7, 8], "absprachen": [7, 8], "aktuel": [7, 8], "projektstand": [7, 8], "4": [8, 11, 16], "11": 8, "zum": [8, 11, 20], "umfang": 8, "inhalt": [8, 18, 19], "seminararbeit": [8, 16, 20], "vorstellung": 8, "abstract": [8, 18, 19, 22], "dev": [8, 21], "op": [8, 21], "philipp": 8, "horstenkamp": 8, "automatisiert": [8, 18], "datenextrakt": 8, "au": [8, 11, 18], "internetquellen": [8, 18], "al": [8, 18], "grundlag": [8, 18], "f\u00fcr": [8, 12, 16, 18], "die": [8, 12, 16, 18], "analys": [8, 16, 18], "von": [8, 11, 13, 16, 18, 19], "tristan": 8, "nold": 8, "datenspeicherung": [8, 16], "sebastian": 8, "zeleni": 8, "verpflechtungsanalys": 8, "tim": 8, "ronneburg": 8, "text": 8, "mine": 8, "sascha": 8, "zhu": 8, "datenvisualisierung": [8, 19, 20], "kim": 8, "mesewinkel": 8, "riss": 8, "feedback": 8, "herrn": 8, "prof": 8, "arinir": 8, "5": [9, 11, 16], "25": 9, "problemstellung": 11, "l\u00f6sungskonzept": 11, "requir": 11, "engin": 11, "projektvorstellung": 11, "identifik": 11, "innerhalb": 11, "grupp": 11, "dom\u00e4nen": 11, "l\u00f6sungsfindung": 11, "technisch": 11, "fachlich": 11, "l\u00f6sungen": 11, "priorisierung": 11, "6": 11, "timeseri": 12, "deutsch": 12, "zeitreihen": 12, "im": 12, "kontext": 12, "leitfragen": 12, "modellierung": 12, "relevant": 12, "kennzahlen": [12, 13], "ist": 12, "us": 12, "case": 12, "geeignet": 12, "\u00fcberblick": 12, "\u00fcber": 12, "datenrelationen": 12, "daten": [13, 16, 18], "unternehmen": 13, "basisdaten": 13, "firma": 13, "personen": 13, "bewertung": 13, "gr\u00f6\u00dfe": 13, "kapitalgesellschaft": 13, "bei": 13, "aktiengesellschaften": 13, "m\u00f6glich": 13, "unternehmensbewertung": 13, "erfolgskennzahlen": 13, "finanzkennzahlen": 13, "rentabilit\u00e4tskennzahlen": 13, "nichtfinanziel": 13, "gew\u00fcnscht": 13, "kurzdefinitionen": 13, "umsatz": 13, "erl\u00f6": 13, "ebit": 13, "earn": 13, "befor": 13, "interest": 13, "tax": 13, "gewinn": 13, "vor": 13, "zinsen": 13, "steuern": 13, "betriebsergebni": 13, "operativ": 13, "marg": 13, "bilanzsumm": 13, "gesamtverm\u00f6gen": 13, "gesamtkapit": 13, "eigenkapitalquot": 13, "fremdkapitalquot": 13, "verschuldungsgrad": 13, "eigenkapitalrentabilit\u00e4t": 13, "return": 13, "equiti": 13, "roe": 13, "gesamtkapitalumschlag": 13, "kapitalumschlag": 13, "umschlagsh\u00e4ufigkeit": 13, "umsatzrentabilit\u00e4t": 13, "umsatzrendit": 13, "umsatzmarg": 13, "nettomarg": 13, "gesamtkapitalrentabilit\u00e4t": 13, "invest": 13, "roi": 13, "kapitalrendit": 13, "fazit": 13, "nachrichtenquellen": 14, "twitter": 14, "api": 14, "v2": 14, "access": 14, "level": 14, "newsapi": 14, "bloomberg": 14, "new": 14, "york": 14, "time": 14, "presseport": 14, "tagesschau": 14, "0": 14, "yahoo": 14, "financ": 14, "googl": 14, "sonstig": 14, "central": 15, "sentiment": 15, "analysi": 15, "finbert": 15, "aufgab": 16, "inhaltlich": 16, "skizz": 16, "thematik": 16, "an": 16, "datenbank": 16, "datenarten": 16, "strukturiert": 16, "unstrukturiert": 16, "arten": 16, "datenbanken": 16, "relat": 16, "graph": 16, "zeitserien": 16, "db": 16, "relational": 16, "datenbankmodel": 16, "verteilt": 16, "oder": 16, "ein": 16, "system": 16, "auswahl": 16, "datenbanksystem": 16, "anbindung": 16, "front": 16, "backend": 16, "abfragen": 16, "extrakt": 18, "gliederung": 18, "seminarthema": 19, "geplant": 19, "erst": 19, "sammlung": 19, "referenzen": 19, "thema": 20, "python": 20, "bibliotheken": 20, "roadmap": 21, "verflechtungsanalys": 22, "entwurf": 22, "stichpunkt": 22, "x": 23, "dd": 23, "mm": 23, "yyyi": 23, "timelin": 24}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"Pflichtenheft: Kapitalgesellschaften referenzregister": [[0, "pflichtenheft-kapitalgesellschaften-referenzregister"]], "Historie der Dokumentenversion ": [[0, "historie-der-dokumentenversion"]], "Inhaltsverzeichnis ": [[0, "inhaltsverzeichnis"]], "Einleitung ": [[0, "einleitung"]], "Allgemeines ": [[0, "allgemeines"]], "Ziel und Zweck des Dokuments ": [[0, "ziel-und-zweck-des-dokuments"]], "Ausgangssituation ": [[0, "ausgangssituation"]], "Projektbezug ": [[0, "projektbezug"]], "Abk\u00fcrzungen ": [[0, "abkurzungen"]], "Schnittstellen/ Bezug zu anderen Dokumenten ": [[0, "schnittstellen-bezug-zu-anderen-dokumenten"]], "Konzept und Rahmenbedingungen ": [[0, "konzept-und-rahmenbedingungen"]], "Ziele des Anbieters ": [[0, "ziele-des-anbieters"]], "Ziele und Nutzen des Anwenders ": [[0, "ziele-und-nutzen-des-anwenders"]], "Benutzer / Zielgruppen ": [[0, "benutzer-zielgruppen"]], "Systemvoraussetzungen (Optional) ": [[0, "systemvoraussetzungen-optional"]], "Ressourcen (Optional) ": [[0, "ressourcen-optional"]], "Funktionale Anforderungen ": [[0, "funktionale-anforderungen"]], "Muss Ziele": [[0, "muss-ziele"], [0, "id1"]], "F100 ": [[0, "f100"]], "F110 ": [[0, "f110"]], "F120 ": [[0, "f120"]], "Soll Ziele": [[0, "soll-ziele"], [0, "id2"]], "F200 ": [[0, "f200"]], "F210 ": [[0, "f210"]], "F220 ": [[0, "f220"]], "Nicht-Funktionale Anforderungen ": [[0, "nicht-funktionale-anforderungen"]], "N100 ": [[0, "n100"]], "N200 ": [[0, "n200"]], "N210 ": [[0, "n210"]], "Kann Ziele": [[0, "kann-ziele"]], "N300 ": [[0, "n300"]], "N310 ": [[0, "n310"]], "Anforderungsverfolgung zu den Spezifikationen ": [[0, "anforderungsverfolgung-zu-den-spezifikationen"]], "Abnahmekriterien und Vorgehen zur Ausgangspr\u00fcfung ": [[0, "abnahmekriterien-und-vorgehen-zur-ausgangsprufung"]], "Lieferumfang ": [[0, "lieferumfang"]], "Anhang / Ressourcen ": [[0, "anhang-ressourcen"]], "aki_prj23_transparenzregister package": [[1, "aki-prj23-transparenzregister-package"]], "Submodules": [[1, "submodules"]], "Module contents": [[1, "module-aki_prj23_transparenzregister"]], "aki_prj23_transparenzregister.black_test module": [[2, "module-aki_prj23_transparenzregister.black_test"]], "aki_prj23_transparenzregister.flake8_test module": [[3, "aki-prj23-transparenzregister-flake8-test-module"]], "Transparenzregister Documentation": [[4, "transparenzregister-documentation"]], "Project planing": [[4, null]], "Meeting Notes:": [[4, null]], "Research": [[4, null]], "Modules": [[4, null]], "Indices and tables": [[4, "indices-and-tables"]], "Weekly 1: 30.03.2023": [[5, "weekly-1-30-03-2023"]], "Teilnehmer": [[5, "teilnehmer"], [6, "teilnehmer"], [7, "teilnehmer"], [8, "teilnehmer"], [9, "teilnehmer"], [23, "teilnehmer"]], "Themen": [[5, "themen"], [6, "themen"], [7, "themen"], [8, "themen"], [9, "themen"], [23, "themen"]], "Abgeleitete Action Items": [[5, "abgeleitete-action-items"], [6, "abgeleitete-action-items"], [7, "abgeleitete-action-items"], [8, "abgeleitete-action-items"], [9, "abgeleitete-action-items"], [23, "abgeleitete-action-items"]], "Weekly 2: 13.04.2023": [[6, "weekly-2-13-04-2023"]], "Weekly 3: 04.05.2023": [[7, "weekly-3-04-05-2023"]], "Organisatorische Absprachen:": [[7, "organisatorische-absprachen"]], "Aktueller Projektstand": [[7, "aktueller-projektstand"], [8, "aktueller-projektstand"]], "Weekly 4: 11.05.2023": [[8, "weekly-4-11-05-2023"]], "Organisatorische Absprachen zum Umfang und Inhalt der Seminararbeit:": [[8, "organisatorische-absprachen-zum-umfang-und-inhalt-der-seminararbeit"]], "Vorstellung des Abstracts der Seminararbeit zu \u201cDev Ops\u201d (Philipp Horstenkamp):": [[8, "vorstellung-des-abstracts-der-seminararbeit-zu-dev-ops-philipp-horstenkamp"]], "Vorstellung des Abstracts der Seminararbeit zu \u201cAutomatisierte Datenextraktion aus Internetquellen als Grundlage f\u00fcr die Analyse von Kapitalgesellschaften\u201d (Tristan Nolde):": [[8, "vorstellung-des-abstracts-der-seminararbeit-zu-automatisierte-datenextraktion-aus-internetquellen-als-grundlage-fur-die-analyse-von-kapitalgesellschaften-tristan-nolde"]], "Vorstellung des Abstracts der Seminararbeit zu \u201cDatenspeicherung\u201d (Sebastian Zeleny):": [[8, "vorstellung-des-abstracts-der-seminararbeit-zu-datenspeicherung-sebastian-zeleny"]], "Vorstellung des Abstracts der Seminararbeit zu \u201cVerpflechtungsanalyse\u201d (Tim Ronneburg):": [[8, "vorstellung-des-abstracts-der-seminararbeit-zu-verpflechtungsanalyse-tim-ronneburg"]], "Vorstellung des Abstracts der Seminararbeit zu \u201cText Mining\u201d (Sascha Zhu):": [[8, "vorstellung-des-abstracts-der-seminararbeit-zu-text-mining-sascha-zhu"]], "Vorstellung des Abstracts der Seminararbeit zu \u201cDatenvisualisierung\u201d (Kim Mesewinkel-Risse):": [[8, "vorstellung-des-abstracts-der-seminararbeit-zu-datenvisualisierung-kim-mesewinkel-risse"]], "Feedback von Herrn Prof. Arinir:": [[8, "feedback-von-herrn-prof-arinir"]], "Weekly 5: 25.05.2023": [[9, "weekly-5-25-05-2023"]], "aki_prj23_transparenzregister": [[10, "aki-prj23-transparenzregister"]], "Von der Problemstellung zum L\u00f6sungskonzept": [[11, "von-der-problemstellung-zum-losungskonzept"]], "Requirements Engineering Transparenzregister": [[11, "requirements-engineering-transparenzregister"]], "1. Anforderungen aus Projektvorstellung": [[11, "anforderungen-aus-projektvorstellung"]], "2. Identifikation von Anforderungen innerhalb der Gruppe": [[11, "identifikation-von-anforderungen-innerhalb-der-gruppe"]], "3. Identifikation von Dom\u00e4nen zur L\u00f6sungsfindung": [[11, "identifikation-von-domanen-zur-losungsfindung"]], "4. technische/fachliche L\u00f6sungen": [[11, "technische-fachliche-losungen"]], "5. Priorisierung von Anforderungen": [[11, "priorisierung-von-anforderungen"]], "6. Pflichtenheft": [[11, "pflichtenheft"]], "Timeseries (deutsch: Zeitreihen) im Kontext des Transparenzregisters Kapitalgesellschaften": [[12, "timeseries-deutsch-zeitreihen-im-kontext-des-transparenzregisters-kapitalgesellschaften"]], "Leitfragen": [[12, "leitfragen"]], "Timeseries": [[12, "timeseries"]], "Modellierung relevanter Kennzahlen": [[12, "modellierung-relevanter-kennzahlen"]], "Ist die Timeseries Modellierung f\u00fcr den Use Case geeignet?": [[12, "ist-die-timeseries-modellierung-fur-den-use-case-geeignet"]], "\u00dcberblick \u00fcber Datenrelationen": [[12, "uberblick-uber-datenrelationen"]], "Daten und Kennzahlen von Unternehmen": [[13, "daten-und-kennzahlen-von-unternehmen"]], "Basisdaten der Firma": [[13, "basisdaten-der-firma"]], "Personen": [[13, "personen"]], "Bewertung der Gr\u00f6\u00dfe der Kapitalgesellschaft": [[13, "bewertung-der-grosze-der-kapitalgesellschaft"]], "Kennzahlen bei Aktiengesellschaften": [[13, "kennzahlen-bei-aktiengesellschaften"]], "M\u00f6gliche Kennzahlen zur Unternehmensbewertung": [[13, "mogliche-kennzahlen-zur-unternehmensbewertung"]], "Erfolgskennzahlen": [[13, "erfolgskennzahlen"]], "Finanzkennzahlen": [[13, "finanzkennzahlen"]], "Rentabilit\u00e4tskennzahlen": [[13, "rentabilitatskennzahlen"]], "Nichtfinanzielle Kennzahlen": [[13, "nichtfinanzielle-kennzahlen"]], "Gew\u00fcnschte Kennzahlen": [[13, "gewunschte-kennzahlen"]], "Kurzdefinitionen": [[13, "kurzdefinitionen"]], "Umsatz (Erl\u00f6s)": [[13, "umsatz-erlos"]], "EBIT (Earnings Before Interest and Taxes/Gewinn vor Zinsen und Steuern/Betriebsergebnis/Operativer Gewinn)": [[13, "ebit-earnings-before-interest-and-taxes-gewinn-vor-zinsen-und-steuern-betriebsergebnis-operativer-gewinn"]], "EBIT-Marge": [[13, "ebit-marge"]], "Bilanzsumme (Gesamtverm\u00f6gen/Gesamtkapital)": [[13, "bilanzsumme-gesamtvermogen-gesamtkapital"]], "Eigenkapitalquote": [[13, "eigenkapitalquote"]], "Fremdkapitalquote": [[13, "fremdkapitalquote"]], "Verschuldungsgrad": [[13, "verschuldungsgrad"]], "Eigenkapitalrentabilit\u00e4t (Return on Equity ROE)": [[13, "eigenkapitalrentabilitat-return-on-equity-roe"]], "Gesamtkapitalumschlag (Kapitalumschlag/Umschlagsh\u00e4ufigkeit)": [[13, "gesamtkapitalumschlag-kapitalumschlag-umschlagshaufigkeit"]], "Umsatzrentabilit\u00e4t (Umsatzrendite/Umsatzmarge/Nettomarge)": [[13, "umsatzrentabilitat-umsatzrendite-umsatzmarge-nettomarge"]], "Gesamtkapitalrentabilit\u00e4t (Return on Investment ROI, Kapitalrendite)": [[13, "gesamtkapitalrentabilitat-return-on-investment-roi-kapitalrendite"]], "Fazit": [[13, "fazit"]], "Nachrichtenquellen": [[14, "nachrichtenquellen"]], "Twitter API v2": [[14, "twitter-api-v2"]], "Access Levels": [[14, "access-levels"]], "NewsAPI": [[14, "newsapi"]], "Bloomberg API": [[14, "bloomberg-api"]], "New York Times API": [[14, "new-york-times-api"]], "PressePortal": [[14, "presseportal"]], "Tagesschau API 2.0": [[14, "tagesschau-api-2-0"]], "Yahoo finance API": [[14, "yahoo-finance-api"]], "Google News API": [[14, "google-news-api"]], "Sonstiges": [[14, "sonstiges"]], "Research Central": [[15, "research-central"]], "Sentiment Analysis": [[15, "sentiment-analysis"]], "FinBert": [[15, "finbert"]], "Aufgabe: Inhaltliche Skizze f\u00fcr die Seminararbeit zur Thematik Datenspeicherung": [[16, "aufgabe-inhaltliche-skizze-fur-die-seminararbeit-zur-thematik-datenspeicherung"]], "1. Allgemeine Anforderungen an Datenbank": [[16, "allgemeine-anforderungen-an-datenbank"]], "2. Datenarten": [[16, "datenarten"]], "2.1 strukturierte Daten": [[16, "strukturierte-daten"]], "2.2 unstrukturierte Daten": [[16, "unstrukturierte-daten"]], "3. Arten von Datenbanken": [[16, "arten-von-datenbanken"]], "3.1 Relational": [[16, "relational"]], "3.2 Graph": [[16, "graph"]], "3.3 Zeitserien": [[16, "zeitserien"]], "4. DBS Transparenzregister": [[16, "dbs-transparenzregister"]], "4.1 relationales Datenbankmodell": [[16, "relationales-datenbankmodell"]], "4.2 verteilte Datenbank oder ein System": [[16, "verteilte-datenbank-oder-ein-system"]], "4.3 Analyse zur Auswahl eines Datenbanksystems": [[16, "analyse-zur-auswahl-eines-datenbanksystems"]], "4.4 Anbindung an Front- und Backend": [[16, "anbindung-an-front-und-backend"]], "4.5 Abfragen in der Datenbank": [[16, "abfragen-in-der-datenbank"]], "Abstract: Automatisierte Daten Extraktion aus Internetquellen als Grundlage f\u00fcr die Analyse von Kapitalgesellschaften": [[18, "abstract-automatisierte-daten-extraktion-aus-internetquellen-als-grundlage-fur-die-analyse-von-kapitalgesellschaften"]], "Gliederung": [[18, "gliederung"]], "Inhalt": [[18, "inhalt"]], "Seminarthema: Datenvisualisierung": [[19, "seminarthema-datenvisualisierung"]], "Geplanter Inhalt:": [[19, "geplanter-inhalt"]], "Abstract:": [[19, "abstract"]], "Erste Sammlung von Referenzen:": [[19, "erste-sammlung-von-referenzen"]], "Themen in der Seminararbeit zum Thema Datenvisualisierung": [[20, "themen-in-der-seminararbeit-zum-thema-datenvisualisierung"]], "Python Bibliotheken": [[20, "python-bibliotheken"]], "Dev Ops": [[21, "dev-ops"]], "Roadmap": [[21, "roadmap"]], "Verflechtungsanalyse": [[22, "verflechtungsanalyse"]], "Entwurf des Inhaltsverzeichnis + Stichpunkte": [[22, "entwurf-des-inhaltsverzeichnis-stichpunkte"]], "Abstract": [[22, "abstract"]], "Weekly X: DD.MM.YYYY": [[23, "weekly-x-dd-mm-yyyy"]], "Timeline": [[24, "timeline"]]}, "indexentries": {"aki_prj23_transparenzregister": [[1, "module-aki_prj23_transparenzregister"]], "module": [[1, "module-aki_prj23_transparenzregister"], [2, "module-aki_prj23_transparenzregister.black_test"]], "aki_prj23_transparenzregister.black_test": [[2, "module-aki_prj23_transparenzregister.black_test"]]}}) \ No newline at end of file diff --git a/html/seminararbeiten/3_Datenspeicherung.html b/html/seminararbeiten/3_Datenspeicherung.html new file mode 100644 index 0000000..c9d7cab --- /dev/null +++ b/html/seminararbeiten/3_Datenspeicherung.html @@ -0,0 +1,227 @@ + + + + + + + Aufgabe: Inhaltliche Skizze für die Seminararbeit zur Thematik Datenspeicherung — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + View page source +
  • +
+
+
+
+
+ +
+

Aufgabe: Inhaltliche Skizze für die Seminararbeit zur Thematik Datenspeicherung

+
+
+

1. Allgemeine Anforderungen an Datenbank

+
    +
  • Speicherung von strukturierten Daten, wie Kennzahlen, Stammdaten

  • +
  • Skalierbarkeit: Datenbank sollte skalierbar sein, um zukünftige Daten weiterhin zu speichern und weitere Unternehmen hinzuzufügen

  • +
  • Sicherheit: Die Datenbank muss Funktionen unterstützen, um die Datenvor unbefugtem Zugriff zu schützen.

  • +
  • **Datensicherung- und Wiederherstellung: ** Die Datenbank muss Funktionen zur Sicherung und Wiederherstellung unterstützen.

  • +
  • Leistung: Die Performance der Datenbank ist eher zweitrangig, da die Abfrage nicht hochdynamisch sein muss. Ausserdem werden nicht viele Anfragen erwartet.

  • +
  • Integration: Die Datenbank muss sich in ein Python Framework einbinden lassen und mit dem bevorzugten Frontend Daten austauschen können.

  • +
+
+
+

2. Datenarten

+

Welche Daten erwarten wir im Projekt?
+Cluster, wie z.B. Stammdaten, Stimmungsdaten, Social Graph, Zeitseriendaten/Historien

+
+

Abstimmung mit den Bereichen Textmining und Datenbeschaffung über verwendete Daten und Formulierung von Anforderungen an Daten.

+
+
+

2.1 strukturierte Daten

+

Was sind strukturierte Daten?

+
+
+

2.2 unstrukturierte Daten

+

Was sind unstrukturierte Daten?

+
+

Definiere eine Anforderung an die Struktur der Daten.

+
+
+
+
+

3. Arten von Datenbanken

+
+

3.1 Relational

+

Was ist eine reltionale Datenbank? +Wie werden Daten gespeichert? +Beispiel für relationale Datenbank

+
+
+

3.2 Graph

+

Was ist eine Graph Datenbank? +Wie werden Daten gespeichert? +Beispiel für Graph Datenbank

+
+
+

3.3 Zeitserien

+

Was ist eine Zeitserien Datenbank? +Wie werden Daten gespeichert? +Beispiel für Zeitserien Datenbank

+
+

Kurzvorstellung von Datenbanksystemen

+
+
+
+
+

4. DBS Transparenzregister

+
+

4.1 relationales Datenbankmodell

+
+

Modell zur Abbildung der Relationen im Projekt Transparenzregister

+
+
+
+

4.2 verteilte Datenbank oder ein System

+

Ein DBS: Wenn nur ein Datenbanksystem verwendet wird, muss nur ein System gepflegt und integriert werden.

+
    +
  • Vorteil: einfache Verwaltung und schnelle Abfrage von Datenbeziehungen

  • +
+

verteiltes System: spezialisierte Datenbank für jeden Datenytp, wie z.B. Zeitseriendaten oder Graph Daten

+
+

Definiere eine Empfehlung/Anforderung für das Projekt Transparenzregister.

+
+
+
+

4.3 Analyse zur Auswahl eines Datenbanksystems

+

Was sollte bei der Auswahl eines Datenbanksystems beachtet werden?

+
+

Empfehlungen für DBS-Auswahl

+
+
+
+

4.4 Anbindung an Front- und Backend

+

Wie kann das DBS an das Front- und Backend angebunden werden?

+
+

Jupyter Notebook mit Beispiel

+
+
+
+

4.5 Abfragen in der Datenbank

+

Wie können Unternehmensdaten abgefragt werden? +Wie können Verflechtungen abgefragt werden?

+
+

Jupyter Notebook mit Beispiel

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.html b/html/seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.html new file mode 100644 index 0000000..d46822f --- /dev/null +++ b/html/seminararbeiten/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.html @@ -0,0 +1,153 @@ + + + + + + + <no title> — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Abstract/Planung der Seminararbeit zu “Text Mining”

+

Sascha Zhu

+

10.05.2023

+

Gliederung

+
    +
  1. Einleitung und Begriffsbestimmung

  2. +
  3. Text Mining Prozess

  4. +
  5. Verwendung von NLP-Methoden für das Text Mining

    +

    3.1 Morphologische Textanalyse

    +

    3.2 Syntaktische Textanalyse

    +

    3.3 Semantische Textanalyse

    +
  6. +
  7. Ontologien und Text Mining

    +

    4.1 Verwendung von Ontologien als Grundlage der Textanalyse

    +

    4.2 Generierung von Ontologien mittels Text Mining (“ontology generation”/”ontology learning” )

    +
  8. +
  9. Sentiment-Analyse als Teilgebiet des Text Minings

  10. +
  11. Zusammenfassung und Ausblick

  12. +
+

Die Seminararbeit zu “Text Mining” soll in die oben genannten sechs Abschnitte gegliedert werden.

+

Nach einer Einleitung, in der der Begriff “Text Mining” näher definiert wird und gegenüber “Data Mining” und “Computational Linguistics” abgegrenzt wird, folgt der zweite Abschnitt zum Text Mining Prozess, der nach Hippner u. Rentzmann (2006) in die folgenden sechs Schritte eingeteilt wird: (a) Aufgabendefinition; (b) Dokumentenselektion; (c) Dokumentenaufbereitung; (d) Untersuchung mit Text-Mining-Methoden; (e) Interpretation und Evaluation; (f) Anwendung der Ergebnisse.

+

Im darauffolgenden dritten Abschnitt zur Verwendung von NLP-Methoden für das Text Mining werden die drei Phasen des Natural Language Processings (NLP), d.h. die morphologische, syntaktische und semantische Textanalyse, näher dargestellt, wobei der Schwerpunkt auf die semantische Analysetechniken wie z.B. “Word Sense Disambiguation” (WSD) und “Named Entity Recognition” (NED) liegen soll.

+

Der vierte Abschnitt soll sich dem Thema “Ontologien und Text Mining” widmen. Einerseits können Ontologien, die domänenspezifisches Wissen abbilden, als Grundlage für NLP-Methoden dienen, um etwa die semantische Textanalyse zu verbessern. Andererseits können mittels Text Mining automatisch bzw. semi-automatisch Ontologien als Repräsentation der Text-Mining-Ergebnisse erstellt werden (“ontology generation”/”ontology learning”).

+

Im vorletzten, fünften Analyse soll die Sentiment-Analyse als Teilgebiet des Text Mining durchleuchtet werden. Dieser Abschnitt soll den Schwerpunkt der gesamten Seminararbeit darstellen. Die Methodik, Funktionsweise, Varianten und Use Cases der Sentiment Analyse sollen anhand ausgewählter Beispiele erläutert werden. Zudem sollen auch bekannte Sentiment-Analyse-Tools wie z.B. FinBERT, VADER, SentiWS etc. näher beschrieben werden.

+

Am Ende der Seminararbeit soll der sechste Abschnitt eine Zusammenfassung liefern und einen Ausblick darüber geben, in welche Richtung die zukünftige Entwicklung auf dem Gebiet des Text Minings gehen wird.

+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/seminararbeiten/Abstract_Data_Extraction.html b/html/seminararbeiten/Abstract_Data_Extraction.html new file mode 100644 index 0000000..17db67f --- /dev/null +++ b/html/seminararbeiten/Abstract_Data_Extraction.html @@ -0,0 +1,168 @@ + + + + + + + Abstract: Automatisierte Daten Extraktion aus Internetquellen als Grundlage für die Analyse von Kapitalgesellschaften — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + View page source +
  • +
+
+
+
+
+ +
+

Abstract: Automatisierte Daten Extraktion aus Internetquellen als Grundlage für die Analyse von Kapitalgesellschaften

+
+

Gliederung

+
    +
  1. Einleitung (Zielsetzung/Problemstellung, Vorgehen)

  2. +
  3. Web Scraping/Crawling

    +
      +
    1. Definition und Theorie

    2. +
    3. Technologien

    4. +
    5. Umsetzung

    6. +
    +
  4. +
  5. RSS Feeds

    +
      +
    1. Definition und Theorie

    2. +
    3. Technologien

    4. +
    5. Umsetzung

    6. +
    +
  6. +
  7. APIs

    +
      +
    1. Definition und Theorie

    2. +
    3. Technologien

    4. +
    5. Umsetzung

    6. +
    +
  8. +
  9. Rechtliche Rahmenbedingungen

  10. +
  11. Vergleich der Lösungsansätze

  12. +
  13. Zusammenfassung

  14. +
+
+
+

Inhalt

+

In Zeiten von Big Data und AI stellen Daten und ihre Verfügbarkeit zunehmend eines der wichtigsten Wirtschaftsgüter dar. Als solches können sie auch eingesetzt werden, um Kapitalgesellschaften (eine Subklasse von Unternehmen) anhand verschiedener Kennzahlen wie der Mitarbeiterzahl oder dem Jahresgewinn zu analysieren. Obwohl solche Daten zu Genüge in Zeitungsartikeln, Newslettern oder dedizierten Aktienanalysen zu finden sind, so gestaltet sich eine automatisierte Extraktion dieser Daten aufgrund verschiedener Formate sowie weiterer Restriktionen schwierig.

+

Daher sollen im Rahmen dieser Seminararbeit verschiedene Wege betrachtet werden, die eben diese Daten erheben und zur Verfügung stellen können. Zu den nennenswerten Quellen gehören: Der Bundesanzeiger, RSS Feeds, Nachrichten APIs. Ziel ist es, aus diesen Quellen wertvolle Informationen bezogen auf den wirtschaftlichen Erfolg einer Kapitalgesellschaft sowie aktueller Nachrichten zu extrahieren und in ein einheitliches Format zu überführen.

+

Neben des technischen Einsatzes von Web Scraping/Crawling, um Informationen aus Webseiten zu gewinnen, sowie des Abfragens verfügbarer APIs soll auch der rechltiche Aspekt dieser Vorgehens Berücksichtigung finden, um die Rechtmäßigkeit zu bewerten.

+

Abschließend wird der Einsatz der verschiedenen Technologien an den Faktoren: Flexibilität, Simplizität, Verfügbarkeit und Rechtmäßigkeit, ein Fazit gezogen sowie ein Ausblick des weiteren Einsatzes gegeben.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/seminararbeiten/Abstract_Datenvisualisierung.html b/html/seminararbeiten/Abstract_Datenvisualisierung.html new file mode 100644 index 0000000..393d451 --- /dev/null +++ b/html/seminararbeiten/Abstract_Datenvisualisierung.html @@ -0,0 +1,188 @@ + + + + + + + Seminarthema: Datenvisualisierung — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Seminarthema: Datenvisualisierung

+
+

Geplanter Inhalt:

+
    +
  • Einführung

  • +
  • Best Practice für Datenvisualisierung

  • +
  • Vorstellung verschiedener Diagrammarten

  • +
  • Welche Diagrammarten eignen sich für unsere drei Anwendungsbereiche Time Series Daten, Netzwerke und Stimmungen?

  • +
  • Betrachtung verschiedener Bibliotheken (z.B. D3Blocks, pyvis, plotly)

    +
      +
    • Zweck der Bibliothek, unterstützte Visualisierungen, Vor- und Nachteile

    • +
    • Minimalbeispiele

    • +
    +
  • +
  • Anwendung auf unser Projekt:

    +
      +
    • Vergleich der Bibliotheken mit Blick auf unsere drei Anwendungsbereiche

    • +
    • Welche Daten werden für die einzelnen Diagramme gebraucht?

    • +
    • Welche Ideen/Anforderungen ergeben sich an die anderen Themenbereiche?

    • +
    +
  • +
  • Fazit und Handlungsempfehlung

    +
      +
    • Welche Diagramme und welche Bibliotheken eignen sich für uns?

    • +
    +
  • +
+
+
+

Abstract:

+

In dieser Seminararbeit geht es um die Visualisierung von Daten in Python. Im Fokus steht die Anwendung auf die drei Themenbereiche, die im Projekt “Transparenzregister” behandelt werden: Time Series Daten, Soziale Netzwerke und Stimmungen. Nach einer Einführung in das Thema werden Best Practices für die Datenvisualisierung vorgestellt und verschiedene Diagrammarten präsentiert. Anschließend wird diskutiert, welche Diagramme für die genannten Anwendungsbereiche am besten geeignet sind.

+

Im zweiten Abschnitt werden verschiedene Python Bibliotheken vorgestellt und anhand von Minimalbeispielen betrachtet. Dabei wird analysiert, welche Bibliotheken die gewünschten Diagramme für unsere Anwendungsbereiche am besten darstellen und welche Daten für die Erstellung der verschiedenen Diagramme benötigt werden. Es werden zudem Ideen und Anforderungen an die anderen Themenbereiche aufgezeigt.

+

Im letzten Abschnitt der Arbeit wird ein Fazit gezogen und eine Handlungsempfehlung gegeben. Insgesamt soll die Arbeit einen Einblick in die Welt der Datenvisualisierung in Python geben und unserem Projekt helfen, die richtigen Entscheidungen bei der Wahl der Diagrammarten und Bibliotheken zu treffen.

+
+
+

Erste Sammlung von Referenzen:

+

Bibliotheken/Tools:

+ +

Netzwerke:

+ +

Kennzahlen:

+ +

Best Practice:

+ +
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/seminararbeiten/Datenvisualisierung/Übersicht.html b/html/seminararbeiten/Datenvisualisierung/Übersicht.html new file mode 100644 index 0000000..90e3433 --- /dev/null +++ b/html/seminararbeiten/Datenvisualisierung/Übersicht.html @@ -0,0 +1,137 @@ + + + + + + + Themen in der Seminararbeit zum Thema Datenvisualisierung — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • + View page source +
  • +
+
+
+
+
+ +
+

Themen in der Seminararbeit zum Thema Datenvisualisierung

+
+

Python Bibliotheken

+
    +
  • networkx und pyvis

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/seminararbeiten/project-organisation-and-dev-ops.html b/html/seminararbeiten/project-organisation-and-dev-ops.html new file mode 100644 index 0000000..199206b --- /dev/null +++ b/html/seminararbeiten/project-organisation-and-dev-ops.html @@ -0,0 +1,157 @@ + + + + + + + Dev Ops — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Dev Ops

+
+

Roadmap

+

My plan for this coursework is to explore the dev ops thema and how it applies to the AI theme and this project in specific.

+

There are the following things in the theme of dev ops I want to explore:

+
    +
  1. Python dependency management via poetry

  2. +
  3. Write a documentation around pre-commit hooks and how they can be used for this project with arguments for and against each of the hooks.

  4. +
  5. Add a GitHub Runner on my own hardware to the repository and build a pipline with GitHub actions.

    +
      +
    • Add linter (black, flake8, pylint, mypy, bandit, pip-audit)

    • +
    • Testing setup in the pipline via pytest

    • +
    • Explore the ability of GitHub to summaries the linting and testing results.

      +
        +
      • Add SonarQube to the project if the test and lint summaries in GitHub does not suffice.

      • +
      +
    • +
    • Build the artifacts. Something like python wheels, Docker container and deployment files.

    • +
    • Startup to new build and see if it crashes in the first 60s if a framework is shown.

    • +
    • Build the documentation via sphinx for this project via the pipline.

    • +
    +
  6. +
  7. How to deploy the collection of Docker containers via docker-compose and/or kubernetes.

  8. +
  9. Evaluate the use of dependabot to upgrade the poetry dependency groups.

  10. +
  11. Steadily grow the build pipline as the application grows.

  12. +
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/seminararbeiten/verflechtungsanalyse.html b/html/seminararbeiten/verflechtungsanalyse.html new file mode 100644 index 0000000..4d38421 --- /dev/null +++ b/html/seminararbeiten/verflechtungsanalyse.html @@ -0,0 +1,167 @@ + + + + + + + Verflechtungsanalyse — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Verflechtungsanalyse

+
+

Entwurf des Inhaltsverzeichnis + Stichpunkte

+

1 Einleitung

+

1.1 Problemstellung

+

1.2 Zielsetzung und Aufbau der Arbeit

+

2 Graphentheorie

+

2.1 Begriffliche Definition

+

2.2 Sociometry

+
    +
  • sociometry: quantitatives Methode um soziale Beziehungen zu messen.

  • +
+

2.3 Sociogram/ Social Graph

+
    +
  • Ist ein graph der ein Soziales netzwerk darstellt

  • +
  • Basiert auf der Graphentheorie

  • +
  • Wurde offiziell Sociogram genannt

  • +
  • von facebook in der F8 2007 vorgestellt

  • +
+

2.4 Social Network Analysis (SNA)

+
    +
  • Social Network Analysis (SNA): Untersuchen von Sozialen Strukturen anhand von Netzwerken und Graphtheorie.

  • +
+

3 Ein Social Graph für das Transparentsregister

+

3.5 Handlungsempfehlung

+

4 Zusammenfassung

+

4.1 Kritische Reflexion

+

4.2 Fazit

+

4.3 Ausblick

+
+
+

Abstract

+

In der Seminararbeit zum Thema: “Verpflechtungsanalyse der Unternehmen und Personen im Transparenzregister” soll einerseits die Theorie für die Analyse von Verflechtungen vermittelt sowie anhand des Projektess aufgezeigt werden wie diese angewendet werden kann.

+

Als Fundament dient die Graphentheorie, welche Grundlegen für die Analyse von Netzstrukturen ist. Zunächst werden die wichtigsten Begriffe definiert und es wird eine Einführung ins Thema der Graphentheorie mit Beispielen und Erläuterung gegeben. Darauffolgend wird tiefer in das Thema eingetaucht und sich mit dem Bereich Sociogram/ Social Graph auseinandergesetzt. Ein Sociogram ist ein Model eines Netzwerks von sozialen Verbindungen die durch einen Graphen repräsentiert werden. Diese Idee wurde 2007 von Facebook als Social Graph in der F8 vorgestellt. Diese Art von Graph basiert auf der Graphentheorie. Die stärken dieses Graphen liegen in der Veranschaulichung der sozialen Verflechtungen. Daher wird der Social Graph für die Analyse der Verflechtungen innerhalb des Transparenzregisters genutzt.

+

Im Hauptteil der Seminararbeit wird aufgezeigt wie der Social Graph auf das Transparenzregister angewendet werden könnte. Es wird gezeigt welche Komponenten gebildet werden müssten und wie die Daten aufbereitet werden um einen Social graph bauen zu können. Des Weiteren wird auf die Formel und Algorithmen eingegangen die zur Erstellung des Graphen nötig sind. Dabei orientiert sich die Arbeit an Beispielen um die Theorie nachvollziebar zu vermitteln. Dieser Abschnitt wird mit einer Handlungsempfehlung für das Projekt abgeschlossen.

+

Abgeschlossen wird das Werk mit einer kritischen Reflexion, gefolgt von einem Fazit und einem Ausblick.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/templates/meeting_notes_template.html b/html/templates/meeting_notes_template.html new file mode 100644 index 0000000..c01bb05 --- /dev/null +++ b/html/templates/meeting_notes_template.html @@ -0,0 +1,170 @@ + + + + + + + Weekly X: DD.MM.YYYY — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Weekly X: DD.MM.YYYY

+
+

Teilnehmer

+
    +
  • Prof. Arinir

  • +
  • Tristan Nolde

  • +
  • Tim Ronneburg

  • +
  • Phillip Horstenkamp

  • +
  • Kim Mesewinkel-Risse

  • +
  • Sascha Zhu

  • +
  • Sebastian Zeleny

  • +
+
+
+

Themen

+
    +
  • ABC:

    +
      +
    • +
    +
  • +
+
+
+

Abgeleitete Action Items

+ + + + + + + + + + + + + +

Action Item

Verantwortlicher

Deadline

Beispiel

Max Mustermann

nächstes Weekly

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/html/timeline.html b/html/timeline.html new file mode 100644 index 0000000..1f3426a --- /dev/null +++ b/html/timeline.html @@ -0,0 +1,206 @@ + + + + + + + Timeline — transparenzregister 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Timeline

+
+ gantt + + title Timeline PG Transparenzregister + dateFormat YYYY-MM-DD + section Organisation + Kennenlernen des Projektteams : done, a1, 2023-03-30, 1d + Erstellen des Organigramms : done, after a1 , 1d + GitHub : done, 2023-04-06, 7d + Zeitplanung SoSe : active , 2023-04-06, 7d + + section Dokumentation + Meeting Notes: active, 2023-03-30, 10w + Seminarthemen: active, 2023-04-13, 8w + Lastenheft: active, 2023-04-06, 5w + Pflichtenheft: milestone, 2023-05-11 + Reserve: crit, 2023-06-08, 1w + + + section Meeting + Weekly 1 : done, 2023-03-30, 0.5h + Statustermin 1 : done ,2023-03-30 , 1h + Weekly 2 : done, 2023-04-06, 2h + + Statustermin 2 : active, 2023-04-13, 1h + Weekly 3 : active, 2023-04-13, 0.5h + Weekly 4 : active, 2023-04-20, 2h + + Weekly 5 : active, 2023-04-27, 0.5h + Statustermin 3 : active, 2023-04-27, 1h + + Weekly 6 : active, 2023-05-04, 2h + + Weekly 7 : active, 2023-05-11, 0.5h + Statustermin 4 : active, 2023-05-11, 1h + + Weekly 8 : active, 2023-05-18, 2h + Weekly 9 : active, 2023-05-25, 0.9h + Statustermin 5 : active, 2023-05-25, 1h + + Weekly 10 : active, 2023-06-01, 2h + Weekly 11 : active, 2023-06-01, 0.9h + Statustermin 6 : active, 2023-06-08, 1h + + section Recherche + Unternehmensformen : active, 2023-04-06, 14d + Kennzahlen : active, 2023-04-10, 14d + Datenquellen : active, 2023-04-10, 14d + rechtliche Verwendbarkeit: active, 2023-04-06, 18d + Verwendete Metriken, Datenquellen, Rechtmäßigkeit: milestone, 2023-04-24 + Reserve: crit, 2023-04-24, 3d + + section Definition + fachl. Aufgabe : active, 2023-04-27, 1d + techn. Aufgabe : active, 2023-04-27, 1d + Funktionelle Anf. : active, 2023-04-27, 7d + Qualitative Anf. : active, 2023-04-27, 7d + Modell: active, 2023-05-04, 7d + Hierarchie: active, 2023-05-04, 7d + Definition der Anforderungen : milestone, 2023-05-11 + Reserve: crit, 2023-05-11, 1w + + section Proof of concept + Project Proposal : active, 2023-05-18, 10d + Vorstellung Project Proposal: milestone, 2023-05-28 + Implementierung des Proposals: active, 2023-05-25, 14d + Vorstellung Proof of Concept: milestone, 2023-06-08 + Reserve: crit, 2023-06-08, 1w +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file