From 8b6aafb09bba85d1f3e7e15607bb6dc79aedd3e5 Mon Sep 17 00:00:00 2001 From: Anton Vorobets <82604278+antonvorobets@users.noreply.github.com> Date: Tue, 30 Jul 2024 15:34:35 +0200 Subject: [PATCH] v1.1.3 (#104) * Docs / README update * Codecov tests.yml update * Poetry update --- .github/workflows/tests.yml | 5 +- README.rst | 10 +- docs/build/doctrees/documentation.doctree | Bin 199153 -> 199037 bytes docs/build/doctrees/environment.pickle | Bin 359281 -> 360953 bytes docs/build/doctrees/index.doctree | Bin 10721 -> 11453 bytes .../build/html/_sources/documentation.rst.txt | 2 +- docs/build/html/_sources/index.rst.txt | 10 +- docs/build/html/contributing.html | 2 +- docs/build/html/documentation.html | 4 +- docs/build/html/examples.html | 2 +- docs/build/html/genindex.html | 2 +- docs/build/html/index.html | 16 +- docs/build/html/installation.html | 2 +- docs/build/html/objects.inv | 2 +- docs/build/html/py-modindex.html | 2 +- docs/build/html/references.html | 2 +- docs/build/html/search.html | 2 +- docs/build/html/searchindex.js | 2 +- docs/source/conf.py | 2 +- docs/source/documentation.rst | 2 +- docs/source/index.rst | 10 +- poetry.lock | 168 +++++++++--------- pyproject.toml | 2 +- 23 files changed, 141 insertions(+), 108 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index cf0903e..8fab31c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -18,4 +18,7 @@ jobs: activate-environment: fortitudo.tech-dev environment-file: requirements.yml - run: pytest --cov=fortitudo/tech --cov-fail-under=100 --cov-report=xml - - uses: codecov/codecov-action@v3 + - name: Upload coverage report to Codecov + uses: codecov/codecov-action@v4.0.1 + with: + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/README.rst b/README.rst index d42b825..ca606ed 100644 --- a/README.rst +++ b/README.rst @@ -14,22 +14,30 @@ Fortitudo Technologies Open Source This package allows you to explore open-source implementations of some of our fundamental technologies, e.g., Entropy Pooling and CVaR optimization in Python. + See this `YouTube playlist `_ for a walkthrough of the package's functionality and examples. For a high-level introduction to the investment framework, see this `YouTube video `_ -and `Medium article `_. +and `Substack post `_. + For a mathematical introduction to the investment framework, see these `SSRN articles `_. For a pedagogical and deep presentation of the investment framework, you can access the `Portfolio Construction and Risk Management Book `_. +Audience +-------- + The package is intended for advanced users who are comfortable specifying portfolio constraints and Entropy Pooling views using matrices and vectors. This gives full flexibility in relation to working with these technologies. Hence, input checking is intentionally kept to a minimum. +Company +------- + Fortitudo Technologies offers novel investment software as well as quantitative and digitalization consultancy to the investment management industry. For more information, please visit our `website `_. diff --git a/docs/build/doctrees/documentation.doctree b/docs/build/doctrees/documentation.doctree index 3abd0da2d90249ef19df1416a3f4284e7e83c729..04618840b4bcb5cbb2c8f4b5fe807a2c57a44421 100644 GIT binary patch delta 509 zcmex3ndk2$9+n2ysSF!gRPtD&85tNRZ_HPnzUC?;=j5ooy*9z6NyR0J$=M18`Nbs) zHW?))1;tkS`uPQ^d3wcAIlbikT>XO5B>lv^lKi}~{G$A%)RJQTg2{a)2Adb>A7F7V zO(@C8ELNb@Fgd$~_$e9eu~Ra{dW0}doXl5h>xxBuO2(?5Sdv{nd10}XK>`_GcC>@I zQNDJHMuuYS6o^xGVWFi93dt#n8OlI!sKR6wV6xzFo~}^9D6;uvnQP~C2TewksospX zyi*w&fRO_PJxmH3)BTtjWhOre=bGNY$0RWQwI-w0)<2BW|0gS)VVnMvkx39J7tJ}9 c1*&E1B&G@fr)o2ouul!*1evjQE^`Pc0OR<$ZU6uP delta 612 zcmex6iRa^F9+n2ysmvQ$RPtD=85tNRPs~@H9GG`ZC9$X^GdU+!!6u`mq@dVJUq3fB zC9^bFFF8L~-yy9eJ~6K>fAWP=0}K1&{L-T2RNJ(o%+$P;;`p4*yll1NY+H*Y1CvDK zB-3O|10ZE-kd|hYYMNq^oN8ofZfKN}wz)a~0E_n2gp!QRVg+Jt3n14vyM*{D8SJrB zGQ@g#kZqiNrNmYjMPy3Gs-9+Ad3thVv6NgJ!9dL>+nW$i%GXZO$WV-(0`aRZG<2sV zW+($gKouqq3H8Z}Vq%*^%UnA-r!p`AQveW5FXUwsnf^e7QDO4A|F+YYH!|{1f6B-x vIQc<1*H$~m)c>4QnP5uu8JWa^;+b1@n412xPd&y7Hek(vrn0Tt%t4$0o*&iu diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index e1c1071d340fbb7270902915a97acd648d86016e..bb8b8bc4e2b2c3c3ed10616022e4957565effe4d 100644 GIT binary patch delta 21775 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 DnGf`G delta 20859 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 Nq@E4?masVK{{b*X-G2Z8 diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 8829606ddd49077eb974ef8fff6bef3a2335d22d..97187d58c653911bd48a5de1f2e72838d74534f8 100644 GIT binary patch delta 1814 zcmbtVUu;ul6z|vW_TO5%!FD^>(myMMPHGz`@_+*+L(0UUVaWz)jkoJ1AJ^>OX7^qU zirMyHY~xK#cG`p&cwF#73>L$KA%>XwU_vBne9$N%nL^@&8r*{kM!)lw-nHY2`0`7? zbG~zazjMxaZf{RsJ1#5;^-nUFg%#qoF2L91g0DtBg&Gx`C&;)5;F@=EDINgD-S4!P zL3MsC`X*&LVbD{0qV{fWvGz_aO(S$KeB-)E@^IOkg%7(F;dyQw5UxCS%%nT%amzm^ zpOoihbw)1L4ioPEML0_K!oT8Z*u%~N8l^6?NV6l&oWd~&EV|E*O`1jBkY?UUlr`N* zj8VfV>w9uJtt_iq{edq#qs`{ZW-%wJhNhm@=Cq=0=(#fN>pld(d0q|an4E4sLSsi5 z#X*?zo*-{CvHQq0{NYXcP%cYGPe9bC&%e(lQ_6LsS+oSdq?XzX-jJ~++IsKx|06gj ztHvCRcaOt!e*a*wBUM|s&ok+{XFI)g+A(Un@x!fPKY0u8cIV+U&lr1Pce{^TaIki1Lm&l)V1Mw1VeVl_U+#NX6Y2} zNoyC^4feVzX$XlUOYyG05RE9qjG(EGW@zkiUt_BGH7D8Kyb{j&1XdYqMoZJ=2n8pVt+=)UN2oPDRniy)DW!Ar5z?7@H^66%9gXUjY`R zlqd`{e;w{cCP@nW3v%=+@@+fsO`C!9W*R?4?-O#nc_koZS^Q1tjsGY*oeqc6h2Tc; zBKV!)OlUoSVUDdlew5w+6BZM@y}zRogFjD{NT#tZ`JIzYHU3Vmy5@IcY?=WrQHj>+ z61_^V&^vTh39}%j4`Bk~Ai@&D2MF^BXAy27e1(w0TnPrI`E}A_kGpj2Nm5sY|qF0`@jF^oHKfGx?VgZ zUjE>|D?TS;;~o+hhp)(WovvP%?IGw0+Oam_2#yIA zQtw(~z24B{c(VF1Qn17h882$KkR+@T(xTrD=_GUf4|}Nb;*?RsDq|~|=EOGXA3E(O!9 z6=WUlb>o25EO-`_ -or `this article `_. +or `this Substack post `_. .. automodule:: fortitudo.tech.entropy_pooling :members: diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt index 1624a39..f3e26dd 100644 --- a/docs/build/html/_sources/index.rst.txt +++ b/docs/build/html/_sources/index.rst.txt @@ -3,22 +3,30 @@ Fortitudo Technologies Open Source This package allows you to explore open-source implementations of some of our fundamental technologies, e.g., Entropy Pooling and CVaR optimization in Python. + See this `YouTube playlist `_ for a walkthrough of the package's functionality and examples. For a high-level introduction to the investment framework, see this `YouTube video `_ -and `Medium article `_. +and `Substack post `_. + For a mathematical introduction to the investment framework, see these `SSRN articles `_. For a pedagogical and deep presentation of the investment framework, you can access the `Portfolio Construction and Risk Management Book `_. +Audience +-------- + The package is intended for advanced users who are comfortable specifying portfolio constraints and Entropy Pooling views using matrices and vectors. This gives full flexibility in relation to working with these technologies. Hence, input checking is intentionally kept to a minimum. +Company +------- + Fortitudo Technologies offers novel investment software as well as quantitative and digitalization consultancy to the investment management industry. For more information, please visit our `website `_. diff --git a/docs/build/html/contributing.html b/docs/build/html/contributing.html index 07d6b8a..b08417f 100644 --- a/docs/build/html/contributing.html +++ b/docs/build/html/contributing.html @@ -38,7 +38,7 @@ fortitudo.tech
- v1.1.1 + v1.1.3
diff --git a/docs/build/html/documentation.html b/docs/build/html/documentation.html index f8fd273..6d96fc8 100644 --- a/docs/build/html/documentation.html +++ b/docs/build/html/documentation.html @@ -39,7 +39,7 @@ fortitudo.tech
- v1.1.1 + v1.1.3
@@ -237,7 +237,7 @@

Entropy PoolingMeucci [2008], while the code is implemented using notation from Vorobets [2021]. For an introduction to Entropy Pooling, see this video -or this article.

+or this Substack post.

entropy_pooling(p, A, b, G=None, h=None, method=None)
diff --git a/docs/build/html/examples.html b/docs/build/html/examples.html index f587475..49046de 100644 --- a/docs/build/html/examples.html +++ b/docs/build/html/examples.html @@ -39,7 +39,7 @@ fortitudo.tech
- v1.1.1 + v1.1.3
diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index 4edb1a9..267c542 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -35,7 +35,7 @@ fortitudo.tech
- v1.1.1 + v1.1.3
diff --git a/docs/build/html/index.html b/docs/build/html/index.html index a0bdd63..56207af 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -37,7 +37,7 @@ fortitudo.tech
- v1.1.1 + v1.1.3
@@ -81,22 +81,28 @@

Fortitudo Technologies Open Source

This package allows you to explore open-source implementations of some of our -fundamental technologies, e.g., Entropy Pooling and CVaR optimization in Python. -See this YouTube playlist +fundamental technologies, e.g., Entropy Pooling and CVaR optimization in Python.

+

See this YouTube playlist for a walkthrough of the package’s functionality and examples.

For a high-level introduction to the investment framework, see this YouTube video -and Medium article. -For a mathematical introduction to the investment framework, see these +and Substack post.

+

For a mathematical introduction to the investment framework, see these SSRN articles.

For a pedagogical and deep presentation of the investment framework, you can access the Portfolio Construction and Risk Management Book.

+
+

Audience

The package is intended for advanced users who are comfortable specifying portfolio constraints and Entropy Pooling views using matrices and vectors. This gives full flexibility in relation to working with these technologies. Hence, input checking is intentionally kept to a minimum.

+
+
+

Company

Fortitudo Technologies offers novel investment software as well as quantitative and digitalization consultancy to the investment management industry. For more information, please visit our website.

+

Disclaimer

This package is completely separate from our proprietary solutions and therefore diff --git a/docs/build/html/installation.html b/docs/build/html/installation.html index 840de7d..ddcc306 100644 --- a/docs/build/html/installation.html +++ b/docs/build/html/installation.html @@ -38,7 +38,7 @@ fortitudo.tech

- v1.1.1 + v1.1.3
diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index d52e57d..a67b42b 100644 --- a/docs/build/html/objects.inv +++ b/docs/build/html/objects.inv @@ -1,6 +1,6 @@ # Sphinx inventory version 2 # Project: fortitudo.tech -# Version: v1.1.1 +# Version: v1.1.3 # The remainder of this file is compressed using zlib. xڵMo0 kk;+ڡWD, %8Q`w}Đ87T'4ۺ*o;jzjɒsZU[wÄZ{35A$/hv2v#(Wr:,i$^"gfz~]sr!NO넨 1;tn^N| .] i F2fuVOHeɊǦ`v(ȑ?VR{ 8qR2'Lmkn|xh܍[jCZx<OU[ šs^rj<NV7KB$v>kuf nЀ|qfJ'3U`G52l} VtjuAHuA+}oQP;肓ϊ4ƲڠA`n,2β#P|릾I<9 _5_zD=ќ{g]|%lدƅ ϳ.V`{nR9*"^cY`OQr& \ No newline at end of file diff --git a/docs/build/html/py-modindex.html b/docs/build/html/py-modindex.html index bf01f3d..93ff675 100644 --- a/docs/build/html/py-modindex.html +++ b/docs/build/html/py-modindex.html @@ -38,7 +38,7 @@ fortitudo.tech
- v1.1.1 + v1.1.3
diff --git a/docs/build/html/references.html b/docs/build/html/references.html index fc68299..c673621 100644 --- a/docs/build/html/references.html +++ b/docs/build/html/references.html @@ -37,7 +37,7 @@ fortitudo.tech
- v1.1.1 + v1.1.3
diff --git a/docs/build/html/search.html b/docs/build/html/search.html index 437998a..91a659d 100644 --- a/docs/build/html/search.html +++ b/docs/build/html/search.html @@ -38,7 +38,7 @@ fortitudo.tech
- v1.1.1 + v1.1.3
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 659d835..6f4993f 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["contributing", "documentation", "examples", "index", "installation", "references"], "filenames": ["contributing.rst", "documentation.rst", "examples.rst", "index.rst", "installation.rst", "references.rst"], "titles": ["Contributing", "Documentation", "Examples", "Fortitudo Technologies Open Source", "Installation Instructions", "References"], "terms": {"you": [0, 1, 2, 3, 4], "ar": [0, 1, 2, 3], "welcom": [0, 3], "thi": [0, 1, 2, 3, 4], "packag": [0, 1, 2, 3, 4], "fork": 0, "fortitudo": [0, 1, 2, 4], "tech": [0, 1, 2, 3, 4], "github": [0, 2], "repositori": [0, 2], "creat": [0, 4], "pull": 0, "request": [0, 3], "should": [0, 4], "alwai": 0, "sent": 0, "dev": 0, "branch": 0, "we": [0, 2, 3, 4], "especi": 0, "appreci": 0, "relat": [0, 1, 2, 3], "e": [0, 1, 3, 4], "g": [0, 1, 3, 4], "make": [0, 2], "avail": [0, 2], "conda": [0, 4], "forg": [0, 4], "us": [0, 1, 2, 3, 4], "environ": [0, 2, 4], "specifi": [0, 3], "requir": [0, 4], "yml": 0, "file": 0, "locat": 0, "root": 0, "directori": 0, "i": [0, 1, 3], "easiest": 0, "wai": 0, "start": [0, 1, 2], "code": [0, 1, 2], "env": 0, "The": [0, 1, 2, 3, 4], "style": 0, "guid": 0, "mostli": 0, "follow": [0, 1, 2, 4], "pep": 0, "8": [0, 1, 5], "some": [0, 2, 3, 4], "import": [0, 1], "modif": 0, "can": [0, 1, 2, 3, 4], "found": 0, "vscode": 0, "set": [0, 1], "json": 0, "If": [0, 1, 2, 3, 4], "visual": 0, "studio": 0, "sure": 0, "your": [0, 1], "basic": 0, "rule": 0, "most": [0, 1], "addit": [0, 1, 4], "allow": [0, 1, 3], "line": 0, "length": 0, "99": 0, "charact": 0, "both": 0, "docstr": 0, "capit": 0, "ey": 0, "variabl": 0, "type": [0, 1], "hint": 0, "introduc": [0, 1, 2], "484": 0, "do": [0, 4], "group": 0, "oper": 0, "accord": 0, "prioriti": 0, "gener": [0, 1], "name": [0, 1], "convent": 0, "descript": 0, "function": [0, 2, 3], "often": 0, "short": 0, "veri": [0, 1, 2, 3, 4], "mathemat": [0, 2, 3], "part": 0, "replic": [0, 1, 2], "refer": 0, "believ": 0, "easier": [0, 2], "link": [0, 1], "theori": [0, 1, 5], "encourag": 0, "keep": 0, "individu": 0, "small": 0, "avoid": 0, "impos": 0, "object": [0, 1], "orient": 0, "design": 0, "pattern": 0, "p": [1, 2], "l": [1, 2, 5], "paramet": [1, 2, 5], "from": [1, 2, 3], "vorobet": [1, 2, 5], "2022": [1, 2, 5], "2021": [1, 2, 5], "assum": 1, "return": 1, "log": 1, "normal": 1, "distribut": 1, "while": 1, "given": 1, "danish": 1, "common": 1, "expect": 1, "2nd": 1, "half": 1, "exampl": [1, 3, 4], "immedi": 1, "explor": [1, 2, 3, 4], "also": [1, 4], "test": [1, 2, 5], "understand": [1, 2], "result": [1, 2], "sequenti": [1, 2, 5], "In": 1, "abov": 1, "time": [1, 2], "seri": [1, 2], "an": [1, 2, 3], "equiti": 1, "index": 1, "associ": 1, "impli": 1, "volatil": [1, 2], "surfac": 1, "risk": [1, 2, 3, 5], "free": 1, "zero": 1, "coupon": 1, "curv": 1, "credit": 1, "spread": 1, "includ": 1, "valid": 1, "model": [1, 2], "approach": 1, "see": [1, 2, 3], "introduct": [1, 2, 3], "how": [1, 2, 3], "simpl": 1, "well": [1, 3], "view": [1, 2, 3, 5], "factor": [1, 2], "load_paramet": 1, "load": 1, "http": [1, 5], "ssrn": [1, 2, 3, 5], "com": [1, 5], "abstract": [1, 5], "4034316": [1, 5], "tupl": 1, "list": 1, "ndarrai": 1, "instrument": [1, 5], "mean": [1, 2], "vector": [1, 3], "covari": 1, "matrix": 1, "load_pnl": 1, "3936392": [1, 5], "4217884": [1, 5], "4444291": [1, 5], "datafram": 1, "load_risk_factor": 1, "7_riskfactorview": 1, "ipynb": 1, "load_time_seri": 1, "sde": 1, "base": 1, "plot_vol_surfac": 1, "vol_surfac": 1, "figsiz": 1, "none": 1, "plot": 1, "vol": 1, "int": 1, "scenario": [1, 2], "shape": 1, "t": 1, "35": 1, "": [1, 2, 3, 5], "contain": [1, 2], "float": 1, "figur": 1, "size": 1, "default": [1, 2], "10": [1, 5], "7": [1, 5], "ax": 1, "3d": 1, "solv": 1, "problem": 1, "q": 1, "text": 1, "argmin": 1, "left": 1, "x": 1, "ln": 1, "right": 1, "subject": 1, "constraint": [1, 3], "b": 1, "gx": 1, "leq": 1, "h": 1, "wa": 1, "first": 1, "meucci": [1, 5], "2008": [1, 5], "implement": [1, 2, 3], "notat": 1, "For": [1, 2, 3, 4], "video": [1, 2, 3], "articl": [1, 2, 3], "entropy_pool": 1, "A": [1, 2, 5], "method": [1, 3], "comput": [1, 5], "posterior": 1, "probabl": 1, "prior": 1, "1": [1, 2, 5], "equal": 1, "m": 1, "inequ": 1, "n": [1, 4], "str": 1, "tnc": 1, "bfg": 1, "below": [1, 2], "when": 1, "work": [1, 2, 3], "thei": 1, "calcul": 1, "moment": 1, "correl": 1, "verifi": 1, "have": [1, 2, 3, 4], "been": 1, "correctli": 1, "varianc": [1, 2, 5], "correlation_matrix": 1, "r": [1, 5], "union": 1, "np": 1, "ones": 1, "covariance_matrix": 1, "exposure_stack": 1, "sample_portfolio": 1, "fold": 1, "exposur": [1, 2], "stack": [1, 2], "4709317": [1, 5], "number": 1, "partit": 1, "sampl": 1, "portfolio_cvar": 1, "alpha": 1, "demean": [1, 2], "cvar": [1, 2, 3, 5], "num_portfolio": 1, "level": [1, 2, 3], "0": [1, 5], "95": 1, "bool": 1, "boolean": 1, "indic": 1, "whether": 1, "true": 1, "portfolio_var": 1, "var": 1, "portfolio_vol": 1, "simulation_mo": 1, "skew": 1, "kurtosi": 1, "4": [1, 5], "consist": 1, "black": 1, "european": 1, "call": 1, "put": 1, "call_opt": 1, "f": 1, "k": 1, "sigma": 1, "formula": 1, "forward": 1, "matur": 1, "strike": 1, "valu": [1, 2, 5], "interest": 1, "rate": 1, "continu": 1, "compound": 1, "spot": 1, "dividend": 1, "yield": 1, "put_opt": 1, "meancvar": 1, "meanvari": 1, "min_": 1, "mathcal": 1, "being": 1, "mathbb": 1, "mu": 1, "geq": 1, "mu_": 1, "target": 1, "v": [1, 2], "ge": 1, "ae": 1, "here": 1, "rel": [1, 2], "market": [1, 2, 5], "rockafellar": [1, 5], "uryasev": [1, 5], "2000": [1, 5], "algorithm": 1, "k\u00fcnzi": [1, 5], "bai": [1, 5], "mayer": [1, 5], "2006": [1, 5], "measur": 1, "standard": 1, "quadrat": 1, "program": 1, "solver": 1, "class": 1, "kwarg": 1, "effici": 1, "bender": 1, "decomposit": 1, "dict": 1, "dictionari": 1, "rais": 1, "valueerror": 1, "infeas": 1, "efficient_fronti": 1, "frontier": 1, "span": 1, "9": [1, 5], "unbound": 1, "efficient_portfolio": 1, "return_target": 1, "minimum": [1, 3], "cvxopt": [1, 4], "These": 1, "adjust": 1, "directli": [1, 3], "instruct": 1, "control": 1, "global": 1, "cvar_opt": 1, "ft": 1, "fals": 1, "r_scalar": 1, "10000": 1, "particular": 1, "instanc": 1, "opt": 1, "scale": 1, "1000": 1, "maxit": 1, "maximum": 1, "iter": 1, "relax": 1, "master": 1, "500": [1, 2], "reltol": 1, "toler": 1, "differ": 1, "between": 1, "current": 1, "best": [1, 4], "upper": 1, "lower": 1, "bound": 1, "1e": 1, "abstol": 1, "absolut": 1, "less": 1, "than": 1, "stop": 1, "one": 1, "condit": [1, 5], "satisfi": 1, "percentag": 1, "case": 1, "due": 1, "converg": 1, "100": 1, "might": [1, 2, 4], "need": 1, "them": [1, 2, 3], "exponenti": [1, 2], "decai": [1, 2], "histor": [1, 2], "stress": [1, 2, 5], "calibr": 1, "which": 1, "new": 1, "exp_decay_prob": 1, "half_lif": 1, "life": 1, "normal_exp_decay_calib": 1, "jupyt": 2, "notebook": [2, 4], "combin": 2, "optim": [2, 3, 4, 5], "entropi": [2, 3, 5], "pool": [2, 3, 5], "origin": 2, "heurist": [2, 5], "separ": [2, 3], "bonu": 2, "h1": 2, "stoxx": 2, "50": 2, "accompani": 2, "comparison": 2, "explain": 2, "why": 2, "recommend": [2, 4], "run": [2, 4], "000": 2, "binder": [2, 4], "comment": 2, "illustr": 2, "simul": [2, 3], "portfolio": [2, 3, 5], "faang": 2, "stock": 2, "2023": [2, 5], "bayesian": 2, "network": 2, "causal": [2, 5], "predict": [2, 5], "kristensen": [2, 5], "2024": [2, 5], "effect": 2, "uncertainti": [2, 5], "deriv": [2, 5], "expsour": 2, "youtub": [2, 3], "playlist": [2, 3], "walkthrough": [2, 3], "good": 2, "place": 2, "limit": [2, 3, 4], "resourc": [2, 3, 4], "support": [2, 3, 4], "pleas": [2, 3, 4], "let": [2, 4], "u": 2, "know": 2, "suggest": 2, "improv": 2, "high": [2, 3], "invest": [2, 3], "framework": [2, 3, 5], "medium": [2, 3], "depth": 2, "care": 2, "pedagog": [2, 3], "present": [2, 3], "construct": [2, 3], "manag": [2, 3, 5], "book": [2, 3], "crowdfund": 2, "campaign": 2, "cloud": [2, 4], "without": [2, 4], "ani": [2, 4], "local": [2, 4], "instal": 2, "howev": [2, 4], "note": [2, 4], "server": [2, 4], "routin": [2, 4], "want": [2, 3, 4], "access": [2, 3, 4], "stabl": [2, 4], "persist": [2, 4], "storag": [2, 4], "subscrib": [2, 4], "our": [2, 3, 4], "data": [2, 4], "scienc": [2, 4], "fundament": 3, "python": [3, 4], "deep": 3, "intend": 3, "advanc": 3, "user": 3, "who": 3, "comfort": 3, "matric": 3, "give": 3, "full": 3, "flexibl": [3, 5], "henc": 3, "input": 3, "check": 3, "intention": 3, "kept": 3, "offer": 3, "novel": 3, "softwar": 3, "quantit": 3, "digit": 3, "consult": 3, "industri": 3, "more": 3, "inform": 3, "visit": 3, "websit": 3, "complet": 3, "proprietari": 3, "solut": 3, "therefor": 3, "repres": 3, "qualiti": 3, "analysi": 3, "modul": 3, "institut": 3, "investor": 3, "experi": 3, "sophist": 3, "practic": [3, 5], "demo": 3, "send": 3, "email": 3, "feedback": 3, "bug": 3, "report": 3, "featur": 3, "upstream": 3, "maintain": 3, "done": 4, "via": 4, "pip": 4, "perform": 4, "handl": 4, "depend": 4, "befor": 4, "step": 4, "c": 4, "scipi": 4, "panda": 4, "matplotlib": 4, "activ": 4, "seaborn": 4, "ipykernel": 4, "jupyterlab": 4, "caus": 4, "issu": 4, "url": 5, "2": 5, "j": 5, "aspect": 5, "minim": 5, "cm": 5, "3": 5, "27": 5, "doi": 5, "org": 5, "1007": 5, "s10287": 5, "005": 5, "0042": 5, "fulli": 5, "21": 5, "97": 5, "102": 5, "1213325": 5, "tyrrel": 5, "journal": 5, "41": 5, "21314": 5, "jor": 5, "038": 5, "5": 5, "6": 5, "intuit": 5, "4825945": 5}, "objects": {"fortitudo.tech": [[1, 0, 0, "-", "data"], [1, 0, 0, "-", "entropy_pooling"], [1, 0, 0, "-", "functions"], [1, 0, 0, "-", "optimization"], [1, 0, 0, "-", "option_pricing"], [1, 0, 0, "-", "simulation"]], "fortitudo.tech.data": [[1, 1, 1, "", "load_parameters"], [1, 1, 1, "", "load_pnl"], [1, 1, 1, "", "load_risk_factors"], [1, 1, 1, "", "load_time_series"], [1, 1, 1, "", "plot_vol_surface"]], "fortitudo.tech.entropy_pooling": [[1, 1, 1, "", "entropy_pooling"]], "fortitudo.tech.functions": [[1, 1, 1, "", "correlation_matrix"], [1, 1, 1, "", "covariance_matrix"], [1, 1, 1, "", "exposure_stacking"], [1, 1, 1, "", "portfolio_cvar"], [1, 1, 1, "", "portfolio_var"], [1, 1, 1, "", "portfolio_vol"], [1, 1, 1, "", "simulation_moments"]], "fortitudo.tech.optimization": [[1, 2, 1, "", "MeanCVaR"], [1, 2, 1, "", "MeanVariance"]], "fortitudo.tech.optimization.MeanCVaR": [[1, 3, 1, "", "efficient_frontier"], [1, 3, 1, "", "efficient_portfolio"]], "fortitudo.tech.optimization.MeanVariance": [[1, 3, 1, "", "efficient_frontier"], [1, 3, 1, "", "efficient_portfolio"]], "fortitudo.tech.option_pricing": [[1, 1, 1, "", "call_option"], [1, 1, 1, "", "forward"], [1, 1, 1, "", "put_option"]], "fortitudo.tech.simulation": [[1, 1, 1, "", "exp_decay_probs"], [1, 1, 1, "", "normal_exp_decay_calib"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"]}, "titleterms": {"contribut": 0, "document": 1, "data": 1, "entropi": 1, "pool": 1, "function": 1, "option": 1, "price": 1, "portfolio": 1, "optim": 1, "simul": 1, "exampl": 2, "fortitudo": 3, "technologi": 3, "open": 3, "sourc": 3, "disclaim": 3, "code": 3, "conduct": 3, "instal": 4, "instruct": 4, "refer": 5}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinxcontrib.bibtex": 9, "sphinx": 60}, "alltitles": {"Contributing": [[0, "contributing"]], "Documentation": [[1, "documentation"]], "Data": [[1, "data"]], "Entropy Pooling": [[1, "entropy-pooling"]], "Functions": [[1, "functions"]], "Option Pricing": [[1, "option-pricing"]], "Portfolio Optimization": [[1, "portfolio-optimization"]], "Simulation": [[1, "simulation"]], "Examples": [[2, "examples"]], "Fortitudo Technologies Open Source": [[3, "fortitudo-technologies-open-source"]], "Disclaimer": [[3, "disclaimer"]], "Code of Conduct": [[3, "code-of-conduct"]], "Installation Instructions": [[4, "installation-instructions"]], "References": [[5, "references"]]}, "indexentries": {"meancvar (class in fortitudo.tech.optimization)": [[1, "fortitudo.tech.optimization.MeanCVaR"]], "meanvariance (class in fortitudo.tech.optimization)": [[1, "fortitudo.tech.optimization.MeanVariance"]], "call_option() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.call_option"]], "correlation_matrix() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.correlation_matrix"]], "covariance_matrix() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.covariance_matrix"]], "efficient_frontier() (meancvar method)": [[1, "fortitudo.tech.optimization.MeanCVaR.efficient_frontier"]], "efficient_frontier() (meanvariance method)": [[1, "fortitudo.tech.optimization.MeanVariance.efficient_frontier"]], "efficient_portfolio() (meancvar method)": [[1, "fortitudo.tech.optimization.MeanCVaR.efficient_portfolio"]], "efficient_portfolio() (meanvariance method)": [[1, "fortitudo.tech.optimization.MeanVariance.efficient_portfolio"]], "entropy_pooling() (in module fortitudo.tech.entropy_pooling)": [[1, "fortitudo.tech.entropy_pooling.entropy_pooling"]], "exp_decay_probs() (in module fortitudo.tech.simulation)": [[1, "fortitudo.tech.simulation.exp_decay_probs"]], "exposure_stacking() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.exposure_stacking"]], "fortitudo.tech.data": [[1, "module-fortitudo.tech.data"]], "fortitudo.tech.entropy_pooling": [[1, "module-fortitudo.tech.entropy_pooling"]], "fortitudo.tech.functions": [[1, "module-fortitudo.tech.functions"]], "fortitudo.tech.optimization": [[1, "module-fortitudo.tech.optimization"]], "fortitudo.tech.option_pricing": [[1, "module-fortitudo.tech.option_pricing"]], "fortitudo.tech.simulation": [[1, "module-fortitudo.tech.simulation"]], "forward() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.forward"]], "load_parameters() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_parameters"]], "load_pnl() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_pnl"]], "load_risk_factors() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_risk_factors"]], "load_time_series() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_time_series"]], "module": [[1, "module-fortitudo.tech.data"], [1, "module-fortitudo.tech.entropy_pooling"], [1, "module-fortitudo.tech.functions"], [1, "module-fortitudo.tech.optimization"], [1, "module-fortitudo.tech.option_pricing"], [1, "module-fortitudo.tech.simulation"]], "normal_exp_decay_calib() (in module fortitudo.tech.simulation)": [[1, "fortitudo.tech.simulation.normal_exp_decay_calib"]], "plot_vol_surface() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.plot_vol_surface"]], "portfolio_cvar() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_cvar"]], "portfolio_var() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_var"]], "portfolio_vol() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_vol"]], "put_option() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.put_option"]], "simulation_moments() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.simulation_moments"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["contributing", "documentation", "examples", "index", "installation", "references"], "filenames": ["contributing.rst", "documentation.rst", "examples.rst", "index.rst", "installation.rst", "references.rst"], "titles": ["Contributing", "Documentation", "Examples", "Fortitudo Technologies Open Source", "Installation Instructions", "References"], "terms": {"you": [0, 1, 2, 3, 4], "ar": [0, 1, 2, 3], "welcom": [0, 3], "thi": [0, 1, 2, 3, 4], "packag": [0, 1, 2, 3, 4], "fork": 0, "fortitudo": [0, 1, 2, 4], "tech": [0, 1, 2, 3, 4], "github": [0, 2], "repositori": [0, 2], "creat": [0, 4], "pull": 0, "request": [0, 3], "should": [0, 4], "alwai": 0, "sent": 0, "dev": 0, "branch": 0, "we": [0, 2, 3, 4], "especi": 0, "appreci": 0, "relat": [0, 1, 2, 3], "e": [0, 1, 3, 4], "g": [0, 1, 3, 4], "make": [0, 2], "avail": [0, 2], "conda": [0, 4], "forg": [0, 4], "us": [0, 1, 2, 3, 4], "environ": [0, 2, 4], "specifi": [0, 3], "requir": [0, 4], "yml": 0, "file": 0, "locat": 0, "root": 0, "directori": 0, "i": [0, 1, 3], "easiest": 0, "wai": 0, "start": [0, 1, 2], "code": [0, 1, 2], "env": 0, "The": [0, 1, 2, 3, 4], "style": 0, "guid": 0, "mostli": 0, "follow": [0, 1, 2, 4], "pep": 0, "8": [0, 1, 5], "some": [0, 2, 3, 4], "import": [0, 1], "modif": 0, "can": [0, 1, 2, 3, 4], "found": 0, "vscode": 0, "set": [0, 1], "json": 0, "If": [0, 1, 2, 3, 4], "visual": 0, "studio": 0, "sure": 0, "your": [0, 1], "basic": 0, "rule": 0, "most": [0, 1], "addit": [0, 1, 4], "allow": [0, 1, 3], "line": 0, "length": 0, "99": 0, "charact": 0, "both": 0, "docstr": 0, "capit": 0, "ey": 0, "variabl": 0, "type": [0, 1], "hint": 0, "introduc": [0, 1, 2], "484": 0, "do": [0, 4], "group": 0, "oper": 0, "accord": 0, "prioriti": 0, "gener": [0, 1], "name": [0, 1], "convent": 0, "descript": 0, "function": [0, 2, 3], "often": 0, "short": 0, "veri": [0, 1, 2, 3, 4], "mathemat": [0, 2, 3], "part": 0, "replic": [0, 1, 2], "refer": 0, "believ": 0, "easier": [0, 2], "link": [0, 1], "theori": [0, 1, 5], "encourag": 0, "keep": 0, "individu": 0, "small": 0, "avoid": 0, "impos": 0, "object": [0, 1], "orient": 0, "design": 0, "pattern": 0, "p": [1, 2], "l": [1, 2, 5], "paramet": [1, 2, 5], "from": [1, 2, 3], "vorobet": [1, 2, 5], "2022": [1, 2, 5], "2021": [1, 2, 5], "assum": 1, "return": 1, "log": 1, "normal": 1, "distribut": 1, "while": 1, "given": 1, "danish": 1, "common": 1, "expect": 1, "2nd": 1, "half": 1, "exampl": [1, 3, 4], "immedi": 1, "explor": [1, 2, 3, 4], "also": [1, 4], "test": [1, 2, 5], "understand": [1, 2], "result": [1, 2], "sequenti": [1, 2, 5], "In": 1, "abov": 1, "time": [1, 2], "seri": [1, 2], "an": [1, 2, 3], "equiti": 1, "index": 1, "associ": 1, "impli": 1, "volatil": [1, 2], "surfac": 1, "risk": [1, 2, 3, 5], "free": 1, "zero": 1, "coupon": 1, "curv": 1, "credit": 1, "spread": 1, "includ": 1, "valid": 1, "model": [1, 2], "approach": 1, "see": [1, 2, 3], "introduct": [1, 2, 3], "how": [1, 2, 3], "simpl": 1, "well": [1, 3], "view": [1, 2, 3, 5], "factor": [1, 2], "load_paramet": 1, "load": 1, "http": [1, 5], "ssrn": [1, 2, 3, 5], "com": [1, 5], "abstract": [1, 5], "4034316": [1, 5], "tupl": 1, "list": 1, "ndarrai": 1, "instrument": [1, 5], "mean": [1, 2], "vector": [1, 3], "covari": 1, "matrix": 1, "load_pnl": 1, "3936392": [1, 5], "4217884": [1, 5], "4444291": [1, 5], "datafram": 1, "load_risk_factor": 1, "7_riskfactorview": 1, "ipynb": 1, "load_time_seri": 1, "sde": 1, "base": 1, "plot_vol_surfac": 1, "vol_surfac": 1, "figsiz": 1, "none": 1, "plot": 1, "vol": 1, "int": 1, "scenario": [1, 2], "shape": 1, "t": 1, "35": 1, "": [1, 2, 3, 5], "contain": [1, 2], "float": 1, "figur": 1, "size": 1, "default": [1, 2], "10": [1, 5], "7": [1, 5], "ax": 1, "3d": 1, "solv": 1, "problem": 1, "q": 1, "text": 1, "argmin": 1, "left": 1, "x": 1, "ln": 1, "right": 1, "subject": 1, "constraint": [1, 3], "b": 1, "gx": 1, "leq": 1, "h": 1, "wa": 1, "first": 1, "meucci": [1, 5], "2008": [1, 5], "implement": [1, 2, 3], "notat": 1, "For": [1, 2, 3, 4], "video": [1, 2, 3], "substack": [1, 3], "post": [1, 3], "entropy_pool": 1, "A": [1, 2, 5], "method": [1, 3], "comput": [1, 5], "posterior": 1, "probabl": 1, "prior": 1, "1": [1, 2, 5], "equal": 1, "m": 1, "inequ": 1, "n": [1, 4], "str": 1, "tnc": 1, "bfg": 1, "below": [1, 2], "when": 1, "work": [1, 2, 3], "thei": 1, "calcul": 1, "moment": 1, "correl": 1, "verifi": 1, "have": [1, 2, 3, 4], "been": 1, "correctli": 1, "varianc": [1, 2, 5], "correlation_matrix": 1, "r": [1, 5], "union": 1, "np": 1, "ones": 1, "covariance_matrix": 1, "exposure_stack": 1, "sample_portfolio": 1, "fold": 1, "exposur": [1, 2], "stack": [1, 2], "4709317": [1, 5], "number": 1, "partit": 1, "sampl": 1, "portfolio_cvar": 1, "alpha": 1, "demean": [1, 2], "cvar": [1, 2, 3, 5], "num_portfolio": 1, "level": [1, 2, 3], "0": [1, 5], "95": 1, "bool": 1, "boolean": 1, "indic": 1, "whether": 1, "true": 1, "portfolio_var": 1, "var": 1, "portfolio_vol": 1, "simulation_mo": 1, "skew": 1, "kurtosi": 1, "4": [1, 5], "consist": 1, "black": 1, "european": 1, "call": 1, "put": 1, "call_opt": 1, "f": 1, "k": 1, "sigma": 1, "formula": 1, "forward": 1, "matur": 1, "strike": 1, "valu": [1, 2, 5], "interest": 1, "rate": 1, "continu": 1, "compound": 1, "spot": 1, "dividend": 1, "yield": 1, "put_opt": 1, "meancvar": 1, "meanvari": 1, "min_": 1, "mathcal": 1, "being": 1, "mathbb": 1, "mu": 1, "geq": 1, "mu_": 1, "target": 1, "v": [1, 2], "ge": 1, "ae": 1, "here": 1, "rel": [1, 2], "market": [1, 2, 5], "rockafellar": [1, 5], "uryasev": [1, 5], "2000": [1, 5], "algorithm": 1, "k\u00fcnzi": [1, 5], "bai": [1, 5], "mayer": [1, 5], "2006": [1, 5], "measur": 1, "standard": 1, "quadrat": 1, "program": 1, "solver": 1, "class": 1, "kwarg": 1, "effici": 1, "bender": 1, "decomposit": 1, "dict": 1, "dictionari": 1, "rais": 1, "valueerror": 1, "infeas": 1, "efficient_fronti": 1, "frontier": 1, "span": 1, "9": [1, 5], "unbound": 1, "efficient_portfolio": 1, "return_target": 1, "minimum": [1, 3], "cvxopt": [1, 4], "These": 1, "adjust": 1, "directli": [1, 3], "instruct": 1, "control": 1, "global": 1, "cvar_opt": 1, "ft": 1, "fals": 1, "r_scalar": 1, "10000": 1, "particular": 1, "instanc": 1, "opt": 1, "scale": 1, "1000": 1, "maxit": 1, "maximum": 1, "iter": 1, "relax": 1, "master": 1, "500": [1, 2], "reltol": 1, "toler": 1, "differ": 1, "between": 1, "current": 1, "best": [1, 4], "upper": 1, "lower": 1, "bound": 1, "1e": 1, "abstol": 1, "absolut": 1, "less": 1, "than": 1, "stop": 1, "one": 1, "condit": [1, 5], "satisfi": 1, "percentag": 1, "case": 1, "due": 1, "converg": 1, "100": 1, "might": [1, 2, 4], "need": 1, "them": [1, 2, 3], "exponenti": [1, 2], "decai": [1, 2], "histor": [1, 2], "stress": [1, 2, 5], "calibr": 1, "which": 1, "new": 1, "exp_decay_prob": 1, "half_lif": 1, "life": 1, "normal_exp_decay_calib": 1, "jupyt": 2, "notebook": [2, 4], "combin": 2, "optim": [2, 3, 4, 5], "entropi": [2, 3, 5], "pool": [2, 3, 5], "origin": 2, "heurist": [2, 5], "separ": [2, 3], "bonu": 2, "h1": 2, "stoxx": 2, "50": 2, "accompani": 2, "comparison": 2, "explain": 2, "why": 2, "recommend": [2, 4], "run": [2, 4], "000": 2, "binder": [2, 4], "comment": 2, "illustr": 2, "simul": [2, 3], "portfolio": [2, 3, 5], "faang": 2, "stock": 2, "2023": [2, 5], "bayesian": 2, "network": 2, "causal": [2, 5], "predict": [2, 5], "kristensen": [2, 5], "2024": [2, 5], "effect": 2, "uncertainti": [2, 5], "deriv": [2, 5], "expsour": 2, "youtub": [2, 3], "playlist": [2, 3], "walkthrough": [2, 3], "good": 2, "place": 2, "limit": [2, 3, 4], "resourc": [2, 3, 4], "support": [2, 3, 4], "pleas": [2, 3, 4], "let": [2, 4], "u": 2, "know": 2, "suggest": 2, "improv": 2, "high": [2, 3], "invest": [2, 3], "framework": [2, 3, 5], "medium": 2, "articl": [2, 3], "depth": 2, "care": 2, "pedagog": [2, 3], "present": [2, 3], "construct": [2, 3], "manag": [2, 3, 5], "book": [2, 3], "crowdfund": 2, "campaign": 2, "cloud": [2, 4], "without": [2, 4], "ani": [2, 4], "local": [2, 4], "instal": 2, "howev": [2, 4], "note": [2, 4], "server": [2, 4], "routin": [2, 4], "want": [2, 3, 4], "access": [2, 3, 4], "stabl": [2, 4], "persist": [2, 4], "storag": [2, 4], "subscrib": [2, 4], "our": [2, 3, 4], "data": [2, 4], "scienc": [2, 4], "fundament": 3, "python": [3, 4], "deep": 3, "intend": 3, "advanc": 3, "user": 3, "who": 3, "comfort": 3, "matric": 3, "give": 3, "full": 3, "flexibl": [3, 5], "henc": 3, "input": 3, "check": 3, "intention": 3, "kept": 3, "offer": 3, "novel": 3, "softwar": 3, "quantit": 3, "digit": 3, "consult": 3, "industri": 3, "more": 3, "inform": 3, "visit": 3, "websit": 3, "complet": 3, "proprietari": 3, "solut": 3, "therefor": 3, "repres": 3, "qualiti": 3, "analysi": 3, "modul": 3, "institut": 3, "investor": 3, "experi": 3, "sophist": 3, "practic": [3, 5], "demo": 3, "send": 3, "email": 3, "feedback": 3, "bug": 3, "report": 3, "featur": 3, "upstream": 3, "maintain": 3, "done": 4, "via": 4, "pip": 4, "perform": 4, "handl": 4, "depend": 4, "befor": 4, "step": 4, "c": 4, "scipi": 4, "panda": 4, "matplotlib": 4, "activ": 4, "seaborn": 4, "ipykernel": 4, "jupyterlab": 4, "caus": 4, "issu": 4, "url": 5, "2": 5, "j": 5, "aspect": 5, "minim": 5, "cm": 5, "3": 5, "27": 5, "doi": 5, "org": 5, "1007": 5, "s10287": 5, "005": 5, "0042": 5, "fulli": 5, "21": 5, "97": 5, "102": 5, "1213325": 5, "tyrrel": 5, "journal": 5, "41": 5, "21314": 5, "jor": 5, "038": 5, "5": 5, "6": 5, "intuit": 5, "4825945": 5}, "objects": {"fortitudo.tech": [[1, 0, 0, "-", "data"], [1, 0, 0, "-", "entropy_pooling"], [1, 0, 0, "-", "functions"], [1, 0, 0, "-", "optimization"], [1, 0, 0, "-", "option_pricing"], [1, 0, 0, "-", "simulation"]], "fortitudo.tech.data": [[1, 1, 1, "", "load_parameters"], [1, 1, 1, "", "load_pnl"], [1, 1, 1, "", "load_risk_factors"], [1, 1, 1, "", "load_time_series"], [1, 1, 1, "", "plot_vol_surface"]], "fortitudo.tech.entropy_pooling": [[1, 1, 1, "", "entropy_pooling"]], "fortitudo.tech.functions": [[1, 1, 1, "", "correlation_matrix"], [1, 1, 1, "", "covariance_matrix"], [1, 1, 1, "", "exposure_stacking"], [1, 1, 1, "", "portfolio_cvar"], [1, 1, 1, "", "portfolio_var"], [1, 1, 1, "", "portfolio_vol"], [1, 1, 1, "", "simulation_moments"]], "fortitudo.tech.optimization": [[1, 2, 1, "", "MeanCVaR"], [1, 2, 1, "", "MeanVariance"]], "fortitudo.tech.optimization.MeanCVaR": [[1, 3, 1, "", "efficient_frontier"], [1, 3, 1, "", "efficient_portfolio"]], "fortitudo.tech.optimization.MeanVariance": [[1, 3, 1, "", "efficient_frontier"], [1, 3, 1, "", "efficient_portfolio"]], "fortitudo.tech.option_pricing": [[1, 1, 1, "", "call_option"], [1, 1, 1, "", "forward"], [1, 1, 1, "", "put_option"]], "fortitudo.tech.simulation": [[1, 1, 1, "", "exp_decay_probs"], [1, 1, 1, "", "normal_exp_decay_calib"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"]}, "titleterms": {"contribut": 0, "document": 1, "data": 1, "entropi": 1, "pool": 1, "function": 1, "option": 1, "price": 1, "portfolio": 1, "optim": 1, "simul": 1, "exampl": 2, "fortitudo": 3, "technologi": 3, "open": 3, "sourc": 3, "audienc": 3, "compani": 3, "disclaim": 3, "code": 3, "conduct": 3, "instal": 4, "instruct": 4, "refer": 5}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinxcontrib.bibtex": 9, "sphinx": 60}, "alltitles": {"Contributing": [[0, "contributing"]], "Documentation": [[1, "documentation"]], "Data": [[1, "data"]], "Entropy Pooling": [[1, "entropy-pooling"]], "Functions": [[1, "functions"]], "Option Pricing": [[1, "option-pricing"]], "Portfolio Optimization": [[1, "portfolio-optimization"]], "Simulation": [[1, "simulation"]], "Examples": [[2, "examples"]], "Fortitudo Technologies Open Source": [[3, "fortitudo-technologies-open-source"]], "Audience": [[3, "audience"]], "Company": [[3, "company"]], "Disclaimer": [[3, "disclaimer"]], "Code of Conduct": [[3, "code-of-conduct"]], "Installation Instructions": [[4, "installation-instructions"]], "References": [[5, "references"]]}, "indexentries": {"meancvar (class in fortitudo.tech.optimization)": [[1, "fortitudo.tech.optimization.MeanCVaR"]], "meanvariance (class in fortitudo.tech.optimization)": [[1, "fortitudo.tech.optimization.MeanVariance"]], "call_option() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.call_option"]], "correlation_matrix() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.correlation_matrix"]], "covariance_matrix() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.covariance_matrix"]], "efficient_frontier() (meancvar method)": [[1, "fortitudo.tech.optimization.MeanCVaR.efficient_frontier"]], "efficient_frontier() (meanvariance method)": [[1, "fortitudo.tech.optimization.MeanVariance.efficient_frontier"]], "efficient_portfolio() (meancvar method)": [[1, "fortitudo.tech.optimization.MeanCVaR.efficient_portfolio"]], "efficient_portfolio() (meanvariance method)": [[1, "fortitudo.tech.optimization.MeanVariance.efficient_portfolio"]], "entropy_pooling() (in module fortitudo.tech.entropy_pooling)": [[1, "fortitudo.tech.entropy_pooling.entropy_pooling"]], "exp_decay_probs() (in module fortitudo.tech.simulation)": [[1, "fortitudo.tech.simulation.exp_decay_probs"]], "exposure_stacking() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.exposure_stacking"]], "fortitudo.tech.data": [[1, "module-fortitudo.tech.data"]], "fortitudo.tech.entropy_pooling": [[1, "module-fortitudo.tech.entropy_pooling"]], "fortitudo.tech.functions": [[1, "module-fortitudo.tech.functions"]], "fortitudo.tech.optimization": [[1, "module-fortitudo.tech.optimization"]], "fortitudo.tech.option_pricing": [[1, "module-fortitudo.tech.option_pricing"]], "fortitudo.tech.simulation": [[1, "module-fortitudo.tech.simulation"]], "forward() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.forward"]], "load_parameters() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_parameters"]], "load_pnl() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_pnl"]], "load_risk_factors() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_risk_factors"]], "load_time_series() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.load_time_series"]], "module": [[1, "module-fortitudo.tech.data"], [1, "module-fortitudo.tech.entropy_pooling"], [1, "module-fortitudo.tech.functions"], [1, "module-fortitudo.tech.optimization"], [1, "module-fortitudo.tech.option_pricing"], [1, "module-fortitudo.tech.simulation"]], "normal_exp_decay_calib() (in module fortitudo.tech.simulation)": [[1, "fortitudo.tech.simulation.normal_exp_decay_calib"]], "plot_vol_surface() (in module fortitudo.tech.data)": [[1, "fortitudo.tech.data.plot_vol_surface"]], "portfolio_cvar() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_cvar"]], "portfolio_var() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_var"]], "portfolio_vol() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.portfolio_vol"]], "put_option() (in module fortitudo.tech.option_pricing)": [[1, "fortitudo.tech.option_pricing.put_option"]], "simulation_moments() (in module fortitudo.tech.functions)": [[1, "fortitudo.tech.functions.simulation_moments"]]}}) \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index a2ad448..6ffe8de 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -38,7 +38,7 @@ author = 'Fortitudo Technologies' # The full version, including alpha/beta/rc tags -version = 'v1.1.1' +version = 'v1.1.3' # -- General configuration --------------------------------------------------- diff --git a/docs/source/documentation.rst b/docs/source/documentation.rst index 1fc966b..dfc5169 100644 --- a/docs/source/documentation.rst +++ b/docs/source/documentation.rst @@ -42,7 +42,7 @@ subject to the constraints The approach was first introduced by :cite:t:`EntropyPooling`, while the code is implemented using notation from :cite:t:`Vorobets2021`. For an introduction to Entropy Pooling, see `this video `_ -or `this article `_. +or `this Substack post `_. .. automodule:: fortitudo.tech.entropy_pooling :members: diff --git a/docs/source/index.rst b/docs/source/index.rst index 1624a39..f3e26dd 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -3,22 +3,30 @@ Fortitudo Technologies Open Source This package allows you to explore open-source implementations of some of our fundamental technologies, e.g., Entropy Pooling and CVaR optimization in Python. + See this `YouTube playlist `_ for a walkthrough of the package's functionality and examples. For a high-level introduction to the investment framework, see this `YouTube video `_ -and `Medium article `_. +and `Substack post `_. + For a mathematical introduction to the investment framework, see these `SSRN articles `_. For a pedagogical and deep presentation of the investment framework, you can access the `Portfolio Construction and Risk Management Book `_. +Audience +-------- + The package is intended for advanced users who are comfortable specifying portfolio constraints and Entropy Pooling views using matrices and vectors. This gives full flexibility in relation to working with these technologies. Hence, input checking is intentionally kept to a minimum. +Company +------- + Fortitudo Technologies offers novel investment software as well as quantitative and digitalization consultancy to the investment management industry. For more information, please visit our `website `_. diff --git a/poetry.lock b/poetry.lock index 0ef754d..ce90bbf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -217,64 +217,64 @@ test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] [[package]] name = "coverage" -version = "7.5.4" +version = "7.6.0" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6cfb5a4f556bb51aba274588200a46e4dd6b505fb1a5f8c5ae408222eb416f99"}, - {file = "coverage-7.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2174e7c23e0a454ffe12267a10732c273243b4f2d50d07544a91198f05c48f47"}, - {file = "coverage-7.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2214ee920787d85db1b6a0bd9da5f8503ccc8fcd5814d90796c2f2493a2f4d2e"}, - {file = "coverage-7.5.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1137f46adb28e3813dec8c01fefadcb8c614f33576f672962e323b5128d9a68d"}, - {file = "coverage-7.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b385d49609f8e9efc885790a5a0e89f2e3ae042cdf12958b6034cc442de428d3"}, - {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b4a474f799456e0eb46d78ab07303286a84a3140e9700b9e154cfebc8f527016"}, - {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5cd64adedf3be66f8ccee418473c2916492d53cbafbfcff851cbec5a8454b136"}, - {file = "coverage-7.5.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e564c2cf45d2f44a9da56f4e3a26b2236504a496eb4cb0ca7221cd4cc7a9aca9"}, - {file = "coverage-7.5.4-cp310-cp310-win32.whl", hash = "sha256:7076b4b3a5f6d2b5d7f1185fde25b1e54eb66e647a1dfef0e2c2bfaf9b4c88c8"}, - {file = "coverage-7.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:018a12985185038a5b2bcafab04ab833a9a0f2c59995b3cec07e10074c78635f"}, - {file = "coverage-7.5.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:db14f552ac38f10758ad14dd7b983dbab424e731588d300c7db25b6f89e335b5"}, - {file = "coverage-7.5.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3257fdd8e574805f27bb5342b77bc65578e98cbc004a92232106344053f319ba"}, - {file = "coverage-7.5.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a6612c99081d8d6134005b1354191e103ec9705d7ba2754e848211ac8cacc6b"}, - {file = "coverage-7.5.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d45d3cbd94159c468b9b8c5a556e3f6b81a8d1af2a92b77320e887c3e7a5d080"}, - {file = "coverage-7.5.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed550e7442f278af76d9d65af48069f1fb84c9f745ae249c1a183c1e9d1b025c"}, - {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a892be37ca35eb5019ec85402c3371b0f7cda5ab5056023a7f13da0961e60da"}, - {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8192794d120167e2a64721d88dbd688584675e86e15d0569599257566dec9bf0"}, - {file = "coverage-7.5.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:820bc841faa502e727a48311948e0461132a9c8baa42f6b2b84a29ced24cc078"}, - {file = "coverage-7.5.4-cp311-cp311-win32.whl", hash = "sha256:6aae5cce399a0f065da65c7bb1e8abd5c7a3043da9dceb429ebe1b289bc07806"}, - {file = "coverage-7.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:d2e344d6adc8ef81c5a233d3a57b3c7d5181f40e79e05e1c143da143ccb6377d"}, - {file = "coverage-7.5.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:54317c2b806354cbb2dc7ac27e2b93f97096912cc16b18289c5d4e44fc663233"}, - {file = "coverage-7.5.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:042183de01f8b6d531e10c197f7f0315a61e8d805ab29c5f7b51a01d62782747"}, - {file = "coverage-7.5.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6bb74ed465d5fb204b2ec41d79bcd28afccf817de721e8a807d5141c3426638"}, - {file = "coverage-7.5.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3d45ff86efb129c599a3b287ae2e44c1e281ae0f9a9bad0edc202179bcc3a2e"}, - {file = "coverage-7.5.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5013ed890dc917cef2c9f765c4c6a8ae9df983cd60dbb635df8ed9f4ebc9f555"}, - {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1014fbf665fef86cdfd6cb5b7371496ce35e4d2a00cda501cf9f5b9e6fced69f"}, - {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3684bc2ff328f935981847082ba4fdc950d58906a40eafa93510d1b54c08a66c"}, - {file = "coverage-7.5.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:581ea96f92bf71a5ec0974001f900db495488434a6928a2ca7f01eee20c23805"}, - {file = "coverage-7.5.4-cp312-cp312-win32.whl", hash = "sha256:73ca8fbc5bc622e54627314c1a6f1dfdd8db69788f3443e752c215f29fa87a0b"}, - {file = "coverage-7.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:cef4649ec906ea7ea5e9e796e68b987f83fa9a718514fe147f538cfeda76d7a7"}, - {file = "coverage-7.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdd31315fc20868c194130de9ee6bfd99755cc9565edff98ecc12585b90be882"}, - {file = "coverage-7.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:02ff6e898197cc1e9fa375581382b72498eb2e6d5fc0b53f03e496cfee3fac6d"}, - {file = "coverage-7.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d05c16cf4b4c2fc880cb12ba4c9b526e9e5d5bb1d81313d4d732a5b9fe2b9d53"}, - {file = "coverage-7.5.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5986ee7ea0795a4095ac4d113cbb3448601efca7f158ec7f7087a6c705304e4"}, - {file = "coverage-7.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5df54843b88901fdc2f598ac06737f03d71168fd1175728054c8f5a2739ac3e4"}, - {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ab73b35e8d109bffbda9a3e91c64e29fe26e03e49addf5b43d85fc426dde11f9"}, - {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:aea072a941b033813f5e4814541fc265a5c12ed9720daef11ca516aeacd3bd7f"}, - {file = "coverage-7.5.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:16852febd96acd953b0d55fc842ce2dac1710f26729b31c80b940b9afcd9896f"}, - {file = "coverage-7.5.4-cp38-cp38-win32.whl", hash = "sha256:8f894208794b164e6bd4bba61fc98bf6b06be4d390cf2daacfa6eca0a6d2bb4f"}, - {file = "coverage-7.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:e2afe743289273209c992075a5a4913e8d007d569a406ffed0bd080ea02b0633"}, - {file = "coverage-7.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b95c3a8cb0463ba9f77383d0fa8c9194cf91f64445a63fc26fb2327e1e1eb088"}, - {file = "coverage-7.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d7564cc09dd91b5a6001754a5b3c6ecc4aba6323baf33a12bd751036c998be4"}, - {file = "coverage-7.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44da56a2589b684813f86d07597fdf8a9c6ce77f58976727329272f5a01f99f7"}, - {file = "coverage-7.5.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e16f3d6b491c48c5ae726308e6ab1e18ee830b4cdd6913f2d7f77354b33f91c8"}, - {file = "coverage-7.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbc5958cb471e5a5af41b0ddaea96a37e74ed289535e8deca404811f6cb0bc3d"}, - {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a04e990a2a41740b02d6182b498ee9796cf60eefe40cf859b016650147908029"}, - {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ddbd2f9713a79e8e7242d7c51f1929611e991d855f414ca9996c20e44a895f7c"}, - {file = "coverage-7.5.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b1ccf5e728ccf83acd313c89f07c22d70d6c375a9c6f339233dcf792094bcbf7"}, - {file = "coverage-7.5.4-cp39-cp39-win32.whl", hash = "sha256:56b4eafa21c6c175b3ede004ca12c653a88b6f922494b023aeb1e836df953ace"}, - {file = "coverage-7.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:65e528e2e921ba8fd67d9055e6b9f9e34b21ebd6768ae1c1723f4ea6ace1234d"}, - {file = "coverage-7.5.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:79b356f3dd5b26f3ad23b35c75dbdaf1f9e2450b6bcefc6d0825ea0aa3f86ca5"}, - {file = "coverage-7.5.4.tar.gz", hash = "sha256:a44963520b069e12789d0faea4e9fdb1e410cdc4aab89d94f7f55cbb7fef0353"}, + {file = "coverage-7.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dff044f661f59dace805eedb4a7404c573b6ff0cdba4a524141bc63d7be5c7fd"}, + {file = "coverage-7.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8659fd33ee9e6ca03950cfdcdf271d645cf681609153f218826dd9805ab585c"}, + {file = "coverage-7.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7792f0ab20df8071d669d929c75c97fecfa6bcab82c10ee4adb91c7a54055463"}, + {file = "coverage-7.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4b3cd1ca7cd73d229487fa5caca9e4bc1f0bca96526b922d61053ea751fe791"}, + {file = "coverage-7.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7e128f85c0b419907d1f38e616c4f1e9f1d1b37a7949f44df9a73d5da5cd53c"}, + {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a94925102c89247530ae1dab7dc02c690942566f22e189cbd53579b0693c0783"}, + {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dcd070b5b585b50e6617e8972f3fbbee786afca71b1936ac06257f7e178f00f6"}, + {file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d50a252b23b9b4dfeefc1f663c568a221092cbaded20a05a11665d0dbec9b8fb"}, + {file = "coverage-7.6.0-cp310-cp310-win32.whl", hash = "sha256:0e7b27d04131c46e6894f23a4ae186a6a2207209a05df5b6ad4caee6d54a222c"}, + {file = "coverage-7.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dece71673b3187c86226c3ca793c5f891f9fc3d8aa183f2e3653da18566169"}, + {file = "coverage-7.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7b525ab52ce18c57ae232ba6f7010297a87ced82a2383b1afd238849c1ff933"}, + {file = "coverage-7.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bea27c4269234e06f621f3fac3925f56ff34bc14521484b8f66a580aacc2e7d"}, + {file = "coverage-7.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8d1d1821ba5fc88d4a4f45387b65de52382fa3ef1f0115a4f7a20cdfab0e94"}, + {file = "coverage-7.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01c322ef2bbe15057bc4bf132b525b7e3f7206f071799eb8aa6ad1940bcf5fb1"}, + {file = "coverage-7.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03cafe82c1b32b770a29fd6de923625ccac3185a54a5e66606da26d105f37dac"}, + {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d1b923fc4a40c5832be4f35a5dab0e5ff89cddf83bb4174499e02ea089daf57"}, + {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4b03741e70fb811d1a9a1d75355cf391f274ed85847f4b78e35459899f57af4d"}, + {file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a73d18625f6a8a1cbb11eadc1d03929f9510f4131879288e3f7922097a429f63"}, + {file = "coverage-7.6.0-cp311-cp311-win32.whl", hash = "sha256:65fa405b837060db569a61ec368b74688f429b32fa47a8929a7a2f9b47183713"}, + {file = "coverage-7.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:6379688fb4cfa921ae349c76eb1a9ab26b65f32b03d46bb0eed841fd4cb6afb1"}, + {file = "coverage-7.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f7db0b6ae1f96ae41afe626095149ecd1b212b424626175a6633c2999eaad45b"}, + {file = "coverage-7.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bbdf9a72403110a3bdae77948b8011f644571311c2fb35ee15f0f10a8fc082e8"}, + {file = "coverage-7.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc44bf0315268e253bf563f3560e6c004efe38f76db03a1558274a6e04bf5d5"}, + {file = "coverage-7.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da8549d17489cd52f85a9829d0e1d91059359b3c54a26f28bec2c5d369524807"}, + {file = "coverage-7.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0086cd4fc71b7d485ac93ca4239c8f75732c2ae3ba83f6be1c9be59d9e2c6382"}, + {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1fad32ee9b27350687035cb5fdf9145bc9cf0a094a9577d43e909948ebcfa27b"}, + {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:044a0985a4f25b335882b0966625270a8d9db3d3409ddc49a4eb00b0ef5e8cee"}, + {file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:76d5f82213aa78098b9b964ea89de4617e70e0d43e97900c2778a50856dac605"}, + {file = "coverage-7.6.0-cp312-cp312-win32.whl", hash = "sha256:3c59105f8d58ce500f348c5b56163a4113a440dad6daa2294b5052a10db866da"}, + {file = "coverage-7.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca5d79cfdae420a1d52bf177de4bc2289c321d6c961ae321503b2ca59c17ae67"}, + {file = "coverage-7.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d39bd10f0ae453554798b125d2f39884290c480f56e8a02ba7a6ed552005243b"}, + {file = "coverage-7.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beb08e8508e53a568811016e59f3234d29c2583f6b6e28572f0954a6b4f7e03d"}, + {file = "coverage-7.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2e16f4cd2bc4d88ba30ca2d3bbf2f21f00f382cf4e1ce3b1ddc96c634bc48ca"}, + {file = "coverage-7.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6616d1c9bf1e3faea78711ee42a8b972367d82ceae233ec0ac61cc7fec09fa6b"}, + {file = "coverage-7.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4567d6c334c46046d1c4c20024de2a1c3abc626817ae21ae3da600f5779b44"}, + {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d17c6a415d68cfe1091d3296ba5749d3d8696e42c37fca5d4860c5bf7b729f03"}, + {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9146579352d7b5f6412735d0f203bbd8d00113a680b66565e205bc605ef81bc6"}, + {file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cdab02a0a941af190df8782aafc591ef3ad08824f97850b015c8c6a8b3877b0b"}, + {file = "coverage-7.6.0-cp38-cp38-win32.whl", hash = "sha256:df423f351b162a702c053d5dddc0fc0ef9a9e27ea3f449781ace5f906b664428"}, + {file = "coverage-7.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:f2501d60d7497fd55e391f423f965bbe9e650e9ffc3c627d5f0ac516026000b8"}, + {file = "coverage-7.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7221f9ac9dad9492cecab6f676b3eaf9185141539d5c9689d13fd6b0d7de840c"}, + {file = "coverage-7.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ddaaa91bfc4477d2871442bbf30a125e8fe6b05da8a0015507bfbf4718228ab2"}, + {file = "coverage-7.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4cbe651f3904e28f3a55d6f371203049034b4ddbce65a54527a3f189ca3b390"}, + {file = "coverage-7.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831b476d79408ab6ccfadaaf199906c833f02fdb32c9ab907b1d4aa0713cfa3b"}, + {file = "coverage-7.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46c3d091059ad0b9c59d1034de74a7f36dcfa7f6d3bde782c49deb42438f2450"}, + {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4d5fae0a22dc86259dee66f2cc6c1d3e490c4a1214d7daa2a93d07491c5c04b6"}, + {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:07ed352205574aad067482e53dd606926afebcb5590653121063fbf4e2175166"}, + {file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:49c76cdfa13015c4560702574bad67f0e15ca5a2872c6a125f6327ead2b731dd"}, + {file = "coverage-7.6.0-cp39-cp39-win32.whl", hash = "sha256:482855914928c8175735a2a59c8dc5806cf7d8f032e4820d52e845d1f731dca2"}, + {file = "coverage-7.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:543ef9179bc55edfd895154a51792b01c017c87af0ebaae092720152e19e42ca"}, + {file = "coverage-7.6.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:6fe885135c8a479d3e37a7aae61cbd3a0fb2deccb4dda3c25f92a49189f766d6"}, + {file = "coverage-7.6.0.tar.gz", hash = "sha256:289cc803fa1dc901f84701ac10c9ee873619320f2f9aff38794db4a4a0268d51"}, ] [package.dependencies] @@ -342,14 +342,14 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -447,14 +447,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.0.0" +version = "8.2.0" description = "Read metadata from Python packages" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.0.0-py3-none-any.whl", hash = "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f"}, - {file = "importlib_metadata-8.0.0.tar.gz", hash = "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"}, + {file = "importlib_metadata-8.2.0-py3-none-any.whl", hash = "sha256:11901fa0c2f97919b288679932bb64febaeacf289d18ac84dd68cb2e74213369"}, + {file = "importlib_metadata-8.2.0.tar.gz", hash = "sha256:72e8d4399996132204f9a16dcc751af254a48f8d1b20b9ff0f98d4a8f901e73d"}, ] [package.dependencies] @@ -1078,14 +1078,14 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "8.2.2" +version = "8.3.2" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, - {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, + {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, + {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, ] [package.dependencies] @@ -1093,7 +1093,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.5,<2.0" +pluggy = ">=1.5,<2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] @@ -1362,18 +1362,18 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.8" +version = "2.0.0" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_applehelp-1.0.8-py3-none-any.whl", hash = "sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"}, - {file = "sphinxcontrib_applehelp-1.0.8.tar.gz", hash = "sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"}, + {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, + {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] @@ -1398,35 +1398,35 @@ Sphinx = ">=3.5" [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.6" +version = "2.0.0" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_devhelp-1.0.6-py3-none-any.whl", hash = "sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f"}, - {file = "sphinxcontrib_devhelp-1.0.6.tar.gz", hash = "sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"}, + {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, + {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.5" +version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_htmlhelp-2.0.5-py3-none-any.whl", hash = "sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04"}, - {file = "sphinxcontrib_htmlhelp-2.0.5.tar.gz", hash = "sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015"}, + {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, + {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] @@ -1462,35 +1462,35 @@ test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.7" +version = "2.0.0" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_qthelp-1.0.7-py3-none-any.whl", hash = "sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"}, - {file = "sphinxcontrib_qthelp-1.0.7.tar.gz", hash = "sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"}, + {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, + {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] -test = ["pytest"] +test = ["defusedxml (>=0.7.1)", "pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.10" +version = "2.0.0" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_serializinghtml-1.1.10-py3-none-any.whl", hash = "sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7"}, - {file = "sphinxcontrib_serializinghtml-1.1.10.tar.gz", hash = "sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"}, + {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, + {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] diff --git a/pyproject.toml b/pyproject.toml index 6cad0de..241b001 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fortitudo.tech" -version = "1.1.2" +version = "1.1.3" description = "Entropy Pooling views and stress-testing combined with Conditional Value-at-Risk (CVaR) portfolio optimization in Python." authors = ["Fortitudo Technologies "] license = "GPL-3.0-or-later"