diff --git a/README.md b/README.md index 398d965..bed2ea4 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,9 @@ pip install git+https://github.com/manuelbieri/shelegia_motta_2021.git ### Introduction -The theory of the “kill zone” has become an increasingly prominent cause for concern among economists in recent times, especially with the rise of digital companies that have become monopolists in their sectors internationally. Companies like Facebook are continuously acquiring start-ups that may have a chance of competing with them in some way in the future. The sheer size and dominance of these companies combined with their aggression regarding the acquisition of competitors makes entering these markets as a direct competitor very unattractive at first glance. However, this issue is not as one sided as that. This paper aims to rationalize the well-known “kill zone” argument by providing a simple model that explores how and when an incumbent firm may induce an entrant to choose a “non-aggressive” innovation path and enter with the goal of being acquired. +The theory of the “kill zone” has become an increasingly prominent cause for concern among economists in recent times, especially with the rise of digital companies that have become monopolists in their sectors internationally. Companies like Facebook are continuously acquiring start-ups that may have a chance of competing with them in some way in the future. The sheer size and dominance of these companies combined with their aggression regarding the acquisition of competitors makes entering these markets as a direct competitor very unattractive at first glance. However, this issue is not as one-sided as that. This paper aims to rationalize the well-known “kill zone” argument by providing a simple model that explores how and when an incumbent firm may induce an entrant to choose a “non-aggressive” innovation path and enter with the goal of being acquired. -The different models revealed that platform-owning incumbents react in diametrically opposing fashion to an entrant’s plans to develop a substitute to their platform and a complement. When a larger firm is dominating a certain sector and new firms are trying to enter this market, these firms may feel a hesitation to produce a direct competitor to the products of the incumbent and they will veer more towards producing a compliment as the prospect of the incumbent copying or acquiring the entrant looms. This is the reason a “kill zone” may emerge. Interestingly, the possibility of an acquisition by the incumbent does not worsen the “kill zone” effect. In fact, it may even induce the entrant to develop a product that rivals the incumbent in the hope of being acquired as this can generate massive profits for the smaller entrant. Meanwhile, a two – sided market will not alter the “kill zone” significantly compared to the basic model. Only simultaneous choices of both parties will avoid the existence of a “kill zone” since the choice of the entrant cannot prevent the incumbent to copy the entrant. +The different models revealed that platform-owning incumbents react in diametrically opposing fashion to an entrant’s plans to develop a substitute to their platform and a complement. When a larger firm is dominating a certain sector and new firms are trying to enter this market, these firms may feel a hesitation to produce a direct competitor to the products of the incumbent, and they will veer more towards producing a compliment as the prospect of the incumbent copying or acquiring the entrant looms. This is the reason a “kill zone” may emerge. Interestingly, the possibility of an acquisition by the incumbent does not worsen the “kill zone” effect. In fact, it may even induce the entrant to develop a product that rivals the incumbent in the hope of being acquired as this can generate massive profits for the smaller entrant. Meanwhile, a two – sided market will not alter the “kill zone” significantly compared to the basic model. Only simultaneous choices of both parties will avoid the existence of a “kill zone” since the choice of the entrant cannot prevent the incumbent to copy the entrant. Since all models implement the Shelegia_Motta_2021.IModel.IModel - Interface, therefore all models provide the same functionality (public methods), even though the results may change substantially. @@ -141,6 +141,13 @@ A demonstration of the code can be found in [demo.html](demo.html) (output of [d | IPython | 7.29.0 | Just for the demonstration in demo.ipynb | | pdoc | 8.0.1 | Only to generate the documentation from scratch |
+Install the dependencies with the following command: + +``` +pip install -r requirements.txt +``` +(Note: Make sure you are operating in the same directory as the `requirements.txt` is located.) + These packages include all the needed imports for the functionality of this package. #### Additional Notes diff --git a/demo.html b/demo.html index 9ecf16e..9afa3fe 100644 --- a/demo.html +++ b/demo.html @@ -3,7 +3,7 @@ -demo +demo @@ -14516,7 +14516,8 @@

Shelegia and Motta (2021)

The theory of the “kill zone” has become an increasingly prominent cause for concern among economists in recent times, especially with the rise of digital companies that have become monopolists in their sectors internationally. Companies like Facebook are continuously acquiring start-ups that may have a chance of competing with them in some way in the future. The sheer size and dominance of these companies combined with their aggression regarding the acquisition of competitors makes entering these markets as a direct competitor very unattractive at first glance. However, this issue is not as one - sided as that. This paper aims to rationalize the well-known “kill zone” argument by providing a simple model that explores how and when an incumbent firm may induce an entrant to choose a “non-aggressive” innovation path and enter with the goal of being acquired.

-

The different models revealed that platform-owning incumbents react in diametrically opposing fashion to an entrant’s plans to develop a substitute to their platform and a complement. When a larger firm is dominating a certain sector and new firms are trying to enter this market, these firms may feel a hesitation to produce a direct competitor to the products of the incumbent, and they will veer more towards producing a compliment as the prospect of the incumbent copying or acquiring the entrant looms. This is the reason a “kill zone” may emerge. Interestingly, the possibility of an acquisition by the incumbent does not worsen the “kill zone” effect. In fact, it may even induce the entrant to develop a product that rivals the incumbent in the hope of being acquired as this can generate massive profits for the smaller entrant. Meanwhile, a two – sided market will not alter the “kill zone” significantly compared to the basic model. Only simultaneous choices of both parties will avoid the existence of a “kill zone” since the choice of the entrant cannot prevent the incumbent to copy the entrant.

+

The different models revealed that platform-owning incumbents react in diametrically opposing fashion to an entrant’s plans to develop a substitute to their platform and a complement. When a larger firm is dominating a certain sector and new firms are trying to enter this market, these firms may feel a hesitation to produce a direct competitor to the products of the incumbent, and they will veer more towards producing a compliment as the prospect of the incumbent copying or acquiring the entrant looms. This is the reason a “kill zone” may emerge. Interestingly, the possibility of an acquisition by the incumbent does not worsen the “kill zone” effect. In fact, it may even induce the entrant to develop a product that rivals the incumbent in the hope of being acquired as this can generate massive profits for the smaller entrant. Meanwhile, a two – sided market will not alter the “kill zone” significantly compared to the basic model. Only simultaneous choices of both parties will avoid the existence of a “kill zone” since the choice of the entrant cannot prevent the incumbent to copy the entrant. +Additionally, a variable bargaining power of the incumbent relatively to the entrant will not drastically affect the outcome of the models, but the extent of the "kill zone" will depend on this bargaining power.

@@ -14913,7 +14914,7 @@

BaseModel< - 2021-11-18T09:18:37.047563 + 2021-11-21T09:55:33.031838 image/svg+xml @@ -14951,7 +14952,7 @@

BaseModel< L 47.369036 69.039557 L 32.210909 69.039557 z -" clip-path="url(#p326114f273)" style="fill: #fa8072; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #fa8072; opacity: 0.4"/> BaseModel< L 133.986903 55.465637 L 118.828776 55.465637 z -" clip-path="url(#p326114f273)" style="fill: #fa8072; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #fa8072; opacity: 0.4"/> BaseModel< L 220.60477 136.909156 L 205.446643 136.909156 z -" clip-path="url(#p326114f273)" style="fill: #fa8072; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #fa8072; opacity: 0.4"/> BaseModel< L 307.222637 136.909156 L 292.06451 136.909156 z -" clip-path="url(#p326114f273)" style="fill: #fa8072; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #fa8072; opacity: 0.4"/> BaseModel< L 393.840504 55.465637 L 378.682377 55.465637 z -" clip-path="url(#p326114f273)" style="fill: #fa8072; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #fa8072; opacity: 0.4"/> BaseModel< L 480.458371 41.891717 L 465.300244 41.891717 z -" clip-path="url(#p326114f273)" style="fill: #fa8072"/> +" clip-path="url(#p95d7475c68)" style="fill: #fa8072"/> BaseModel< L 64.692609 123.335237 L 49.534482 123.335237 z -" clip-path="url(#p326114f273)" style="fill: #f0e68c; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #f0e68c; opacity: 0.4"/> BaseModel< L 151.310476 136.909156 L 136.152349 136.909156 z -" clip-path="url(#p326114f273)" style="fill: #f0e68c; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #f0e68c; opacity: 0.4"/> BaseModel< L 237.928343 82.07052 L 222.770216 82.07052 z -" clip-path="url(#p326114f273)" style="fill: #f0e68c"/> +" clip-path="url(#p95d7475c68)" style="fill: #f0e68c"/> BaseModel< L 324.54621 109.21836 L 309.388083 109.21836 z -" clip-path="url(#p326114f273)" style="fill: #f0e68c; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #f0e68c; opacity: 0.4"/> BaseModel< L 411.164077 109.761317 L 396.00595 109.761317 z -" clip-path="url(#p326114f273)" style="fill: #f0e68c; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #f0e68c; opacity: 0.4"/> BaseModel< L 497.781944 123.335237 L 482.623817 123.335237 z -" clip-path="url(#p326114f273)" style="fill: #f0e68c; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #f0e68c; opacity: 0.4"/> BaseModel< L 82.016183 136.909156 L 66.858056 136.909156 z -" clip-path="url(#p326114f273)" style="fill: #32cd32; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #32cd32; opacity: 0.4"/> BaseModel< L 168.63405 136.909156 L 153.475923 136.909156 z -" clip-path="url(#p326114f273)" style="fill: #32cd32; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #32cd32; opacity: 0.4"/> BaseModel< L 255.251917 82.613477 L 240.09379 82.613477 z -" clip-path="url(#p326114f273)" style="fill: #32cd32; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #32cd32; opacity: 0.4"/> BaseModel< L 341.869784 55.465637 L 326.711657 55.465637 z -" clip-path="url(#p326114f273)" style="fill: #32cd32"/> +" clip-path="url(#p95d7475c68)" style="fill: #32cd32"/> BaseModel< L 428.487651 136.909156 L 413.329524 136.909156 z -" clip-path="url(#p326114f273)" style="fill: #32cd32; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #32cd32; opacity: 0.4"/> BaseModel< L 515.105518 136.909156 L 499.947391 136.909156 z -" clip-path="url(#p326114f273)" style="fill: #32cd32; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #32cd32; opacity: 0.4"/> BaseModel< L 99.339756 55.465637 L 84.181629 55.465637 z -" clip-path="url(#p326114f273)" style="fill: #40e0d0; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #40e0d0; opacity: 0.4"/> BaseModel< L 185.957623 55.465637 L 170.799496 55.465637 z -" clip-path="url(#p326114f273)" style="fill: #40e0d0; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #40e0d0; opacity: 0.4"/> BaseModel< L 272.57549 27.774841 L 257.417363 27.774841 z -" clip-path="url(#p326114f273)" style="fill: #40e0d0"/> +" clip-path="url(#p95d7475c68)" style="fill: #40e0d0"/> BaseModel< L 359.193357 27.774841 L 344.03523 27.774841 z -" clip-path="url(#p326114f273)" style="fill: #40e0d0"/> +" clip-path="url(#p95d7475c68)" style="fill: #40e0d0"/> BaseModel< L 445.811224 28.317798 L 430.653097 28.317798 z -" clip-path="url(#p326114f273)" style="fill: #40e0d0; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #40e0d0; opacity: 0.4"/> BaseModel< L 532.429091 28.317798 L 517.270964 28.317798 z -" clip-path="url(#p326114f273)" style="fill: #40e0d0; opacity: 0.4"/> +" clip-path="url(#p95d7475c68)" style="fill: #40e0d0; opacity: 0.4"/> - - + @@ -15248,7 +15249,7 @@

BaseModel< - + @@ -15285,7 +15286,7 @@

BaseModel< - + @@ -15305,7 +15306,7 @@

BaseModel< - + @@ -15328,7 +15329,7 @@

BaseModel< - + @@ -15374,7 +15375,7 @@

BaseModel< - + @@ -16700,7 +16701,7 @@

BaseModel< - + @@ -16771,7 +16772,7 @@

BaseModel< - 2021-11-18T09:18:39.257492 + 2021-11-21T09:55:34.122238 image/svg+xml @@ -16809,7 +16810,7 @@

BaseModel< L 110.267925 203.571901 L 61.087649 203.571901 z -" clip-path="url(#p6453a14aa8)" style="fill: #fa8072"/> +" clip-path="url(#p4a3aa0f6bd)" style="fill: #fa8072"/> BaseModel< L 177.567249 203.571901 L 110.267925 203.571901 z -" clip-path="url(#p6453a14aa8)" style="fill: #f0e68c"/> +" clip-path="url(#p4a3aa0f6bd)" style="fill: #f0e68c"/> BaseModel< L 242.278138 203.571901 L 177.567249 203.571901 z -" clip-path="url(#p6453a14aa8)" style="fill: #32cd32"/> +" clip-path="url(#p4a3aa0f6bd)" style="fill: #32cd32"/> BaseModel< L 110.267925 72.274781 L 61.087649 72.274781 z -" clip-path="url(#p6453a14aa8)" style="fill: #40e0d0"/> +" clip-path="url(#p4a3aa0f6bd)" style="fill: #40e0d0"/> BaseModel< L 242.278138 181.689048 L 177.567249 181.689048 z -" clip-path="url(#p6453a14aa8)" style="fill: #b0e0e6"/> +" clip-path="url(#p4a3aa0f6bd)" style="fill: #b0e0e6"/> BaseModel< L 61.087649 72.274781 L 110.267925 72.274781 z -" clip-path="url(#p6453a14aa8)" style="fill: #d8bfd8"/> +" clip-path="url(#p4a3aa0f6bd)" style="fill: #d8bfd8"/> - - + @@ -16919,7 +16920,7 @@

BaseModel< - + @@ -16960,7 +16961,7 @@

BaseModel< - + @@ -16996,7 +16997,7 @@

BaseModel< - + @@ -17301,12 +17302,12 @@

BaseModel< - - + @@ -17322,7 +17323,7 @@

BaseModel< - + @@ -17365,7 +17366,7 @@

BaseModel< - + @@ -17381,7 +17382,7 @@

BaseModel< - + @@ -17409,7 +17410,7 @@

BaseModel< - + @@ -17441,7 +17442,7 @@

BaseModel< - + @@ -17457,7 +17458,7 @@

BaseModel< - + @@ -17473,7 +17474,7 @@

BaseModel< - + @@ -17489,7 +17490,7 @@

BaseModel< - + @@ -17801,27 +17802,27 @@

BaseModel< +" clip-path="url(#p4a3aa0f6bd)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p4a3aa0f6bd)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p4a3aa0f6bd)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p4a3aa0f6bd)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p4a3aa0f6bd)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> BaseModel< L 535.934819 203.571901 L 486.754544 203.571901 z -" clip-path="url(#p0bdc6d14c6)" style="fill: #fa8072"/> +" clip-path="url(#pcc5c114952)" style="fill: #fa8072"/> BaseModel< L 667.945033 203.571901 L 535.934819 203.571901 z -" clip-path="url(#p0bdc6d14c6)" style="fill: #f0e68c"/> +" clip-path="url(#pcc5c114952)" style="fill: #f0e68c"/> BaseModel< L 535.934819 72.274781 L 486.754544 72.274781 z -" clip-path="url(#p0bdc6d14c6)" style="fill: #32cd32"/> +" clip-path="url(#pcc5c114952)" style="fill: #32cd32"/> BaseModel< L 486.754544 72.274781 L 535.934819 72.274781 z -" clip-path="url(#p0bdc6d14c6)" style="fill: #40e0d0"/> +" clip-path="url(#pcc5c114952)" style="fill: #40e0d0"/> - + @@ -19753,7 +19754,7 @@

BaseModel< - + @@ -19768,7 +19769,7 @@

BaseModel< - + @@ -19783,7 +19784,7 @@

BaseModel< - + @@ -19826,7 +19827,7 @@

BaseModel< - + @@ -19842,7 +19843,7 @@

BaseModel< - + @@ -19858,7 +19859,7 @@

BaseModel< - + @@ -19874,7 +19875,7 @@

BaseModel< - + @@ -19890,7 +19891,7 @@

BaseModel< - + @@ -19906,7 +19907,7 @@

BaseModel< - + @@ -19922,7 +19923,7 @@

BaseModel< - + @@ -19938,7 +19939,7 @@

BaseModel< - + @@ -19954,7 +19955,7 @@

BaseModel< - + @@ -20016,27 +20017,27 @@

BaseModel< +" clip-path="url(#pcc5c114952)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pcc5c114952)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pcc5c114952)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pcc5c114952)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pcc5c114952)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> BaseModel< - + - + @@ -21029,7 +21030,7 @@

BargainingPowerModel - 2021-11-18T09:18:40.648049 + 2021-11-21T09:55:34.843655 image/svg+xml @@ -21067,7 +21068,7 @@

BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #fa8072; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #fa8072; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #fa8072; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #fa8072; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #fa8072; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #fa8072"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #f0e68c; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #f0e68c; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #f0e68c"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #f0e68c; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #f0e68c; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #f0e68c; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #32cd32; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #32cd32; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #32cd32; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #32cd32"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #32cd32; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #32cd32; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #40e0d0; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #40e0d0; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #40e0d0"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #40e0d0"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #40e0d0; opacity: 0.4"/> BargainingPowerModel +" clip-path="url(#p8cb21c1bd9)" style="fill: #40e0d0; opacity: 0.4"/> - - + @@ -21364,7 +21365,7 @@

BargainingPowerModel - + @@ -21401,7 +21402,7 @@

BargainingPowerModel - + @@ -21421,7 +21422,7 @@

BargainingPowerModel - + @@ -21444,7 +21445,7 @@

BargainingPowerModel - + @@ -21490,7 +21491,7 @@

BargainingPowerModel - + @@ -22816,7 +22817,7 @@

BargainingPowerModel + @@ -22887,7 +22888,7 @@

BargainingPowerModel - 2021-11-18T09:18:41.799184 + 2021-11-21T09:55:35.462119 image/svg+xml @@ -22925,7 +22926,7 @@

BargainingPowerModel +" clip-path="url(#p3b3c65e891)" style="fill: #fa8072"/> BargainingPowerModel +" clip-path="url(#p3b3c65e891)" style="fill: #f0e68c"/> BargainingPowerModel +" clip-path="url(#p3b3c65e891)" style="fill: #32cd32"/> BargainingPowerModel +" clip-path="url(#p3b3c65e891)" style="fill: #40e0d0"/> BargainingPowerModel +" clip-path="url(#p3b3c65e891)" style="fill: #b0e0e6"/> BargainingPowerModel +" clip-path="url(#p3b3c65e891)" style="fill: #d8bfd8"/> BargainingPowerModel +" clip-path="url(#p3b3c65e891)" style="fill: #ffc0cb"/> - - + @@ -23043,7 +23044,7 @@

BargainingPowerModel - + @@ -23084,7 +23085,7 @@

BargainingPowerModel - + @@ -23120,7 +23121,7 @@

BargainingPowerModel - + @@ -23425,12 +23426,12 @@

BargainingPowerModel - - + @@ -23446,7 +23447,7 @@

BargainingPowerModel - + @@ -23489,7 +23490,7 @@

BargainingPowerModel - + @@ -23505,7 +23506,7 @@

BargainingPowerModel - + @@ -23533,7 +23534,7 @@

BargainingPowerModel - + @@ -23565,7 +23566,7 @@

BargainingPowerModel - + @@ -23581,7 +23582,7 @@

BargainingPowerModel - + @@ -23597,7 +23598,7 @@

BargainingPowerModel - + @@ -23613,7 +23614,7 @@

BargainingPowerModel - + @@ -23925,32 +23926,32 @@

BargainingPowerModel +" clip-path="url(#p3b3c65e891)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p3b3c65e891)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p3b3c65e891)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p3b3c65e891)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p3b3c65e891)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p3b3c65e891)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> BargainingPowerModel +" clip-path="url(#pfbc87c0aa6)" style="fill: #fa8072"/> BargainingPowerModel +" clip-path="url(#pfbc87c0aa6)" style="fill: #f0e68c"/> BargainingPowerModel +" clip-path="url(#pfbc87c0aa6)" style="fill: #32cd32"/> BargainingPowerModel +" clip-path="url(#pfbc87c0aa6)" style="fill: #40e0d0"/> - + @@ -24763,7 +24764,7 @@

BargainingPowerModel - + @@ -24778,7 +24779,7 @@

BargainingPowerModel - + @@ -24793,7 +24794,7 @@

BargainingPowerModel - + @@ -24836,7 +24837,7 @@

BargainingPowerModel - + @@ -24852,7 +24853,7 @@

BargainingPowerModel - + @@ -24868,7 +24869,7 @@

BargainingPowerModel - + @@ -24884,7 +24885,7 @@

BargainingPowerModel - + @@ -24900,7 +24901,7 @@

BargainingPowerModel - + @@ -24916,7 +24917,7 @@

BargainingPowerModel - + @@ -24932,7 +24933,7 @@

BargainingPowerModel - + @@ -24948,7 +24949,7 @@

BargainingPowerModel - + @@ -24964,7 +24965,7 @@

BargainingPowerModel - + @@ -25026,32 +25027,32 @@

BargainingPowerModel +" clip-path="url(#pfbc87c0aa6)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pfbc87c0aa6)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pfbc87c0aa6)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pfbc87c0aa6)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pfbc87c0aa6)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pfbc87c0aa6)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> BargainingPowerModel + - + @@ -25484,7 +25485,7 @@

UnobservableModel - 2021-11-18T09:18:42.471058 + 2021-11-21T09:55:35.874122 image/svg+xml @@ -25522,7 +25523,7 @@

UnobservableModel +" clip-path="url(#p4c45a56de1)" style="fill: #fa8072"/> UnobservableModel +" clip-path="url(#p4c45a56de1)" style="fill: #f0e68c"/> UnobservableModel +" clip-path="url(#p4c45a56de1)" style="fill: #32cd32"/> UnobservableModel +" clip-path="url(#p4c45a56de1)" style="fill: #40e0d0"/> - - + @@ -25614,7 +25615,7 @@

UnobservableModel - + @@ -25655,7 +25656,7 @@

UnobservableModel - + @@ -25691,7 +25692,7 @@

UnobservableModel - + @@ -25996,12 +25997,12 @@

UnobservableModel - - + @@ -26017,7 +26018,7 @@

UnobservableModel - + @@ -26060,7 +26061,7 @@

UnobservableModel - + @@ -26076,7 +26077,7 @@

UnobservableModel - + @@ -26104,7 +26105,7 @@

UnobservableModel - + @@ -26136,7 +26137,7 @@

UnobservableModel - + @@ -26152,7 +26153,7 @@

UnobservableModel - + @@ -26168,7 +26169,7 @@

UnobservableModel - + @@ -26184,7 +26185,7 @@

UnobservableModel - + @@ -26496,32 +26497,32 @@

UnobservableModel +" clip-path="url(#p4c45a56de1)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p4c45a56de1)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p4c45a56de1)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p4c45a56de1)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p4c45a56de1)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#p4c45a56de1)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> UnobservableModel + @@ -27307,7 +27308,7 @@

AcquisitionModel - 2021-11-18T09:18:44.766197 + 2021-11-21T09:55:37.082239 image/svg+xml @@ -27345,7 +27346,7 @@

AcquisitionModel +" clip-path="url(#pbd646051f2)" style="fill: #fa8072"/> AcquisitionModel +" clip-path="url(#pbd646051f2)" style="fill: #f0e68c"/> AcquisitionModel +" clip-path="url(#pbd646051f2)" style="fill: #32cd32"/> AcquisitionModel +" clip-path="url(#pbd646051f2)" style="fill: #40e0d0"/> AcquisitionModel +" clip-path="url(#pbd646051f2)" style="fill: #b0e0e6"/> - - + @@ -27445,7 +27446,7 @@

AcquisitionModel - + @@ -27486,7 +27487,7 @@

AcquisitionModel - + @@ -27522,7 +27523,7 @@

AcquisitionModel - + @@ -27827,12 +27828,12 @@

AcquisitionModel - - + @@ -27848,7 +27849,7 @@

AcquisitionModel - + @@ -27891,7 +27892,7 @@

AcquisitionModel - + @@ -27907,7 +27908,7 @@

AcquisitionModel - + @@ -27935,7 +27936,7 @@

AcquisitionModel - + @@ -27967,7 +27968,7 @@

AcquisitionModel - + @@ -27983,7 +27984,7 @@

AcquisitionModel - + @@ -27999,7 +28000,7 @@

AcquisitionModel - + @@ -28015,7 +28016,7 @@

AcquisitionModel - + @@ -28327,32 +28328,32 @@

AcquisitionModel +" clip-path="url(#pbd646051f2)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pbd646051f2)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pbd646051f2)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pbd646051f2)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pbd646051f2)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pbd646051f2)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> AcquisitionModel +" clip-path="url(#pf24085e8ee)" style="fill: #fa8072"/> AcquisitionModel +" clip-path="url(#pf24085e8ee)" style="fill: #f0e68c"/> AcquisitionModel +" clip-path="url(#pf24085e8ee)" style="fill: #32cd32"/> AcquisitionModel +" clip-path="url(#pf24085e8ee)" style="fill: #40e0d0"/> - + @@ -30195,7 +30196,7 @@

AcquisitionModel - + @@ -30210,7 +30211,7 @@

AcquisitionModel - + @@ -30225,7 +30226,7 @@

AcquisitionModel - + @@ -30268,7 +30269,7 @@

AcquisitionModel - + @@ -30284,7 +30285,7 @@

AcquisitionModel - + @@ -30300,7 +30301,7 @@

AcquisitionModel - + @@ -30316,7 +30317,7 @@

AcquisitionModel - + @@ -30332,7 +30333,7 @@

AcquisitionModel - + @@ -30348,7 +30349,7 @@

AcquisitionModel - + @@ -30364,7 +30365,7 @@

AcquisitionModel - + @@ -30380,7 +30381,7 @@

AcquisitionModel - + @@ -30396,7 +30397,7 @@

AcquisitionModel - + @@ -30458,32 +30459,32 @@

AcquisitionModel +" clip-path="url(#pf24085e8ee)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pf24085e8ee)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pf24085e8ee)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pf24085e8ee)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pf24085e8ee)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> +" clip-path="url(#pf24085e8ee)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5"/> AcquisitionModel + - + diff --git a/demo.ipynb b/demo.ipynb index 7b3f681..e92523c 100644 --- a/demo.ipynb +++ b/demo.ipynb @@ -280,7 +280,7 @@ " \n", " \n", " \n", - " 2021-11-18T09:18:37.047563\n", + " 2021-11-21T09:55:33.031838\n", " image/svg+xml\n", " \n", " \n", @@ -318,7 +318,7 @@ "L 47.369036 69.039557 \n", "L 32.210909 69.039557 \n", "z\n", - "\" clip-path=\"url(#p326114f273)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #fa8072\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #f0e68c; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #f0e68c; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #f0e68c\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #f0e68c; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #f0e68c; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #f0e68c; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #32cd32; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #32cd32; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #32cd32; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #32cd32\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #32cd32; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #32cd32; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #40e0d0; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #40e0d0; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #40e0d0; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p95d7475c68)\" style=\"fill: #40e0d0; opacity: 0.4\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -615,7 +615,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -652,7 +652,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -672,7 +672,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -695,7 +695,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -741,7 +741,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2067,7 +2067,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2136,7 +2136,7 @@ " \n", " \n", " \n", - " 2021-11-18T09:18:39.257492\n", + " 2021-11-21T09:55:34.122238\n", " image/svg+xml\n", " \n", " \n", @@ -2174,7 +2174,7 @@ "L 110.267925 203.571901 \n", "L 61.087649 203.571901 \n", "z\n", - "\" clip-path=\"url(#p6453a14aa8)\" style=\"fill: #fa8072\"/>\n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: #fa8072\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: #f0e68c\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: #32cd32\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: #b0e0e6\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: #d8bfd8\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2284,7 +2284,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2325,7 +2325,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2361,7 +2361,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2666,12 +2666,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2687,7 +2687,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2730,7 +2730,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2746,7 +2746,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2774,7 +2774,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2806,7 +2806,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2822,7 +2822,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2838,7 +2838,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2854,7 +2854,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -3166,27 +3166,27 @@ " \n", " \n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4a3aa0f6bd)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcc5c114952)\" style=\"fill: #fa8072\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcc5c114952)\" style=\"fill: #f0e68c\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcc5c114952)\" style=\"fill: #32cd32\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcc5c114952)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5118,7 +5118,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5133,7 +5133,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5148,7 +5148,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5191,7 +5191,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5207,7 +5207,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5223,7 +5223,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5239,7 +5239,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5255,7 +5255,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5271,7 +5271,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5287,7 +5287,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5303,7 +5303,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5319,7 +5319,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -5381,27 +5381,27 @@ " \n", " \n", + "\" clip-path=\"url(#pcc5c114952)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcc5c114952)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcc5c114952)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcc5c114952)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pcc5c114952)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6393,7 +6393,7 @@ " \n", " \n", " \n", - " 2021-11-18T09:18:40.648049\n", + " 2021-11-21T09:55:34.843655\n", " image/svg+xml\n", " \n", " \n", @@ -6431,7 +6431,7 @@ "L 47.369036 66.324773 \n", "L 32.210909 66.324773 \n", "z\n", - "\" clip-path=\"url(#p60c33b6892)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #fa8072; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #fa8072\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #f0e68c; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #f0e68c; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #f0e68c\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #f0e68c; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #f0e68c; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #f0e68c; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #32cd32; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #32cd32; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #32cd32; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #32cd32\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #32cd32; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #32cd32; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #40e0d0; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #40e0d0; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #40e0d0; opacity: 0.4\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p8cb21c1bd9)\" style=\"fill: #40e0d0; opacity: 0.4\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6728,7 +6728,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6765,7 +6765,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6785,7 +6785,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6808,7 +6808,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -6854,7 +6854,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8180,7 +8180,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8248,7 +8248,7 @@ " \n", " \n", " \n", - " 2021-11-18T09:18:41.799184\n", + " 2021-11-21T09:55:35.462119\n", " image/svg+xml\n", " \n", " \n", @@ -8286,7 +8286,7 @@ "L 105.008185 289.768766 \n", "L 60.269468 289.768766 \n", "z\n", - "\" clip-path=\"url(#p205746733e)\" style=\"fill: #fa8072\"/>\n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: #fa8072\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: #f0e68c\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: #32cd32\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: #b0e0e6\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: #d8bfd8\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: #ffc0cb\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8404,7 +8404,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8445,7 +8445,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8481,7 +8481,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8786,12 +8786,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8807,7 +8807,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8850,7 +8850,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8866,7 +8866,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8894,7 +8894,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8926,7 +8926,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8942,7 +8942,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8958,7 +8958,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -8974,7 +8974,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -9286,32 +9286,32 @@ " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p3b3c65e891)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pfbc87c0aa6)\" style=\"fill: #fa8072\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pfbc87c0aa6)\" style=\"fill: #f0e68c\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pfbc87c0aa6)\" style=\"fill: #32cd32\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pfbc87c0aa6)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10124,7 +10124,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10139,7 +10139,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10154,7 +10154,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10197,7 +10197,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10213,7 +10213,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10229,7 +10229,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10245,7 +10245,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10261,7 +10261,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10277,7 +10277,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10293,7 +10293,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10309,7 +10309,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10325,7 +10325,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10387,32 +10387,32 @@ " \n", " \n", + "\" clip-path=\"url(#pfbc87c0aa6)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pfbc87c0aa6)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pfbc87c0aa6)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pfbc87c0aa6)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pfbc87c0aa6)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pfbc87c0aa6)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10849,7 +10849,7 @@ " \n", " \n", " \n", - " 2021-11-18T09:18:42.471058\n", + " 2021-11-21T09:55:35.874122\n", " image/svg+xml\n", " \n", " \n", @@ -10887,7 +10887,7 @@ "L 97.531795 289.003875 \n", "L 59.106474 289.003875 \n", "z\n", - "\" clip-path=\"url(#p31639d535b)\" style=\"fill: #fa8072\"/>\n", + "\" clip-path=\"url(#p4c45a56de1)\" style=\"fill: #fa8072\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4c45a56de1)\" style=\"fill: #f0e68c\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4c45a56de1)\" style=\"fill: #32cd32\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4c45a56de1)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -10979,7 +10979,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11020,7 +11020,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11056,7 +11056,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11361,12 +11361,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11382,7 +11382,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11425,7 +11425,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11441,7 +11441,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11469,7 +11469,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11501,7 +11501,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11517,7 +11517,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11533,7 +11533,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11549,7 +11549,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -11861,32 +11861,32 @@ " \n", " \n", + "\" clip-path=\"url(#p4c45a56de1)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4c45a56de1)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4c45a56de1)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4c45a56de1)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4c45a56de1)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#p4c45a56de1)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -12670,7 +12670,7 @@ " \n", " \n", " \n", - " 2021-11-18T09:18:44.766197\n", + " 2021-11-21T09:55:37.082239\n", " image/svg+xml\n", " \n", " \n", @@ -12708,7 +12708,7 @@ "L 180.053189 280.286736 \n", "L 60.403596 280.286736 \n", "z\n", - "\" clip-path=\"url(#pb2f7f15483)\" style=\"fill: #fa8072\"/>\n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: #fa8072\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: #f0e68c\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: #32cd32\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: #b0e0e6\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -12808,7 +12808,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -12849,7 +12849,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -12885,7 +12885,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -13190,12 +13190,12 @@ " \n", " \n", " \n", - " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -13211,7 +13211,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -13254,7 +13254,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -13270,7 +13270,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -13298,7 +13298,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -13330,7 +13330,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -13346,7 +13346,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -13362,7 +13362,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -13378,7 +13378,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -13690,32 +13690,32 @@ " \n", " \n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pbd646051f2)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pf24085e8ee)\" style=\"fill: #fa8072\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pf24085e8ee)\" style=\"fill: #f0e68c\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pf24085e8ee)\" style=\"fill: #32cd32\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pf24085e8ee)\" style=\"fill: #40e0d0\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15558,7 +15558,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15573,7 +15573,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15588,7 +15588,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15631,7 +15631,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15647,7 +15647,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15663,7 +15663,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15679,7 +15679,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15695,7 +15695,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15711,7 +15711,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15727,7 +15727,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15743,7 +15743,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15759,7 +15759,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -15821,32 +15821,32 @@ " \n", " \n", + "\" clip-path=\"url(#pf24085e8ee)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pf24085e8ee)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pf24085e8ee)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pf24085e8ee)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pf24085e8ee)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", + "\" clip-path=\"url(#pf24085e8ee)\" style=\"fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #000000; stroke-width: 1.5\"/>\n", " \n", " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -17016,7 +17016,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "99c34ec846f343fabca54d5affcf57b2", + "model_id": "0e63283f3a5e439dacc30f9d206a2e67", "version_major": 2, "version_minor": 0 }, @@ -17030,7 +17030,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "15af83535d7643259a23d40489e0ffac", + "model_id": "b394cd5e4d6745188abce23b163c66fe", "version_major": 2, "version_minor": 0 }, diff --git a/docs/Shelegia_Motta_2021.html b/docs/Shelegia_Motta_2021.html index 9c63941..8def3f6 100644 --- a/docs/Shelegia_Motta_2021.html +++ b/docs/Shelegia_Motta_2021.html @@ -263,7 +263,14 @@

Dependencies


-These packages include all the needed imports for the functionality of this package.

+Install the dependencies with the following command:

+ +
pip install -r requirements.txt
+
+ +

(Note: Make sure you are operating in the same directory as the requirements.txt is located.)

+ +

These packages include all the needed imports for the functionality of this package.

Additional Notes

diff --git a/docs/search.js b/docs/search.js index 1dd8e05..4407fad 100644 --- a/docs/search.js +++ b/docs/search.js @@ -1,6 +1,6 @@ window.pdocSearch = (function(){ /** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();oThis package implements the models of
Shelegia and Motta (2021).

\n\n

\"GitHub\"\n\"PyPI\n\"GitHub\n\"GitHub\n\"CI\"\n\"CodeQL\"\n\"OSSAR\"\n\"GitHub\n\"PyPi\"\n\"PyPI\"\n\"PyPI\n\"GitHub

\n\n

Installation

\n\n

Installation over PyPI:

\n\n
pip install Shelegia-Motta-2021\n
\n\n

Or installation over GitHub:

\n\n
pip install git+https://github.com/manuelbieri/shelegia_motta_2021.git\n
\n\n

Introduction

\n\n

The theory of the \u201ckill zone\u201d has become an increasingly prominent cause for concern among economists in recent times, especially with the rise of digital companies that have become monopolists in their sectors internationally. Companies like Facebook are continuously acquiring start-ups that may have a chance of competing with them in some way in the future. The sheer size and dominance of these companies combined with their aggression regarding the acquisition of competitors makes entering these markets as a direct competitor very unattractive at first glance. However, this issue is not as one sided as that. This paper aims to rationalize the well-known \u201ckill zone\u201d argument by providing a simple model that explores how and when an incumbent \ufb01rm may induce an entrant to choose a \u201cnon-aggressive\u201d innovation path and enter with the goal of being acquired.

\n\n

The different models revealed that platform-owning incumbents react in diametrically opposing fashion to an entrant\u2019s plans to develop a substitute to their platform and a complement. When a larger firm is dominating a certain sector and new firms are trying to enter this market, these firms may feel a hesitation to produce a direct competitor to the products of the incumbent and they will veer more towards producing a compliment as the prospect of the incumbent copying or acquiring the entrant looms. This is the reason a \u201ckill zone\u201d may emerge. Interestingly, the possibility of an acquisition by the incumbent does not worsen the \u201ckill zone\u201d effect. In fact, it may even induce the entrant to develop a product that rivals the incumbent in the hope of being acquired as this can generate massive profits for the smaller entrant. Meanwhile, a two \u2013 sided market will not alter the \u201ckill zone\u201d significantly compared to the basic model. Only simultaneous choices of both parties will avoid the existence of a \u201ckill zone\u201d since the choice of the entrant cannot prevent the incumbent to copy the entrant.

\n\n

Since all models implement the Shelegia_Motta_2021.IModel.IModel - Interface, therefore all models provide the same functionality (public methods), even though the results may change substantially.

\n\n

For all models add the following import statement:

\n\n
import Shelegia_Motta_2021.Models\n
\n\n

Models

\n\n

Base Model

\n\n

The base model of the project consists of two players: The incumbent, which sells the primary product,\nand a start-up otherwise known as the entrant which sells a complementary product to the incumbent.\nOne way to visualize a real-world application of this model would be to think of the entrant as a product or service\nthat can be accessed through the platform of the incumbent, like a plug in that can be accessed through Google or a game on Facebook.\nThe aim of this model is to monitor the choice that the entrant has between developing a substitute to or\nanother compliment to the incumbent. The second aim is to observe the choice of the incumbent of whether\nto copy the original complementary product of the entrant by creating a perfect substitute or not.\nSeeing as the entrant may not have enough assets to fund a second product, the incumbent copying its first product\nwould inhibit the entrant\u2019s ability to fund its projects. This report will illustrate how the incumbent has a strategic incentive to copy\nthe entrant if it is planning to compete and that it would refrain from copying if the entrant plans to develop a compliment.\nThe subsequent models included in this report will introduce additional factors but will all be based on the basic model.

\n\n

The equilibrium path arguably supports the \u201ckill zone\u201d argument: due to the risk of an exclusionary strategy by the incumbent,\na potential entrant may prefer to avoid a market trajectory which would lead it to compete with the core product of a dominant incumbent\nand would choose to develop another complementary product instead.

\n\n
base_model = Shelegia_Motta_2021.Models.BaseModel()\n
\n\n

Bargaining Power Model

\n\n

Besides the parameters used in the paper (and in the BaseModel), this class will introduce the parameter $\\beta$ in the models, called\nthe bargaining power of the incumbent. $\\beta$ describes how much of the profits from the complementary product of the entrant will go to the incumbent\nIn the paper the default value $\\beta=0.5$ is used to derive the results, which indicate an equal share of the profits.

\n\n
bargaining_power_model = Shelegia_Motta_2021.Models.BargainingPowerModel()\n
\n\n

Unobservable Choices Model

\n\n

This model indicates that if the incumbent were not able to observe the entrant at the moment of choosing,\nthe \u201ckill zone\u201d effect whereby the entrant stays away from the substitute in order to avoid being copied would not take place.\nIntuitively, in the game as we studied it so far, the only reason why the entrant is choosing a trajectory leading to another complement\nis that it anticipates that if it chose one leading to a substitute, the incumbent would copy, making it an inefficient strategy\nfor entering the market. However, if the incumbent cannot observe the entrant\u2019s choice of strategy, the entrant could not hope to strategically affect the decision\nof the incumbent. This would lead to the entrant having a host of new opportunities when entering the market makes the entrant competing with a large company much more attractive.

\n\n

Although there may be situations where the entrant could commit to some actions (product design or marketing choices)\nwhich signals that it will not become a rival, and it would have all the incentive to commit to do so,\nthen the game would be like the sequential moves game analyzed in the basic model.\nOtherwise, the entrant will never choose a complement just to avoid copying, and it will enter the \u201ckill zone\u201d.

\n\n
unobservable_model = Shelegia_Motta_2021.Models.UnobservableModel()\n
\n\n

Acquisition Model

\n\n

In order to explore how acquisitions may modify the entrant\u2019s and the incumbent\u2019s strategic choices, we extend the base model\nin order to allow an acquisition to take place after the incumbent commits to copying the entrant\u2019s original complementary product\n(between t=1 and t=2, see demo.ipynb \"Timing of the game\"). We assume that the incumbent and the entrant share the gains (if any) attained from the acquisition equally.

\n\n

The \u201ckill zone\u201d still appears as a possible equilibrium outcome, however for a more reduced region of the parameter space.\nThe prospect of getting some acquisition gains does tend to increase the profits gained from developing a substitute to the primary product,\nand this explains why part of the \u201ckill zone\u201d region where a complement was chosen without the acquisition, the entrant will now choose a substitute instead.

\n\n
acquisition_model = Shelegia_Motta_2021.Models.AcquisitionModel()\n
\n\n

Alternative formulations of the acquisition game
\n\n

An alternative formulation could be introduced in order to allow acquisitions to take place before the copying decision by the incumbent. The results are qualitatively like the results of the model which had the acquisition after the copying decision. In this alternative formulation of the game, copying would never occur along the equilibrium path. Indeed, there would be an additional source of gains from acquisition consisting of avoiding the fixed cost of copying.

\n\n

Basic usage

\n\n
# every model type can be plugged in without changing the following code.\n# initialize model with custom parameters\nmodel: Shelegia_Motta_2021.IModel.IModel = Shelegia_Motta_2021.Models.BaseModel()\n\n# print string representation of the model\nprint(model)\n\n# plot the payoffs for different market configurations for all stakeholders\nmodel.plot_payoffs()\n\n# plot the best answers of the incumbent to the choice of the entrant\nmodel.plot_incumbent_best_answers()\n\n# plot the equilibrium path\nmodel.plot_equilibrium()\n\n# not necessary when working with jupyter notebooks\nplt.show()\n
\n\n

A demonstration of the code can be found in demo.html (output of demo.ipynb, on small screens it may not be displayed correctly).

\n\n

Dependencies

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n
Package  Version  Annotation  
matplotlib3.5.0Always needed (includes numpy)
jupyter1.0.0Just for the demonstration in demo.ipynb
IPython7.29.0Just for the demonstration in demo.ipynb
pdoc8.0.1Only to generate the documentation from scratch
\n\n


\nThese packages include all the needed imports for the functionality of this package.

\n\n

Additional Notes

\n\n

For further information about the project (structure) and the code, see resources/dev_notes.md.

\n\n

Documentation

\n\n

For the latest version of the documentation open manuelbieri.github.io/shelegia_motta_2021 in your browser or call:

\n\n
import Shelegia_Motta_2021\n\nShelegia_Motta_2021.docs()\n
\n\n

Build Documentation

\n\n

Generate api-documentation with the following command (note the use of pdoc):

\n\n
pdoc -o ./docs Shelegia_Motta_2021 --docformat \"numpy\" --math\n
\n"}, {"fullname": "Shelegia_Motta_2021.docs", "modulename": "Shelegia_Motta_2021", "qualname": "docs", "type": "function", "doc": "

Opens the latest published version of the documentation of this package.

\n", "parameters": [], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "", "type": "module", "doc": "

\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel", "type": "class", "doc": "

Interface for all models in Shelegia and Motta (2021).

\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.__init__", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.__init__", "type": "function", "doc": "

\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.ENTRANT_CHOICES", "type": "variable", "doc": "

Contains all the possible product choices of the entrant.

\n\n
    \n
  • complement (C): The entrant develops another complement for the primary product of the incumbent.
  • \n
  • substitute (S): The entrant develops a perfect substitute to the primary product of the incumbent.
  • \n
  • indifferent (I): The entrant is indifferent between the two options, mentioned above.
  • \n
\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.INCUMBENT_CHOICES", "type": "variable", "doc": "

Contains all the possible answers of the incumbent to the choice of the entrant.

\n\n
    \n
  • copy (\u00a9): The incumbent copies the complement of the entrant.
  • \n
  • refrain (\u00d8): The incumbent does not take any action.
  • \n
\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.DEVELOPMENT_OUTCOME", "type": "variable", "doc": "

Contains all the possible outcomes of the development for the chosen product of the entrant or the merged entity.

\n\n
    \n
  • success (Y): The entrant has sufficient assets to develop the second product.
  • \n
  • failure (N): The entrant has not sufficient assets to develop the second product.
  • \n
\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.get_asset_values", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.get_asset_values", "type": "function", "doc": "

Returns the asset thresholds of the entrant.

\n\n

Number and type of the thresholds will be specific to the model.

\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the assets of the entrant.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.get_copying_fixed_costs_values", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.get_copying_fixed_costs_values", "type": "function", "doc": "

Returns the fixed costs for copying thresholds of the incumbent.

\n\n

Number and type of the thresholds will be specific to the model.

\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the fixed costs for copying of the incumbent.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.get_payoffs", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.get_payoffs", "type": "function", "doc": "

Returns the payoffs for different market configurations.

\n\n

A market configuration can include:

\n\n
    \n
  • $I_P$ : Primary product sold by the incumbent.
  • \n
  • $I_C$ : Complementary product to $I_P$ potentially sold by the incumbent, which is copied from $E_C$.
  • \n
  • $E_P$ : Perfect substitute to $I_P$ potentially sold by the entrant.
  • \n
  • $E_C$ : Complementary product to $I_P$ currently sold by the entrant
  • \n
  • $\\tilde{E}_C$ : Complementary product to $I_P$ potentially sold by the entrant.\n
  • \n
\n\n\n\n\n \n \n \n \n \n\n\n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n
Market Config.$\\pi(I)$$\\pi(E)$CSW
$I_P$ ; $E_C$N.A.N.A.N.A.N.A.
$I_P + I_C$ ; $E_C$N.A.N.A.N.A.N.A.
$I_P$ ; $E_P + E_C$N.A.N.A.N.A.N.A.
$I_P + I_C$ ; $E_P + E_C$N.A.N.A.N.A.N.A.
$I_P$ ; $E_C + \\tilde{E}_C$N.A.N.A.N.A.N.A.
$I_P + I_C$ ; $E_C + \\tilde{E}_C$N.A.N.A.N.A.N.A.
\n\n


\nThe payoffs are specific to the models.

\n\n

Returns
\n\n
    \n
  • Dict[str, Dict[str, float]]: Contains the mentioned payoffs for different market configurations.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.get_optimal_choice", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.get_optimal_choice", "type": "function", "doc": "

Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.

\n\n

The output dictionary will contain the following details:

\n\n
    \n
  • \"entrant\": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES))
  • \n
  • \"incumbent\": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES)
  • \n
  • \"development\": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME)
  • \n
\n\n

To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model.

\n\n

Parameters
\n\n
    \n
  • A (float):\nAssets of the entrant.
  • \n
  • F (float):\nFixed costs for copying of the incumbent.
  • \n
\n\n

Returns
\n\n
    \n
  • Dict[str, str]: Optimal choice of the entrant, the incumbent and the outcome of the development.
  • \n
\n", "parameters": ["self", "A", "F"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.plot_incumbent_best_answers", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.plot_incumbent_best_answers", "type": "function", "doc": "

Plots the best answers of the incumbent to all possible actions of the entrant.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the best answers plot.
    \n
      \n
    • title: title on top of the plot, instead of the default title.
    • \n
    • legend: If false, all legends are turned off.
    • \n
    • options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
    • \n
    • asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
    • \n
    • costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
    • \n
    • legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
    • \n
    • x_max : Maximum number plotted on the x - axis.
    • \n
    • y_max : Maximum number plotted on the y - axis.
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.plot_equilibrium", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.plot_equilibrium", "type": "function", "doc": "

Plots the equilibrium path based on the choices of the entrant and incumbent.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the equilibrium plot.
    \n
      \n
    • title: title on top of the plot, instead of the default title.
    • \n
    • legend: If false, all legends are turned off.
    • \n
    • options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
    • \n
    • asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
    • \n
    • costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
    • \n
    • legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
    • \n
    • x_max : Maximum number plotted on the x - axis.
    • \n
    • y_max : Maximum number plotted on the y - axis.
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.plot_payoffs", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.plot_payoffs", "type": "function", "doc": "

Plots the payoffs for different market configurations.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the payoff plot.
    \n
      \n
    • legend: If false, all legends are turned off.
    • \n
    • products_legend: If true, a legend, containing all possible products of the entrant and the incumbent, will be added to the plot.
    • \n
    • opacity : Opacity of the not optimal payoffs. (floating number between 0 and 1)
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models", "modulename": "Shelegia_Motta_2021.Models", "qualname": "", "type": "module", "doc": "

\n"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel", "type": "class", "doc": "

The base model of the project consists of two players: The incumbent, which sells the primary product,\nand a start-up otherwise known as the entrant which sells a complementary product to the incumbent.\nOne way to visualize a real-world application of this model would be to think of the entrant as a product or service\nthat can be accessed through the platform of the incumbent, like a plug in that can be accessed through Google or a game on Facebook.\nThe aim of this model is to monitor the choice that the entrant has between developing a substitute to or\nanother compliment to the incumbent. The second aim is to observe the choice of the incumbent of whether\nto copy the original complementary product of the entrant by creating a perfect substitute or not.\nSeeing as the entrant may not have enough assets to fund a second product, the incumbent copying its first product\nwould inhibit the entrant\u2019s ability to fund its projects. This report will illustrate how the incumbent has a strategic incentive to copy\nthe entrant if it is planning to compete and that it would refrain from copying if the entrant plans to develop a compliment.\nThe subsequent models included in this report will introduce additional factors but will all be based on the basic model.

\n\n

The equilibrium path arguably supports the \u201ckill zone\u201d argument: due to the risk of an exclusionary strategy by the incumbent,\na potential entrant may prefer to avoid a market trajectory which would lead it to compete with the core product of a dominant incumbent\nand would choose to develop another complementary product instead.

\n"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.__init__", "type": "function", "doc": "

Initializes a valid BaseModel object.

\n\n

The following preconditions have to be satisfied:

\n\n
    \n
  • (A1b) $\\delta$ / 2 < $\\Delta$ < 3 * $\\delta$ / 2
  • \n
  • (A2) K < $\\delta$ / 2
  • \n
\n\n

Parameters
\n\n
    \n
  • u (float):\nUtility gained from consuming the primary product.
  • \n
  • B (float):\nMinimal difference between the return in case of a success and the return in case of failure of E. B is called the private benefit of the entrant in case of failure.
  • \n
  • small_delta (float):\n($\\delta$) Additional utility gained from a complement combined with a primary product.
  • \n
  • delta (float):\n($\\Delta$) Additional utility gained from the substitute of the entrant compared to the primary product of the incumbent.
  • \n
  • K (float):\nInvestment costs for the entrant to develop a second product.
  • \n
\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.TOLERANCE", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.TOLERANCE", "type": "variable", "doc": "

Tolerance for the comparison of two floating numbers.

\n"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.get_asset_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.get_asset_values", "type": "function", "doc": "

Returns the asset thresholds of the entrant.

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n
Threshold $\\:\\:\\:\\:\\:$Name $\\:\\:\\:\\:\\:$Formula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$\\underline{A}_S$A_s$(2)\\: B + K - \\Delta - 3\\delta/2$
$\\underline{A}_C$A_c$(3)\\: B + K - 3\\delta/2$
$\\overline{A}_S$A-s$(4)\\: B + K - \\Delta$
$\\overline{A}_C$A-c$(5)\\: B + K - \\delta/2$
\n\n


\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the assets of the entrant.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.get_copying_fixed_costs_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.get_copying_fixed_costs_values", "type": "function", "doc": "

Returns the fixed costs for copying thresholds of the incumbent.

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n
Threshold $\\:\\:\\:\\:\\:$Name $\\:\\:\\:\\:\\:$Formula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$F^{YY}_S$F(YY)s$(6)\\: \\delta/2$
$F^{YN}_S$F(YN)s$(6)\\: u + 3\\delta/2$
$F^{YY}_C$F(YY)c$(6)\\: \\delta$
$F^{YN}_C$F(YN)c$(6)\\: \\delta/2$
\n\n


\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the fixed costs for copying of the incumbent.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.get_payoffs", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.get_payoffs", "type": "function", "doc": "

Returns the payoffs for different market configurations.

\n\n

A market configuration can include:

\n\n
    \n
  • $I_P$ : Primary product sold by the incumbent.
  • \n
  • $I_C$ : Complementary product to $I_P$ potentially sold by the incumbent, which is copied from $E_C$.
  • \n
  • $E_P$ : Perfect substitute to $I_P$ potentially sold by the entrant.
  • \n
  • $E_C$ : Complementary product to $I_P$ currently sold by the entrant
  • \n
  • $\\tilde{E}_C$ : Complementary product to $I_P$ potentially sold by the entrant.\n
  • \n
\n\n\n\n\n \n \n \n \n \n\n\n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n
Market Config. $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$$\\pi(I) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$$\\pi(E) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$CS $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$W $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$I_P$ ; $E_C$$u + \\delta/2$$\\delta/2$0$u + \\delta$
$I_P + I_C$ ; $E_C$$u + \\delta$00$u + \\delta$
$I_P$ ; $E_P + E_C$0$\\Delta + \\delta$$u$$u + \\Delta + \\delta$
$I_P + I_C$ ; $E_P + E_C$0$\\Delta$$u + \\delta$$u + \\Delta + \\delta$
$I_P$ ; $E_C + \\tilde{E}_C$$u + \\delta$$\\delta$0$u + 2\\delta$
$I_P + I_C$ ; $E_C + \\tilde{E}_C$$u + 3\\delta/2$$\\delta/2$0$u + 2\\delta$
\n\n


\n\n

Returns
\n\n
    \n
  • Dict[str, Dict[str, float]]: Contains the mentioned payoffs for different market configurations.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.get_optimal_choice", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.get_optimal_choice", "type": "function", "doc": "

Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.

\n\n

The output dictionary will contain the following details:

\n\n
    \n
  • \"entrant\": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES))
  • \n
  • \"incumbent\": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES)
  • \n
  • \"development\": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME)
  • \n
\n\n

To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model.

\n\n

Parameters
\n\n
    \n
  • A (float):\nAssets of the entrant.
  • \n
  • F (float):\nFixed costs for copying of the incumbent.
  • \n
\n\n

Returns
\n\n
    \n
  • Dict[str, str]: Optimal choice of the entrant, the incumbent and the outcome of the development.
  • \n
\n", "parameters": ["self", "A", "F"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.plot_incumbent_best_answers", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.plot_incumbent_best_answers", "type": "function", "doc": "

Plots the best answers of the incumbent to all possible actions of the entrant.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the best answers plot.
    \n
      \n
    • title: title on top of the plot, instead of the default title.
    • \n
    • legend: If false, all legends are turned off.
    • \n
    • options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
    • \n
    • asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
    • \n
    • costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
    • \n
    • legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
    • \n
    • x_max : Maximum number plotted on the x - axis.
    • \n
    • y_max : Maximum number plotted on the y - axis.
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.plot_equilibrium", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.plot_equilibrium", "type": "function", "doc": "

Plots the equilibrium path based on the choices of the entrant and incumbent.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the equilibrium plot.
    \n
      \n
    • title: title on top of the plot, instead of the default title.
    • \n
    • legend: If false, all legends are turned off.
    • \n
    • options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
    • \n
    • asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
    • \n
    • costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
    • \n
    • legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
    • \n
    • x_max : Maximum number plotted on the x - axis.
    • \n
    • y_max : Maximum number plotted on the y - axis.
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.plot_payoffs", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.plot_payoffs", "type": "function", "doc": "

Plots the payoffs for different market configurations.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the payoff plot.
    \n
      \n
    • legend: If false, all legends are turned off.
    • \n
    • products_legend: If true, a legend, containing all possible products of the entrant and the incumbent, will be added to the plot.
    • \n
    • opacity : Opacity of the not optimal payoffs. (floating number between 0 and 1)
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel", "type": "class", "doc": "

Besides the parameters used in the paper (and in the BaseModel), this class will introduce the parameter $\beta$ in the models, called\nthe bargaining power of the incumbent. $\beta$ describes how much of the profits from the complementary product of the entrant will go to the incumbent\nIn the paper the default value $\beta=0.5$ is used to derive the results, which indicate an equal share of the profits.

\n"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel.__init__", "type": "function", "doc": "

Besides $\\beta$ the parameters in this model do not change compared to Shelegia_Motta_2021.Models.BaseModel.

\n\n

Parameters
\n\n
    \n
  • beta (float):\nBargaining power of the incumbent relative to the entrant ($0 < \\beta < 1$).
  • \n
\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K", "beta"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel.get_asset_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel.get_asset_values", "type": "function", "doc": "

Returns the asset thresholds of the entrant.

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n
Threshold $\\:\\:\\:\\:\\:$Name $\\:\\:\\:\\:\\:$Formula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$\\underline{A}_S$A_s$B + K - \\Delta - \\delta(2 - \\beta)$
$\\underline{A}_C$A_c$B + K - 3\\delta(1 - \\beta)$
$\\overline{A}_S$A-s$B + K - \\Delta$
$\\overline{A}_C$A-c$B + K - \\delta(1 - \\beta)$
\n\n


\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the assets of the entrant.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel.get_copying_fixed_costs_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel.get_copying_fixed_costs_values", "type": "function", "doc": "

Returns the fixed costs for copying thresholds of the incumbent.

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n
Threshold $\\:\\:\\:\\:\\:$Name $\\:\\:\\:\\:\\:$Formula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$F^{YY}_S$F(YY)s$\\delta(1 - \\beta)$
$F^{YN}_S$F(YN)s$u + \\delta(2 - \\beta)$
$F^{YY}_C$F(YY)c$2\\delta(1 - \\beta)$
$F^{YN}_C$F(YN)c$\\delta(2 - \\beta)$
\n\n


\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the fixed costs for copying of the incumbent.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel.get_payoffs", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel.get_payoffs", "type": "function", "doc": "

Returns the payoffs for different market configurations.

\n\n

A market configuration can include:

\n\n
    \n
  • $I_P$ : Primary product sold by the incumbent.
  • \n
  • $I_C$ : Complementary product to $I_P$ potentially sold by the incumbent, which is copied from $E_C$.
  • \n
  • $E_P$ : Perfect substitute to $I_P$ potentially sold by the entrant.
  • \n
  • $E_C$ : Complementary product to $I_P$ currently sold by the entrant
  • \n
  • $\\tilde{E}_C$ : Complementary product to $I_P$ potentially sold by the entrant.\n
  • \n
\n\n\n\n\n \n \n \n \n \n\n\n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n
Market Config. $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$$\\pi(I) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$$\\pi(E) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$CS $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$W $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$I_P$ ; $E_C$$u + \\delta\\beta$$\\delta(1 - \\beta)$0$u + \\delta$
$I_P + I_C$ ; $E_C$$u + \\delta$00$u + \\delta$
$I_P$ ; $E_P + E_C$0$\\Delta + \\delta$$u$$u + \\Delta + \\delta$
$I_P + I_C$ ; $E_P + E_C$0$\\Delta$$u + \\delta$$u + \\Delta + \\delta$
$I_P$ ; $E_C + \\tilde{E}_C$$u + 2\\delta\\beta$$2\\delta(1 - \\beta)$0$u + 2\\delta$
$I_P + I_C$ ; $E_C + \\tilde{E}_C$$u + \\delta(1 + \\beta)$$\\delta(1 - \\beta)$0$u + 2\\delta$
\n\n


\n\n

Returns
\n\n
    \n
  • Dict[str, Dict[str, float]]: Contains the mentioned payoffs for different market configurations.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel", "type": "class", "doc": "

This model indicates that if the incumbent were not able to observe the entrant at the moment of choosing,\nthe \u201ckill zone\u201d effect whereby the entrant stays away from the substitute in order to avoid being copied would not take place.\nIntuitively, in the game as we studied it so far, the only reason why the entrant is choosing a trajectory leading to another complement\nis that it anticipates that if it chose one leading to a substitute, the incumbent would copy, making it an inefficient strategy\nfor entering the market. However, if the incumbent cannot observe the entrant\u2019s choice of strategy, the entrant could not hope to strategically affect the decision\nof the incumbent. This would lead to the entrant having a host of new opportunities when entering the market makes the entrant competing with a large company much more attractive.

\n\n

Although there may be situations where the entrant could commit to some actions (product design or marketing choices)\nwhich signals that it will not become a rival, and it would have all the incentive to commit to do so,\nthen the game would be like the sequential moves game analyzed in the basic model.\nOtherwise, the entrant will never choose a complement just to avoid copying, and it will enter the \u201ckill zone\u201d.

\n"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel.__init__", "type": "function", "doc": "

The parameters do not change compared to Shelegia_Motta_2021.Models.BargainingPowerModel.

\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K", "beta"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel.plot_incumbent_best_answers", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel.plot_incumbent_best_answers", "type": "function", "doc": "

Plots the best answers of the incumbent to all possible actions of the entrant.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the best answers plot.
    \n
      \n
    • title: title on top of the plot, instead of the default title.
    • \n
    • legend: If false, all legends are turned off.
    • \n
    • options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
    • \n
    • asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
    • \n
    • costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
    • \n
    • legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
    • \n
    • x_max : Maximum number plotted on the x - axis.
    • \n
    • y_max : Maximum number plotted on the y - axis.
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel.get_optimal_choice", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel.get_optimal_choice", "type": "function", "doc": "

Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.

\n\n

The output dictionary will contain the following details:

\n\n
    \n
  • \"entrant\": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES))
  • \n
  • \"incumbent\": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES)
  • \n
  • \"development\": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME)
  • \n
\n\n

To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model.

\n\n

Parameters
\n\n
    \n
  • A (float):\nAssets of the entrant.
  • \n
  • F (float):\nFixed costs for copying of the incumbent.
  • \n
\n\n

Returns
\n\n
    \n
  • Dict[str, str]: Optimal choice of the entrant, the incumbent and the outcome of the development.
  • \n
\n", "parameters": ["self", "A", "F"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel", "type": "class", "doc": "

In order to explore how acquisitions may modify the entrant\u2019s and the incumbent\u2019s strategic choices, we extend the base model\nin order to allow an acquisition to take place after the incumbent commits to copying the entrant\u2019s original complementary product\n(between t=1 and t=2, see demo.ipynb \"Timing of the game\"). We assume that the incumbent and the entrant share the gains (if any) attained from the acquisition equally.

\n\n

The \u201ckill zone\u201d still appears as a possible equilibrium outcome, however for a more reduced region of the parameter space.\nThe prospect of getting some acquisition gains does tend to increase the profits gained from developing a substitute to the primary product,\nand this explains why part of the \u201ckill zone\u201d region where a complement was chosen without the acquisition, the entrant will now choose a substitute instead.

\n"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.__init__", "type": "function", "doc": "

An additional constraint is added compared to Shelegia_Motta_2021.Models.BaseModel. Namely, $\\Delta$ has to be bigger than $u$,\nmeaning the innovation of the entrant is not too drastic compared with the primary products of the incumbent.

\n\n

Meanwhile, the parameters do not change compared to Shelegia_Motta_2021.Models.BargainingPowerModel.

\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K", "beta"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.ACQUISITION_OUTCOME", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.ACQUISITION_OUTCOME", "type": "variable", "doc": "

Contains the options for an acquisition or not.

\n\n
    \n
  • merged (M): The incumbent acquired the entrant.
  • \n
  • apart (E): The incumbent did not acquired the entrant.
  • \n
\n"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.get_copying_fixed_costs_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.get_copying_fixed_costs_values", "type": "function", "doc": "

Returns the fixed costs for copying thresholds of the incumbent.

\n\n

Additional thresholds for the fixed cost of copying of the incumbent compared to the Shelegia_Motta_2021.Models.BargainingModel:

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n
Threshold $\\:\\:\\:\\:\\:$Name $\\:\\:\\:\\:\\:$Formula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$F^{ACQ}_S$F(ACQ)s$\\frac{(u + \\Delta - K)}{2} + \\delta(2 - \\beta)$
$F^{ACQ}_C$F(ACQ)c$\\frac{K}{2} + \\delta(2.5 - 3\\beta)$
\n\n


\nAs an additional constraint, $F^{ACQ}_C$ has to be smaller or equal than $F^{YY}_C$, since the logic described in the paper may not apply anymore for the other cases.

\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the fixed costs for copying of the incumbent.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.get_optimal_choice", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.get_optimal_choice", "type": "function", "doc": "

Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.

\n\n

The output dictionary will contain the following details:

\n\n
    \n
  • \"entrant\": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES))
  • \n
  • \"incumbent\": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES)
  • \n
  • \"development\": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME)
  • \n
  • \"acquisition\": outcome of the acquisition (possible outcomes listed in Shelegia_Motta_2021.Models.AcquisitionModel.ACQUISITION_OUTCOME)
  • \n
\n\n

To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model.

\n\n

Parameters
\n\n
    \n
  • A (float):\nAssets of the entrant.
  • \n
  • F (float):\nFixed costs for copying of the incumbent.
  • \n
\n\n

Returns
\n\n
    \n
  • Dict[str, str]: Optimal choice of the entrant, the incumbent and the outcome of the development.
  • \n
\n", "parameters": ["self", "A", "F"], "funcdef": "def"}]; + /** pdoc search index */const docs = [{"fullname": "Shelegia_Motta_2021", "modulename": "Shelegia_Motta_2021", "qualname": "", "type": "module", "doc": "

This package implements the models of Shelegia and Motta (2021).

\n\n

\"GitHub\"\n\"PyPI\n\"GitHub\n\"GitHub\n\"CI\"\n\"CodeQL\"\n\"OSSAR\"\n\"GitHub\n\"PyPi\"\n\"PyPI\"\n\"PyPI\n\"GitHub

\n\n

Installation

\n\n

Installation over PyPI:

\n\n
pip install Shelegia-Motta-2021\n
\n\n

Or installation over GitHub:

\n\n
pip install git+https://github.com/manuelbieri/shelegia_motta_2021.git\n
\n\n

Introduction

\n\n

The theory of the \u201ckill zone\u201d has become an increasingly prominent cause for concern among economists in recent times, especially with the rise of digital companies that have become monopolists in their sectors internationally. Companies like Facebook are continuously acquiring start-ups that may have a chance of competing with them in some way in the future. The sheer size and dominance of these companies combined with their aggression regarding the acquisition of competitors makes entering these markets as a direct competitor very unattractive at first glance. However, this issue is not as one sided as that. This paper aims to rationalize the well-known \u201ckill zone\u201d argument by providing a simple model that explores how and when an incumbent \ufb01rm may induce an entrant to choose a \u201cnon-aggressive\u201d innovation path and enter with the goal of being acquired.

\n\n

The different models revealed that platform-owning incumbents react in diametrically opposing fashion to an entrant\u2019s plans to develop a substitute to their platform and a complement. When a larger firm is dominating a certain sector and new firms are trying to enter this market, these firms may feel a hesitation to produce a direct competitor to the products of the incumbent and they will veer more towards producing a compliment as the prospect of the incumbent copying or acquiring the entrant looms. This is the reason a \u201ckill zone\u201d may emerge. Interestingly, the possibility of an acquisition by the incumbent does not worsen the \u201ckill zone\u201d effect. In fact, it may even induce the entrant to develop a product that rivals the incumbent in the hope of being acquired as this can generate massive profits for the smaller entrant. Meanwhile, a two \u2013 sided market will not alter the \u201ckill zone\u201d significantly compared to the basic model. Only simultaneous choices of both parties will avoid the existence of a \u201ckill zone\u201d since the choice of the entrant cannot prevent the incumbent to copy the entrant.

\n\n

Since all models implement the Shelegia_Motta_2021.IModel.IModel - Interface, therefore all models provide the same functionality (public methods), even though the results may change substantially.

\n\n

For all models add the following import statement:

\n\n
import Shelegia_Motta_2021.Models\n
\n\n

Models

\n\n

Base Model

\n\n

The base model of the project consists of two players: The incumbent, which sells the primary product,\nand a start-up otherwise known as the entrant which sells a complementary product to the incumbent.\nOne way to visualize a real-world application of this model would be to think of the entrant as a product or service\nthat can be accessed through the platform of the incumbent, like a plug in that can be accessed through Google or a game on Facebook.\nThe aim of this model is to monitor the choice that the entrant has between developing a substitute to or\nanother compliment to the incumbent. The second aim is to observe the choice of the incumbent of whether\nto copy the original complementary product of the entrant by creating a perfect substitute or not.\nSeeing as the entrant may not have enough assets to fund a second product, the incumbent copying its first product\nwould inhibit the entrant\u2019s ability to fund its projects. This report will illustrate how the incumbent has a strategic incentive to copy\nthe entrant if it is planning to compete and that it would refrain from copying if the entrant plans to develop a compliment.\nThe subsequent models included in this report will introduce additional factors but will all be based on the basic model.

\n\n

The equilibrium path arguably supports the \u201ckill zone\u201d argument: due to the risk of an exclusionary strategy by the incumbent,\na potential entrant may prefer to avoid a market trajectory which would lead it to compete with the core product of a dominant incumbent\nand would choose to develop another complementary product instead.

\n\n
base_model = Shelegia_Motta_2021.Models.BaseModel()\n
\n\n

Bargaining Power Model

\n\n

Besides the parameters used in the paper (and in the BaseModel), this class will introduce the parameter $\\beta$ in the models, called\nthe bargaining power of the incumbent. $\\beta$ describes how much of the profits from the complementary product of the entrant will go to the incumbent\nIn the paper the default value $\\beta=0.5$ is used to derive the results, which indicate an equal share of the profits.

\n\n
bargaining_power_model = Shelegia_Motta_2021.Models.BargainingPowerModel()\n
\n\n

Unobservable Choices Model

\n\n

This model indicates that if the incumbent were not able to observe the entrant at the moment of choosing,\nthe \u201ckill zone\u201d effect whereby the entrant stays away from the substitute in order to avoid being copied would not take place.\nIntuitively, in the game as we studied it so far, the only reason why the entrant is choosing a trajectory leading to another complement\nis that it anticipates that if it chose one leading to a substitute, the incumbent would copy, making it an inefficient strategy\nfor entering the market. However, if the incumbent cannot observe the entrant\u2019s choice of strategy, the entrant could not hope to strategically affect the decision\nof the incumbent. This would lead to the entrant having a host of new opportunities when entering the market makes the entrant competing with a large company much more attractive.

\n\n

Although there may be situations where the entrant could commit to some actions (product design or marketing choices)\nwhich signals that it will not become a rival, and it would have all the incentive to commit to do so,\nthen the game would be like the sequential moves game analyzed in the basic model.\nOtherwise, the entrant will never choose a complement just to avoid copying, and it will enter the \u201ckill zone\u201d.

\n\n
unobservable_model = Shelegia_Motta_2021.Models.UnobservableModel()\n
\n\n

Acquisition Model

\n\n

In order to explore how acquisitions may modify the entrant\u2019s and the incumbent\u2019s strategic choices, we extend the base model\nin order to allow an acquisition to take place after the incumbent commits to copying the entrant\u2019s original complementary product\n(between t=1 and t=2, see demo.ipynb \"Timing of the game\"). We assume that the incumbent and the entrant share the gains (if any) attained from the acquisition equally.

\n\n

The \u201ckill zone\u201d still appears as a possible equilibrium outcome, however for a more reduced region of the parameter space.\nThe prospect of getting some acquisition gains does tend to increase the profits gained from developing a substitute to the primary product,\nand this explains why part of the \u201ckill zone\u201d region where a complement was chosen without the acquisition, the entrant will now choose a substitute instead.

\n\n
acquisition_model = Shelegia_Motta_2021.Models.AcquisitionModel()\n
\n\n

Alternative formulations of the acquisition game
\n\n

An alternative formulation could be introduced in order to allow acquisitions to take place before the copying decision by the incumbent. The results are qualitatively like the results of the model which had the acquisition after the copying decision. In this alternative formulation of the game, copying would never occur along the equilibrium path. Indeed, there would be an additional source of gains from acquisition consisting of avoiding the fixed cost of copying.

\n\n

Basic usage

\n\n
# every model type can be plugged in without changing the following code.\n# initialize model with custom parameters\nmodel: Shelegia_Motta_2021.IModel.IModel = Shelegia_Motta_2021.Models.BaseModel()\n\n# print string representation of the model\nprint(model)\n\n# plot the payoffs for different market configurations for all stakeholders\nmodel.plot_payoffs()\n\n# plot the best answers of the incumbent to the choice of the entrant\nmodel.plot_incumbent_best_answers()\n\n# plot the equilibrium path\nmodel.plot_equilibrium()\n\n# not necessary when working with jupyter notebooks\nplt.show()\n
\n\n

A demonstration of the code can be found in demo.html (output of demo.ipynb, on small screens it may not be displayed correctly).

\n\n

Dependencies

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n
Package  Version  Annotation  
matplotlib3.5.0Always needed (includes numpy)
jupyter1.0.0Just for the demonstration in demo.ipynb
IPython7.29.0Just for the demonstration in demo.ipynb
pdoc8.0.1Only to generate the documentation from scratch
\n\n


\nInstall the dependencies with the following command:

\n\n
pip install -r requirements.txt\n
\n\n

(Note: Make sure you are operating in the same directory as the requirements.txt is located.)

\n\n

These packages include all the needed imports for the functionality of this package.

\n\n

Additional Notes

\n\n

For further information about the project (structure) and the code, see resources/dev_notes.md.

\n\n

Documentation

\n\n

For the latest version of the documentation open manuelbieri.github.io/shelegia_motta_2021 in your browser or call:

\n\n
import Shelegia_Motta_2021\n\nShelegia_Motta_2021.docs()\n
\n\n

Build Documentation

\n\n

Generate api-documentation with the following command (note the use of pdoc):

\n\n
pdoc -o ./docs Shelegia_Motta_2021 --docformat \"numpy\" --math\n
\n"}, {"fullname": "Shelegia_Motta_2021.docs", "modulename": "Shelegia_Motta_2021", "qualname": "docs", "type": "function", "doc": "

Opens the latest published version of the documentation of this package.

\n", "parameters": [], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "", "type": "module", "doc": "

\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel", "type": "class", "doc": "

Interface for all models in Shelegia and Motta (2021).

\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.__init__", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.__init__", "type": "function", "doc": "

\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.ENTRANT_CHOICES", "type": "variable", "doc": "

Contains all the possible product choices of the entrant.

\n\n
    \n
  • complement (C): The entrant develops another complement for the primary product of the incumbent.
  • \n
  • substitute (S): The entrant develops a perfect substitute to the primary product of the incumbent.
  • \n
  • indifferent (I): The entrant is indifferent between the two options, mentioned above.
  • \n
\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.INCUMBENT_CHOICES", "type": "variable", "doc": "

Contains all the possible answers of the incumbent to the choice of the entrant.

\n\n
    \n
  • copy (\u00a9): The incumbent copies the complement of the entrant.
  • \n
  • refrain (\u00d8): The incumbent does not take any action.
  • \n
\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.DEVELOPMENT_OUTCOME", "type": "variable", "doc": "

Contains all the possible outcomes of the development for the chosen product of the entrant or the merged entity.

\n\n
    \n
  • success (Y): The entrant has sufficient assets to develop the second product.
  • \n
  • failure (N): The entrant has not sufficient assets to develop the second product.
  • \n
\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.get_asset_values", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.get_asset_values", "type": "function", "doc": "

Returns the asset thresholds of the entrant.

\n\n

Number and type of the thresholds will be specific to the model.

\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the assets of the entrant.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.get_copying_fixed_costs_values", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.get_copying_fixed_costs_values", "type": "function", "doc": "

Returns the fixed costs for copying thresholds of the incumbent.

\n\n

Number and type of the thresholds will be specific to the model.

\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the fixed costs for copying of the incumbent.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.get_payoffs", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.get_payoffs", "type": "function", "doc": "

Returns the payoffs for different market configurations.

\n\n

A market configuration can include:

\n\n
    \n
  • $I_P$ : Primary product sold by the incumbent.
  • \n
  • $I_C$ : Complementary product to $I_P$ potentially sold by the incumbent, which is copied from $E_C$.
  • \n
  • $E_P$ : Perfect substitute to $I_P$ potentially sold by the entrant.
  • \n
  • $E_C$ : Complementary product to $I_P$ currently sold by the entrant
  • \n
  • $\\tilde{E}_C$ : Complementary product to $I_P$ potentially sold by the entrant.\n
  • \n
\n\n\n\n\n \n \n \n \n \n\n\n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n
Market Config.$\\pi(I)$$\\pi(E)$CSW
$I_P$ ; $E_C$N.A.N.A.N.A.N.A.
$I_P + I_C$ ; $E_C$N.A.N.A.N.A.N.A.
$I_P$ ; $E_P + E_C$N.A.N.A.N.A.N.A.
$I_P + I_C$ ; $E_P + E_C$N.A.N.A.N.A.N.A.
$I_P$ ; $E_C + \\tilde{E}_C$N.A.N.A.N.A.N.A.
$I_P + I_C$ ; $E_C + \\tilde{E}_C$N.A.N.A.N.A.N.A.
\n\n


\nThe payoffs are specific to the models.

\n\n

Returns
\n\n
    \n
  • Dict[str, Dict[str, float]]: Contains the mentioned payoffs for different market configurations.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.get_optimal_choice", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.get_optimal_choice", "type": "function", "doc": "

Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.

\n\n

The output dictionary will contain the following details:

\n\n
    \n
  • \"entrant\": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES))
  • \n
  • \"incumbent\": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES)
  • \n
  • \"development\": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME)
  • \n
\n\n

To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model.

\n\n

Parameters
\n\n
    \n
  • A (float):\nAssets of the entrant.
  • \n
  • F (float):\nFixed costs for copying of the incumbent.
  • \n
\n\n

Returns
\n\n
    \n
  • Dict[str, str]: Optimal choice of the entrant, the incumbent and the outcome of the development.
  • \n
\n", "parameters": ["self", "A", "F"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.plot_incumbent_best_answers", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.plot_incumbent_best_answers", "type": "function", "doc": "

Plots the best answers of the incumbent to all possible actions of the entrant.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the best answers plot.
    \n
      \n
    • title: title on top of the plot, instead of the default title.
    • \n
    • legend: If false, all legends are turned off.
    • \n
    • options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
    • \n
    • asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
    • \n
    • costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
    • \n
    • legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
    • \n
    • x_max : Maximum number plotted on the x - axis.
    • \n
    • y_max : Maximum number plotted on the y - axis.
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.plot_equilibrium", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.plot_equilibrium", "type": "function", "doc": "

Plots the equilibrium path based on the choices of the entrant and incumbent.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the equilibrium plot.
    \n
      \n
    • title: title on top of the plot, instead of the default title.
    • \n
    • legend: If false, all legends are turned off.
    • \n
    • options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
    • \n
    • asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
    • \n
    • costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
    • \n
    • legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
    • \n
    • x_max : Maximum number plotted on the x - axis.
    • \n
    • y_max : Maximum number plotted on the y - axis.
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.plot_payoffs", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.plot_payoffs", "type": "function", "doc": "

Plots the payoffs for different market configurations.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the payoff plot.
    \n
      \n
    • legend: If false, all legends are turned off.
    • \n
    • products_legend: If true, a legend, containing all possible products of the entrant and the incumbent, will be added to the plot.
    • \n
    • opacity : Opacity of the not optimal payoffs. (floating number between 0 and 1)
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models", "modulename": "Shelegia_Motta_2021.Models", "qualname": "", "type": "module", "doc": "

\n"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel", "type": "class", "doc": "

The base model of the project consists of two players: The incumbent, which sells the primary product,\nand a start-up otherwise known as the entrant which sells a complementary product to the incumbent.\nOne way to visualize a real-world application of this model would be to think of the entrant as a product or service\nthat can be accessed through the platform of the incumbent, like a plug in that can be accessed through Google or a game on Facebook.\nThe aim of this model is to monitor the choice that the entrant has between developing a substitute to or\nanother compliment to the incumbent. The second aim is to observe the choice of the incumbent of whether\nto copy the original complementary product of the entrant by creating a perfect substitute or not.\nSeeing as the entrant may not have enough assets to fund a second product, the incumbent copying its first product\nwould inhibit the entrant\u2019s ability to fund its projects. This report will illustrate how the incumbent has a strategic incentive to copy\nthe entrant if it is planning to compete and that it would refrain from copying if the entrant plans to develop a compliment.\nThe subsequent models included in this report will introduce additional factors but will all be based on the basic model.

\n\n

The equilibrium path arguably supports the \u201ckill zone\u201d argument: due to the risk of an exclusionary strategy by the incumbent,\na potential entrant may prefer to avoid a market trajectory which would lead it to compete with the core product of a dominant incumbent\nand would choose to develop another complementary product instead.

\n"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.__init__", "type": "function", "doc": "

Initializes a valid BaseModel object.

\n\n

The following preconditions have to be satisfied:

\n\n
    \n
  • (A1b) $\\delta$ / 2 < $\\Delta$ < 3 * $\\delta$ / 2
  • \n
  • (A2) K < $\\delta$ / 2
  • \n
\n\n

Parameters
\n\n
    \n
  • u (float):\nUtility gained from consuming the primary product.
  • \n
  • B (float):\nMinimal difference between the return in case of a success and the return in case of failure of E. B is called the private benefit of the entrant in case of failure.
  • \n
  • small_delta (float):\n($\\delta$) Additional utility gained from a complement combined with a primary product.
  • \n
  • delta (float):\n($\\Delta$) Additional utility gained from the substitute of the entrant compared to the primary product of the incumbent.
  • \n
  • K (float):\nInvestment costs for the entrant to develop a second product.
  • \n
\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.TOLERANCE", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.TOLERANCE", "type": "variable", "doc": "

Tolerance for the comparison of two floating numbers.

\n"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.get_asset_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.get_asset_values", "type": "function", "doc": "

Returns the asset thresholds of the entrant.

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n
Threshold $\\:\\:\\:\\:\\:$Name $\\:\\:\\:\\:\\:$Formula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$\\underline{A}_S$A_s$(2)\\: B + K - \\Delta - 3\\delta/2$
$\\underline{A}_C$A_c$(3)\\: B + K - 3\\delta/2$
$\\overline{A}_S$A-s$(4)\\: B + K - \\Delta$
$\\overline{A}_C$A-c$(5)\\: B + K - \\delta/2$
\n\n


\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the assets of the entrant.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.get_copying_fixed_costs_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.get_copying_fixed_costs_values", "type": "function", "doc": "

Returns the fixed costs for copying thresholds of the incumbent.

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n
Threshold $\\:\\:\\:\\:\\:$Name $\\:\\:\\:\\:\\:$Formula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$F^{YY}_S$F(YY)s$(6)\\: \\delta/2$
$F^{YN}_S$F(YN)s$(6)\\: u + 3\\delta/2$
$F^{YY}_C$F(YY)c$(6)\\: \\delta$
$F^{YN}_C$F(YN)c$(6)\\: \\delta/2$
\n\n


\n\n

Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the fixed costs for copying of the incumbent.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.get_payoffs", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.get_payoffs", "type": "function", "doc": "

Returns the payoffs for different market configurations.

\n\n

A market configuration can include:

\n\n
    \n
  • $I_P$ : Primary product sold by the incumbent.
  • \n
  • $I_C$ : Complementary product to $I_P$ potentially sold by the incumbent, which is copied from $E_C$.
  • \n
  • $E_P$ : Perfect substitute to $I_P$ potentially sold by the entrant.
  • \n
  • $E_C$ : Complementary product to $I_P$ currently sold by the entrant
  • \n
  • $\\tilde{E}_C$ : Complementary product to $I_P$ potentially sold by the entrant.\n
  • \n
\n\n\n\n\n \n \n \n \n \n\n\n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n
Market Config. $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$$\\pi(I) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$$\\pi(E) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$CS $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$W $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$I_P$ ; $E_C$$u + \\delta/2$$\\delta/2$0$u + \\delta$
$I_P + I_C$ ; $E_C$$u + \\delta$00$u + \\delta$
$I_P$ ; $E_P + E_C$0$\\Delta + \\delta$$u$$u + \\Delta + \\delta$
$I_P + I_C$ ; $E_P + E_C$0$\\Delta$$u + \\delta$$u + \\Delta + \\delta$
$I_P$ ; $E_C + \\tilde{E}_C$$u + \\delta$$\\delta$0$u + 2\\delta$
$I_P + I_C$ ; $E_C + \\tilde{E}_C$$u + 3\\delta/2$$\\delta/2$0$u + 2\\delta$
\n\n


\n\n

Returns
\n\n
    \n
  • Dict[str, Dict[str, float]]: Contains the mentioned payoffs for different market configurations.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.get_optimal_choice", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.get_optimal_choice", "type": "function", "doc": "

Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.

\n\n

The output dictionary will contain the following details:

\n\n
    \n
  • \"entrant\": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES))
  • \n
  • \"incumbent\": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES)
  • \n
  • \"development\": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME)
  • \n
\n\n

To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model.

\n\n

Parameters
\n\n
    \n
  • A (float):\nAssets of the entrant.
  • \n
  • F (float):\nFixed costs for copying of the incumbent.
  • \n
\n\n

Returns
\n\n
    \n
  • Dict[str, str]: Optimal choice of the entrant, the incumbent and the outcome of the development.
  • \n
\n", "parameters": ["self", "A", "F"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.plot_incumbent_best_answers", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.plot_incumbent_best_answers", "type": "function", "doc": "

Plots the best answers of the incumbent to all possible actions of the entrant.

\n\n

Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the best answers plot.
    \n
      \n
    • title: title on top of the plot, instead of the default title.
    • \n
    • legend: If false, all legends are turned off.
    • \n
    • options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
    • \n
    • asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
    • \n
    • costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
    • \n
    • legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
    • \n
    • x_max : Maximum number plotted on the x - axis.
    • \n
    • y_max : Maximum number plotted on the y - axis.
    • \n
  • \n
\n\n

Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.plot_equilibrium", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.plot_equilibrium", "type": "function", "doc": "

Plots the equilibrium path based on the choices of the entrant and incumbent.

\n\n
Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the equilibrium plot.
    \n
      \n
    • title: title on top of the plot, instead of the default title.
    • \n
    • legend: If false, all legends are turned off.
    • \n
    • options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
    • \n
    • asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
    • \n
    • costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
    • \n
    • legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
    • \n
    • x_max : Maximum number plotted on the x - axis.
    • \n
    • y_max : Maximum number plotted on the y - axis.
    • \n
  • \n
\n\n
Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.plot_payoffs", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.plot_payoffs", "type": "function", "doc": "

Plots the payoffs for different market configurations.

\n\n
Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the payoff plot.
    \n
      \n
    • legend: If false, all legends are turned off.
    • \n
    • products_legend: If true, a legend, containing all possible products of the entrant and the incumbent, will be added to the plot.
    • \n
    • opacity : Opacity of the not optimal payoffs. (floating number between 0 and 1)
    • \n
  • \n
\n\n
Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel", "type": "class", "doc": "

Besides the parameters used in the paper (and in the BaseModel), this class will introduce the parameter $\beta$ in the models, called\nthe bargaining power of the incumbent. $\beta$ describes how much of the profits from the complementary product of the entrant will go to the incumbent\nIn the paper the default value $\beta=0.5$ is used to derive the results, which indicate an equal share of the profits.

\n"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel.__init__", "type": "function", "doc": "

Besides $\\beta$ the parameters in this model do not change compared to Shelegia_Motta_2021.Models.BaseModel.

\n\n
Parameters
\n\n
    \n
  • beta (float):\nBargaining power of the incumbent relative to the entrant ($0 < \\beta < 1$).
  • \n
\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K", "beta"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel.get_asset_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel.get_asset_values", "type": "function", "doc": "

Returns the asset thresholds of the entrant.

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n
Threshold $\\:\\:\\:\\:\\:$Name $\\:\\:\\:\\:\\:$Formula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$\\underline{A}_S$A_s$B + K - \\Delta - \\delta(2 - \\beta)$
$\\underline{A}_C$A_c$B + K - 3\\delta(1 - \\beta)$
$\\overline{A}_S$A-s$B + K - \\Delta$
$\\overline{A}_C$A-c$B + K - \\delta(1 - \\beta)$
\n\n


\n\n
Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the assets of the entrant.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel.get_copying_fixed_costs_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel.get_copying_fixed_costs_values", "type": "function", "doc": "

Returns the fixed costs for copying thresholds of the incumbent.

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n \n \n \n\n\n
Threshold $\\:\\:\\:\\:\\:$Name $\\:\\:\\:\\:\\:$Formula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$F^{YY}_S$F(YY)s$\\delta(1 - \\beta)$
$F^{YN}_S$F(YN)s$u + \\delta(2 - \\beta)$
$F^{YY}_C$F(YY)c$2\\delta(1 - \\beta)$
$F^{YN}_C$F(YN)c$\\delta(2 - \\beta)$
\n\n


\n\n
Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the fixed costs for copying of the incumbent.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel.get_payoffs", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel.get_payoffs", "type": "function", "doc": "

Returns the payoffs for different market configurations.

\n\n

A market configuration can include:

\n\n
    \n
  • $I_P$ : Primary product sold by the incumbent.
  • \n
  • $I_C$ : Complementary product to $I_P$ potentially sold by the incumbent, which is copied from $E_C$.
  • \n
  • $E_P$ : Perfect substitute to $I_P$ potentially sold by the entrant.
  • \n
  • $E_C$ : Complementary product to $I_P$ currently sold by the entrant
  • \n
  • $\\tilde{E}_C$ : Complementary product to $I_P$ potentially sold by the entrant.\n
  • \n
\n\n\n\n\n \n \n \n \n \n\n\n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n \n \n \n \n \n\n\n
Market Config. $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$$\\pi(I) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$$\\pi(E) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$CS $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$W $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$I_P$ ; $E_C$$u + \\delta\\beta$$\\delta(1 - \\beta)$0$u + \\delta$
$I_P + I_C$ ; $E_C$$u + \\delta$00$u + \\delta$
$I_P$ ; $E_P + E_C$0$\\Delta + \\delta$$u$$u + \\Delta + \\delta$
$I_P + I_C$ ; $E_P + E_C$0$\\Delta$$u + \\delta$$u + \\Delta + \\delta$
$I_P$ ; $E_C + \\tilde{E}_C$$u + 2\\delta\\beta$$2\\delta(1 - \\beta)$0$u + 2\\delta$
$I_P + I_C$ ; $E_C + \\tilde{E}_C$$u + \\delta(1 + \\beta)$$\\delta(1 - \\beta)$0$u + 2\\delta$
\n\n


\n\n
Returns
\n\n
    \n
  • Dict[str, Dict[str, float]]: Contains the mentioned payoffs for different market configurations.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel", "type": "class", "doc": "

This model indicates that if the incumbent were not able to observe the entrant at the moment of choosing,\nthe \u201ckill zone\u201d effect whereby the entrant stays away from the substitute in order to avoid being copied would not take place.\nIntuitively, in the game as we studied it so far, the only reason why the entrant is choosing a trajectory leading to another complement\nis that it anticipates that if it chose one leading to a substitute, the incumbent would copy, making it an inefficient strategy\nfor entering the market. However, if the incumbent cannot observe the entrant\u2019s choice of strategy, the entrant could not hope to strategically affect the decision\nof the incumbent. This would lead to the entrant having a host of new opportunities when entering the market makes the entrant competing with a large company much more attractive.

\n\n

Although there may be situations where the entrant could commit to some actions (product design or marketing choices)\nwhich signals that it will not become a rival, and it would have all the incentive to commit to do so,\nthen the game would be like the sequential moves game analyzed in the basic model.\nOtherwise, the entrant will never choose a complement just to avoid copying, and it will enter the \u201ckill zone\u201d.

\n"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel.__init__", "type": "function", "doc": "

The parameters do not change compared to Shelegia_Motta_2021.Models.BargainingPowerModel.

\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K", "beta"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel.plot_incumbent_best_answers", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel.plot_incumbent_best_answers", "type": "function", "doc": "

Plots the best answers of the incumbent to all possible actions of the entrant.

\n\n
Parameters
\n\n
    \n
  • axis (matplotlib.axes.Axes):\nAxis to draw the plot on. (optional)
  • \n
  • **kwargs: Optional key word arguments for the best answers plot.
    \n
      \n
    • title: title on top of the plot, instead of the default title.
    • \n
    • legend: If false, all legends are turned off.
    • \n
    • options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
    • \n
    • asset_legend: If true, an additional legend explaining the thresholds of the assets of the entrant will be added to the plot.
    • \n
    • costs_legend: If true, an additional legend explaining the thresholds of the fixed costs of copying for the incumbent will be added to the plot.
    • \n
    • legend_width : Maximum number of characters in one line in the legend (for adjustments to figure width).
    • \n
    • x_max : Maximum number plotted on the x - axis.
    • \n
    • y_max : Maximum number plotted on the y - axis.
    • \n
  • \n
\n\n
Returns
\n\n
    \n
  • matplotlib.axes.Axes: Axis containing the plot.
  • \n
\n", "parameters": ["self", "axis", "kwargs"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel.get_optimal_choice", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel.get_optimal_choice", "type": "function", "doc": "

Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.

\n\n

The output dictionary will contain the following details:

\n\n
    \n
  • \"entrant\": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES))
  • \n
  • \"incumbent\": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES)
  • \n
  • \"development\": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME)
  • \n
\n\n

To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model.

\n\n
Parameters
\n\n
    \n
  • A (float):\nAssets of the entrant.
  • \n
  • F (float):\nFixed costs for copying of the incumbent.
  • \n
\n\n
Returns
\n\n
    \n
  • Dict[str, str]: Optimal choice of the entrant, the incumbent and the outcome of the development.
  • \n
\n", "parameters": ["self", "A", "F"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel", "type": "class", "doc": "

In order to explore how acquisitions may modify the entrant\u2019s and the incumbent\u2019s strategic choices, we extend the base model\nin order to allow an acquisition to take place after the incumbent commits to copying the entrant\u2019s original complementary product\n(between t=1 and t=2, see demo.ipynb \"Timing of the game\"). We assume that the incumbent and the entrant share the gains (if any) attained from the acquisition equally.

\n\n

The \u201ckill zone\u201d still appears as a possible equilibrium outcome, however for a more reduced region of the parameter space.\nThe prospect of getting some acquisition gains does tend to increase the profits gained from developing a substitute to the primary product,\nand this explains why part of the \u201ckill zone\u201d region where a complement was chosen without the acquisition, the entrant will now choose a substitute instead.

\n"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.__init__", "type": "function", "doc": "

An additional constraint is added compared to Shelegia_Motta_2021.Models.BaseModel. Namely, $\\Delta$ has to be bigger than $u$,\nmeaning the innovation of the entrant is not too drastic compared with the primary products of the incumbent.

\n\n

Meanwhile, the parameters do not change compared to Shelegia_Motta_2021.Models.BargainingPowerModel.

\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K", "beta"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.ACQUISITION_OUTCOME", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.ACQUISITION_OUTCOME", "type": "variable", "doc": "

Contains the options for an acquisition or not.

\n\n
    \n
  • merged (M): The incumbent acquired the entrant.
  • \n
  • apart (E): The incumbent did not acquired the entrant.
  • \n
\n"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.get_copying_fixed_costs_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.get_copying_fixed_costs_values", "type": "function", "doc": "

Returns the fixed costs for copying thresholds of the incumbent.

\n\n

Additional thresholds for the fixed cost of copying of the incumbent compared to the Shelegia_Motta_2021.Models.BargainingModel:

\n\n\n\n\n \n \n \n\n\n\n\n \n \n \n\n\n \n \n \n\n\n
Threshold $\\:\\:\\:\\:\\:$Name $\\:\\:\\:\\:\\:$Formula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$
$F^{ACQ}_S$F(ACQ)s$\\frac{(u + \\Delta - K)}{2} + \\delta(2 - \\beta)$
$F^{ACQ}_C$F(ACQ)c$\\frac{K}{2} + \\delta(2.5 - 3\\beta)$
\n\n


\nAs an additional constraint, $F^{ACQ}_C$ has to be smaller or equal than $F^{YY}_C$, since the logic described in the paper may not apply anymore for the other cases.

\n\n
Returns
\n\n
    \n
  • Dict[str, float]: Includes the thresholds for the fixed costs for copying of the incumbent.
  • \n
\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.get_optimal_choice", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.get_optimal_choice", "type": "function", "doc": "

Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.

\n\n

The output dictionary will contain the following details:

\n\n
    \n
  • \"entrant\": choice of the entrant (possible choices listed in Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES))
  • \n
  • \"incumbent\": choice of the incumbent (possible choices listed in Shelegia_Motta_2021.IModel.IModel.INCUMBENT_CHOICES)
  • \n
  • \"development\": outcome of the development (possible outcomes listed in Shelegia_Motta_2021.IModel.IModel.DEVELOPMENT_OUTCOME)
  • \n
  • \"acquisition\": outcome of the acquisition (possible outcomes listed in Shelegia_Motta_2021.Models.AcquisitionModel.ACQUISITION_OUTCOME)
  • \n
\n\n

To understand the details of the logic implemented, consult the chapter in Shelegia and Motta (2021) corresponding to the model.

\n\n
Parameters
\n\n
    \n
  • A (float):\nAssets of the entrant.
  • \n
  • F (float):\nFixed costs for copying of the incumbent.
  • \n
\n\n
Returns
\n\n
    \n
  • Dict[str, str]: Optimal choice of the entrant, the incumbent and the outcome of the development.
  • \n
\n", "parameters": ["self", "A", "F"], "funcdef": "def"}]; // mirrored in build-search-index.js (part 1) // Also split on html tags. this is a cheap heuristic, but good enough.